ハルシネーションを抑え込む仕組み(RAG)

デジタル庁 デジタル臨時行政調査会の「法制事務のデジタル化及び法令データの整備・利活用に関する調査・実証、AI利活用等について」によると、LLMの活用推進にはハルシネーションを抑え込む工夫が不可欠との指摘がされています。

以下に、具体例とその対策例を共有いたします。具体的には、RAGという仕組みを利用して、LLMの幻覚を防止しています。

1.ハルシネーションの具体例

2.LLMの活用推進にはハルシネーションを抑え込む工夫

【Pythonコード】

from langchain.chat_models import ChatOpenAI
from langchain.agents import initialize_agent, Tool, AgentExecutor, AgentType
import requests
import xml.etree.ElementTree as ET

def get_article_text(lawnum_article: str) -> str:
lawnum, article = lawnum_article.split(” “)
resp = requests.get(f”https://elaws.e-gov.go.jp/api/1/articles;lawNum={lawnum};article={article}”)
tree = ET.fromstring(resp.text)
return “”.join(el.text for el in tree.findall(“.//Sentence”))

tools = [Tool(name=”GetArticleText”, func=get_article_text, description=”Get the article text of a law. The parameter is a string made from lawnum and article title joine d by a space character.”)]
llm = ChatOpenAI(model_name=”gpt-4″, temperature=0)
agent = initialize_agent(tools, llm, agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
executor = AgentExecutor.from_agent_and_tools(agent=agent.agent, tools=tools, verbose =True)
query = “デジタル庁設置法(令和三年法律第三十六号)第一条の内容はどのような ものですか?出力は、「第一条」から始める形で記載してください。”
print(executor.run(query))

<実行結果>

> Entering new AgentExecutor chain...
Thought: To answer this question, I need to get the text of Article 1 of the Digital Agency Establishment Law (Law No. 36 of Reiwa 3). I can use the GetArticleText tool for this purpose.
Action:
```
{
  "action": "GetArticleText",
  "action_input": "令和三年法律第三十六号 第一条"
}
```
Observation: この法律は、デジタル庁の設置並びに任務及びこれを達成するため必要となる明確な範囲の所掌事務を定めるとともに、その所掌する行政事務を能率的に遂行するため必要な組織に関する事項を定めることを目的とする。
Thought:I now have the text of Article 1 of the Digital Agency Establishment Law. It states that the purpose of this law is to establish the Digital Agency and define its tasks and the clear scope of jurisdiction necessary to achieve them, as well as to define matters related to the organization necessary for efficiently carrying out the administrative affairs under its jurisdiction.
Final Answer: 第一条 この法律は、デジタル庁の設置並びに任務及びこれを達成するため必要となる明確な範囲の所掌事務を定めるとともに、その所掌する行政事務を能率的に遂行するため必要な組織に関する事項を定めることを目的とする。

> Finished chain.
第一条 この法律は、デジタル庁の設置並びに任務及びこれを達成するため必要となる明確な範囲の所掌事務を定めるとともに、その所掌する行政事務を能率的に遂行するため必要な組織に関する事項を定めることを目的とする。

【コードの解説】

RAG(Retrieval-Augmented Generation)の仕組み

RAGは、情報検索(Retrieval)と生成(Generation)を組み合わせて、より正確で情報に基づいた応答を生成するフレームワークです。RAGの主なステップは以下の通りです:

  1. 情報検索(Retrieval):
    • 特定の質問やクエリに対して、関連する情報をデータベースや外部ソースから検索します。
    • ここでは、e-Gov APIを使って法令のテキストを取得する部分が該当します。
  2. 生成(Generation):
    • 検索された情報を基に、自然言語生成モデル(例えばGPT-4)を用いて、ユーザーの質問に対する応答を生成します。
    • このステップでは、取得した法令テキストを元に要約や整形を行います。
コードの具体的な流れ
  1. 法令テキストの取得:
    • get_article_text関数が指定された法令番号と条文番号を元にe-Gov APIから法令テキストを取得します。これが情報検索のステップです。
  2. ツールの定義とエージェントの初期化:
    • 取得した法令テキストを利用するためのツール(get_article_text)を定義し、それをエージェントに組み込みます。
  3. LLMの使用と応答の生成:
    • ChatOpenAIを使ってGPT-4モデルを初期化し、クエリに対して適切なツールを使用して応答を生成します。ここでは、法令テキストに基づいて正確な応答を生成する部分が生成のステップに相当します。
ハルシネーションの抑制

RAGの仕組みを利用することで、次のような工夫によりハルシネーションを抑制しています:

  • 具体的な情報の提供:
    • クエリに対して実際の法令テキストを提供することで、LLMが具体的な情報に基づいて応答を生成します。
  • 低温度設定:
    • モデルの温度を低く設定することで、生成される応答の多様性を減らし、より決定論的で信頼性の高い応答を生成します。

これにより、生成される応答が信頼性の高い情報に基づいているため、LLMが誤った情報を生成するリスクを減らします。したがって、このアプローチはRAGの基本原理に沿ったものと言えます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です