Azure OpenAIのChatGPTライクなAPIとAzure Cognitive Searchを連携して、FAQチャットボットのようにユーザーの質問に回答するシステムを構築できるか試してみた

はじめに

Azure Cognitive Searchを利用することで、データの検索や分析が簡単に行えます。

さらに、Azure OpenAIのAPIと連携すると、より高度な自然言語処理が実現できます。

Azure OpenAIのAPIとAzure Cognitive Searchを連携して、FAQチャットボットのようにユーザーの質問に回答するシステムを構築できるか試してみました。

構築方法

以下の方法を順番に実行すれば、ユーザーが入力した質問について回答するシステムを構築できると考えました。

  • ユーザーが質問文を入力する。
  • Azure OpenAIのAPIを使用して、質問文からキーフレーズを抽出する。
  • Azure OpenAIのAPIを使用して、上記で抽出したキーフレーズの同義語を生成する。(同義語を生成することで、検索に必要な単語を正確に把握する。)
  • Azure Cognitive Searchを使用して、キーフレーズと同義語を使用して検索を行う。(OR条件で検索する)
  • Azure OpenAIのAPIを使用して、上記の質問文とAzure Cognitive Searchの検索結果を使用し、ユーザーの質問に対する回答を分析する。

作業イメージは下記の通りです。

検証

検証作業は、Azure OpenAI Studioを使用して実施しました。

デプロイモデルはtext-davinci-003を使用しました。

Azure OpenAI Studioの使用方法は下記を参照して下さい。

blog.jbs.co.jp

検証データは下記を使用しました。

自治体における「子育てAIチャットボット」の普及に向けたオープンデータ化についての「報告書」及び「FAQデータセット」を公開 | LINE Corporation | CSR活動レポート

ダウンロードしたデータをcsv形式のデータに変換して、Azure Cognitive Searchでインデックスを作成しました。

text-davinci-003に送信する文章は下記を参考にして作成しました。

help.openai.com

community.openai.com

質問文からキーフレーズを抽出

ユーザーが入力した質問文からキーフレーズを抽出します。

ユーザーが次の質問を入力したと仮定して作業を進めます。

"母子手帳を受け取りたいのですが、手続きを教えてください。"

下記の文章:###の箇所に、ユーザーの質問文を入力してキーフレーズ分析できるか試してみました。

特に問題なく、キーフレーズを抽出できました。

キーフレーズの同義語を生成

上記で取得したキーフレーズの同義語を生成します。

下記の文章:###の箇所に、上記で取得したキーフレーズを入力して同義語を生成できるか試してみました。

特に問題なく、同義語が生成されました。

キーフレーズと同義語を使用して検索

Azure Cognitive Searchで検索してみます。

検索には、上記で取得したキーフレーズと同義語を使用します。

目視で確認したところ、search.scoreが上位から4番目の箇所に回答として相応しいデータが表示されています。

データの内容は下記です。

”窓口で妊娠届をご記入いただき、母子手帳をお渡しします。住民票の世帯が別の方が代理で窓口に来られる場合は、委任状が必要になります。▼詳しくはこちら(自治体HP内関連ページのURL)”

アプリケーションで実装する場合は、上位10件までを検索対象にする等の調整を行えばよいと思います。(上位何件までを検索対象にすべきかは要調査)

ユーザーの質問に対する回答を分析

下記の文章を使用して分析しました。

Yesが得られれば、それがユーザーの質問に対する適切な回答であると判断できる想定でした。

残念ながら質問の意味を理解してもらえませんでした。

ChatGPTで同じ文章を分析しました。

こちらは想定通りの回答が得られました。

他の質問も試してみました。

text-davinci-003で分析してみました。

今回はYesの回答でした。

ChatGPTで同じ文章を分析しました。

ChatGPTの回答はNoでした。

質問に対する回答としてはNoが適切だと思われるので、ChatGPTの方が正しい回答でした。

まとめ

text-davinci-003へ送信する私の文章に問題があるのか、想定通りの結果は得られませんでした。

ChatGPTの場合は、同じ内容の文章でも適切な回答をしてくれたので、人との会話という部分においてはやはりChatGPTの方が優れているのかなと思いました。

2番目の質問ではChatGPTはNoの回答を返しましたが、ユーザーの質問に対する回答としては適切なので、単純にYes、Noを区別するだけではユーザーの質問に対する回答が得られたのか判断するのは難しい事がわかりました。

現状の方法では、ユーザーの質問に回答するシステムを構築するのは難しいです。

text-davinci-003やChatGPTへ送付する文章については、OpenAIのマニュアル等を参考にしながら修正してみます。

ChatGPTのAPIが公開されれば、現状の方法も改善できると思いますので、公開されたら試してみます。

執筆担当者プロフィール
株木 誠

株木 誠

先端技術部の株木です。 Azure OpenAI Service を活用するアプリ開発を担当しています。

担当記事一覧