# 質問・応答集からの文選択による 雑談対話システムの学習

太刀岡勇気

デンソーアイティーラボラトリ

ytachioka@d-itlab.co.jp
## 1 はじめに

ユーザからの質問に応答するチャットボットのよ うな対話システムでは，大量の質問・応答ペアを用意してユーザの質問と用意した質問との類似度に 基づいて対応する応答を選択する用例ベースの手法がよく利用される [1]. 近年ではこのような方法 がある程度実用化されてきたことから, 質問・応答 だけでない，雑談のような，より難しい非タスク指向型対話システムの研究も盛んである. その場合, ルールを記述することはほぼ不可能であり, ユーザ の発話は予見不能であることから，すべての対応関係を収集することは難しい. そこで seq 2 seq の手法 [2] が良く用いられる. seq2seq は, ユーザの発話に 対するシステムの応答を翻訳問題として結びつけ るもの [3] であり, どのようなユーザ発話に対して も応答を生成できるという利点がある一方で, 学習 に大量のペアデータが必要であるという問題もあ る. 大量のテキストデータが利用可能な資源として は, twitterや『おーぷん 2 ちゃんねる対話コーパス [4]』がある．ただし，これをそのまま対話エージェ ントの応答生成に適用しようとすると, 文のスタイ ルが適さない点が問題になる1). 対話エージェント には, 特に商用に用いる場合, ある程度フォーマル で丁寧な応答が求められるからである.

これに対して，「Yahoo!知恵袋」等の質問・応答集 を使うと，丁寧に書かれていることが多いため，ス タイルの問題は起こりにくい. さらに, すでに集め てある質問・応答集の再利用ができる.しかし, 質問・応答ともに長文であることが多いため, seq 2 seq の学習が難しいことに加え, 生成される応答が長 すぎるという問題がある. 例えば後に示すように 『Yahoo!知恵袋』では, 100 文字程度の回答が多い が，音声での対応を考えた場合，エージェントが 1

1）特に後者では独特の関西弁風のスタイルが問題となる.

\author{
欅惇志 \\ デンソーアイティーラボラトリ \\ akeyaki@d-itlab.co.jp
}

分間に話せるのは 300 文字程度なので, 100 文字発話するのには 20 秒程度かかる. 質問に対する必要 な情報提供であれば適切な長さであるが，雑談とし ては応答が 20 秒続くとかなり長く感じられる。ま た, 現状の seq 2 seq 方式での生成では, それだけの 長文を理路整然とさせるのは難しい．意味不明な文 や自己矛盾した文が生成される可能性も高く, これ はユーザの満足度を著しく低下させる．そこで，質問・応答集に対して適切な文選択を行い，ペアデー タを短い文で構築することで，この問題を解決する ことを試みる。選択法はいくつか考えられるため, ここでは可能な選択法を 7 種に関して, seq2seqに よる応答文生成のパープレキシティと生成された応答文長の変化を検討した。

## 2 seq2seq に基づく応答生成

## 2.1 手法概要

翻訳での成功 [2]を受けて，対話でもソース (src) からターゲット $(\mathrm{tgt}) へ の$ 変換をニューラルネット で直接学習する seq2seq に基づく応答生成 [3] が用 いられてきており, 雑談応答生成への適用も行われ ている [5, 6]. 通常入力は文字単位ではなく, 単語 やそれに類するまとまりの単位とする。いくつかの 方式が提案されているが，ここでは opennmt[7] で使 われている固定次元の埋め込みべクトルに基づき LSTM で encode-decode する方式を採用した.

## 2.2 係り受け解析による冗長箇所の除去

seq2seqによる応答文には, 応答が相槌のような無難なものになりやすいという問題が指摘されている [5, 6]. また同一の語句の繰り返しが多くみられると いう問題がある ${ }^{2)}$. 例えば「ステーキのステーキは,肉が柔らかくて美味しいですよね」というような過
応答文に繰り返しが増える傾向がみられた。
度に壳長な文が頻繁に生成され, これがユーザの満足度を著しく低下させる．そこで，係り受け解析を 行い, 係元が係先と同じ名詞を含む場合は係元を削除することで冗長箇所を除去することとする．先の 文に対しては，「ステーキの」が「ステーキは」にか かっているので，「ステーキの」を削除する。

## 3 質問・応答集からの文選択

提案法では，質問・応答集を「．?」で文に分割 し，そこから対象の文を選択することで，情報をな るべく失わずに，ぺアの文の長さを短くする．文選択には，以下の 7 種を検討した。

1. allpairs: 質問文と応答文の全組み合わせ

2. crosspairs: 質問文と応答文のはじめの文と終わ りの文の最大 4 通りの組み合わせ

3. crosspairs2: 質問文と応答文のはじめの文とは じめの文，質問文の終わりの文と応答文のは じめの文の最大 2 通りの組み合わせ (下に示す first-first と last-first の組み合わせ)

4. longest: 最大の文字数の文同士の組み合わせ

5. last-first: 質問文の終わりの文と応答文のはじめ の文の組み合わせ

6. first-first: 質問文と応答文のはじめの文とはじめ の文の組み合わせ

7. first-first \& longest: first-first と longest の組み合 わせ

allpairs は, すべての組み合わせを考えるもので, 例 えば質問・応答のペアが $\operatorname{src}$ が 2 文, tgt が 3 文か らなる場合, この 1 ペアから $6(=2 \times 3)$ 通りのペア データを作成する．質問文と応答文に関しては中間 の文はあまり重要ではなく, はじめの文と終わりの 文が重要であると考えられる 3$)$ ので，それらの組み 合わせをとる crosspair と, 応答文についてははじめ の文のみを追加した crosspair2 を検討した ${ }^{4)}$. また 短い文は挨拶や「ありがとうございます」のように 情報が少ないことが多いため, 最大の長さの文を 組み合わせる方法も考えられる (longest). さらには crosspair2を別々にした last-first と first-first を検討し

3）特に質問文に関しては，はじめの文で「〜は〜ですか」の ように質問したあとで「ちなみに〜です」のように補足を行 う場合 (はじめの文が重要) と,「16歳です。～は〜ですか」の ように自分の前提を述べた後に質問する場合 (終わりの文が 重要) の 2 種類が典型的である.

4）応答文に関しても「通りすがりのものです. 〜です」のよ うに，はじめの文に情報がない場合もあるが，質問文よりは はじめの文が重要である比率が高いため, 応答文に関しては, はじめの文だけとした場合も検討した。
た。また first-first と longestを組み合わせた方法につ いても検討した。 3 手法 (first-first,last-first,longest) 以外はぺア数を増やすことができるため，学習データ を拡大する効果も得られる可能性がある.

## 4 実験

## 4.1 実験条件

seq2seq は大量のペアデータから学習する必要が あるため, ベースのモデルは『おーぷん 2 ちゃんね る対話コーパス [4](以下 open2ch)』を用いて構築し た $^{5)}$. ベースモデルの学習後, 質問・応答集でファ インチューニングする．質問・応答集には，『現代日本語書き言葉均衡コーパス (以下 bccwj) [8]』に含 まれる「Yahoo!知恵袋 (OC)」を利用した。OC から 差別や性的な内容等を含む不適切な文を除外するた め, [4] で行われているフィルタリング処理を行い,最終的に 5.4 万ペアが得られた. さらに, slack 上で 収集した『テキスト雑談コーパス (以下 slack) $[9,10] 』$ を用いた。発話ぺア数は 1.4 万と少ないが，丁寧な 口語調のデータである. 表 1 に学習に用いたペア数 と平均文字数を示す. open2ch に比べると, bccwj と slack のペア数がかなり少ないことと, 文長が 3～4 倍程度とかなり長いことがわかる。

opennmt [7] を用いて seq2seq モデルを構築した.前処理に sentencepiece[11] を用いて 16,000ピースに より，文を分割した。これを 500 次元の埋め込みべ クトルに変換し，LSTM2 層により encode し， LSTM と attentionを用いて decodeを行う。ビームサーチに より最終的な応答文を得る. open2ch の学習は 20 万回6)繰り返し行った.これに対して, 7 万回 open $2 \mathrm{ch}$ で学習したモデルを初期モデルとして, 学習率を 低減させて bccwj+slack により最大 5 万回ファイン チューニングを行う. 提案の文選択を行った場合を 同じく表 1 の 3 段目に示す. longestを除き, open2ch とほぼ同等な平均文長を得ることができた 7 ) $。$ また 異なる組み合わせを利用することでぺア数を増やす ことができている．ただし(特に allpairs では)，異 なる質問に対して同一の応答が対応する，あるい は，同一の質問に対して異なる応答が対応する例が 多い.

5）「サンガツ」「ワイ」等の open2ch に特有ないくつかの表現 は，「ありがとう」「私」などの対応する語句と置き換えた。

6）エポックではなく, バッチ単位での繰り返し数である.

7）応答文は若干長い。
表 1 学習とテストに用いたぺア数と平均文字数. 検証 データは別に用意

図 1 open2ch データベース学習時のパープレキシティ

## 4.2 結果 (パープレキシティでの比較)

図 1 に, open2ch で学習した際のパープレキシ ティを示す8)，学習 (train), 検証 (valid), テスト (test) のすべてで繰り返しに伴い単調に減少している.

図 2 には，質問・応答集 (bccwj+slack) でファイン チューニングした際のパープレキシティを示す. 検証は各手法に合わせて文選択を行ったもので評価 した。テストは文選択をしない bccwj+slack の 1,999 ペアで行っているため, baseline のテストのみ学習 とマッチした条件で，それ以外はミスマッチな条件 になっている，そのため，すべての場合でテストの パープレキシティは baseline の場合に比べて悪化し ている.

個別にみると，まず，すべての組み合わせを使う

8）学習のパープレキシティは直近 1,000 回の平均を 1,000 回ご と, 検証とテストのパープレキシティはそれぞれ 1,000 回, 5,000 回ごとに測定した。以降も同一である.

図 2 質問・応答集 (bccwj+slack) でファインチューニング 時のパープレキシティ

allpairs は学習のパープレキシティも十分に低下せ ず最も悪い結果となった。これは上述の通り, 同一 の (異なる) 質問に対して異なる (同一の) 応答が対応することで学習がうまくいかなかったためと考 えられる. crosspairsに関しても同様の理由で学習 のパープレキシティが単調減少せず，期待された学習データ拡大の効果は得られなかった. 最も検証の パープレキシティが小さくなったのは, first-first の 1 万〜2 万回のファインチューニングを行った場合 であった. テストのパープレキシティでも first-first が最もよく，ミスマッチ条件にもかかわらず，マッ チ条件の baseline と近い值となっている. first-first に longest を足すと検証のパープレキシティは安定 したが，テストセットのパープレキシティは低下し

図 3 テストセット (bccwj+slack) の $\operatorname{src}$ に対して生成され た応答文の平均文字数

た。これから文選択は first-first が最もよいと考えら れる。

## 4.3 結果 (文長での比較)

図 3 に，テストセット (bccwj+slack) に対して生成された応答文の平均文字数を示す. テストセッ トは，表 1 に示した通り, src が 77.4 文字, target が 102.4 文字であった. 全体として, ファインチューニ ングの繰り返し回数によらず，ほぼ文選択法により 文長が決まっていることがわかる．個別にみると， baseline はかなり長く平均で 60 文字程度の応答を生成していた。それから longest, first-first_and_longest と続く.これらが平均で約 40 文字を超えている.一方，それ以外の方法では 40 文字以下となって いて, open2ch での文長と同等であり, first-first か crosspair2(first-first を含む) が最も文長が短くなって いる. first-first による文選択では，元の文の情報低下を抑えながら (パープレキシティは維持しなが ら)，文長を短くできているといえる。

## 4.4 結果 (応答例と几長箇所除去の効果)

雑談を想定したユーザ発話 (上記テストセットに は含まれない) に対する応答例を図 4 に示す. はじ めに述べた通り, open2chの応答はエージェントと してはふさわしくなく，これに限らず回答の多く が,「まじかよ $\cdots$, 「ありがとう!(もともとは「サン ガツ!」)」，「そうなんか」になってしまう． baseline はスタイルはよいが冗長な出力が出ている.ただし 「ステーキのステーキは，...」に関しては，壳長箇所除去を行うことでかっこ内の文に変換できた ${ }^{9)}$. 提

## \%open2ch

先週は神戸に行ったよ > まじかよ....

明日は何しよっか > おーぷん民

昨日はステーキを食べたよ > ありがとう!

ケーキを作ってみようと思って作り方を調べ た > そうなんか

## \%baseline

先週は神戸に行ったよ> 神戸に行ったことない なあ

明日は何しよっか > 明日に備える

昨日はステーキを食べたよ>ステーキのステーキ は，肉を食うのが一般的です (=ステーキは，肉を食 うのが一般的です)

ケーキを作ってみようと思って作り方を調べ

た>ケーキやケーキ，ケーキ，ケーキ，お菓子，

( ...ケーキ，お菓子を繰り返す)

## $\%$ first-first

先週は神戸に行ったよ > 私も神戸に行ったことが あります

明日は何しよっか $>$ 明日休みます

昨日はステーキを食べたよ > 私はステーキを食べ ます

ケーキを作ってみようと思って作り方を調べ た > ケーキを作るのは簡単ですね

図 4 ユーザ発話 ('>’ の左) に対する生成された応答 ('>’ の右) の例

案の first-first は, 短い文で比較的適切な応答を返せ ている.

## 5 まとめと今後の課題

雑談対話システムの学習に，大量のデータがある 質問・応答集を利用する場合，文長が長いためモデ ルの学習が難しく，生成される文が長くなりすぎる という問題があるため，文選択を行うことで文長を 制限する方法を提案した. 7 種の異なる文選択法を 検討した結果，はじめの文同士を組み合わせたもの が最もパープレキシティが低く，文長も短くできる ことがわかった.今回は比較的単純な方法で文選択 を行ったが，今後，重要文の推定に基づき，主題と なる文の選択を行った場合との比較を行う予定で ある.


## 参考文献

[1] 東中竜一郎, 稲葉通将, 水上雅博. Python でつくる対話システム. オーム社, 2020.

[2] Ilya Sutskever, Oriol Vinyals, and Quoc V. Le. Sequence to sequence learning with neural networks. In Proc. NIPS, 2014.

[3] Oriol Vinyals and Quoc V Le. A neural conversational model. In Proc. ICML, 2015

[4] 稲葉通将. おーぷん 2 ちゃんねる対話コーパスを用 いた用例ベース対話システム. 第 87 回言語・音声理解と対話処理研究会 (第 10 回対話システムシンポジ ウム), 人工知能学会研究会資料 SIG-SLUD-B902-33, pp. 129-132, 2019.

[5] Jiwei Li, Michel Galley, Chris Brockett, Jianfeng Gao, and Bill Dolan. A diversity-promoting objective function for neural conversation models. In Proc. NAACL-HLT, pp. 110-119, 2016.

[6] 高山隼矢, 荒瀬由紀. Distant supervision を用いた情報量を制御可能な雑談応答生成. 言語処理学会第 26 回年次大会 発表論文集, pp. 323-326, 32020.

[7] Guillaume Klein, Yoon Kim, Yuntian Deng, Jean Senellart, and Alexander M. Rush. Opennmt: Open-source toolkit for neural machine translation. In Proc. ACL, 2017.

[8] Kikuo Maekawa, Makoto Yamazaki, Toshinobu Ogiso, Takehiko Maruyama, Hideki Ogura, Wakako Kashino, Hanae Koiso, Masaya Yamaguchi, Makiro Tanaka, and Yasuharu Den. Balanced corpus of contemporary written japanese. Language Resources and Evaluation, Vol. 48, No. 2, pp. 345-371, 62014.

[9] Hiroshi Tsukahara and Kei Uchiumi. System utterane generation by label propagation over association graph of words and utterance patterns for opendomain dialogue systems. In Proc. PACLIC-29, 2015.

[10] 塚原裕史, 内海慶. 言い換えを利用した対話行為推定 の汎化性能向上. 言語処理学会 第 22 回年次大会 発表論文集, pp. 87-90, 32016.

[11] Taku Kudo and John Richardson. SentencePiece: A simple and language independent subword tokenizer and detokenizer for neural text processing. In Proc. Empirical Methods in Natural Language Processing: System Demonstrations, pp. 66-71, Brussels, Belgium, 11 2018. Association for Computational Linguistics.

[12] 工藤拓, 松本裕治. チャンキングの段階適用による 日本語係り受け解析. 情報処理学会論文誌, Vol. 43, No. 6, pp. 1834-1842, 2002.
 太刀岡勇気  デンソーアイティーラボラトリ  ytachioka@d-itlab.co.jp 