新データセット「ToolQA」:大規模言語モデルが外部ツールで問題解決する能力を評価
3つの要点
✔️ 大規模言語モデルが外部ツールをどの程度効果的に利用しているかを評価する新しいデータセットToolQAを開発。
✔️ 大規模言語モデルはToolQAの難しい問題に対して限定的な性能を示し、エラー傾向を示す。
✔️ 大規模言語モデルに外部ツールの使用法を学習させることで外部ツールの利用能力のさらなる向上を期待。
ToolQA: A Dataset for LLM Question Answering with External Tools
written by Yuchen Zhuang, Yue Yu, Kuan Wang, Haotian Sun, Chao Zhang
(Submitted on 23 Jun 2023)
Comments: Published on arxiv.
Subjects: Computation and Language (cs.CL); Artificial Intelligence (cs.AI)
code:
本記事で使用している画像は論文中のもの、紹介スライドのもの、またはそれを参考に作成したものを使用しております。
概要
大規模言語モデルは、自然言語処理の様々なタスクで高い性能を示しており、その汎用性の高さからChatGPTをはじめ、様々な分野で実用化が進んでいます。しかし、いくつか問題点があります。一つは「幻覚」です。これは大規模言語モデルが実在しない情報を生み出してしまうことです。もう一つは、数値的な推論能力が弱いことです。数値を使った複雑な問題の解決が苦手と言われています。
現在、これらの問題を解決するために、外部ツールを利用して大規模言語モデルの能力を補強する方法がとられています。例えば、Wolframのプラグインを利用すると数値の推論能力を強化することができます。この他にも、ファクトチェックされたデータベースに接続している外部ツールを利用することで、正しい情報を参照することができ、幻覚を軽減することができます。
しかしながら、外部ツールを利用する場合、大規模言語モデルが学習済みの内部データで問題を解決したのか、外部ツールによる外部データで問題を解決したのか判断する方法がありません。外部ツールを適切に利用できているのかなど評価することができていません。
そこで、この論文では、大規模言語モデルが外部ツールをどの程度利用しているのかを評価するため、新しいデータセット「ToolQA」を導入しています。ToolQAでは、全ての質問が、適切なツールを利用し、外部データを取得することでのみ回答できる設計になっています。これによって、大規模言語モデルが学習済みの内部データを利用して質問に回答する可能性を最小限にし、外部ツールを使用する能力を評価できるようにしています。
ToolQAとは
「ToolQA」は、大規模言語モデルが外部ツールを使って質問に回答する能力を評価するために設計されたデータセットです。データセットは8つのトピックで構成されており、各データは質問、回答、外部データ、ツールのタプルで表現されています。参照データは、テキストコーパス、表形式のデータベース、グラフとして表現され、クエリ可能なデータです。また、参照データを得るために、テキスト検索、データベース操作、コード解釈、数学的計算などに使用できる13のツールを用意しています。ToolQAに含まれる質問は、大規模言語モデルの学習済みの内部知識だけでは回答できず、ツールを使って参照データを取得する必要があるものです。下表はToolQAの統計データです。
ToolQAの質問と回答のペアは、下図の3つのステップで作成されています。まず、下図(a)Reference Data Collectionで、大規模言語モデルが学習していない参照データを収集しています。次に、下図(b)Human-Guided Question Generationで、大規模言語モデルと人間のガイドによって、参照データの利用が必要な質問を生成しています。最後に下図(c)Programmatic Answer Generationで、下図(b)で作成した質問に対して、正しい回答を自動生成しています。
(a)外部データの収集:Reference Data Collection
上図(a)についてです。このデータセットの目的は、大規模言語モデルが外部ツールを利用する能力を評価することです。そのため、大規模言語モデルが外部ツールを利用することを保証する必要があります。つまり、大規模言語モデルが学習済みの内部データだけでは質問に回答できないようにする必要があります。そこで、外部データを収集する際に3つの基準を設けています。
- 外部データは、大規模言語モデルの内部データと重複していない。
- 外部データは、大規模言語モデルの内部データだけでは回答できない質問を生成するために、文脈に依存した事実を含むべきである。
- 大規模言語モデルは外部データから必要な情報を全て取得し、質問に正しく答えることができるべきである。
そして、6つの観点で外部データを収集しています。
- 時間:時系列が関係する質問を作るために、「Flights(フライト)」や「Coffee(コーヒー)」といった最新情報を含むデータセットを用いています。例えば、最新のフライトスケジュールやコーヒーの価格など、大規模言語モデルが内部データとして持っていない最新の情報を用いています。
- 空間:地理的な情報や位置情報に関する質問を作るためのもので、具体的には「Yelp(レストランの評価情報)」や「Airbnb(宿泊施設の情報)」のようなデータセットを用いています。これにより、特定の地点に関する情報やその地点との関連性など、空間的文脈を持つ質問を作ることができます。
- 数学:数学的な質問を作るため、「GSM8K」データセットを用いています。これらはChatGPTが自らの数学的能力では回答できないような問題です。
- 科学:科学的な概念やデータに関する質問を作るために「SciREX」データセットを用いています。これは、ChatGPTが捏造しがちな科学領域に関する情報を含んでいます。
- 個人:個人的な情報やスケジュールに関する質問を作るために、ChatGPTによって生成された仮想の名前やイベントを含む「Agenda」データセットを用いています。これによって個人のプライバシーを保護しつつ、個人的なデータに関する質問を作ることができます。
- 社会:社会関係に関する質問を作るために「DBLP」データセットから最新のデータを選び出し、著者と論文の関係を表すグラフを作成しています。これにより、大規模言語モデルが理解していない社会関係性に基づく質問を作ることができます。
また、大規模言語モデルが、これらの外部データから情報を得るために利用可能なツールは下表の13個です。
テキスト情報を扱うツール「Text Tools」には「Agenda Retriever」「SciREX Retreiver」というテキスト検索ツールが用意されています。「Agenda Retriever」は「Agenda」データセットから個人データを検索し、「SciREX Retreiver」は「SciREX 」から科学に関するデータを検索するツールです。
データベースから情報を扱うツール「Database Tools」には「Database Loader」「Data Filter」「Get Value」が用意されています。「Database Loader」はローカルの表形式データベースからデータをロードするツールです。「Data Filter」は、カラム名、関係、値(例えば、"Date=2022-10-15")から条件を絞り、データベースをフィルタリングするツールです。「Get Value」は、データベースの特定のカラムの全ての値を返すツールです。
数学的能力を扱うツール「Math Tools」には「WolframAlpha Calculator」が用意されています。これは入力された文字列を数式として扱い、計算することができるツールです。簡単な四則演算や、平均値、最大値の算出などを様々な計算を行うことができます。
グラフ情報を扱うツール「Graph Tools」には「Graph Loader」「Neighbour Checker」「Node Checker」「Edge Checker」が用意されています。「Graph Loader」はローカルファイルからグラフをロードするツールです。「Neighbour Checker」はグラフ内のクエリノードの全ての隣接ノードをリスト化するツールです。「Node Checker」と「Edge Checker」は、それぞれクエリノードとエッジの詳細な属性情報を返すツールです。
コード情報を扱うツール「Code Tools」は「Python Interpreter」「SQL Interpreter」が用意されています。それぞれPythonコードとSQLクエリを解釈し、実行するツールです。また、これらのツールは、他のツール(Text ToolsやDatabase Toolsなど)からデータを受け取り、その受け取ったデータを適切な形式(SQLクエリやPythonコードなど)に変換します。そして、この変換されたデータは、必要な情報を抽出したり、より複雑な操作を行ったりするために、次の工程(あるいは他のツール)で使用されています。このように、「Python Interpreter」「SQL Interpreter」は、様々なツールと大規模言語モデルとの間で情報をやり取りするためのブリッジ(橋渡し)として機能します。これによって大規模言語モデルは様々なツールを組み合わせて情報を操作し、最終的な回答を生成することが可能になっています。
最後は「System Tools」として「Finish」が用意されています。これは他のツールが生成した出力を受け取り、それを解析しています。例えば、テキスト検索ツールが得た情報、データベースからの結果、PythonやSQLが実行したコードの結果を解析し、その情報を利用して最終的な回答を形成しています。得られた結果を理解し、最も適切な形で結果をユーザーに提示するために重要です。これによって、ユーザーが問い合わせた内容に対して、最終的に明確で理解しやすい答えを提供することができます。
(b)人のガイド付き質問生成:Human-Guided Question Generation
下図(b)についてです。質問を生成する方法として2つ考えられます。1つは「専門家が外部データに関する質問を作成する」、もう1つは「大規模言語モデルがに外部データに関する質問を生成させる」です。専門家だけに頼ると、高品質な質問を作ることができますが、多大な労力を要し、時間がかかり、スケールアップが難しくなります。また、大規模言語モデルだけに頼ると、スケールアップは容易になりますが、回答できないような質問など低品質な質問が作られる可能性があります。さらに、大規模言語モデルが生成する質問には、大規模言語モデルの内部データだけで回答できてしまうものが含まれている可能性もあります。そこで、この論文では、質問のテンプレートを用意して、人間がガイドしながら大規模言語モデルで質問を生成する方法を提案しています。
まず、ChatGPTに「与えられた情報に基づいて、いくつかの質問テンプレートを生成し、それに対応する回答を提案してください。」というようなプロンプトを入力し、外部データから質問テンプレートの候補を生成させています。次に、人間が検証し、大規模言語モデルの内部データでは回答できないが、外部データを使用することで回答できるようになる質問テンプレートを選んでいます。下図は、外部データ「Flight」に対する質問テンプレートです。
また、下図は外部データ「Yelp」に対する質問テンプレートです。
質問テンプレートを手動で選んだ後、外部データから値をサンプリングし、質問テンプレートに自動的に埋め込んで具体的な質問を生成しています。例えば、「{Origin}から{Dest}への{Date}のフライトはキャンセルされましたか?」というテンプレートが与えられた場合、外部データ「Flight」から「LAX」「MDW」「01/09/22」の値をサンプリングし、テンプレートに埋め込み、「LAXからMDWへの01/09/22のフライトはキャンセルされましたか?」のように質問を生成しています。また、質問の難易度に応じて、易しい質問と難しい質問に分類しています。下図は外部データ「Airbnb」に対する易しい質問のサンプルです。
下図は参照データ「Airbnb」に対する難しい質問のサンプルです。
(c)プログラムによる回答生成:Programmatic Answer Generation
下図(c)についてです。ここでは(b)で生成した質問に対する回答を生成しています。
回答を生成するために「オペレーター」と「ツールチェーン」という2つの要素を用いています。「オペレーター」は、データベースから情報を取得するなど、特定の操作を行う部分のプログラムです。そして、「ツールチェーン」は異なる複数の「オペレーター」を組み合わせて、最終的な回答を出す部分のプログラムです。例えば、まず質問から必要な情報(日付や地名など)を取り出し、その情報を元に「ツールチェーン」を使って一連の「オペレーター」を実行すると、最終的な回答が得られます。下図はサンプルです。このサンプルコードは「{飛行日}の{出発地}からのフライトのうち何%が遅延したか?」という質問に回答するものです。
実験
ToolQAを用いて、4つの方法で性能を評価しています。1つ目は、ChatGPTを用いたものです。ChatGPTに質問を入力し、そのレスポンスを最終的な回答として取得しています。2つ目は、ChatGPTにCoT(Chain-of-Thought)を用いたものです。質問の後に"Let’s think step by step:"という文言を加えています。3つ目は、Chameleonを用いたものです。複数のツールを用いて問題解決を行う手法で、大規模言語モデルをコントローラとして使用します。これは最近の方法で、推論とQA(質問応答)タスクで高い性能を示しています。ChameleonをToolQAで使用する際、ツールはこの論文で用意したものを使用しています。4つ目は、ReActを用いたものです。大規模言語モデルが推論とツールの使用を交互に行うことで、問題解決能力が強化されます。ReActでは、gpt-3.5-turboとtext-davinci-003を用いて実装しています。下表は易しい質問に対する各手法の結果を示しています。
下表は難しい質問に対する各手法の結果を示しています。
ChatGPTとCoTを用いたものは、易しい質問、難しい質問ともに、いずれのタスクにおいても低い成功率(< 10%)になっています。Chameleonを用いたものは、わずかですが優れた成功率を示し、簡単な質問と難しい質問に対して、それぞれ10.6%と1.9%の成功率になっています。ReActが最も優れた成功率を示しています。
また、易しい質問と難しい質問の結果を比較すると、すべての手法が難しい質問で大幅に性能を低下させていることがわかります。易しい質問で最も性能が高い方法は、平均成功率(Average)43.1%ですが、難しい質問ではその数値が8.2%に低下しています。さらに、ReActの2つバージョンを比較すると、易しい質問ではReAct(GPT-3)がReAct(GPT-3.5)よりも優れた性能を示す一方、難しい質問ではその逆の結果になっています。
実験結果の分析
ここでは、ToolQAの難しい質問に対して、最も高い性能を示したReAct(GPT-3.5)に対して分析をしています。最もよく見られるエラーについては、ツールやプログラムが正しく機能するために必要な引数を間違えるケースです。下図のように、引数のエラーは、易しい質問では44.56%(168/377件)あり、難しい質問では48.23%(210/436件)を占めています。
また、易しい質問と難しい質問で引数エラーのパターンに違いがあります。易しい質問では、データベース関連のツール(LoadDB、FilterDB、GetValue)でエラーが発生しやすい傾向があります。易しい質問ではエラー数が120件ですが、難しい質問では95件です。一方、コード関連のツール(SQL、Python)では、難しい質問では、易しい質問よりも約10倍も多いエラー数になっています。これは、難しい質問の解決策のロジックがより複雑であり、コンテキストだけから完全に推測することができないためと考えられます。その結果、大規模言語モデルはこれらの難しい質問を解決するためにコードやプログラミングの概念の理解に頼る傾向があると考えられます。対照的に、易しい質問では、大規模言語モデルはコンテキストで提供されたパターンに従い、異なるデータベース操作を組み合わせて解決策に辿り着く傾向があると考えられます。
さらに、大規模言語モデルは適切な外部データを見つけるのが難しいという問題があることも明らかにしています。例えば、下図のように「Flight」「Coffee」「Airbnb」「Yelp」など時間の情報を含むデータが必要になる場合に、別のデータである「Agenda」を頻繁に誤って参照していることがわかります(下図のagendaの列で色が薄くなっています)。
また、「SciREX」「DBLP」など科学領域に関連するデータついても、大規模言語モデルはこれらのデータのどちらを参照すべきかを適切に判断できずに混乱する傾向があります(上図のscirexの列で色が薄くなっています)。大規模言語モデルは質問に答えるためにどのデータを使用するべきかを適切に判断するのが難しいという問題があり、これもエラーの一因となっていることを示しています。
さらに、外部ツールで拡張した大規模言語モデルでは、入力するプロンプトに各ツールの説明と使用例を含めるのが一般的ですが、ツールの数が増えるにつれて問題の複雑性が増し、すべてのツールの組み合わせに対する使用例を含めるのは難しくなります。その結果、大規模言語モデルは、場合によっては、人が入力した事例には含まれていないツール間の関連性などを見つけ出すことが必要となります。この論文では、これを「Innovation」と呼んでいます。しかし、このような人が入力していないルールを見つけ出すことは、幻覚のリスクも高くなります。下図は、大規模言語モデルが「Coffee」のデータを参照して難しい質問に答えるケースで、この現象を表したものです。
上図(a)の難しい質問では、ReAct(GPT-3)はコンテキストで表示された操作に厳密に従い、その結果、失敗しています。逆に、ReAct(GPT-3.5)は、データベース操作が繰り返し失敗すると、ツールの関連性から、データベース操作の代替手段としてSQLインタープリタを特定しています。しかし、このような「Innovation」があるとき、「Hallucination(幻覚)」のリスクも高くなります。上図(b)で示されているように、「Coffee」のデータから別の難しい問題に答えるとき、ReAct(GPT-3.5)は、ツールの実行結果には存在しないもの(黄色箇所)を幻覚として見てしまうようです。
ReAct(GPT-3.5)モデルで発生した全てのエラーを確認し、易しい質問と難しい質問の両方でのエラーの内訳を下図にまとめています。
まとめ
この論文では、大規模言語モデルが外部ツールを使用する能力を評価するデータセット「ToolQA」を提案しています。また、ToolQAに対して、標準的な大規模言語モデルと外部ツールで拡張した大規模言語モデルの性能を評価しています。その結果、ToolQAの難しい質問に対して最も性能が高いベースラインであっても限定的な性能しか達成できませんでした。また、現在の外部ツールで拡張した大規模言語モデルは、不正確なツール呼び出しや不正確なデータソースの使用といったエラーをする傾向があることもわかりました。この研究チームでは、外部ツールの使用法に関するデータセットで大規模言語モデルをファインチューニングすることで、大規模言語モデルの外部ツールの利用能力が向上すると期待しており、さらに研究を進めるとしています。
この記事に関するカテゴリー