背景

質問応答システムとは、日本語や英語のような自然言語で表現された質問に対して、適切な回答をするシステムを指しています。たとえば、質問応答システムに対して「富士山の高さはどのくらいですか?」という質問をしたとしましょう。この場合、システムには「3776m」という回答を提示することが期待されます。

質問応答システムの研究の歴史は古く、1960年代まで遡ることができます。初期の質問応答システムでは、野球に関する質問だけに答えるような、特定の分野のみを対象としたシステムが研究されていました。現在では、幅広い分野の質問に回答可能なシステムを対象とした研究が多くを占めるようになっています。その中でも、IBMのWatsonは、Jeopardy!というクイズ番組で人間のチャンピオンを破ったことで脚光を浴びました。

質問応答システムがあれば、情報を効率的に探すことができます。一般的に、私たちが情報を探す際には、検索エンジンを使います。しかし、その出力は文書であるため、ユーザはそれらの文書を読み、必要な情報が含まれているか否かの判断をしなければなりません。一方、質問応答システムは回答そのものを返すため、情報をより効率よく得ることができます。実際、最近の商用検索エンジンには、質問応答の機能を搭載し、効率的に情報を得られるものもあります。

質問応答システムを実現する方法

質問応答システムを実現するために、人間が質問に答える過程を模倣する方法を使うことができます。人間が質問に答える時には、まずは自分の頭の中にある知識で答えられるか判断します。答えられないと判断した場合は、インターネットや本などで調べ物をすることで答えようとします。質問応答システムも人間と同様に、ユーザの質問を解釈して、データベースや文書を検索し、そしてその中から回答を探すという処理を行うことで実現することが出来ます。

たとえば、以下の図のようなアーキテクチャを考えることができます。まずはじめに、ユーザの質問文を質問分類サーバで分類します。ここでは、ユーザの質問に対してデータベースの知識を使って答えるか、それとも検索して回答を探すかをルールや機械学習を使って判断します。データベースに尋ねる場合は、自然言語をSQLやSPARQLといったデータベース用クエリ言語に変換します。一方、検索型の場合は、質問文から検索クエリを作成して文書検索し、返却された文書群から回答を抽出します。

一口に質問応答システムと言っても、実現方法や対象とする分野、答えられる質問の種類により様々に分類されます。以降では、戦略技術センターで取り組んでいる、情報検索型と知識ベース型質問応答に焦点を当てて紹介します。

情報検索型質問応答

情報検索型質問応答システムは、ユーザの質問に対して、文書を検索し、その中に含まれるテキストを回答するタイプの質問応答システムです。以下に質問文と回答例のペアを示します。

情報検索型質問応答は、複数のコンポーネントを組み合わせて実現します。典型的には、質問解析、文書検索、パッセージ選択、回答抽出から構成されます。以下に各コンポーネントの関係を示します。

質問解析では、ユーザの質問を解析し、文書検索のためのクエリを作成します。典型的には、質問文を形態素解析して得られる単語の中から、「が」「を」「に」などの助詞や「れる」「られる」などの助動詞を除去し、名詞、動詞、形容詞といった内容語を基に作成します。たとえば、「富士山の高さは?」なら「富士山 高さ」のようなクエリを作成します。また、最近では深層学習技術の発展により、文の意味を上手く表現したベクトルを作成できるようになったため、BERTのようなモデルを使って質問文をベクトルに変換し、それをクエリとする手法も使われています。

文書検索では、質問解析部で作成したクエリを検索エンジンに入力し、関連文書を取得します。以降の処理では、この関連文書の中から回答を探すことになるため、なるべく回答が含まれていそうな文書を検索することが求められます。 古典的にはBM25のようなスコア関数を使って順位付けします。 最近ではBERT系のモデルを使って文書ベクトルを作成し、クエリベクトルとの内積を計算する方法がより高性能とされ、使われるようになってきています。

パッセージ選択では、検索した文書を文や段落といったより小さな単位(パッセージ)に分割し、回答が含まれていそうなパッセージを選択します。文書検索で得られた文書が短い場合は必ずしも必要な処理ではないのですが、長い場合には文書のどの部分にクエリがマッチしたのかがわからないので、絞り込む必要があります。一般的に、後続の回答抽出の処理は計算量が大きいため、パッセージ選択をすることで、システム全体の処理を高速化する効果もあります。

回答抽出では、パッセージの中から回答候補を抽出します。ここでは、質問文とパッセージを回答抽出のモデルに入力し、パッセージのどこからどこまでが回答らしいかをそのスコアと共に抽出します。そして、得られたスコアに基づいて、回答にランク付けをし、上位のスコアの回答を最終的な回答としてユーザに提示します。回答抽出の処理は深層学習による発展が著しく、データセットによっては、人間を上回る性能を出しています。

知識ベース型質問応答

知識ベース型質問応答では、ユーザの質問をSQLやSPARQLなどのデータベースを検索するためのクエリ言語に変換し、それを用いて回答を検索します。情報検索型のシステムでは、非構造化データであるテキストを対象にしていましたが、情報はデータベースの様に構造化された形でも存在しています。したがって、知識ベース型質問応答は、構造化されたデータから回答を抽出するシステムと言えます。以下に質問文とクエリ(SPARQL)の例を示します。

知識ベース型の質問応答を使うと、情報検索型の場合と比べて、集計や条件による絞り込み、並べ替え、順位、一覧表示、関連情報の表示などの操作がしやすいというメリットがあります。たとえば、「3000m以上の山」という条件による絞り込みや「最も低い山」「3番目に高い山」「高さ順に並び替え」「県別にグループ化」といった操作を行うことができるでしょう。このような操作は、情報検索型質問応答システムで行うには向いていません。そういうわけで、情報検索型質問応答システムですべてが済むというものではないのです。

知識ベース型質問応答の実現方法は様々ですが、典型的な処理としてスキーマ/エンティティリンキングがあります。これは質問文中の単語をデータベース中のテーブルやカラム名に結びつける処理です。たとえば、「学生番号10番の学生の名前は?」という質問文があるとします。このとき、「学生」を「Studentテーブル」「番号」を「IDカラム」に結びつけるのがスキーマリンキングです。こうして、テーブル名やカラム名を特定した後、ルールや機械学習を使うことでクエリを生成します。

質問応答システムの課題と対策

最後に、情報検索型と知識ベース型質問応答システムそれぞれの課題について挙げ、取り組みについて紹介します。

情報検索型質問応答の課題として、多言語化とドメインへの適応があります。現在の研究開発の対象は日本語と英語に限っているのですが、今後は多言語への適応が必要になってきます。その際に、機械学習モデルを学習させるためのデータ量をいかに少なくできるかが鍵になると考えています。また、現在はオープンドメインを対象に研究していますが、実用的には金融や医療などのドメインへの適応が必要になります。適応する際に、より少ないデータ量でより良い性能を出せるかが重要な課題となっています。

知識ベース型質問応答の課題として、使っているデータベースのカバレッジ、新鮮さ、正確さがあります。現在、知識ベース型質問応答の検証用にはWikipediaから構築されたDBpediaを使っています。使っていく中で、2016年以降更新されていない点、カバーする知識が狭い点、不正確な知識が含まれている点が性能向上の障壁となることがわかってきました。今後はテキストからの知識獲得や他の情報源との組み合わせによる規模の拡張、継続的な更新の仕組み、知識の正しさを検証する仕組みについて取り組んでいこうと考えています。

おわりに

本記事では、質問応答システムについて、情報検索型と知識ベース型の2つの手法に焦点を当てて紹介しました。質問応答システムは、withコロナ時代において、ますます重要な技術になってきます。2020年現在、新型コロナウィルスの影響により、リモートワークによる労働が中心になりつつあります。このような状況では、今まで対面でのコミュニケーションで行われていたノウハウの交換が減り、生産性の低下が危惧されます。その対策として、今後はチャットやメールなども含めてあらゆるナレッジを蓄積し、質問応答によって素早く情報を引き出す仕組みが重要になるでしょう。

なお、本記事の内容は以下のレポートにもまとめています。記事と合わせて、ご参照ください。


本コンテンツはクリエイティブコモンズ(Creative Commons) 4.0 の「表示—継承」に準拠しています。