終末 A.I.

Deep Learning を中心に、機械学習するエンジニアのブログ

VariationalでEnd2EndなDialogue Response Generationの世界

この記事は、自然言語処理 #2 Advent Calendar 2019の24日目の記事です。

Open-Domain Dialogueや非タスク指向対話、雑談対話と呼ばれる領域において、発話データのみを使用したEnd2Endな対話応答生成を試みる歴史はそこまで古くなく、[Ritter et al+ 11]や[Jafarpour+ 10]がまず名前をあげられるように、比較的最近始まった研究テーマとなります。

これらは、Twitterなどの登場により、ユーザー間で行われる、ほとんどドメインを限定しない、もしくは多様なドメインにまたがる、大量の対話データを、容易に収集できるようになったことにより、活発に研究されるようになってきました。

初期の研究である[Ritter+ 11]や[Jafarpour+ 10]では、統計的機械翻訳ベースや情報検索ベースの手法でEnd2Endな対話システムを構成していました。

これらの研究は、複数のモジュールをつなぎ合わせ、対話データだけでなく、人がアノテーションしたデータを元にシステムの学習を行う、従来の対話システム研究にパラダイムシフトをもたらしました。しかし、下記のような雑談対話システムの特性のため、初期の研究では扱える処理に限界がありました。

  • 一つのクエリー(ユーザー発話)に対して、複数の応答(システム発話)が可能である点

  • クエリー自体はそこまで長いものでないため、長期的なコンテキスト(対話履歴など)を考慮した応答生成を行う必要がある点

それを受けて現れたのが、ニューラルネットワークを使用した対話システムです。[Sordoni+ 15][Vinyals+ 15][Shang+ 15]

これらの論文はほぼ同時期に登場することになりますが、いずれも、ニューラルネットワークの表現学習能力を利用して、対話の長いコンテキストを一定次元の潜在表現に圧縮し、それを元にRNNを使用したデコーダーにて応答を生成することを試みています。

また、[Serban+ 16]にて提案されたHREDモデルは、発話文のエンコーダーと、コンテキストのエンコーダーを分けることにより、より効率的に長い対話コンテキストを利用できることを示し、構成の簡単さもあり、現在ではEnd2Endな対話応答生成のベースラインとしてよく使用されるモデルとなっています。

しかし、単純にニューラルネット化しただけでは、長期的なコンテキストを考慮しやすくはなっても、「I'm OK」や「I don't know」のような、どのようなコンテキストにも合いやすい文を生成してしまうという問題は解決しませんでした。

[Li+ 16]では、相互情報量(Mutual Information)を目的関数にすることにより、出現頻度の高い文を応答として使用することに対し、ペナルティーを与えるような設定でそれを克服しようとしました。

[Li+ 17]では、GANベースの学習方法を使用して、生成される対話を、実際のデータセットに含まれるような対話に近づけることにより、この問題を克服することを試みています。

そして、[Serban+ 17]および[Zhao+ 17]では、VAE、特にCVAEのテクニックを対話応答生成に応用して、潜在変数のサンプリングによって多様な応答生成が行えるようになることを示しています。

本記事では、特にこのVAEベースの手法に注目して、どのように発展してきたか、現在はどのような部分にスポットが当たっているかについて記載していきたいと思います。

目次

End2End対話システムの基本

End2Endな対話応答生成の問題設定

End2Endな対話応答生成は、N個の単語(もしくはトークンおよび文字)からなるユーザー発話文  x = \{w_1^{x}, w_2^{x}, ..., w_N^{x} \} と、L個のユーザー発話とシステム発話の履歴であるコンテキスト  C = \{c_1 = \{w_1^{c_1}, w_2^{c_1}, ..., w_{N'}^{c_1}\}, c_2, ..., c_L\} が与えられた際に、適当なシステム発話文  y = \{w_1^{y}, w_2^{y}, ..., w_M^{y} \} を生成することが目的となります。

ここでは、一般的な問題設定を紹介していますが、ユーザー発話やシステム発話は必ずしもテキストのみである必要はありません。またコンテキストとして、対話履歴だけでなく、注目している画像や、文章、知識ベースなど、多様な周辺情報が含まれるケースも考える事ができます。

ここで、モデル  P_\theta (y | x, C) を考えた場合、自動で応答を生成することができるように、データセット  D = \{x_i, y_i, C_i \}を元にモデルのパラメーター  \theta を学習することが、End2Endな対話応答生成システムに機械学習システムを適用する際の基本的な考え方となります。

データセットにそもそも含まれないような状況には、対応することができないという課題もありますが、それはルールベースやアノテーションデータをもとに学習するような既存の対話システムでも同様です。

End2Endな対話システムは、ユーザー発話の理解から応答の生成までを一貫して行うことにより、データセットに含まれるような対話とは多少異なるような状況であっても、コンテキストやユーザー発話の違いを考慮して、より柔軟な応答が生成されることを期待しているものと考えることができます。

RNNを利用した対話応答生成

DCGM(Dynamic-Context Generative Model)

[Sordoni+ 15a]では、ユーザー発話文 xとコンテキスト Cに含まれる単語を元にbag-of-words表現を生成し、それをもとにRNNを使用したデコーダーにより、システム発話文 yを生成するシステムが提案されています。

直前のユーザー発話文とコンテキストのBOWのベクトルを分けるケースと、まとめたBOWを使用する2パターンが提案されていますが、以降の処理は共通で、BOWベクトルを元に多層のニューラルネットワークを元にコンテキストベクトル c_lを生成した後、RNNの各ステップで c_lを使用するようにシンプルなRNNを改良した層を元に、 yを構成する各単語を次々に生成していくようなアーキテクチャです。

 
\begin{align}
h_t &= \sigma (h_{t-1} W_h + c_l + w_{t-1}^{y} W_{in}) \\
p_\theta &(w_{t}^{y} | w_{1}^{y}, ..., w_{t-1}^{y}, x, C) = \sigma(h_t W_{out}) \\
\end{align}

ここで  W _ h, W _ {in}, W _ {out} は学習により最適化するNNのパラメーターです。以降も大文字の Wで表す行列は基本的に学習対象のパラメーターとします。

このように、RNNの計算中に逐次コンテキストを考慮するように計算を行うことにより、既存の機械翻訳ベース、情報検索ベースの手法と比較して、SNSでのやり取りを元にした対話応答生成タスクにおいて、高い性能で応答生成が行えることが示しています。

Seq2Seqを利用した対話応答生成

Neural Conversational Model

Seq2Seqは、[Sutskever+ 14]にて提案された、RNNを利用したEncoder-Decoderを持つネットワーク構造のことです。

この構造の一番大きな特徴は、そのシンプルさです。Encoderは、入力文ををもとにどんどん自身の隠れ層を更新していき、入力が完了した際の隠れ層のベクトル h _ {N}^{E}を出力とします。デコーダーは、この h _ N^{E}を自身の隠れ層の初期値( h _ 0^{D})とした上で、スタートトークンから逐次的に w_{t}^{y}をRNNの出力層を元に生成してきます。

f:id:KSKSKSKS2:20191222180159p:plain
[Luong+ 15]より

このモデルは、このようなシンプルな構造ながら当時の機械翻訳の最高性能モデルに匹敵する性能を示し、テキスト生成界隈を驚かせました。

[Vinyals+ 15]は、このSeq2Seqを対話応答生成に素直に応用した手法で、直前のユーザー発話文を含む対話履歴(つまり、 x C)をエンコーダーに入力し、システム発話文をデコーダーにより生成することを試みました。

この論文の結果は非常に衝撃的で、大量の対話データさえあれば、このようなシンプルな構造のモデルでも、対話システムとして成立する可能性を示しました。

一方で、同じ対話中であっても、コンテキストをうまく考慮できず、似たような質問に異なる応答を返してしまう問題があり、この一貫性(Consistency)については、以降の対話応答生成手法においても、重要なキーワードの一つになっていきます。

Neural Responding Machine

Seq2Seqにはほぼセットで使用される機構にAttentionがあります。Attentionは、デコーダーの注目している隠れ層のベクトルを元に、エンコーダーのどのステップの隠れ層に注目するかを決定し、注目した隠れ層のベクトルの値をデコーダーが生成する出力の計算に利用します。

確率的に注目するエンコーダーのステップを決定するソフトアテンションと呼ばれる機構を、[Luong+ 15]ではさらにグローバルアテンションとローカルアテンションに分類しており、よく使用されるのはグローバルアテンションです。

グローバルアテンションの計算は、 h_t^{D}デコーダーの隠れ層のベクトル、 h_t^{E}エンコーダーの隠れ層のベクトルとした場合、下記のように表せます。RNNが複数層スタックされている場合は、一般に最終層の隠れ層のベクトルを使用します。

 
\begin{align}
a_{it} &= \frac {score(h_t^{D}, h_i^{E})} {\sum_j^{N} score(h_t^{D}, h_j^{E}) }  \\
c_t &= \sum_i^{N} a_{it} h_i^{E} \\
p_\theta &(w_{t}^{y} | w_{1}^{y}, ..., w_{t-1}^{y}, x, C) = softmax([c_t; h_t^D] W_{out}) \\
\end{align}

 score は隠れ層のベクトル同士の類似度を計算する関数で、一般にはドット積( h_t^{D} h_j^{E})や h_t^{D} W_a h_j^{E}がよく使用されます。

f:id:KSKSKSKS2:20191222184629p:plain
[Luong+ 15]より

主に機械翻訳分野にて使われだしたアテンション機構ですが、[Shang+ 15]ではこの仕組みを対話応答生成に利用しました。

一つ前のデコーダー隠れ層のベクトルを元にアテンションを計算する部分と、アテンションを元に最新の隠れ層のベクトルを更新する部分以外は、前述のグローバルアテンションと同じような機構を使用し、Weiboで収集した大量の対話データを元に、既存の検索ベース、統計的機械翻訳ベースのシステムを上回る、対話応答生成性能を示しました。

このように、Seq2Seqベースの手法と大量の雑談対話データとの相性の良さが様々な研究によって示され、End2Endな対話応答生成においては、ニューラルネット、特にRNNを使用したSeq2Seqベースの構造は非常に良く使用されるようになっていきます。

階層構造を利用した対話応答生成

HRED(Hierarchical Recurrent Encoder-Decoder)

階層型の応答生成アーキテクチャであるHREDは、[Sordoni+ 15b]にて、まずはマルチターンの質問応答タスクにおいて採用されたSeq2Seqの拡張手法です。 通常のSeq2Seqとの大きな違いは、エンコーダーが発話エンコーダーとコンテキストエンコーダーの2つに分かれる点です。  h_t^{UE}を発話エンコーダーの隠れ層のベクトル、 h_l^{CE}をコンテキストエンコーダーの隠れ層のベクトルとすると、下記の用に表現する事ができます。

 
\begin{align}
h_t^{UE} &= UtteranceEncoder(x)  \\
h_l^{CE} &= ContextEncoder(h_{l-1}^{CE}, h_t^{UE}) \\
p_\theta(y | x, C) &= Decoder(h_l^{CE}) \\
\end{align}

UtteranceEncoder、ContextEncoder、Decoderは基本的にRNNを使用することが多く、コンテキストエンコーダーの隠れ層のベクトルは、一層のニューラルネットワークで次元数をそろえる処理をした後、デコーダーの隠れ層の初期値として使用されることが一般的です。

f:id:KSKSKSKS2:20191222193446p:plain
[Sordoni+ 15b]より

[Sordoni+ 15b]でマルチターンの質問応答タスクで応用されたHREDは、[Serban+ 16]で対話応答生成に応用され、映画シナリオを元に作成したデータセットにおいて、直前のユーザー発話だけでなく、対話履歴中の発話も考慮した発話生成が行える傾向が見られることを示しました。

HREDは、長いコンテキストを扱うことになる対話応答生成と相性が良いと考えられており、現在では対話応答生成のベースラインモデルとして頻繁に参照されています。

VariationalでEnd2Endな対話応答生成

上記までで、大量の対話データとニューラルネットを使用することにより、長いコンテキストを考慮したEnd2Endな対話応答生成処理を実現できそうであることがわかりました。

しかし、これらの対話応答生成には、特に確率的に最も有り得そうな文をデコーダーからサンプルすると、「I'm OK」や「I don't know」のような、どのようなコンテキストにも合う文を生成してしまうという課題がありました。[Serban+ 16][Li+ 16]

f:id:KSKSKSKS2:20191224111954p:plain
[Li+ 16]より

上の表は、Seq2Seqベースの手法で学習したEnd2End対話システムにて、各ユーザー発話文を与えた際に、尤度の高い順にBeam Searchでデコードしたシステム発話文を並べたものです。

ユーザ発話に対する固有の応答よりも、どのユーザー発話にでもある程度使いまわしのきく文が、生成されてしまいやすいという問題が見えてきます。

非常に限定された情報しか含まない対話データを使用して、最尤推定により生成モデルを作成する以上、上記は避けることが難しい問題でもあるため、目的関数を相互情報量ベースのものや、GAN・強化学習ベースのものに置き換えることにより、これらを解決しようとも試みられています。

一方で、学習の安定性が高い最尤推定の枠組みのままこの問題を解決しようという方向性もあります。それが、VAEを応用した対話応答生成手法です。VAEを応用した手法では、潜在変数をサンプリングすることにより、生成される文の多様化を試みます。

以降では、対話応答生成にどのようにVAEが応用されているのかについて記載していきます。

VAE(Variational Auto-Encoder)とテキスト生成

変分近似の基本

VAE(Variational Auto-Encoder)は、[Kingma+ 14a]にて提案された、ニューラルネットワークを使用した生成モデルの一種です。

VAEは、他の最尤推定ベースの生成モデルと同様、データ xが与えられた際に、尤度  P_\theta(x)が最大となるモデルのパラメーター \thetaを推定することを考えます。

この時、一般に潜在変数 zを用いて、下記のようにモデル化します。

 
\begin{align}
P_\theta(X) &= \int P_\theta(x, z) dz  \\
&= \int P_\theta(x | z)P(z) dz \\
\end{align}

一般的には、このままでは最適なパラメーター \thetaを解析的に求める事はできないため、別のパラメーターを持つ事前分布  Q_\phi(z)を用いて、以下のように対数尤度を変形します。

 
\begin{align}
log P_\theta(x) &= log \int P_\theta(x, z) dz  \\
&= log \int Q_\phi(z) \bullet P_\theta(x, z) / Q_\phi(z) dz \\
& \ge \int Q_\phi(z) \bullet log (P_\theta(x, z) / Q_\phi(z)) dz \\
& = \int Q_\phi(z) \bullet log (P_\theta(x | z)P(z) / Q_\phi(z)) dz \\
& = \int Q_\phi(z) \bullet log (P(z) / Q_\phi(z)) + Q_\phi(z) \bullet log P_\theta(x | z) dz \\
& = E_{z \sim Q_\phi(z)}[ log P_\theta(x | z) ] - KL[Q_\phi(z) \parallel P(z)] \\
&= L(x, z)
\end{align}

  L(X, z)を変分下限と呼ばれるもので、文字通り尤度の下限に当たる値です。尤度を最大化することを考える場合、この変分下限の値が最大となるようなパラメーター \thetaを求めればよいわけです。

ここで、 KL[Q _ \phi(z) \parallel P(z)]は、 Q _ \phi(z) P(z)のKLダイバージェンス E _ {z \sim Q _ \phi(z)}[ log P _ \theta(x | z) ]は、 Q _ {\phi}(z)を考えた時の log P _ {\theta}(x | z)の期待値です。

一般的な最尤推定EMアルゴリズム)では、 P(z)を標準正規分布として、 KL[Q _ {\phi}(z) \parallel P(z)]を最小化するような \phiを選んだ後(Eステップ)、 E _ {z \sim Q _ \phi(z)}[ log P _ \theta(x | z) ]を最大化する \thetaを選ぶ処理(Mステップ)を繰り返して、最適なパラメーターを求めます。

VAEの基本

VAEでは、事後分布の近似である Q _ {\phi}(z)をデータ xの識別モデルである Q _ {\phi}(z | x)に拡張し、 P _ \theta(x | z)とともにニューラルネットに置き換えてモデル化します。

この時、 Q _ \phi(z | x)を識別モデル(Discriminator)や事後分布(Posterior)、 P(z)を事前分布(Prior)、 P _ \theta(x | z)を生成モデル(Generator)と一般的に呼ばれます。

また、変分下限は、 L(x, z) = E _ {z \sim Q _ \phi(z | x)}[ log P _ \theta(x | z) ] - KL[Q _ \phi(z | x) \parallel P(z)] となります。

VAEでは、上記のような変更を行うことで、以下のような効果を期待します。

  1. パラメーター \thetaを最適化する際に用いる zの効率的な獲得

  2. データを反映した潜在表現である zの獲得

  3.  P _ \theta(x | z)からサンプリングの簡易化

ここで、生成モデルをニューラルネットにするにあたり、全てのモデルは微分可能な関数として置く必要があります。 P(z)を標準正規分布として置く場合、 Q _ {\phi}(z \mid x)正規分布となるように置くと、KLダイバージェンスを解析的に求めることができるようになるため、 \thetaについては微分可能となります。

しかし、 Q _ {\phi}(z | x) を直接確率分布としてモデル化しまうと、 zが確率変数となるため \phiについて微分することができません。

そこで、下記のようにReparameterization Trickを用いて、 zを決定変数として扱えるようにします。

  1. 確率変数 \epsilon N(0, I)からサンプリングする

  2.  z = \mu _ \phi(x) + \sigma _ \phi(x) \bullet \epsilon zを定義する

  3.  E _ {z \sim Q _ \phi(z | x)}[ log P _ \theta(x | z) ]が E _ {\epsilon \sim P(\epsilon)}[ log P _ \theta(x | \mu _ \phi(x) + \sigma _ \phi(x) \bullet \epsilon) ]と考えられるようになる

 \mu _ \phi(x)および \sigma _ \phi(x)は、 xから正規分布の平均と分散を推定するモデルで、一般的に途中までは一つのCNNやRNNで構成され、それらの出力をMLPでそれぞれように変換する処理を行います。

これにより、 \phiについても微分できるようになり、変分下限をSGDを使用して最大化できるようになります。

VAEを利用したテキスト生成

VAEをSeq2Seqを利用してテキストの生成に利用したモデルはいくつかありましたが、[Bowman +16]では、潜在変数をより生成するテキストに反映できるようにし、VAEによるテキスト生成の有効性を示した点で画期的でした。

Seq2Seqを用いたモデルでは、特にAttentionを利用しないような状態では、エンコーダーで捉えた情報をほとんど使わずに、デコーダーが入力された単語の情報を元にテキストを生成してしまうという問題がありました。

VAEでは、潜在変数 zに格納される情報に価値がなくなり、KL項が早々に0になってしまうという形で問題が現れます(KL-Vanishing Problem や KL Collapse Problem 、 Posterior Collapse Problem と呼ばれることもあります)。

このようなVAEの弱点に対し、[Bowman +16]では、KLコストアニーリングやWord Dropoutという手法を提案し、入力文を復元できるような潜在表現をエンコーダーによって獲得でき、デコード時に全く単語の情報を与えない状況でも、デコーダーは潜在表現をもとに出力文を生成できるようになることを示しました。

f:id:KSKSKSKS2:20191223124628p:plain
[Bowman +16]より

また、事後分布からサンプルした潜在変数で文を再構成した場合、意味的に同一だが表現が多少異なるような文を生成できること、それぞれの文の事後分布からサンプルした潜在変数の調和平均を取った潜在変数をデコードした場合、それぞれの文を混ぜたような意味や表現の文が生成されるなど、潜在表現を元にデコードしていると考えられる実験結果をいくつも提示しています。

f:id:KSKSKSKS2:20191223124649p:plain
[Bowman +16]より

この成果を受けて、多様な文を生成したい際に、VAEを使用して実現するというアプローチが広く行われるようになっていきます。

CVAEを利用した対話応答生成

CVAEの基本

CVAE(Conditional Variational Auto-Encoder)は、[Sohn+ 15]にて提案された、VAEをConditional情報を含んだ状態に拡張し、Conditional情報が与えられた際に学習データが生成される条件付き尤度、 P _ \theta(x | C)を最大化するように学習する手法です。

似たような定式化を行っている[Kingma+ 14b]では、 P _ \theta(x, C)や、コンディショなる情報を非自明とした上で P _ \theta(x)を最大化する事を考えますが、[Sohn+ 15]では条件付き尤度である P _ \theta(x | C)を最大化するように最適化します。

変分下限は、コンディショナル情報を加えた形で、下記のように定義します。


L(x, C, z) = E_{z \sim Q_\phi(z | x, C)}[ log P_\theta(x | C, z) ] - KL[Q_\phi(z | x, C) \parallel P_\theta(z | C)]

事前分布にも、事後分布にも、生成モデルにもコンディショナル情報の条件が含まれるようになる点がポイントです。 P  _ \theta(x | C)の条件付き尤度の式からも分かるように、CVAEはコンディショナル情報からデータ xを生成することに使用することを主な利用目的としています。

[Sohn+ 15]では、不完全なデータをコンディショナル情報 Cとして、 xを復元するためにCVAEを使用しています。

以降で述べるように、対話応答生成では、対話履歴と直前のユーザー発話をコンディショナル情報として、そこから次のシステム発話を生成することを試みることになります。

VHRED

VHREDは、[Serban+ 17]にて提案されたHREDをCVAE化した手法です。ContextEncoderが出力した隠れ層のベクトルの値を元に、事後分布 Q_\phi(z | y, C)から潜在変数 zをサンプリングして、それを元に出力文を生成するように学習します。

 
\begin{align}
h_t^{UE} &= UtteranceEncoder(x)  \\
h_l^{CE} &= ContextEncoder(h_{l-1}^{CE}, h_t^{UE}) \\
h_{t+1}^{UE} &= UtteranceEncoder(y) \\
z &\sim Q_\phi(z | h_{t+1}^{UE}, h_l^{CE}) \\
P_\theta(y | x, C) &= Decoder(z, h_l^{CE}) \\
\end{align}

実際に利用する際は、事前分布 P _ \theta(z | C)から潜在変数 zをサンプリングして、次のシステム発話を生成することを試みます。コンディショナル情報 C = \{x, C \}は、対話履歴と直前のユーザー発話から構成される前提です。

f:id:KSKSKSKS2:20191223130321p:plain
[Serban+ 17]より

VHREDは、SNS上の対話データや具体的な技術に関する対話データにおいて、特に数ターンと長いコンテキストを持つ際の対話応答生成、および生成される文の多様性で、通常のSeq2SeqベースのモデルおよびHREDと比較し、大幅に性能が向上することを示しました。

VAEの利点である、データを反映した潜在表現を得られるようになる点、サンプリングすることで生成結果の多様性に影響を与えることができる点が、対話応答生成において有効に機能する結果を示した論文です。

CVAE/kgCVAE

[Zhao+ 17]では、VHREDとほぼ同時期にほぼ同じようなモデルを提案しています。

VHREDと異なる点は、学習時にWord Dropoutの代わりに、(1)新たに提案したAuxiliary LossであるBag-of-Words Lossを用いて、潜在変数から生成する文のBOWベクトルを復元できるように学習できるようにした点と、(2)潜在変数だけでなく何かしらのラベル([Zhao+ 17]ではダイアログアクト)もコンディショナル情報から推定し、推定した潜在変数とラベルをもとにデコーダーで文を生成するkgCVAE(Knowledge-Guided CVAE)という拡張手法を提案している点です。

f:id:KSKSKSKS2:20191223150228p:plain
[Zhao+ 17]より

ラベル情報を aと置くと、ラベル情報を追加した場合の変分下限は下記のように定式化できます(図中では、ラベル情報が y、生成対象のテキストが xと表現されていますが、同じことを表しています)。


\begin{align}
L(y, C, a, z) &= E_{z \sim Q_\phi(z | y, C, a)}[ log P_\theta(y | C, a, z) ] - KL[Q_\phi(z | y, C, a) \parallel P_\theta(z | C)] \\
&+ E_{z \sim Q_\phi(z | y, C, a)}[ log P_\theta(a | C, z) ]
\end{align}

式の通り、識別モデル Q _ \phiは、生成対象の文とコンディショナル情報だけでなく、真のラベル情報も元にして潜在変数 zを推定するように学習します。一方デコーダ P _ \theta(y)は、コンディショナル情報、潜在変数、推定した(もしくは陽に与えた)ラベル情報から対象の文を生成します。

f:id:KSKSKSKS2:20191223145900p:plain
[Zhao+ 17]より

よりグラフィカルに書くと、上図のようになります。 MLP _ yと記載されている部分が、 P _ \theta(a | C, z)に、 MLP _ bと記載されている部分がBOW Lossに対応します。

青いラベル情報に関する処理を抜くとただのCVAEであり、基本的にVHREDと同様になります。

実験では、特にkgCVAEは、対話履歴を考慮するだけでなく、指定したラベルに基づいた応答を生成できることを示し、様々な情報を追加することにより、コントロール性と生成する文の多様性の両方を兼ね備えた、対話応答生成の可能性を示しました。

VariationalでEnd2Endな対話応答生成の現在

VHREDやCVAEで一通り基本的なモデルは出尽くしたきらいがありますが、より有用な対話応答生成を行うための拡張手法の提案が日々行われています。

その方向性の一つが、潜在変数をよりデコーダーが参照するように、デコーダーが参照しやすいようによりリッチな潜在変数表現を獲得するように学習し、今まで以上に多様な応答生成を可能にしようという方向性です。

も一つが、単純に、対話応答を生成するだけでなく、ある制約ある条件下のもとで対話応答を生成したいという方向性です。

以降では、多様な応答生成を可能にするためにどのようにVHREDが改良されていっているか、制約条件として発話するユーザーを指定して応答を生成したいというケースに、どのように対応することが試みられているかについて紹介していきたいと思います。

生成される発話の多様性の改善

VHCR

[Park+ 18]では、VHREDに対話全体の潜在変数である  z^{conv} を追加したVHCRモデルとUtterance Dropテクニックを元に、より潜在変数を考慮した対話の生成が行える方法を提案しています。

 
\begin{align}
h^{conv} &= ConvEncoder(all\_dialogue) \\
z^{conv} &\sim  Q_\phi(z | h^{conv}) \\
h_t^{UE} &= UtteranceEncoder(x)  \\
h_l^{CE} &= ContextEncoder(h_{l-1}^{CE}, h_t^{UE}, z^{conv}) \\
h_{t+1}^{UE} &= UtteranceEncoder(y) \\
z &\sim Q_\phi(z | h_{t+1}^{UE}, h_l^{CE}, z^{conv}) \\
P_\theta(y | x, C) &= Decoder(z, h_l^{CE}, z^{conv}) \\
\end{align}

 z^{conv}は全ての対話データから事後分布を元に推定され、コンテキストエンコーダーおよびデコーダーで使用されます。

f:id:KSKSKSKS2:20191224121827p:plain
[Park+ 18]より

変分下限は論文中には明記されていませんが、下記のようになります。


\begin{align}
L(y, C, z) &= E_{z^{conv}\sim Q_\phi(z^{conv} | all\_dialogue)}[E_{z \sim Q_\phi(z | y, C, z^{conv})}[ log P_\theta(y | C, z, z^{conv}) ] - KL[Q_\phi(z | y, C, z^{conv}) \parallel P_\theta(z | C, z^{conv})]] \\
&- KL[Q_\phi(z^{conv} | all\_dialogue) \parallel P(z^{conv})]
\end{align}

Utterance Dropは、コンテキストエンコーダーにわたす h_t^{UE}をランダムに事前定義済みのUnknown Vectorに変更することにより、 z^{conv}をもとにシステム発話文が生成されることを狙うテクニックです。

この二つの改良により、VHCRは発話一つずつではなく、対話全体を一つの潜在変数によりコントロールすることを試みており、実験では、 z^{conv}をもとに対話全体を実際にサンプリングすることができることを示しています。

CVAE+VAE

[Shen+ 18]では、KL項が消失してしまう問題の原因を、潜在変数の表現力が正規分布に制限されてしまうことであると考え、VHREDにAAE(Adversarial Auto-Encoder)[Makhzani+ 16]を応用し、潜在変数 zがより多様な形を取りうるように改良した手法です。

AAEはVAEのKL項をGANのスキームに置き換えることにより、多様な分布を事前分布として仮定できるようにした枠組みですが、[Shen+ 18]ではGANをさらにCVAEに置き換えることにより、コンディショナル情報も踏まえた上で、事前分布と事後分布を比較する枠組みに改良した手法を提案しました。

f:id:KSKSKSKS2:20191223163832p:plain
[Shen+ 18]より

上図のM1はほぼVAEと等価な構成で、対話履歴とシステム発話文yをエンコードした情報から、システム発話文yを再構成するようにパラメーターを最適化します。

VAEとの大きな違いは、(1)潜在変数を直接サンプリングするのではなく \epsilonという緩衝材となるパラメーターを用いて決める点と、(2) \epsilonを潜在変数に変換するモデル G _ \phi(\epsilon)はすでに学習済みのものを使用するという点、(3)KL項はM2モデルで別途最適化を行うという点です。


\begin{align}
\tilde{z} &= UtteranceEncoder(y) \\
z  &= (1 -p) G_\phi(\epsilon) + p \tilde{z} \\
L_{M1}(y, z, C) &= E _ {z \sim Q _ \phi(z | \tilde{z}, C)}[ log P _ \theta(y | z, C) ] \\
\end{align}

 \epsilonを潜在変数に変換するモデル G _ \phi(\epsilon)は、上図のM2に当たるCVAEパートにより学習を行います。対話履歴のみから \epsilonを推定する事前分布 P _ \theta(\epsilon | C)と、システム発話文yの情報も利用して \epsilonを推定する事後分布 Q _ \phi(\epsilon | \tilde{z}, C) の出力が近づくように学習を行います。

また、発話エンコーダーがシステム発話文 yエンコードしたベクトル \tilde{z}を、 \epsilonから再構成できるように学習することにより、事前分布の形状によらない潜在変数を対話履歴のみから得ることを試みます。


\begin{align}
&\tilde{z} = UtteranceEncoder(y) \\
&L_{M2}(\tilde{z}, C, \epsilon) = E_{\epsilon \sim Q_\phi(\epsilon | \tilde{z}, C)}[ log P_\theta(z | C, \epsilon) ] - KL[Q_\phi(\epsilon | \tilde{z}, C)  \parallel P_\theta(\epsilon | C)] \\
&E_{\epsilon \sim Q_\phi(\epsilon | \tilde{z}, C)}[ log P_\theta(z | C, \epsilon) ] = \frac {1} {2} E_{\epsilon \sim Q_\phi(\epsilon | \tilde{z}, C)}[ \parallel \tilde{z} - G _ \phi(\epsilon) \parallel_2^{2} ]
\end{align}

[Shen+ 18]では、M1モデルとM2モデルの学習交互に行うことにより、事前分布と事後分布の形状が近接するようになること、自動評価でも既存手法と比較して良い性能を得られることを示しました。

DialogWAE

[Gu+ 19]で提案されたDialogWAEは、上記の[Shen+ 18]が検討したより自由な事前分布を対話応答生成に適用するという発想を、別のアプローチを用いてCVAEベースのモデルに適用した手法です。

[Tolstikhin+ 18]で提案され、[Zhao+ 18]でラベル情報も利用するように拡張された、Wasserstein Auto-Encodersの枠組みを使用することにより、事前分布を複数のモードを表現できるガウス混合分布として表現できるようCVAEを拡張しています。

Wasserstein Auto-Encodersでは、Wasserstein GANの式を利用してVAEの潜在変数を最適化するというAAEを拡張したような手法で、自由度の高い潜在空間から潜在変数をサンプリングすることを試みています。

f:id:KSKSKSKS2:20191223172207p:plain
[Gu+ 19]より

オリジナルのWasserstein Auto-Encodersでは、事後分布からは特にサンプリングは行わず、エンコーダーが変換した値をそのまま潜在変数として使用しますが、[Gu+ 19]ではエンコーダーが変換した値をもとに事後分布 Q _ \phi(\epsilon | y, C)のパラメーターを推定し、そこからサンプリングした値をさらにニューラルネットワーク G _ \phi(\epsilon)で変換したベクトルを潜在変数 zとして用いるような構成になっています。


\begin{align}
\epsilon &\sim Q _ \phi(\epsilon | y, C) \\
z  &= G_\phi(\epsilon) \\
L_{rec}(y, z, C) &= E _ {z \sim Q _ \phi(z | y, C)}[ log P _ \theta(y | z, C ] \\
\end{align}

KL項に当たる部分は、Discriminatorとのmin maxゲームで最適化します。具体的には下記の L _ {disc}を最小化するようにパラメーター \psiを、最大化するようにパラメーター \theta \phiを学習します。


\begin{align}
\epsilon &\sim Q _ \phi(\epsilon | y, C) \\
z  &= G_\phi(\epsilon) \\
\tilde{\epsilon} &\sim P _ \theta(\epsilon | C) \\
\tilde{z}  &= G_\theta(\tilde{\epsilon}) \\
L_{disc}(y, C, z, \tilde{z}) &= E_{z \sim Q _ \phi(z | y, C)}[ D_\psi(z) ] - E_{\tilde{z} \sim P _ \theta(z | C)}[ D_\psi(\tilde{z}) ] \\
\end{align}

また事前分布には、Gumbel-Softmax[Jang+ 17]を応用して、一つの値のみが1、それ以外はほぼ0となるような重み係数 v _ kを取得することにより、ガウス混合分布を仮定し、対話履歴によりサンプルに利用されるガウス分布が変更されるように学習することを試みています。


\begin{align}
P _ \theta(\epsilon | C) = \sum_{k=1}^{K} v_k N(\epsilon; \mu_k, \sigma_k^2 I)
\end{align}

実験では、事前分布の形状によらずとも、コンテキストに則した文が生成されやすくなるという方向で、生成されるシステム発話文の多様性が大幅に向上することが示されています。

また、事前分布をガウス混合分布とした際には、構成する正規分布のうち特定の正規分布を使用して生成される応答が、肯定よりか否定よりかといったような、別々のモードの文が生成されることが可能せることを示しました。

ユーザーの特性を考慮した応答文生成への応用

発話するユーザーを指定して、応答を生成したいというケースに対して、Seq2Seqベースの手法は複数提案されており、比較的初期の手法である[Li+ 16]では、デコーダーに毎ステップ発話するユーザーの情報を与えることにより、指定するユーザーによって生成される応答を変更できることを示しています。

[Bhatia+ 17]では、[Li+ 16]の手法を拡張し、ユーザーを示す埋め込み表現を、SNSソーシャルグラフから取得するnode2vecをもとに生成したものを使用する手法が提案されています。

[Luan+ 17]では、デコーダーをSeq2SeqとAutoEncoderで共有し、次の発話の予測と元の発話の復元を同じデコーダーを使用して行うことにより、対話以外のデータからも、ユーザーに特徴的な発話を学習できる手法を提案しました。

現在では、これらのベーシックな手法をCVAE系のモデルに応用したものが、複数登場しています。

SSVN

[Chang+ 19]で提案されたSSVN(Semi-Supervised Stable Variational Network)は、[Zhao+ 17]で提案されたkgCVAEを拡張し、ダイアログアクトの代わりに、対話履歴に含まれる以前のシステム発話を元にVAEを用いて生成したユーザーベクトルをと使用し、発話するユーザーに合った発話応答を生成しようというものです。

f:id:KSKSKSKS2:20191223180929p:plain
[Chang+ 19]より

ユーザーベクトル z^{replier}は、対話履歴 Cのうち、 replier(ようするにシステム)が発話した履歴のみ C^{replier} = \{ c _ 2^{replier}, c _ 4^{replier}, ..., c _ L^{replier} \}を入力として、それを復元するVAEの潜在変数として構築されます。


\begin{align}
L_{VAE}(z^{replier}, C^{replier}) &= E _ {z^{replier} \sim Q _ \phi(z | C^{replier})}[ log P _ \theta(C^{replier} | z^{replier}) ] \\
&- KL[Q _ \phi(z | C^{replier}) \parallel P(z) ] \\
\end{align}

CVAEパートは、上述のように、kgCVEのラベル情報をユーザーベクトルに変えたものと考えることができ、下記のように変分下限を定式化できます。この二つの変分下限が最大になるように、パラメーターを最適化していきます。これにより、以前のシステム発話を通常のCVAE以上に考慮した応答生成が行われることを試みます。


\begin{align}
z^{replier} &\sim Q _ \phi(z | C^{replier}) \\
L_{CVAE}(y, C, z, z^{replier}) &= E_{z \sim Q_\phi(z | y, C, z^{replier})}[ log P_\theta(y | C, z, z^{replier}) ] \\
&- KL[Q_\phi(z | y, C, z^{replier}) \parallel P_\theta(z | C, z^{replier})] \\
\end{align}

もう一点特徴的なのは、各事前分布および事後分布の確率分布としてvon Mises-Fisher分布を仮定しているところです。

von Mises-Fisher分布を用いたVAEは、[Kingma+ 14a]で提案されているベーシックなReparameterization Trickでは対応することはできませんが、[Naesseth + 17]で提案されている棄却サンプリングを応用してノイズ項をサンプリングするアプローチを用いることにより、VAEにおいて使用することができるようになります(余談ですが、Reparameterization Trickの幅広い分布への応用は、[Figurnov+ 18]などでより高速な手法が提案されるなど、こちらも年を追うごとに使い勝手が良くなっていっています)。

[Chang+ 19]では、[Naesseth + 17]が提案したアプローチを、von Mises-Fisher分布に応用した[Davidson+ 18]と[Xu+ 18]のアプローチを踏襲しています。von Mises-Fisher分布を使用したVAEは、定式化によってはKL項の値を定数にすることができるため、潜在変数にデコーダーが使用する情報を格納しやすくなる点がメリットとなります。

実験では、以前までのシステム発話をより考慮しやすくなったため、既存手法と比較して大幅に生成される文の多様性が大幅に向上し、対話履歴内の以前の発話にも合った表現で文が生成されるようになることが示されています。

VHUCM

[Bak+ 19]で提案されたVHUCM(Variational Hierarchical User-based Conversation Model)は、[Park+ 18]が提案したVHCRを、対話中の二人のユーザーベクトルをコンディショナル情報として z^{conv}を生成すように、二重のCVAEを使用するように改良した手法です。

f:id:KSKSKSKS2:20191223183251p:plain
[Bak+ 19]より

ユーザーベクトルは、[Bhatia+ 17]でも使用されているSNSソーシャルグラフを元にnode2vecを用いたもの使用することにより、ユーザーおよびユーザーの組み合わせにより、発話内容が変更されることを試みます。

 
\begin{align}
h^{conv} &= ConvEncoder(all\_dialogue) \\
z^{conv} &\sim  Q_\phi(z | h^{conv}, u^a, u^b) \\
h_t^{UE} &= UtteranceEncoder(x)  \\
h_l^{CE} &= ContextEncoder(h_{l-1}^{CE}, h_t^{UE}, z^{conv}) \\
h_{t+1}^{UE} &= UtteranceEncoder(y) \\
z &\sim Q_\phi(z | h_{t+1}^{UE}, h_l^{CE}, z^{conv}, u^{s_t}) \\
P_\theta(y | x, C) &= Decoder(z, h_l^{CE}, z^{conv}) \\
\end{align}

実験では、リファレンス文と生成される文の一致度合いが向上すること、対話ペアによって同じ質問でも受け答えの意味が変化することを示し、事前学習済みの情報をコンディショナル情報として使用することにより、生成する文の内容をうまく制約できるようになることを示しています。

まとめ

この記事では、Seq2Seqの応用から進化してきたEnd2Endな対話応答生成タスクについて、特にVAE/CVAEを応用した手法に注目して、その変遷、および模索されている方向性について紹介しました。

VHREDなどのCVAE派生手法の登場で、基本のアーキテクチャについては落ち着いてきているものの、VHREDで実現できないレベルでの更なる発話文の多様性の追求や、実用上重要となる発話内容のコントロールを行うための方法が検討されている状況です。

いずれのアプローチも、構造が複雑化してきており、データセットの分量やパラメーターの最適化の難易度も考えると、思っている以上に難しい定式化になっていそうというのが正直な感想です。

また、以前の記事でも書きましたが、対話応答生成の分野にて自動評価指標が確立されていないという問題の弊害が非常に大きく、レポートされている数字だけでは、実際にどれくらい改善されているのか、どのように改善されているのかがイマイチつかみづらいのが現状です。

一方で、同じEnd2Endな対話システムでも、Knowledge Baseや文書を参照しながらマルチターンな質問応答に答えるようなシステムは、この記事で紹介したものとはアーキテクチャが大きく異なり、Attentionを有効に活用し、正解部分を効率よく見つけて文を生成することが大きなモチベーションとなっています。

さらに、完全に文を生成するのではなく、部分的な構造を指定した上で文を生成する方法は近年注目を集めており、検索ベースのような生成とは全く違ったアプローチもまだまだ根強い人気があります。

どのようなアプローチがどのような条件下で適切なのか、対話応答生成だけでもややタスク設定が細分化してきているきらいもありますが、対話以外の分野、機械翻訳や文書要約、画像キャプション生成なども含めて、これからも追っていければと思います。

参考文献

全体

Seq2Seq

VAE

End2End Dialogue Response Generation

User-based Dialogue Response Generation