jojonki / arXivNotes

IssuesにNLP(自然言語処理)に関連するの論文を読んだまとめを書いています.雑です.🚧 マークは編集中の論文です(事実上放置のものも多いです).🍡 マークは概要のみ書いてます(早く見れる的な意味で団子).
https://github.com/jojonki/arXivNotes/issues
194 stars 8 forks source link

2018: Training Millions of Personalized Dialogue Agents #130

Open jojonki opened 6 years ago

jojonki commented 6 years ago

Training Millions of Personalized Dialogue Agents Pierre-Emmanuel Mazaré, Samuel Humeau, Martin Raison, Antoine Bordes. Facebook. EMNLP short. https://arxiv.org/abs/1809.01984 reddit: https://www.reddit.com/r/datasets/comments/3bxlg7/

先行研究: #60

概要

現在の(特にe2e)対話システムは,事前にユーザーに対するエンゲージに対する対策をしていない限り,ユーザーにエンゲージすることはない.Zhangらは,テキストベースのペルソナ(個人化されえたモデルへのバックストーリー)を条件付けとすることで,e2eの対話システムのエンゲージメントを増やすことができた.しかし彼らの利用したデータは人工的であり,1000個のペルソナしか使っていない. 本論では,Redditから5百万のペルソナと7億のペルソナベースの対話を提供する.実験により,このレベルのペルソナを利用することでe2eのシステムを改善できることを示した.またZhangらのデータを利用し今回のモデルをファインチューンすることで,他のタスクにおける恩恵も示した.

イントロ

MemNNなどによるE2Eモデルではエキスパート知識を必要としない反面,特にchit-chat(雑談対話)においてエンゲージメント,一貫性に乏しかった. Zhangらはこの問題への対応としてPERSONA-CHATという,テキストプロファイル付きエージェントペアの対話データセットを公開した.簡単なテキストプロファイルは編集も容易でe2eの個人化チャットchatbotに対する道を示した.しかしAMT人工的に集められたデータセットであり,実ユーザーとのインタラクションを含まない.また1000ちょっとしかペルソナがない. 今回のデータセットはRedditから簡単なヒューリスティクで500万ペルソナ,7億以上の会話を集めた.

関連研究

データセットの構築

データサンプルを下記に示す.Personaがエージェントのペルソナで,Contextがユーザー発話(システムへのインプット),Responseがシステムの応答となる • Persona: [“I like sport”, “I work a lot”] • Context: “I love running.” • Response: “Me too! But only on weekends.”

事前処理

Dodgeらが作った17億のRedditコメントデータセットをベースにする.これらをトークナイズして250Kの頻出単語辞書を作る.また,100トークン以上のコメントはtruncateする

ペルソナ抽出

ペルソナは一人のユーザーが書いたコメントを集めて,下記のルールを満たすコメントを,ペルソナとして抽出する.

  1. 4-20の単語(or 句読点)を含んでいる
  2. Iかmyという単語を含んでいる
  3. 少なくとも一つの動詞を含む
  4. 少なくとも1つの,名詞or代名詞or形容詞を含む

様々なペルソナを抽出するため,各ユーザーのペルソナはN個の文に限定させてた(あとでN個を動かして実験する).抽出にあたり4つの設定を比較した.

  1. rules設定では上記ルールを満たすN個の文をランダムに取得した.
  2. rules+classifier設定では,PERSONA-CHAT文とランダム分を区別するBoWベースの分類器を利用して,rulesの文をスコア付して,適当な閾値を超えたものを採用(N個以上あれば高い順に採用).
  3. random from user設定では,文長のルール(抽出ルール1)だけをキープして,ランダムにユーザー発話の中から選択(あるユーザーが投稿したコメントからランダム).// 1に似ているが,各ユーザー毎にペルソナを抽出することを前提にしている気がする.表現が曖昧
  4. random from dataset設定ではデータセットからランダムに文を取り出した.これは同じユーザーからのものである必要はなく,ユーザー特有のペルソナ情報に起因する予測精度のゲインを確かめるコントロール機構として扱われる(ランダムに取得すると一貫していないペルソナになるため,1,2,3の一貫したペルソナとの比較対象になる)

先ほどの例のように常に明確なペルソナ対話があるとは限らない.掲示板上の議論では,ペルソナがカバーされないかもしれないし,矛盾することをユーザーが言うかもしれない.またデータセットの抽出時のエラーにより,ユーザーの特徴(ペルソナ的要素)を含まない表現もあるかもしれない(例えばI am feeling happy todayはペルソナにはならない)

データセット生成

データは,context-responseの形で表せる.データは先ほどの4つのルールの1つを利用する.ペルソナ情報はtrainingのみから抽出され,testからは取得しない(予測すべき応答が,学習時のペルソナに含まれるのを防ぐため).

e2e対話モデル

今回のモデルでは,システム応答は,あらかじめある候補から選択するタイプ(Utterance Retrieval)であり,単語毎のseq2seqなどで生成するタイプではない

アーキテクチャ

アーキテクチャは下記

screen shot 2018-09-11 at 2 49 09 pm

Zhangらのように,1-hopの残差接続のMemNNを利用して,エンコードしたコンテキストとペルソナを結合させる.このときコンテキストはMemNNのquery,ペルソナはメモリに該当する. さらにすべての応答候補はエンコードされ,先ほどのコンテキストとペルソナのジョイント表現とdot積をとる.このdot積を最大にする候補が出力する応答となる. 学習はsoftmaxと対数尤度最大化によって鍛える.また,ミニバッチを採用する.各サンプルのネガティブサンプリングとして,そのバッチ内の他の応答が採用される.// ネガティブサンプリングしないと,すべての応答候補のdot積を高くする意味ないネットワークになる

コンテキストと応答のエンコーダ

次に詳細に入る. コンテキストと応答のエンコーダーでは,アーキテクチャと単語embeddingは共有される.しかしそれ以降のレイヤーでは異なる重みを持つ また3つの異なるエンコーダーを試した.

1.BoW Word-embeddingから2つの線型投影(affine?)及びtanhをかける.得られた文表現を単語毎に足し合わせ,文字サイズのルートで割る. // 説明が少しわかりにくいので自信がないが,文内の単語の平均ベクトルのようなものだと思う

2.LSTM 2つのBiLSTMをかける.その最終状態をエンコードされた文ベクトルとして利用する

3.Transformer アテンション機構のみをベースとしたモデル(RNNやCNNを使わず Attention のみ使用したニューラル機械翻訳モデル).このAttentionだけを使う例だと,次発話選択タスクでSOTA (Yang eat al., 2018)を取っているものがあり,有用.今回の実験ではエンコーダ部分のみを利用.エンコードした結果の各単語の平均表現を最終的なエンコード結果とする

ペルソナエンコーダ

ペルソナはそれぞれ別々にエンコードされる(ペルソナは短い文のリストである).単語のembeddingはコンテキストエンコーダと共通.そして最後のレイヤーに線形レイヤー(affine?)を追加.そして,各ペルソナの文表現を足し合わせる. ペルソナエンコーダはパフォーマンスの問題でbow表現のみで実験.各バッチでエンコードされるペルソナの数は学習データのサイズに対してかなり大きいためである(ペルソナは複数の文から成る).またペルソナは短い文である(そのため,シンプルなアーキテクチャによるエンコードで問題ないと言う目論見?).

実験

今回のオリジナルタスクとPERSONA-CHATに適用した時のタスクで評価した // 8 GPU,1エポックで3日かかる

実験結果

また推測した答えを見てみると,ペルソナに関連する応答を選択していることがわかる.// 単語の共起が強いだけのようにも見えるが..

screen shot 2018-09-11 at 2 49 51 pm

Rulesはいくらか結果を改善,classifierをつけると逆に悪化してしまった.これはPERSONA-CHAT(人工的なもの)で学習したものなので,かなりデータの分布が狭くデータの多様性もないものだったからかもしれない.またペルソナあたりの文の数(N)は増やすに連れて性能が上がっていた.// 0, 20, 100とやや極端な数しかないのが気になる

この結果によりZhangの35.4%から42.1%の飛躍的な改善を見せた.またRedditで鍛えたモデルをPERSONAーCHATでfine-tuneすると60.7%という相当な改善を見せた,ただしRedditは少し悪化. またRedditのみで鍛えたモデルではPERSONA-CHATのスコアは25.6%とかなり低く,両データに相当な差異があることがわかる

まとめ

巨大なペルソナベースの対話の集め方を紹介した.またペルソナとコンテキストに沿ったモデルは,応答選択のパフォーマンスを向上させることを示した.また既存のペルソナ対話(PERSONA-CHAT)のモデルよりも優れたけっかを示すことができた(fine-tuneも活躍).

コメント

次に読むべき論文

jojonki commented 5 years ago

Podcastでも解説しました.https://anchor.fm/lnlp-ninja/episodes/ep7-Training-Millions-of-Personalized-Dialogue-Agents-e26fle