bot

botに使われる技術(マルコフ連鎖とアノテーションについて)

勉強会の備忘録である前の記事、
LINE Business Centerとapi.aiを使ってチャットボットを作るの続きです。
よく分からなかったから、飛ばした内容を自分の中で整理しました。

マルコフ連鎖

  • マルコフ連鎖とは

マルコフ連鎖(マルコフれんさ、英: Markov chain)とは、確率過程の一種であるマルコフ過程のうち、とりうる状態が離散的(有限または可算)なもの(離散状態マルコフ過程)をいう。また特に、時間が離散的なもの(時刻は添え字で表される)を指すことが多い(他に連続時間マルコフ過程というものもあり、これは時刻が連続である)。マルコフ連鎖は、未来の挙動が現在の値だけで決定され、過去の挙動と無関係である(マルコフ性)。各時刻において起こる状態変化(遷移または推移)に関して、マルコフ連鎖は遷移確率が過去の状態によらず、現在の状態のみによる系列である。

(゜ω゜)??
ちょっとよく分からなかったので、調べてみると個人的にここが分かりやすかったです。
マルコフ連鎖でTwitter Botをつくりました


上記サイトに則って考えます。

以下の2つの文章があるとします。
(1)私はサーモンが好きです。
(2)私はサーモンが嫌いです。

この文章を、分かち書き(文章を小さい単位に区切る)すると、以下のようになります。

(1)私 は サーモン が 好き です 。
(2)僕 は サーモン が 嫌い だ 。

これを、3単語ごとにグループ分けします。

(1)
(始まり) 私 は
私 は サーモン
は サーモン が
サーモン が 好き
が 好き です
好き です 。
です 。(終わり)

(始まり)と(終わり)もカウントするみたいです。
(2)の文章も同じように、グループ分けします。

(2)
(始まり) 僕 は
僕 は サーモン
は サーモン が
サーモン が 嫌い
が 嫌い だ
嫌い だ 。
だ 。(終わり)

準備はここまで。
それでは、文章を作ります。

まず先頭に(始まり)のあるグループを探します。

(始まり) 私 は
(始まり) 僕 は

上の2つが選択肢となります。
ここでは、(始まり) 私 は を選んだとします。

最後が「は」で終わっているので、「は」から始まるグループを探します。

次に来るのは、
は サーモン が
のグループしかないので、
「私はサーモンが」 と、文章が続くことが決まります。

同じように続けていきます。
「が」で終わっているので、次は「が」で始まるグループを探します。

が 好き です
が 嫌い だ

ここでは、が 嫌い だ を選んだとします。
次に、「だ」で始まるものは、

だ 。(終わり)

しかありません。
(終わり)が来たので、ここで文章が終わります。
つまり、「私はサーモンが嫌いだ。」という文章が作られました!
生成できる文章は、上の文章含め4パターンになるということでしょうかね。

このように3つの単語のつながりを見て、次に出現する単語を決めるという方法を、3階のマルコフ連鎖というみたいです。

アノテーション

  • アノテーションとは

アノテーション(英語:annotation)とは、あるデータに対して関連する情報(メタデータ)を注釈として付与すること。

先ほどの文章で考えると、
私 は サーモン が 好き です 。

私に「主語」という情報をつけたり、
サーモンに「食べ物」という情報をつける・・・ということだという認識です。

他にも「食べ物」という情報が注釈されている「お寿司」というデータがあるとしたら、
「私はお寿司が好きです。」という自然な文章が作れるようになるということでしょうか。

まとめ、感想

以上を文章に当て込んで学習させることで、botの文章の精度がよくなるそうです。

アノテーションはどのような情報をつけるというところまで、自分ですべて考えなければいけないのだろうか?そこも学習してくれるのかなあというちょっとした疑問が残りました。

これを調べている中で、マルコフ連鎖を用いてTwitterのbotを作るという記事が多かったです。
面白そうなので、私も今度試してみたいと思います。