スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

関連記事

ブログパーツ

trackback


トラックバックURL

http://yukikazura.blog40.fc2.com/tb.php/74-2ba6eba8

この記事にトラックバックする(FC2ブログユーザー)

ひらがな AI ボットの設計

ひらがなAI ボット
ボットの作製を計画してます。

ここでいうボットとは,
人間の代わりに,プログラムによって機械が
自動で言葉を生み出しツイッターに呟かせる,
というようなモノです。
決して害意100%のスパイボットのことでは。

面白そうなので自分も作ってみることにしました。
実装にはまだ取り掛かってませんが,
とりあえず考えと設計だけ書いてみます。
セリフを登録するだけで作れるボットも存在しますが,
折角作るのならもっと根本的に異なるものにしてみたい
ということで人工知能(もどき)のボットを考えてみました。

*テーマ
 ひらがなAI
*概要
 「ひらがな5字」を基本単位としてつぶやく。
 初めはランダム生成で始まり,
 フィードバックにより次第に学習していく。

テーマと概要はこんな感じ。
とりあえず「ひらがな」のみに絞ってみました。
漢字とかアルファベットとか使用すると
効率的に設計しない限りとんでもない事になりそうなので。
それと学習速度・時間の関係から。
使える文字数が増える程学習にも時間かかりますしね。
最初に作るボットなので簡易に簡易に。

5文字なのは特に理由な…
日本語の基本的な挨拶は5字だったり
俳句の構成は5・7・5だったりするので
5文字でも十分表現力があるのではと考えました。今。

日本語は語に区切りがない言語なので,
適当にひらがなを並べてみれば
見る側も勝手に解釈してくれるのでは
ないかという打算も入ってます。
アルファベットじゃこうはいかない。

で,先にツイッターのアカウント取得。
>Twitter:HiraganaAI
アイコンも作っちゃいました。
作る順番が間違ってる気もしなくもない。

*設計
先に1文字分のユニットを作ります。
前の1文字から次に出すべき1文字を決定する
のがこのユニットの役目です。
例えば,1文字目が「あ」なら
「ああ」「あい」「あう」「あえ」「あお」…
という全候補の中から日本語になりそうな
組み合わせを抽出する訳です。
上の5つならどの組みでもなんとかなりそうですね。
例)
「ああ」:ああ(感嘆詞),ああかいぶ,ああと,…
「あい」:あい,あいいろ,あいしてる,…
「あう」:あうん,あうと,あうたあ,…
「あえ」:あえる,あえて,あえん,…
「あお」:あお,あおる,あおもり,…
みたいな。
こういう例を上げるとき予測入力って便利ですね。
入れててよかったグーグル日本語入力。
ちなみにひらがなのみという制約なので,
伸ばし棒は字を重ねて表現します。

で,こういった候補を繋がりやすい順に
確率を割り当てて行く訳です。
結局はランダムによって出力するのですけれど,
そのランダムに出る確率は
言葉として繋がりやすい文字が優先されるということ。

問題はこの確率をどう割り当てていくのかですね。
単語を調べて自分で作るにも,
ひらがなは濁点等を含めると70字近くあるので
前の文字70×次の文字70で,
4900もの確率の表を作らなくてはならなくなります。
普通に考えてムリダナ。
そこで人工知能もどきの登場です。
これについては後で詳しく。
1文字ユニット AI 設計
1文字ユニットの仕組みを図示するとこんな感じ。
入力する文字と乱数,確率の重みテーブルを利用して
1文字のひらがなを出力します。

この1文字のユニットを基本として次へいきます。
目標は5文字呟かせることですから,
単純にこのユニットを5こ並べればとりあえずは完成。
メインユニット AI 設計
こーんな感じ。
1文字目が出来たら2文字目のユニットに渡して,
2文字目を生成。それを3文字目のユニットに…
と次々に渡して行くことで5文字を作ります。
だから原理的には何文字でも伸ばせます。

尚確率のテーブルは各文字に対して作ります。
じゃないと2文字しりとりみたいになってしまうので。
要するに
2文字目のテーブルは2文字目として相応しい文字を
3文字目のテーブルは3文字目として相応しい文字を
4文字目のテーブルは4文(ry
確率的に生み出すようにしてあります。
とはいえ,各ユニットの入力は前の1文字しか
みていませんので,当然食い違いは発生するでしょうが。

ここで1文字目は誰に文字を貰うのかという話になります。
ツイッターのコミュニケーション機能を行かそうかなと。
リプライなどで貰った文字を利用してみたり。
まあ最初はランダム生成で実装しますけどね。
時間と技術があったらそういった機能も付けたいです。

で,いよいよ人工知能もどきの話。
こっちこそツイッターの機能を生かします。
呟いた発言に対するレスポンスは当然あるわけで。
"見向きもされない"というのも反応の内に含めれば。
そういった反応を数値的に評価し,
重みテーブルへとフィードバックさせます。
要するにレスポンスから学習して
正しく呟けるような確率の表を自力で作っていく訳です。

・反応がない→確率を軽くマイナスする
・フォローが増えた→大きくプラスする
・フォローが減った→大きくマイナスする
・ひらがな5字のReplyを貰う→その文字列の確率をプラス
・…

といった感じで弄っていくのが具体的なプログラム。
最初はランダムなひらがなの羅列だったのが
時間が経つに連れちゃんとした単語になってく
みたいなのが理想的な過程です。

…多分上手くいかないだろうけど。
さっきも書いた通り1文字ユニットの入力が1文字であることや
学習の仕方やレスポンスの評価が未熟ですしね。
もう少し賢いやり方を取ら無いと正しく学習していかない
と思います。
そもそも総当たりで1順するのに4900^5通りもあるのだから,
学習に果てしない時間がかかってしまうはず。

まあでもこんな簡素な仕組みで
どんな結果が得られるのか楽しみだから
これで作ってみますけど。
それに出来上がった後から
改良を加えて行ってもいい訳ですし。

実装頑張ってみます。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。