読者です 読者をやめる 読者になる 読者になる

Just $ A sandbox

プログラミングと計算機科学とかわいさ

2.pythonで対話型AI制作[形態素解析]

形態素解析とは

形態素解析とはなんでしょうか?ちょっと調べてみましょう。

形態素解析(けいたいそかいせき、Morphological Analysis)とは、コンピュータ等の計算機を用いた自然言語処理の基礎技術のひとつ。かな漢字変換等にも応用されている。

対象言語の文法の知識(文法のルールの集まり)や辞書(品詞等の情報付きの単語リスト)を情報源として用い、自然言語で書かれた文を形態素(Morpheme, おおまかにいえば、言語で意味を持つ最小単位)の列に分割し、それぞれの品詞を判別する作業を指す。
(from Wikipwdia:形態素解析 - Wikipedia)

というわけで、要は品詞分解をさせましょう、ということです。ですが、品詞分解を日本語文法に則って行うためには日本語の単語を覚えさせなくてはいけません。
これは私の個人的な意見なのですが、いろいろAIに教えて自然にしゃべれるようにするよりも、何も教えていないところからできる限りいろいろ自分で学べるようになってほしいので、今回は辞書(単語リスト)を与えることはしないでおきましょう。

形態素解析させると?

以下の文章を例に挙げます。
「今日の天気は晴れです。明日は雨かもしれません。」
これを、文字の種類によって形態素解析にかけるとこうなります。
今日/の/天気/は/晴/れです/。/明日/は/雨/かもしれません/。
つまりカタカナ、ひらがな、漢字、句読点などが切り替わるところで別の形態素(擬似的な品詞のようなものです)に切り替わるように解析することにします。

あとはこれを、前回のマルコフ連鎖にかけてやって、
明日→は→晴→れです→。
明日→は→雨→かもしれません→。
のように文章を構成します。単純なn-gramマルコフ連鎖とは違い、前後の形態素の組は自然なものになるのでかなりマシになると思われます。

ソース

実際に上のようにして実装したソースは以下にあります。ご覧ください。
AI2.py/github

実行例

#「私の名前はアリーチェです」のみを初期文章として与え、話しかけてみた場合の会話ログ

アリーチェ:いらっしゃいませ〜。メッセージをどうぞ〜
あなた:こんばんわ〜
アリーチェ:の名前はアリーチェです
あなた:あなたの名前の話でしょうか?
アリーチェ:あなたの名前はアリーチェです
あなた:いいえ、私はみょんです、。みょんみょんと呼んでくださいなのです!
アリーチェ:いいえ、私の名前はアリーチェです
あなた:あ、はい、そうですね。すみませんです。
アリーチェ:。こんばんわあなたの名前はアリーチェです
あなた:いいえ!私の名前はみょんです!
アリーチェ:!あ、私の名前はアリーチェです
あなた:はい、そうですね。知ってますよ〜
アリーチェ:、私の名前はアリーチェです
あなた:いい加減話を変えませんかw今日も雨でしたね。
アリーチェ:変えませんか今日も雨でしたね
あなた:はい、でも昨日はもっと降ってましたね?
アリーチェ:?いいえ、私の名前はアリーチェです
あなた:名前の話はもう結構です。分かりましたから天気の話をしましょうよ。
アリーチェ:。こんばんわあなたの名前はアリーチェです
あなた:いいえ!私の名前を忘れましたか?
アリーチェ:忘れましたか
あなた:訊いているのは私の方ですよ?
アリーチェ:私の名前はアリーチェです
あなた:はい、そのとおり。早く梅雨が明けるといいですね〜
アリーチェ:そのとおり
あなた:雨は私は嫌いです。明日は晴れて欲しいですね。。
アリーチェ:しいですね
あなた:しいですか?
アリーチェ:しいですか
あなた:まぁ暑いのはしんどいですけどね

これは最初に「私の名前はアリーチェです」しか与えてないので知識はほとんど0のところから会話が始まっているのですが、ちゃんと学習して私の言葉をうまく使って話せるようになっていますね!

前回に比べてかなり状況は改善したと思います。では次回はもう少し単語を選択する精度を上げる、ということについて考えてみましょう♪