スポンサーサイト

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

関連記事

ブログパーツ

trackback


トラックバックURL

http://yukikazura.blog40.fc2.com/tb.php/76-57f5989f

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

ひらがな AI ボット 実装編

ひらがなAI
先日のひらがなAIのボット,誠意作成中です。
とりあえずコアとなる部分は完成したので,
あとは学習と改良を加えて行くだけ!といった感じです。
あ,あと24時間体制で動かす準備がまだ…。

ひらがなAI :http://twitter.com/HiraganaAI
よかったら是非フォローやひらがなでの
リプライをして構ってあげて下さい。
より早く学習することが出来ますので。
実装はRubyを使いました。
この前まで授業で使っていた言語ですし,
Twitterを利用するためのものも揃ってますしね。
ただ実際やってみると知らないことだらけで大変でした。
外部との通信系のコマンドはもちろん,
文字列操作やらRuby固有の仕組みとか
全然触れたことが無かったので
何かしようとする度にGoogleで大捜査を行い
なんとか凌ぎながら作ってました。
だからソースの汚いこと汚いこと。
この場合Rubyの柔軟性は徒ですね。
あっちではwhile使ってるのにこっちではeach
これは配列に格納,それはハッシュで,あれは文字列。
素晴らしいスパゲティコードができました。
出来たらソース載せようと思ってましたが
とてもじゃ無いけど載せられない。
かえって混乱を招くこと請け合いです。
そのうち綺麗に書き直せたら載せるかもしれません。


・使用したもの
ruby v1.8.6
rubygems v1.3.6
 Ruby本体と関連のものを自動でインストール
 するためのもの。
 最近やっとrubyの凄さが分かり始めてきました。
 C言語とかからするとなんか自由すぎて扱い辛い言語
 だと思ってたのですが,その柔軟性の思想みたいなのが
 分かりだすと,違うもののように見えてきます。
 決まり文句的な無駄な記述もないですし,
 実に理にかなった言語。
 時間が有ったらもっとrubyについて勉強したいです。
 あと行頭にpをつけるだけで出力できるのは素敵。

twbot
 Rubyでツイッター用のボットを書くための
 便利なライブラリー。
 今回はこれをベースに利用させてもらって作りました。
 
twitter4r
json
jsloce
 その他利用したライブラリーなど。
 リプライの取得の為にtwitter4rも使いました。
 というかこっち最初から使うべきだったかもしれません。

・実装詳細
基本設計は前回書いた通り
今回はそれ以外の部分について。
まず変更点から。
設計では1ツイートあたりひらがな5文字だけ
にしてたのですが,5×3の15文字に変更。
ちょっと文章っぽくなりました。
ただ中身は5文字のをただ3回繰り返してるだけなので,
文章になるかは運命しだい。

次に学習について。
学習手段は現在3通り。
1 フォロー数の変動を調べる
 増えたら前回の発言は正しい日本語であったと仮定して,
 前回の発言での文字列の評価をプラスします。
 逆にフォローが減ったら大幅に評価をダウン。
 まあその時点の発言によってフォローが
 変動するというのも関連が低いですから,
 評価の変動は抑えめにしてあります。

2,リプライから学習する。
 ひらがなのリプライを受け取ったら
 それを評価します。これがメインの学習方法。 
 だから構ってあげるほど日本語をおぼえます。

3,タイムラインから学習
 昨日実装したての機能。
 タイムラインの発言からひらがなを抽出して,
 そこから学習を行います。
 リプライだけでは学習が足りなそうだったので。
 抽出方法は以下の通り。
 まずHiraganaAIのタイムラインを読み込む。
 そのうち自分の発言を除外する。あたりまえですね。
 普通の人の発言は漢字や記号ローマ字が混じっているので,
 そこからひらがなが3文字以上続く部分を抜き出す。
 1,2文字だとただのノイズになりかねないので。
 で,その抜き出したひらがなを加工して
 5文字にします。このAIは5文字しか認識できないためです。
 リプライの方もこうして加工してます。
 5文字にしたらいよいよ評価。
 リプライのようにちゃんとした日本語の句である
 可能性は低いので少し評価点も下げておきます。

評価によって得られた文字列テーブルは
乱数を用いて利用します。
それぞれへの文字がもつ得点を全て足し合わせ,
その合計値を乱数の上限に設定する。
そこから各文字の点数を引いていき,
0になった所が出力スべき文字というわけ。

・これからやりたい事。
なにより24時間稼働。
レンタルサーバー借りるなりして常時動かしてみたい。
一番有力なのはGoogle App Engineかな,と。
無料だしjavaが使えるのでrubyも大丈夫だし。
ただサーバー関係の知識がないのが辛い…。
やってみたらエラーがでてどうにもこうにも。
なんか楽な方法は無いものか。。

学習方法についてももっと検討を。
現状の学習状況はまだ1%にも満たないくらい。
文字列テーブルを見渡してもほとんど初期値ばかり。
このまま時間が経つとどう変化するのか気になりますが,
それよりももっと効率的な方法を探ってみたいです。
生成した文字列をgoogleで検索して
ヒット数で評価とか。そんな技術ないですけど。

次にソースの見直し・書き直し。
rubyの勉強も同時進行で進めてるので,
それの成果を活かしてソースを綺麗にしたいです。
最終的には公開にこぎ着けられれば。

trackback


トラックバックURL

http://yukikazura.blog40.fc2.com/tb.php/76-57f5989f

この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。