こんにちは。東京大学大学院 情報理工学系研究科 コンピュータ科学専攻 修士1年の櫻井大雅と申します。8月8日から9月16日の6週間、LINE株式会社の2022年度夏季インターンシップの「技術職 就業コース」に参加させていただきました。このレポートでは、NLP開発チームで私が取り組んだ内容について説明します。まず、基盤モデルを活用した対話システムにまつわる問題について紹介したのち、それを解決するために本インターンで何に取り組んだかを述べます。
背景
膨大なパラメータを大量のテキストで学習し、高い汎化性能によって様々な下流タスクに応用可能な基盤モデルは、自然言語処理の分野において重要性を増しています。LINEとNAVERも、日本語に特化した大規模な汎用言語モデルを内包するシステム群であるHyperCLOVAを共同開発しています。このHyperCLOVAをベースとした対話システムは様々なジャンルに関する自然な文章を生成することが可能で、広範囲の話題に対応できます。昨年度の対話システムライブコンペティションでも、LINEのNLP開発チームはHyperCLOVAを用いた対話システムによって、自由に雑談を行う「オープントラック」と、決められたシナリオに沿って話を展開する「シチュエーショントラック」の両方で1位を獲得し、非常に人間らしい会話が可能であると実証しています。
昨年のシチュエーショントラックは、システムが部下、ユーザーが上司の役割を与えられ、苦手な部下が同席する飲み会に参加するのを渋る上司を、システムが演じる部下があの手この手で誘い続ける、という内容でした。対話システムの評価は、「どれくらいシチュエーションに適しており、かつ、人らしい会話か」という一つの評価軸で行われます。シチュエーショントラックで繰り広げられた、実際の会話の一部分をお見せします。以下の対話はシチュエーションに沿った自然なやりとりが展開されており、評価者から高い評価を得ることができています。
話者 |
発話 |
---|---|
システム |
湯川さん、お疲れ様です🤗 来週末にオンライン飲み会を企画しているんですが、よろしければ湯川さんも参加されませんか? |
ユーザー |
楽しそうだな |
システム |
もちろんです!他にも同期のみんなが参加する予定です! |
ユーザー |
でも週末か... |
システム |
何かありましたか? |
ユーザー |
都合がな... |
システム |
大丈夫ですよー!全然気にしないでください! |
ユーザー |
いや、都合がつかないんだ |
システム |
そうですか...。でもやっぱり少しでも顔を出していただけると嬉しいです! |
ユーザー |
俺もそう思ったんだけど、難しいな |
システム |
そこをなんとか、、 |
ユーザー |
ちなみに、誰が参加するんだ? |
システム |
えっと、佐藤さん、鈴木さん、高橋さん、渡辺さん、小林さんです。 |
ユーザー |
そうか、俺がいなくても楽しめそうなメンツじゃないか |
システム |
まぁたしかにそうかもしれませんけど、せっかく集まる機会なので出来るだけ多くの人に集まってもらいたいんです! |
ユーザー |
わかるが、俺も予定が埋まっててな |
システム |
その予定キャンセルできませんか? |
ユーザー |
ちょっと難しいな。悪いけど。 |
システム |
え〜、本当にダメですか? |
一方で、評価者の評価が高くなかった会話もありました。その原因の一つに、システムがシチュエーションの話題から外れてしまう問題がありました。以下の会話では自然なやりとりが行われていますが、システム側発話の太字下線部分で示された部分では、飲み会に関する話題から離れた発話がなされていて、それに対するユーザーの発話を受けてシステムがさらに話を深掘りすることで、「飲み会に誘う」シチュエーションに適さない会話が展開されてしまっています。
話者 |
発話 |
トピック |
---|---|---|
ユーザー |
オンラインでも面白かったよ。元々飲み会好きだし。 |
飲み会 |
システム |
なるほどー。やっぱり盛り上がりましたか? |
飲み会 |
ユーザー |
オンライン飲み会もアリだと思ったね。 |
飲み会 |
システム |
楽しそうですね!あと他にも何かありましたか? |
飲み会 |
ユーザー |
別にないよ。 |
飲み会 |
システム |
特にないんですか?なんか色々聞きたかったのにな。 |
飲み会 |
ユーザー |
次回のメンバーはどんな感じ? |
飲み会 |
システム |
そこをなんとか、教えていただけませんか? |
飲み会 |
ユーザー |
何を知りたいの? |
飲み会 |
システム |
えっと、例えば女性陣はいるのかとか、男性陣の中で気になる人はいるのかとか、その辺詳しく聞かせて欲しいです! |
飲み会? |
ユーザー |
好きな人ってこと? |
恋愛? |
システム |
まあざっくり言うとそういう事ですかね。 |
恋愛 |
ユーザー |
好きな人はいないし男性陣で気になる人とかいないよ。どういう意味? |
恋愛 |
システム |
え?いないんですか?てっきりモテるものだと思ってました。 |
恋愛 |
ユーザー |
モテないモテない |
恋愛 |
システム |
あー、なるほど。ちなみにどんなタイプの女性が好きなんですか? |
恋愛 |
ユーザー |
好きになった人がタイプだよ。 |
恋愛 |
システム |
なんか大人っぽい回答ですね笑 |
恋愛 |
こうした状況を避けるためには、ユーザーの発話を受け取った際にそれが何のトピックであるかを判別し、それに応じて対話システムのリアクションを変える必要があります。例えば上記のようなやりとりでは、システムが発話する「ちなみにどんなタイプの女性が 好きなんですか?」や、ユーザーの「好きな人ってこと?」といった発話が「恋愛」に関する話題であると判断し、その方向性で話を展開しないようにシステム側の発話トピックをコントロールする必要があります。そこで本インターンシップでは、発話からトピックを推定するトピック分類器を実装し、HyperCLOVAが生成した実際の対話データを用いてその評価を行いました。
手法
発話からトピックを推定する全体像を以下に示します。まず、トピック分類器を用いて、発話がトピックに属する確率を予測します。そして、予測確率がある閾値を超えたものを、発話のトピックとして採用する流れになります。以下では、トピック分類器と閾値のフィルターについて説明を行います。
トピック分類器
トピック分類器について説明します。分類器の作成に際し、東北大学が公開している日本語BERTモデル(cl-tohoku/bert-base-japanese-v2)をファインチューニングするアプローチを取ります。学習データとしてはQ&Aサービスに投稿された質問文を利用します。その理由としては、他に利用可能な資源と比較して以下のような特長があり、会話のトピック分類に適していると考えたためです。
- カテゴリが網羅的に付与されているデータがあまりない中で広範な分野をカバーし、かつその分け方が整っている
- 同じようにカテゴリが付与されたデータである新聞記事と比較して、話し言葉により近い
- どの話題に関する質問であるのかが分かるような語が質問文に含まれている
Q&Aサービスのデータセットを利用する際に、カテゴリの分類について再考しました。Q&Aサイトでは質問に1つの小カテゴリが付与されており、その小カテゴリは上位の中カテゴリや大カテゴリに包含されています。例えば以下の図のように、「サッカー・フットサル」という小カテゴリは、その上位にある中カテゴリの「スポーツ・フィットネス」に包含されており、中カテゴリの「スポーツ・フィットネス」はさらにその上の「趣味・娯楽・エンターテイメント」に包含されています。
小カテゴリの具体例としては、「テニス」や「登山・キャンプ」、「お菓子・スイーツ」などがありますが、中にはカテゴリの区分が広すぎて曖昧なものや、他のカテゴリと内容がかなり重複するカテゴリがあり、文章が期待するカテゴリに上手く分類できないことが懸念されます。また、質問の数が少なく、十分な学習データを確保できない小分類もあるため、現状ではそういったものは分類先のカテゴリとしては用いないようにする必要があります。そこで今回は、必要なカテゴリの選定を行なって分類しやすくしました。今回は、215の小カテゴリを選び、それぞれ200件から800件程度の質問文を集め、合計で159004件の質問を用いた訓練用データセットを作成しました。
また予備実験を行った際に、手元にある小カテゴリでは分類しきれないケースが少なくないと判明したため、大カテゴリの予測も行うモデルと併用することにしました。大カテゴリのカテゴリ数は14であり、「趣味・娯楽・エンターテイメント」や「生活・暮らし」といったように、小カテゴリと比較して多くのトピックを包含する広いカテゴリになっています。
今回作成する分類器の具体的な動作例をお見せします。例えば、「私もビールの方が好きですね」という発話から、私たちは「ビール」や「お酒」といった単語を想起します。トピック分類器は先ほどの発話を入力として、全てのカテゴリに対してその発話がどれくらいの確率で分類されるかを計算し、以下のような出力を返すことが期待されます。
大カテゴリに対する予測トップ3:「生活・暮らし」が0.92、「趣味・娯楽・エンターテイメント」が0.04、「[地域情報] 旅行・レジャー」が0.01 小カテゴリに対する予測トップ3:「お酒」が0.98、「禁煙・禁酒」が0.01、「お茶・ドリンク」が0.005 |
閾値フィルター
大カテゴリ用・小カテゴリ用のトピック分類器を用いて、発話からトピックを分類した後で、果たしてその予測が本当に信頼できるかをチェックする機構が閾値フィルターです。例えば閾値を0.7に設定したとすると、小カテゴリの予測として「お酒」が0.98という高い確率で予測されているのであれば、0.7を超えているため最終的な予測として「お酒」が出力されます。逆に、「お酒」の予測確率が0.55などであった場合、0.7を超えていないので不採用とし、「分類なし」と見做します。
実際の対話では、「いいですね」や「そうなんですか」、「ありがとうございました」といったように、トピックが推定不能な発話が多々あります。また、小カテゴリが全ての話題を網羅できているわけではないため、どのカテゴリに分類するのが適切であるかが不明な発話もあります。そのように、一発話からトピックが判断できなかったり、分類すべきカテゴリが存在しないような発話に対してトピックの予測を立てないようにするために、予測確率がある決まった値を超えた予測結果のみを最終的な分類器の予測として採用する方針が良いと判断しました。実際、単なる相槌などそもそも発話にトピックが付与できないものや、予測するカテゴリの対象にないトピックに関する発話は、最も予測確率の高いカテゴリの確率が低くなる傾向があると予備実験で分かっています。
閾値を設定することで、予測確率は低いものの当たっていたはずの予測を取りこぼしてしまうおそれがありますが、それと同時に予測の確度を高められるメリットもあります。このバランスを取るために、適切な閾値を設定することが重要です。この閾値はアドホックに設定できるので、使う局面やニーズにおいて閾値を緩めてトピックを拾うことを優先したり、逆に厳格にすることで誤りを減らせます。
結果
Q&Aサービスの質問文での評価
まず、Q&Aサービスのデータセットを用いて訓練した分類器が、実際にQ&Aサービスの質問文のトピック分類に対して有効か否かを確認しました。それぞれの小カテゴリについて20例ずつテスト用データを集め、計4300件の質問文について小カテゴリ・大カテゴリの分類を行います。どれだけ予測が正解のラベルと一致していたかを示すAccuracyのマクロ平均は以下の表の通りであり、大カテゴリで0.836、小カテゴリで0.719を達成しました。
参考として、同じモデルを新聞の記事データで訓練した結果を示します。新聞記事には明確かつ正しいカテゴリが与えられていると考えられるため、分類器のベースラインを用意する目的で実験を行いました。今回利用したカテゴリは72カテゴリであり、それに対して実施した結果が以下の通りです。こちらのAccuracyは0.894でしたので、新聞記事の分類と比較してやや性能が落ちるものの、Q&Aサービス質問文のトピック分類が十分可能であると確認できました。
accuracy |
|
---|---|
Q&Aサービス 大カテゴリ, 14カテゴリ |
0.836 |
Q&Aサービス 小カテゴリ, 215カテゴリ |
0.719 |
(※参考記録)新聞記事, 72カテゴリ |
0.894 |
対話データでの評価
次は実際の対話について検証してみます。Q&Aサービスの質問文に比べて発話文の長さは短く、トピックに関連する語彙の数も質問文に含まれるものに比べると少ないため、分類性能が低下することが予想されます。第四回対話システムライブコンペティションのオープントラックにおいて、実際にLINEのNLP開発チームが作成した対話システムとユーザー間で繰り広げられた対話に対してカテゴリ予測を行いました。この対話には、相撲やオリンピック、映画や海外旅行といった様々なトピックが含まれています。
7人のユーザーとの対話について、ユーザー側の106発話に対してトピックが分類できるかを検証します。分類器が正しくトピックを分類できているかどうかは、NLP開発チームから評価者を募り、私含め3人の評価者の多数決で決定します。トピック分類の結果は、OK、CLOSE、NG、NONEの4種類で判断をします。
- OK:その発話のみからトピックが判別可能であり、かつtop-1の予測が妥当である。
- 例:「サッカーの話をしましょう」という発話に対し、小分類で「サッカー・フットサル」の予測が最も高い確率で予測されている。
- CLOSE:その発話のみからトピックが判別可能であり、 top-1は不正解だがtop-3の中に妥当なものがある。
- 例:「サッカーの話をしましょう」という発話に対し、小分類で「洋画」の予測が最も高い確率で予測されているが、二番目に高い確率の予測として「サッカー・フットサル」がある。
- NG:その発話のみからトピックが判別可能であり、かつtop-3の中に妥当なものがない。
- 例:「サッカーの話をしましょう」という発話に対し、小分類の予測トップ3が「洋画」「政治」「関東地方」となっており、「サッカー・フットサル」や「その他(スポーツ・フィットネス)」などの予測が立っていない。
- NONE:予測のいかんに関わらず、適当なトピックがその発話からは選べない。
- 例:「おはようございます」などのように、大分類・小分類の予測トップ3が何であろうと、発話からトピックが選べない。
結果は以下のようになりました。カテゴリを分類すべきものに関して着目するため、発話からトピックが推定できるOK、CLOSE、NGのみに着目します。トピック予測がどれだけ人間の評価と一致しているかについて以下では述べます。(3人の間で評価が割れたものに関しては除外しています。)
OK |
CLOSE |
NG |
合計 |
|
---|---|---|---|---|
大カテゴリ |
75 |
9 |
4 |
88 |
小カテゴリ |
53 |
18 |
4 |
75 |
大カテゴリは、トピックが判別可能な発話が88件ありました。そのうち75件(85.2%)は最も予測確率の高いカテゴリが正しいカテゴリであり、予測確率上位3カテゴリの中に正しいカテゴリが入っている割合に関しては84件(95.5%)となっていて、広いトピックに対する分類は大きく外すことはかなり少ないと分かりました。
一方、小カテゴリについては、トピックが判別可能な発話が75件ありました。そのうちの53件(70.7%)はtop-1の予測が正しいカテゴリに分類できており、top-3の予測の中に正しいカテゴリが入っている割合に関しては71発話(94.7%)となっていて、こちらも比較的高い精度で分類できていました。
実際の対話の例についてお見せします。以下にお見せするのはシステムと会話をするユーザーの発話の一部分ですが、分類器は「オリンピックの野球も良かったですよね」という発話に対し、大カテゴリでは「趣味・娯楽・エンターテイメント」、小カテゴリでは「野球」と予測できています。
一方で「是非一緒に観戦しましょう」という発話に対し、特に競技が指定されていないにも関わらず「サッカー・フットサル」を高い確率で予測してしまう誤りが発生していますが、これは履歴を考慮せず一発話のみからトピックを予測しているために生じた問題です。
また、「そうなんです。なかなか難しいですけどね」のように、トピックが特に定まらないような発話に対しては最も予測確率が高い予測であっても予測確率が低いため、閾値を設定することで最終的な予測結果として出力しないようにできます。すなわち、設定した閾値より下回っているために信頼度の低い予測であると見做すことにより、この発話にトピックがつけられないと判断できます。
話者 |
発話 |
大カテゴリ予測top-1, 予測確率 |
小カテゴリ予測top-1, 予測確率 |
コメント |
---|---|---|---|---|
ユーザー |
オリンピックの野球も良かったですよね |
趣味・娯楽・エンターテイメント, 0.99 |
野球, 0.97 |
「趣味・娯楽・エンターテイメント」や「野球」の予測確率が高く、正しくトピック分類ができている。 |
システム |
本当に面白かったですねえあの時は感動しましたよーあとテニスとかバレーボールなんかも人気ですよね |
- |
- |
|
ユーザー |
そうですね。いろいろな競技で感動しました。 |
趣味・娯楽・エンターテイメント, 1.0 |
その他(スポーツ・フィットネス), 1.0 |
|
システム |
やっぱりスポーツ観戦は楽しいですよね。これからも応援したいですねー |
- |
- |
|
ユーザー |
そうですね。来年のオリンピックも楽しみたいです。 |
趣味・娯楽・エンターテイメント, 0.96 |
その他(スポーツ・フィットネス), 0.96 |
|
システム |
はい!また一緒に盛り上がりましょう! |
- |
- |
|
ユーザー |
是非一緒に観戦しましょう |
趣味・娯楽・エンターテイメント, 0.99 |
サッカー・フットサル, 0.80 |
一発話しか考慮していないため、「サッカー・フットサル」に関する話題ではないのに、「サッカー・フットサル」が高い確率で予測されてしまっている。 |
システム |
普段はどのようなスポーツをするんですか? |
- |
- |
|
ユーザー |
普段はジョギングしたりハイキングしたりが多いです |
趣味・娯楽・エンターテイメント, 0.58 |
その他(ダイエット・フィットネス), 0.66 |
|
システム |
健康的ですね!ちなみに運動以外だと趣味などはあるんですか? |
- |
- |
|
ユーザー |
ガーデニングが趣味です |
生活・暮らし, 0.84 |
園芸・ガーデニング・観葉植物, 0.94 |
|
システム |
ガーデニングですか!素敵ですね〜植物育てるの難しいですけど、うまく育つと嬉しいですよね。 |
- |
- |
|
ユーザー |
そうなんです。なかなか難しいですけどね |
趣味・娯楽・エンターテイメント, 0.57 |
情報処理技術者, 0.24 |
「趣味・娯楽・エンターテイメント」や「情報処理技術者」は予測確率が低いので、適切な閾値を設けることで「トピック無し」と判断できる。 |
推論機能の提供
API構築
トピック分類器を作成したので、最後にこのモデルの推論機能を提供するAPIを作成します。LINEのプライベートクラウドであるVerda上にインスタンスを用意し、起動したAPIにリクエストを送ることで推論結果を取得します。Uvicornを用いてWebサーバを立ち上げ、APIを構築するためのフレームワークのFastAPIで作ったアプリケーションを動かす構成です。
例えば、上の対話例の最初の発話である「オリンピックの野球も良かったですよね」をクエリとして送ると、以下のようなレスポンスが返ってきます。以下のJSON形式のレスポンスには、大カテゴリと小カテゴリに関する予測がlarge_category_predとsmall_category_predという形でそれぞれ格納されており、予測確率とその上位3カテゴリが返却される形になっています。対話システムのトピック制御に応用するため、この機能を実際に対話システムに組み込むことが想定されます。
{
"whole_prediction": {
"large_category_pred": {
"prediction_top_k": [
[
"趣味・娯楽・エンターテイメント",
"0.9891"
],
[
"生活・暮らし",
"0.0076"
],
[
"学問・教育",
"0.0016"
]
]
},
"small_category_pred": {
"prediction_top_k": [
[
"野球",
"0.9681"
],
[
"その他(スポーツ・フィットネス)",
"0.0163"
],
[
"その他(ゲーム)",
"0.0009"
]
]
}
}
}
考察
今回は、Q&Aサービスのデータを用いてトピック分類器の学習を行いました。実際の対話データでは、トピックが識別可能な一発話に対するrecall @3が、大カテゴリと小カテゴリの両方について0.9を超える結果となりました。発話単体から話題の推定を行う目的において、今回作成したトピック分類器が一定の性能が出せることを示し、未だ足りないとは言え広範な話題に対応可能である分類器を作成できました。
この分類器は最新のデータを使ったり、整備された大量のデータで学習したりすることで、性能がさらに向上すると見込まれます。また、例えば現時点ではゲームに関する話題を「その他(ゲーム)」という広いトピックに分類していますが、「ロールプレイングゲーム」や「スポーツゲーム」「ボードゲーム」などの個々のジャンルについてデータを集めることでより粒度の細かい分類ができるようになり、把握するトピックの解像度を上げられます。
実際に対話で使う場面においては、全ての発話がトピックに関連している訳ではないので、閾値を超えた予測のみを採用する方策が良いことが知見として得られました。今回は閾値を超えたものを予測として出力するシンプルな方策を提案しましたが、大カテゴリと小カテゴリの両方の予測結果を組み合わせて総合的に判断することで、閾値を超えないものも予測として出力することが可能になるかもしれません。
応用先としては、対話においてユーザーの話題を推定したり、逆に対話システムが生成する発話のトピックを推定することで、シチュエーションや対話システムのキャラクター性に応じてリアクションを適切に変更することが考えられます。また、推定したトピックのtop-1の予測だけでなく、top-3にも関連するトピックが入る傾向を考慮すると、ユーザーとの会話が弾まなくなった時に対話システムが関連する話題を振ることで、話を発展させるために活用できる見込みがあります。対話システム以外にも、大量のテキストデータの中から所望のトピックに関する文章を抽出する際にもこの分類器が役に立つでしょう。
一方で、課題も残されています。最も大きな課題として、カテゴリが追加してもしきれない問題があります。世の中のありとあらゆる話題に対応するためには、無数のカテゴリが必要ですが、現実的にはそれは不可能なので、一定の段階で妥協する必要があります。とはいえ、必要なカテゴリを追加しなければ、例えばテニスのカテゴリが学習データにあってバドミントンが学習データにない場合、バドミントンが同じラケットスポーツのテニスに分類されるといったように、類似する不適切なカテゴリに分類されるような現象が起こります。また、人間にとってトピックが識別可能な発話も、分類すべきカテゴリが存在しないが故に、相槌などに対する予測確率と同様に全てのカテゴリでほぼ均等な確率分布になってしまうといったことも起こり得ます。そういった事態に対処するために、ある範囲の小カテゴリを包含する一段上のカテゴリを用いることが次善の策としてありますが、こういったカテゴリ予測の漏れをどう検出するか、もしくはカテゴリとして何を使い、何を新規に追加して再学習を行うかといった点は、運用を続ける上で検討しなければなりません。
また、学習データにない固有名詞がに対応できない問題も残されています。特に雑談対話においてはエンターテイメント系の話題が多いため、映画や本のタイトル、芸能人や番組に関する情報に対処するには、最近のデータを用いて定期的に維持管理を行うことが必要不可欠です。
さらに、文脈を考慮せずに一発話のみからトピックを判断しているため、会話の文脈を踏まえたトピックの判断をする場面を考慮していません。例えば「ビル、凄い」が建物の話なのか、それとも人名なのか、といった違いは、文脈を把握しなければ発話それ自体からは判別がつきません。話の移り変わりなどを捉える際には、過去数発話のトピックの予測の平均を取るなどの手法で対応することが考えられます。
感想
本インターンシップでは、基盤モデルを利用した対話システムが事前に設定した話題から逸脱してしまう問題に対し、トピック分類器が有効な解決策となりうるかを検証しました。6週間という期間が与えられた今回のインターンシップですが、手を動かしていたらあっという間に過ぎて行ってしまいました。初めてのインターンシップをLINEで経験できて本当に良かったと心から思いますし、実りある6週間で得た経験は自信につながると共に、自分に何が足りていないかも浮き彫りにしてくれました。多くの学びを得たこのインターンシップでは、メンターの吉川さんをはじめ、NLP開発チームの皆さんに大変お世話になりました。まだまだ未熟な身ですが、このインターンシップでの経験を糧に研鑽を重ねていければと思います。本当にありがとうございました。