3
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

共感をする会話AI XiaoIce(りんなちゃんのベース)の設計と構造の解説

XiaoIce(りんなちゃんのベース)の設計と構造

XiaoIceとは

Microsoftのチャットボットとして、国内ではりんなちゃんが有名ですが、XiaoiceはそのベースとなったAIです。
本記事では、Xiaoiceに使われている技術や学術領域の知見を、
Microsoftのテクニカルペーパーを元に解説していきます。

どうも、Xiaoice成功の鍵は、
クローラーによる大量収集された公開会話データと、
会話データの、MS内部の機械学習モデルとアノテーションチームによる整備を通したデータの高品質化、
が要因な気がしていて、学べる部分はあるにしても、個人では、なかなか真似できなさそうです。
それでも学べるところはたくさんありました。

触ったことがない方は、ぜひとも、LINEで友だち追加してみてください。
Twitterアカウントもあるようです。

設計

設計思想

設計思想として、
他のチャットボットとは異なり、人の感情面の欲求を満たすような設計思想です。

その設計思想を反映し、
XiaoiceのA/Bテスト・機能の最適化には、長期的な期待Conversasion Per Session(CPS)(1−6ヶ月)が使われています。
長期的な期待CPSを測定することで、タスク遂行においてはユーザの信頼を勝ち取り、
雑談においてはユーザの感情を満たせていることがある程度わかるはずと論文には書かれています。
実際は、もっと細かい指標を見ていると思いますが、
大まかな変化は捉えられるのではないかと私も思います。

Screenshot from 2019-11-17 13-13-20.png

この図は、XiaoiceのCPS、アクティブユーザ数の推移ですが、自分でりんなちゃん試した感じだと、
CPSが23なのは驚きです。2,3往復くらいで飽きてしまいます。
この感覚とデータのずれの原因は、もしかすると

  • 中国やインドでは公開されている会話データが多,もっと良質な会話ができる。(Xiaoiceの仕組み上、システムに使われている会話データの量が性能に大きな影響を与えると感じます)
  • Active Userの定義が緩めで、ユーザ増加とCPSが性を持っている。(会話しないユーザと大量に会話するユーザの二分化など)

なのではないかと思います。

会話の定式化に関しては、、Xiaoiceでは、階層型意思決定と呼ばれるフレームワークで会話を定式化しています。
階層型MDPは方針がツリー状に分解されているMDPです。MDPでは、意思決定をする主体を取り巻く環境の状態sに応じて、
意思決定ロジックpが行動を出力するようなフレームワークです。

返答の処理の流れ

ある会話セッション中の、1返答を作成する処理の流れを図に表します。

Untitled Diagram (2).png

Xiaoiceでは、会話は階層型MDPによりモデル化されていて、
まず、Xiaoice、ユーザ、文脈などから、状態ベクトルを作成して、
その状態ベクトルに基づいて、トピックマネージャーがトピックの切り替えの判断、トピックの選定を行います。
そして、選択されたトピックに対応した会話ロジックが実行されます。

ちなみに、会話をする以外にも、
Xiaoiceには、ビデオクリイプや画像に対してコメントする機能や、
天気を教えたり、慰めたりするためのスキル機能もあります。
そのあたりは条件分岐やキーワードベースとなっていて、
話題の切り替えには機械学習が使われているようです。

状態ベクトルの作成

Xiaoiceでは、共感というのは広い概念で、
相手の立場や会話中の感情面に本記事では、Xiaoiceに使われている技術や学術領域の知見を、適した発言を行うという意味です。

Xiaoiceにはワーキングメモリをモデル化したようなモジュールがあり、
そこに過去の会話が保存されています。
そのデータを元に状態ベクトル作成時には次のような情報を計算して、
状態ベクトルに入れます。

  • NLPのテクニックを駆使して、抽出した文脈情報
  • 文脈情報を使って、代名詞などを置き換えた会話履歴
  • ユーザの会話中の感情などとプロフィール
  • Xiaoiceのプロフィールとキャラにあった感情応答

そして、この状態ベクトルに基づいて、
トピックの切り替えや返答の生成がなされます。

この中でも、共感に関連するのは後者2つで、次の図のようなベクトルです。

Screenshot from 2019-11-19 11-44-23.png

感情に間rねする項目は、
ユーザのIntent, Snetiment, Optionなどの値は発言から、(おそらく、分類器など)で推定されます。
Xiaoiceのベクトルは、ヒューリスティックに計算しているとのことですが、
明記されていませんでした。
Xiaoiceっぽい発言のアノテーションされたデータベースを構築しているようなので、
それを使ってモデルを作っていると思っていたのですが、不明です。

トピックの切り替え

これはファシリテーター的な役割を持つ機能です。

トピックの切り替えは、まず、分類機を用いて、
トピックの切り替えをするしないを判断します。
切り替えをする場合は、会話の状態に応じたトピックのランキングを作成し、1位のものを選択するとのことです。

トピック切り替え分類器は、少しおもしろく、モデルにはboostedツリーが使われていて、
ユーザの返答がつまらなそうにしている場合のみでなく、
自分の返答がおかしい度合いも特徴量として使われています。

トピック推薦のランキング作成も、
boosted treeが使われていて、特徴量は面白く、
コンテキスト、最近のトピックであること、ユーザの興味への合致度合、
ネット上での人気度合、過去のユーザの受け入れ度合などを使っています。

hand craftedなロジックではなく、
分類器と推薦アルゴリズムで少し適用的にしてあるのは面白いですね。

返答候補の生成

返答候補の生成は面白く、かなり力技となっています。

返答候補は、会話データベース、生成モデル、文章データベースから作成されます。
返答データベースは、高品質な会話、生成モデルは短文で返答カバレッジを上げる役割、
文章データベースは長文の返答カバレッジを上げる役割を持っているようです。

(おそらく、Bingのクローラに収集されてアノテーションチームに整備された)
会話データベースがLuceneに格納されていて、(おそらく、ディープラーニングで抽出された)
分散表現をキーとして、n個の最近某検索をして返答候補を作成しています。

また、生成モデルでは、RNNを使っているようです。

また、文章データベースは検索エンジンと近いもので、
Knowledgeグラフで拡張して、検索キーを作成しているようです。

ここで作られた返答候補の一覧を元に、
後段で共感ベクトルも使ってランク付けを行います。

返答候補のランク付けと選択

返答候補のランク付けもboosted treeで行っているようです。
ランク付けされて、ランクのスコアが一定値以上のものからランダムサンプリングされるようです。

この特徴量には、文脈との一貫性、ユーザ返答分との一貫性、
共感ベクトルの比較、データベース中のクエリ文とユーザ返答文の比較、
がありました。

ここでサンプリングされたものがXiaoiceの返答文として返却されます。

まとめ

XiaoiceのPersonallityを実現するための、
大量の会話データへのPersonality適合有無のアノテーションや
強力なクローラとアノテーションをバックに作成された、
会話データベースなどWeb技術の資産をフルに活用していますね。

ラインとかは非公開な会話データ持っていそうですが、
やはり、学習に使うなどには法の壁があるのでしょうか?
人っぽいAIを作るには人と人のインタラクションデータが必要で、
これを集めていくのは大変そうです。
こういったデータを集められた企業が面白いものを作れるんでしょうね。

技術的な詳細はあまり書かれていなかったので、
次の記事で関連研究を調査しつつ、解説していきます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
3
Help us understand the problem. What are the problem?