2016年7月11日月曜日

人工無能を試してみた。

おじさんには1歳の子供がいるんです。
おじさんのまねをして扉をあけて外にでる動作をしたいらしいんですが、扉を開けるのは簡単にできるので興味はなく、扉を閉める動作に興味があり、扉を開けて自分は動かないで扉を閉めるのでいつまでも外に出れなくて怒っています。

きっとなんかの拍子にたまたま外に出られたときにそれが学習されて扉の開け方を学んでいくんだなぁと思うと、同じことをCNNでロボットに学習させてあげると、扉を開けることができるロボットができるんじゃないかと思ってしまいます。

まぁそれはさておいて、Siriのようなものを作る二回目です。
順序でいうと自然言語処理をするところです。
人工無能とかチャットボットって言われてるところですね。

以前このブログで紹介したWord2Vecと必要な技術と原理は同じなのです。
ざっとの原理はここに書かれているのでこれを参考にしていただければと思います。
http://robotstart.info/2016/05/17/kozaki_shogeki-no20.html



最近この分野のAIが人気で古本が高値を更新しつづけています。


https://www.amazon.co.jp/%E6%81%8B%E3%81%99%E3%82%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E2%80%95Ruby%E3%81%A7%E3%81%A4%E3%81%8F%E3%82%8B%E4%BA%BA%E5%B7%A5%E7%84%A1%E8%84%B3-%E7%A7%8B%E5%B1%B1-%E6%99%BA%E4%BF%8A/dp/4839917299


https://www.amazon.co.jp/gp/product/4274066649/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1

なんでこれらの本が高いかというと、これらの原理を研究していた方がもう現役でなく、これらの本だけに原理とソースコードが添付してあるのです。
おそろしいですねぇ、こんなところに日本の高齢化社会の歪が。

おじさんもこれらの本を持ってるんですが、たとえ本を持っていても、学習させるのが本当に大変で、個人レベルのPCでは本のようなひどい結果しかでないのです。

上記の人の場合、会話の結果はこんな感じですね
http://robotstart.info/2016/02/23/report-tensorflow2.html


なので、ソースコードがほしい方は本買ってください。
また、よい学習結果がほしい方はamazonのGPUインスタンスを何万台も買ってください。

本をもとにTensorFlowやamazonなどで何万台かのPCで高速分散処理させると、一番上の方のように、とりあえず文字で何か入力すると何か文字を返してくれる、そんなものを作ることができます。

おじさん、前回書いたロボットを作りたい会社の面談で言ったんですよ。NLPのところはまだまだ全然できていないのでこれからどんどん開発していかないといけないと思いますと。そうしたら面接官に言われました。NLPだと喋んないロボットになっちゃうじゃんと。

そうだよね。まだこれだけだとロボット喋んないよね。
次回はロボットがしゃべる方法について書きたいと思います。



2016年7月8日金曜日

Siriみたいな音声認識のとこ作ってみた。

おじさんまた仕事ないです。
おじさんこの前、しゃべるロボットを作りたい会社の役員と面談をして、音声認識なんて一日くらいあれば作れますよっていったんですが、あやしーといわれ全く信用されず。
なので仕事がないんです。

暇なのでアップルのSiriみたいなものって作れるのか試してみました。
基本的に、Siriのようなソフトは、

1. 音声を文字にする。
2. 文字を自然言語処理する。
3. 結果を表示したりしゃべる。

を作ればできそうですよね。
でもいきなり全部はできないので本日のブログでは1の音声を文字に変換することまで。

まず、音声を文字に変換するには、音声をフォルマント分析し・・・・・中略・・・・・隠れマルコフモデルで・・・・・中略・・・・・、モデルを生成するために・・・・・省略・・・・・

理論はとっても説明に時間がかかるので省略します。
まず、ライブラリと学習結果を持ってきます。
juliusっていう音声認識ライブラリはフリーでとてもよく整備されているのでこれを使うことにします。

http://julius.osdn.jp/

このライブラリ本当にすごいです。Anrdoid、iPhone、Windows、Linux、MacなどありとあらゆるOSで動いてしかも学習結果のデータもセットになっていて、精度もかなりでています。ドキュメントもものすごい整備されているので簡単にコンパイルできます。
ラスパイとかでも動くのでロボットなどの組み込みで音声認識をしたい人はもってこいです。Googleもすごいけど、このライブラリ作ってる京都大学もすごいですね。ソースコードからも頭の良さが伝わってきます。

ということでサクッとダウンロードしてとってきます。
どれくらいの精度で認識できるかはネットで試験した人がいるので以下の動画でわかります。

https://www.youtube.com/watch?v=l8sIT7lRh1M


ほら、コンパイルするだけでよいので、一日で作れるでしょ。
実行形式のバイナリーも大体のOSで公開されているので、試してみるだけならばコンパイルもする必要もありません。

本当は正直に一時間で作れるって言わないと採用されないのかなぁ・・・・・。

2016年7月7日木曜日

ninjaのソースコードをみてみた

僕は毎週木曜日にブログを後進する傾向があるらしいのですが、毎週何かしらオープンソースをコンパイルして使っているので、月曜日から勉強し始めて木曜日くらいに勉強し終わるので、木曜に記事を書き終わります。
今週はビルドツールninjaを勉強しています。。

https://ninja-build.org/

最近ソースコードの傾向として、短く、わかりやすく、高速に動作するように書かないといけないようで、ninjaもソースコード自体はとてもコンパクトにできているmakeにかわるビルドツールです。ninja自体はとてもコンパクトなんですが、動作がものすごい高速なので、最も大規模なソースであるChromeやandroidをビルドするために使われています。makeより直感的に依存関係を記述できるし圧倒的に使いやすいです。

このninjaですが、使い方はいろいろなページで紹介されているので置いといて、ソースコードの独立性というか分割というかテストを含めた開発環境もとてもよくできています。

たとえば、構文解析の部分とかはre2cでlexer.hとlexer.ccを生成しているんですが、この二つのファイルとlexter_test.ccで構文解析部分の開発とテストが全部できます。
グラフ部分はgraph.hとgraph.ccとgraph_test.ccで全部テストと開発ができます。
すべてのプラットフォームで動いて、ファイル間の依存関係が最小だし。
コードがコンパクトで美しすぎる。

おじさんのような昔の人間が、C++言語の最新の開発環境やソースの書き方、テストコードの書き方などプログラムの基礎を勉強をするのには最適な教材だと思います。