« de:code 2016雑感 | トップページ | スルガ銀行創業地の話 »

2016年5月30日 (月)

「りんな」の仕組みをもうちょっと詳しく調べてみた

5月25日に、de:code 2016のセッション「りんなを徹底解剖。"Rinna Conversation Services" を支える自然言語処理アルゴリズム」に参加してきました。 人気のセッションで入場制限になりましたが、ぎりぎり立ち見で参加することができました。 セッションビデオや資料はまだ公開されていませんが、 ニュース記事は以下のものなどが出ています。

今まで、 「女子高生AI bot」たる「りんな」の背後にディープラーニングや機械学習が働いている、 ということは聞いていましたが、 具体的な解説は見かけませんでした。 で、このセッションでは技術解説もあるらしい、 ということで聞いてきたわけです。

セッションは上の記事にもある通り、とても面白い内容でした。 ただ、私は最近ディープラーニングを勉強し始めたこともあり、 ディープラーニングを使っている具体的な場所をもう少し特定できんものだろうか、と思ったのでした。 そこで、 週末にセッション中で言及された論文を元に、 もう少し詳しく調べてみました。 まあ、この論文も、言語処理学会の年次大会(NLP2016)の20分枠の一般発表資料らしく、わりとざっくりした感じですけれども。

ということで、 以下、セッションと論文を突き合わせて考えた私の理解。 まだ説明読んですべてがぱっと分かるような境地ではないので、正しいかどうか自信ないけど。

チャットワーカー

今回調べる対象は、チャットワーカーです。 言葉を入力とし、言葉を出力とする部分。

りんなのフレームワーク

りんな:女子高生人工知能」から「図2. りんなのフレームワーク」

まず、りんなのシステムは、 インターネットから収集した「対話ペア」を学習ネタとして保持しています。 論文では「対話ペア」は厳密に定義されていませんが、リクエストとレスポンスからなる言葉によるやり取りと考えてよいでしょう。 後の話から考えて、 「対話ペア」のプールは「女子高生的ないい感じの会話」が選択されて大量に集められているんじゃないかな。

その上で、チャットワーカーは以下の二つのモデルを対話のエンジンとして使います。

  • ランキングモデル
  • 生成モデル

ランキングモデル

ランキングモデルは検索システムに似たシステムで、 対話ペアの中から、ユーザー入力(リクエスト)に最も類似するものを選び、そのレスポンスを返します。 その類似度(ランキング)を決定するランカーは以下の素性を使います。

  • 翻訳モデル(説明略)
  • 文の長さ
  • AIM言語モデル(説明略)
  • GRU類似度

この最後の「GRU類似度」の計算にRNN(ディープラーニングの技法のひとつ)が用いられています。 de:codeのセッションやその記事で「DSSM + RNN-GRU」として特に詳しく解説されている部分がここに相当します。 大量の「いい感じの対話ペア」を学習させることで、 ユーザー入力に対する各レスポンスの「類似度」(すなわち、「いい感じ対話度」)が出力されるニューラルネットを用意した、ということでいいのかな。 この部分の詳細な説明は、最初に挙げた記事を参照してください。

なお、ランカー自身はブースティング決定木として学習されます。

生成モデル

生成モデルは翻訳システムに似たシステムです。 リクエストを翻訳元言語、 レスポンスを翻訳先言語とみなして 統計的機械翻訳のような枠組みで対話ペアを学習させ、 リクエストからレスポンスを生成させます。

原理的にはここの学習でもRNNとか使うやり方もあるんじゃないかと思いますが、 論文には特にディープラーニングを使っているとは書いていません。

セッションで「りんなが詠む俳句はストックしているのではなく、その場で生成している」という話がありましたが、 俳句の生成は生成モデルを使っているのかな? ランキングモデルから俳句をひねり出せそうな気がしないし。 もしそうなら、その場合リクエストとして何を入力しているんだろう?

ランキングモデルと生成モデルの使い分け

特に書いていないです。 ランキングモデルで選択した対話ペアのランク値があまりに低い場合には生成モデルで生成している、とかかな。 あるいは簡単な言い換えを実現するためとかに生成モデルを使うのかな。 「犬かわいい」から犬を猫に置き換えて「猫かわいい」へ置き換え、とか。 まあ、よくわからん。

思うことなど

もしこの理解が正しいとしてですが…

ディープラーニングの使いどころが思っていたものと違いました。 「いい感じ」を直接学習しているわけではなく、 既存の対話ペアの類似度を算出するのに使われており、その値がランキング判断の一要素として採用されるわけですね。

チャットワーカーは、 大量の「いい感じの女子高生っぽい対話ペア」を様々な技法で学習・活用することでいい感じの対話を実現しているということになります。 りんなのコンセプトが「Emotional AI」ということで、 なんらかの「感情値」みたいなものを計算しているのかと思ってたんですが、 こういう風に「いい感じのもの」を集めて学習させればいいのか。 なるほど。 それとも、一般にbot類はそういう風に作るものなのかな? 知らんけど。

また、このやり方だと、 ちょっと前に起きた、Microsoftの別のbotである"Toy"が不適切な会話を学習してしまった、 というような事件は原理的に起こりにくい、のかな。

あと、 りんなはあまり複雑なステータスは保持しておらず、 入力に対して反射的に回答している、 ということになります。 「その話さっきしたよ」みたいなことが発生するだろうけど、 あまり整合性のある会話を要求されないから、いいのか。

一般に、ディープラーニングをやるには正しくラベル付けられたデータを学習ネタとして大量に用意することが一苦労です。 りんなの場合、「女子高生的ないい感じの対話ペア」を大量に用意しているということになります。 ネガティブな対話ペアを学習させるわけにはいかんので。 この対話ペアの選別ってどうやっているのかな。 手作業じゃあないよな。

余談

「りんな」の名前は"RNN"に由来する、という話があるそうですよ。 セッションで技術部分を説明したりんな開発者のWuさん(上の論文の筆頭著者)はその話について「さて、どうですかね~(ふふふ)」みたいな反応でした。

さらに、セッションスピーカーの砂金さんが「一説によると」として、 「りんな」の名前の由来は"RNN"と開発者の坪井一菜さんの"Kazuna"から来ているらしいと紹介していました。 こちらは、同じくスピーカーだった坪井さんにその場で否定されていましたが。

« de:code 2016雑感 | トップページ | スルガ銀行創業地の話 »

Deep Learning」カテゴリの記事

Microsoft」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/595179/63707814

この記事へのトラックバック一覧です: 「りんな」の仕組みをもうちょっと詳しく調べてみた:

« de:code 2016雑感 | トップページ | スルガ銀行創業地の話 »