人工無脳ReudyをHubotで動かす。
人工無脳と一言で言っても様々なものが過去開発されています。今回は「ログ型」と呼ばれる人工無脳「Reudy(ロイディ)」を試してみることにします。
人工無能 ロイディ
先日試してみた「傾聴型」人工無脳「Eliza(イライザ)」は1966年に作られましたが、そこから時代の推移を経て2003年にロイディは誕生しました。
製作者は当時、東京工業大学ロボット技術研究会に所属していた市川 宙さんです。人間同士のチャットのやり取りから文章を自動生成します。
このプログラムすごいなあと思うのは独自のアルゴリズムを元に単語解析を独自にプログラムに埋め込んでいるところです。
そこから抽出した単語を自動的に記録し、文章を生成していきます。ログ次第で返答が大きく変化するので育てる楽しさもある訳です。
( 参照:RubyKaigi2006Reudy.pdf )
人工無能 Reudy (ロイディ) 1.9
10年以上前のものなのですが、現在でも利用できるよう改変したものが公開されています。mmasakiさんが大学生の頃作られたものがGitHubで公開されています。
こちらは最新版Rubyでも動かすことが出来ます。また、上記の様に独自で単語抽出している部分をオプションを利用することで形態素解析エンジン「mecab」を利用することが出来るようになっています。
使ってみる
Rubyで書かれているということで(全然分からない)難しそうだなと思っていたのですが、以下のブログ記事で導入を公開されているので、それに沿ってダウンロードしていけばhubotで利用することが出来ました。
こちらの記事内では「mecab」の辞書を直近の単語に対応させるため「はてなキーワード」と「Wikipedia日本語版」から単語抽出する方法も解説されています。
これによってロイディの覚える単語がより正確になります。こんな感じです。
|
|
デフォルトの辞書だと通常の形態素に分類されてしまいますが、
|
|
オプションのカスタム辞書を利用することで作品タイトルが名詞として解析されます。
こちらの導入チュートリアルはlinux環境でhubotアダプターはHipChatを利用されています。今回はMac環境でアダプターはSlackを利用します。
ほぼそのままダウンロードやサンプルプログラムを利用させて頂けば導入出来るのですが、パスがちょっと違ったりするのでそこだけ注釈として残しておきます。
「mecab」の辞書生成インデックスはこちら
/usr/local/libexec/mecab/mecab-dict-index
「mecab」のデフォルト辞書「ipadic」はこちら
/usr/local/lib/mecab/dic/ipadic
「Reudy19」でカスタム辞書を使う際のパス(ここでは「Work」フォルダに設置しています)
/Users/ユーザー名/Work/Reudy19/mecab-dict/custom.dic
「hubot」のパス
/Users/ユーザー名/Work/reudy-hubot
その他ちょっとした注意点ですが、Mac環境で利用する際に必要なパッケージソフトなど列挙しておきます。
mecabをクローンする際に必要になります。
mecabをRubyで利用する際に「gcc-c++」というC++言語をコンパイルするソフトが必要になるみたいです(ごめんなさい良く分かっていません)Macで利用する際は開発ツール「Xcode」をダウンロードすると使えるみたいです。
Wikipedia、はてなキーワードをダウンロードする際にエラーが出ないよう必要になります。
設置が完了すれば、「Reudy19」のディレクトリでコマンドを実行すればこの様に返信されるはずです。
|
|
ロイディにキーワードが登録されました。
Hubot・Slackで利用する
HubotをSlackで利用する詳細は省きます。hubot scriptに以下のように記述し、Hubotと同じディレクトリに設置したReudyをコマンドで実行します。
node.jsのchild_process.exec
コマンドを利用します。
|
|
こんな感じで投稿された文章をロイディに渡し、ロイディからの戻り値をslackに投稿します。
(単語「XX」を記憶した。) の表示を消すには、
Reudy19/lib/reudy/reudy.rb
528行目
|
|
をコメントアウトしてください。
まだ大した返事はしませんが。
public/log.yml
にログが格納されているのが分かります。
まとめ
「ログ型」の人工無脳の面白さは、無脳の会話を学習させられるところだと思います。
通常だとTwitterなどのSNSで学習させるのだと思いますが、他に何か方法がありそうな気もするので色々試してみたいですね。