ビジネスマッチングでのClaudeによる文章生成
大規模言語モデル(LLM)によるニーズ文章の自動作成
こんにちは。Fact & Dataグループ(以下FD)の岡﨑です。FDでは、以前にご紹介したビジネスマッチングのレコメンドプロジェクトと並行して、大規模言語モデル(LLM)を用いてビジネスマッチングに必要なニーズの文章を自動作成するプロジェクトを進めています。
このプロジェクトでは、ビジネスマッチングにおけるユーザー体験を向上させるため、具体的かつ個々の中小企業に最適化されたニーズを、ユーザーの手間をほとんどかけずに作成することを目指しています。
ここでは、ニーズ文章を作成する新モデルの開発過程と、その中で工夫したあれこれについてご紹介いたします。
本プロジェクトは、AWSのワークショップ ML Enablement Workshopが発端となっています。
中小企業支援プラットフォーム「Big Advance」について
Big Advanceは、地域の中小企業のDXを支援するプラットフォームです。その主要機能として、ビジネスマッチングがあります。
ビジネスマッチングでは、自社のビジネス上の要望をニーズとして登録できます。「自社で作っている金型を使ってほしい」、「自社で提供しているパフェに使う果物を仕入れたい」などがニーズの例として考えられます。
ニーズをBig Advanceに公開すると、6万を超える全国の会員企業がそのニーズを閲覧し、商談申込できるようになります。このようにしてビジネスマッチングは、中小企業の販路拡大や新規取引先開拓に活用されています。
ニーズ自動作成機能について
ニーズを書いてBig Advanceに公開すれば全国の企業と繋がれるわけですが、自社の特長を反映したニーズを一から書き上げるのはとても大変な作業です。このハードルの高さを解消すべく、2023年10月に、AIによるニーズ自動作成機能をリリースしました。この機能では、事前にBig Advanceに登録してある(企業)基本情報をもとに、AIがニーズ登録に必要な情報を自動で作成します。
現在のニーズ自動作成機能の課題点
ニーズ自動作成機能によりニーズ作成のハードルが下がった反面、既存のAIモデルではBig Advanceに入力している企業情報が少ない場合に、どの企業でも使えそうな抽象的なニーズを作成しがち、という課題がありました。
例えば弊社の情報をサンプルデータとして用意します。
既存モデルでは、次のような出力が得られました。
出力されたニーズは一見それらしく、文章としても成立しています。しかし、「効率的で革新的な解決策を提供」「高品質なサービスを提供することで顧客の満足度を高め」など、印象は良さそうだけれど具体的に何をやっている会社なのかがイマイチわからない文章になってしまいました。
課題解決のためのアクション
この課題に対応するため、既存のAIモデルを次のように改良した新モデルを開発しました。
Big Advanceの企業情報に加えて、外部URLの情報も入力データとして使えるようにしました。
プロンプトを工夫し、より構造化されたニーズの文章が生成できるようにしました。
使用する大規模言語モデルをChatGPT-4からClaude 2.1に変更しました。
この新モデルの構造については、後の節で詳しく述べます。
結果
新モデルはURLからサイト情報も取得するため、現行モデルと比較して企業の特徴を捉えた具体的な内容になっていることがわかります。
実際にBig Advance会員企業情報から生成されたニーズを社内レビューしたところ、合格率が97.9%(n=188)となり、一定のクオリティが保たれていることがわかりました。また、一部金融機関様で実証実験を行なっており、新モデルによって作られたニーズを実際に公開いただけています。
ニーズ作成新モデルの詳細
この節では、ニーズを作成する新モデルについて少し詳しく説明します。
全体の流れ
プロジェクト全体の流れは、以下の通りです。
入力データとして、Big Advanceに登録されている自社情報と自社URLを用意します。
自社URLをスクレイピングし、記載されている企業の取り組みなどの情報を取得します。
こうして得られた企業情報をニーズ作成プロンプトに代入し、ニーズを作成します。
社内レビューを行い、公開して良いレベルのものにニーズを絞り込みます。
そうして絞り込まれたニーズを下書き状態で保存し、ユーザーに確認・修正いただいた上で公開いただきます。
以下では、ニーズ作成までの各ステップについて解説します。
自社URLを用いたスクレイピング
自社URLから企業情報を取得します。
ここで、ちょっとした工夫を加えます。まずスクレイピングにより、ホームページのトップからリンクされているサブURLを全て取得します。
例えばURLが
https://www.kokopelli-inc.com/
であった場合、サブURLの一覧は次のようになります。
https://www.kokopelli-inc.com
https://www.kokopelli-inc.com/all/4506
https://www.kokopelli-inc.com/all/4592
https://www.kokopelli-inc.com/all/media/4639
https://www.kokopelli-inc.com/all/release/4599
https://www.kokopelli-inc.com/all/release/4605
https://www.kokopelli-inc.com/big-advance
https://www.kokopelli-inc.com/category/all
https://www.kokopelli-inc.com/category/all/media
https://www.kokopelli-inc.com/category/all/news
https://www.kokopelli-inc.com/category/all/release
https://www.kokopelli-inc.com/company
https://www.kokopelli-inc.com/contact-ir
...
このサブURLを全てスクレイピングしてしまうと、多くの時間と費用が必要になり、現実的ではありません。そこで、この中から、ニーズ作成に役に立ちそうな内容が載っていそうなサブURLを、次のプロンプトによって選出します。
f"""あなたは<url>タグ内のURLから、企業が商談のアピール文に使えそうなURLを3個選び出し、<output_format>タグの中に記載された形式で出力するプロフェッショナルなAIアシスタントです。
回答は<rules>タグの中のルールに従って作成してください。
<rules>
- 回答は<answer>から開始する
- 半角スペース区切りの文字列で出力する
- output_format以外のことのことは回答しない
- 指示の反復を回答に含めない
</rules>
<url>{sub_urls}</url>
<output_format>"url1 url2 url3"</output_format>"""
そうして選ばれたサブURLの各々をスクレイピングし、得られた内容を外部URLからの企業情報として用意しておきます。
ニーズ作成プロンプト
ここまでで企業情報の用意ができましたので、それをプロンプトテンプレートに代入することでプロンプトを作成します。
プロンプトエンジニアリングは試行錯誤の連続でしたが、次のようなよく知られている手法が精度を上げる要因になったように思います。
xmlタグを使って、プロンプト全体の文章構造が明確に
AIの役割を明示するようにしました。
例: あなたは、<company-info>タグの中に記載された企業の情報を見て、その企業が求めているビジネス上の要望を出力するプロフェッショナルなAIアシスタントです。
良いと思われるニーズの文章を数件例示しました(Few-shot Learning)。
出力されたフォーマットが望んだものでなかった場合でも、何度かやり直せるようにしました。
こうして得られたプロンプトを大規模言語モデルに通すことで、ニーズが完成します。
使用した大規模言語モデルについて
今回の実証実験では、大規模言語モデルとしてClaude 2.1とChatGPT-4が候補に挙がっていました。社内レビューの合格率などを鑑み、最終的にはClaude 2.1を用いることとなりました。
Claude 2.1では端的に内容をまとめており、多くの場合にハルシネーションが抑えられているように感じました。社内レビューでも合格率97.9%(n=188)を出すことができました。
ChatGPT-4では一定以上のクオリティが担保されたものの、ハルシネーションと呼べるか微妙なラインで文章を「盛って」しまう傾向がやや見られました。そのせいか、社内レビューでは合格率93.4%(n=241)と、Claude 2.1に比べて若干劣る結果となってしまいました。
まとめと今後の展望
本プロジェクトでは、具体的かつ個々の中小企業にパーソナライズされたニーズ文章を、ユーザーの手間をほとんどかけることなく作成することを目指しています。新モデルを用いた実証実験では定性・定量の両面で良い感触を得られました。
今後の課題・展望として、以下があります。
リードタイムの問題:新モデルではボタンを押してからニーズが生成されるまでに1〜2分程度の時間がかかってしまいます。これをどのように短くしていくかを考えていきます。
出力形式の固定:Function callingなどを用いた出力形式の固定化は今回は行いませんでした。今後は積極的に活用していきたいです。
Big Advanceへの新モデルの組み込み:多くの中小企業様に良いビジネスマッチング体験をしていただくため、機能実装を進めていきます。
長文にお付き合いいただき、ありがとうございました!