銀行ローン業務支援チャットボットの試作前編~RAG*の活用~
GPT(GPT3.5, GPT4等)をはじめとするLLM*で実用的な会話システム(ChatBot)を作ろうとする場合、ふだんの日常会話等では無難な回答が得られる一方で、専門的な知識が必要となる質問に対しては自信たっぷりに堂々と誤った回答をしてしまう問題があります。
このような事象はハルシネーションと言われており、避けるための抜本的な解決法としては、モデルの追加学習やファインチューニングといったLLM自体をアップデートする方法があります。
ただし、膨大なGPUメモリを含む多くの計算資源、および学習データの準備が必要であり、かなりのコストがかかります。
一方、LLMはそのままでもプロンプトに未学習の知識を含める方法によって正しく回答させる方法があります。
今回は、銀行ローン担当として動くChatBotを想定し、LangChainの機能を使ったRAGによる活用例とエージェントツールを使った作成例を2回にわたりご紹介します。
*RAG : Retrival-Augmented Generation(検索拡張生成)
*LLM : Large Language Model(大規模言語モデル)
LangChainによるRAGの活用とは?
LangChainとは、PythonでLLMを用いたアプリケーション開発を効率的に行うためのフレームワークです。
詳細は以下の記事をご覧ください。
通常ChatGPTはカットオフと呼ばれる期間までの情報のみを学習しており、それ以降の情報を参照することができません。
そうでなくとも専門的な情報や、特定業務に係る知識等は学習されていない場合があります。
このような制約に対応し、特定ドメイン(対象となる特定の範囲)の知識を参照させるための技術がRAG*です。
日本語では検索拡張生成とも呼ばれます。
この手法はLLMに外部からの情報を与え、その情報に基づいた回答をさせるものです。
RAGの流れは下の図の通りです。与えられたドキュメントを細かく分割した上で埋込み用LLMを用いてベクトル化し、Retrieverと呼ばれる検索エンジンがそのベクトルストアの中から情報を検索し、入力情報を補完し、LLMはその情報に基づいて出力を生成します。
図表1:通常のchatGPT

図表2:LLM自体をアップデートする場合

図表3:RAGを使用する場合

※NSSOLグループ利用可能イラストおよびフリー素材を活用しFEGが作成
実践 : ローン情報に基づいて回答するLLMの作成
住宅ローン情報の詳細を記載したドキュメントを別途作成しLangChainに読み込ませ、その情報基づいた回答を生成してみます。
使用モデル:gpt-35-turbo
使用言語:Python3.10.14
読み込むドキュメントと実装
以下ドキュメントをベクトル化して読み込み、関連する質問を投げて回答させてみます。
{
{
"ローン名":"住宅ローンA","引き落とし日":"毎月10日","初回引き落とし時期":"契約翌月",
"商品説明":
{
"融資金額":"1,000,000円以上5000万円以内",
"融資期間":"1年以上35年以内",
"保証料":"不要",
"取扱手数料":"コースA:融資金額の2%、コースB:融資金額の1%",
"固定金利選択手数料":"5千円",
"繰り上げ返済手数料":"30000円",
"団信保険料":"別資料をご確認ください",
},
}
まずは以下の通りテンプレートを設定します。
テンプレートでは上で与えた情報を元に回答することを指示しており、この情報が{context}部分に埋め込まれ、ユーザからの質問({question})を拡張して言語モデルに与えます。
続いて、下記の質問をして回答を生成しています。
「住宅ローンAの初回引き落としはいつですか。7月に契約したとします。」
base_template = """あなたはローンの専門家です。ローンに関する情報を利用して回答してくだ
さい。
情報:
{context}
履歴:
質問: {question}
ASSISTANT:"""
prompt = PromptTemplate.from_template(base_template)
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
chain_type_kwargs={"prompt": prompt},
retriever=index.as_retriever(),
verbose=True,
memory=memory,
)
res = qa_chain.invoke('住宅ローンAの初回引き落としはいつですか。7月に契約したとします。')
print(res['result'])
>> 住宅ローンAの初回引き落としは契約翌月ですので、8月10日になります。
確かに正しい回答が返ってきました。上の質問は答えが明快なため、もう少し漠然とした質問をしてみます。
res = qa_chain.invoke('住宅ローンを組む場合にかかる経費について教えてください')
print(res['result'])
>>住宅ローンを組む場合にかかる経費には、以下の項目が含まれます。
1 . 取扱手数料: ローンの融資金額に応じてコースAまたはコースBが適用され、コースAでは融資金
額の2%、コースBでは融資金額の1%が取扱手数料としてかかります。
2. 固定金利選択手数料: 固定金利を選択する場合には、5千円の手数料がかかります。
3. 繰り上げ返済手数料: ローンの繰り上げ返済を行う場合には、3万円の手数料がかかります。
なお、団信保険料については別資料をご確認ください。また、具体的な金額についてはローンの融
資金額や条件によって異なるため、詳細な情報が必要です。以上が一般的な住宅ローンの経費になり
ます。
正確な内容である上に、与えられた情報を網羅した回答が返ってきます。
おわりに
上述のようにLangChainにおけるChatGPTにおいて、RAGを活用することでChatGPTに元々学習させていない情報を元に正確な回答を生成することに成功しました。
RAGでは細かな要件を人間が定めずとも、ドキュメントをベクトルストアに変換することで必要な情報を適宜参照しながら回答を生成できます。このため、実装が手軽で応用可能な範囲が非常に広い技術といえます。
今回はChatGPTの活用事例としてLangChainによるRAGの活用についてご紹介しました。当社では最先端技術の研究・調査を行っており、最新の調査結果を随時公開していきます。
当社について
日々最先端の機械学習・分析技術の研究を行い、それらを活用した予測モデル・AIモデルの提供をおこなっています。
・テキスト情報を用いた分類モデル構築
・メール配信ターゲット抽出モデル構築
・商品レコメンドモデル構築
もっと見る
サービス紹介ページをご覧いただき、お気軽にお問い合わせください。
