![見出し画像](https://assets.st-note.com/production/uploads/images/150511910/rectangle_large_type_2_21dafafa9ed5b04bbf6e9597015c2ae0.jpeg?width=1200)
LLM(大規模言語モデル)を使ったマーケティングリサーチ論文のエッセンスと実装上の工夫
こんにちは、ウィスコンシン大学マディソン校PhD課程の西村です。先日、以下のようなツイートをしたら、幸運なことに多くの方から反響をいただきました。ありがとうございます。
人生初の論文が、Journal of Marketing にアクセプトされました、わーいhttps://t.co/OcveN2vMrL
— Yohei Nishimura (@YorkNishimura1) August 10, 2024
定性、定量のマーケティングリサーチに大規模言語モデル使ってみると、RAGとかをいい感じに用いれば、結構筋がいい結果を出してくれるよ、という内容です!
学術界以外にも、マーケター、PdM、そしてエンジニアの方も多くいいねやリツイートをしてくれました。ありがとうございます。
ツイート内のリンク先は学術雑誌であるため、大学などの研究機関に所属するか、お金を払って購入しないと読めません。さらに、論文は英語で書かれているため、読むのに時間がかかる方が多いと懸念します。
そのため、この論文の内容のエッセンスと、結果生成のための実装の解説(と一部のコードスニペット)を公開したいと思います。今後も、自分が著者に入っている論文については、実務における解釈や応用可能性の観点を踏まえ、このようなエッセンス記事を書いていこうと思います。
なお、本記事に使っている図表は、SSRN(正式なジャーナルに乗せる前の"プレプリント"を乗せるサイトです。arxivと似ているサービス)に載せているものから引っ張りました。ご興味のある方は、こちらのリンクからご確認ください。Twitterのリンク先のペーパーに近い内容です。
論文のエッセンス
この論文は、とても雑に一言でいうと「実際に企業で使った定量、定性リサーチの問と回答者のペルソナをインプットとして、GPT-4に回答を生成させたら、両方とも比較的うまくいったよ」です。
もう少し詳しく言えば、定性リサーチについては、
In-depth interviewについて、GPT-4に生成させた回答と、実際に企業が行ったときの人間の回答とを、クラウドワーカーの採点によって比べると、Depth(回答の深さ、詳しさ)とInsightfulness(洞察の多さ)で、GPT-4はより良い性能を発揮したよ。
意味的な分析では、人間の回答とGPT-4の回答は、重なっているところもあるし、人間の回答でしかわからないインサイトもあれば、GPT-4でしかわからないインサイトもあったよ(だから両方を実施することに意味があるよ)。
(他の分析も合わせていえば)GPT-4や同性能のLLMではリサーチのデザインや想定するペルソナの生成、回答の生成、その結果の分析、といった、リサーチデザインから分析まで、人間の良いサポート役になれるよ。
という感じです。定量リサーチについては、
RAGやIn-context learningなしでは、人間の回答と大きな方向性の違いはなかったよ(つまり選択肢が1−5だとして、人間の回答の平均が2のとき、GPT-4が生成した回答の平均も2前後だったよ)。ただし、人間の回答に見られるような分布(分散、つまり回答のばらけ、散らばり具合)やInternal consistency(ある回答にYesと答えたら次の回答もYesと答えないと一貫性が満たされないよね、ということ)が見られなかったよ。
これまでの質問と回答の履歴を、次の質問のインプットにして回答を生成する、というIn-context learningと、関連する定性リサーチの質問と結果を外部データベースとしたRAGの両方を使うと、散らばり具合やInternal consistencyが人間の回答に近くなったよ。(これは例えば、3番目の質問をインプットするときに、1-2番目の質問と生成した回答のペアを一緒にインプットすると、3番目の質問の散らばり具合が人間に近くなったよ、ということです。)
定量リサーチでも、サーベイ自体のデザインやその生成にGPTや他のLLMを活用できるよ。
という感じです。以下は、もう少し詳しいデータを補足します。
定性リサーチ
定性リサーチの生成は、インプットを「ペルソナ、リサーチの目的、具体的な質問」として、LLMに回答をアウトプットさせています。特にインパクトのあった工夫として、「LLMにインタビューのモデレータを模倣させる」というものがあります。この点は、コードとともに「実装上の工夫」セクションで紹介します。
以下は分析結果の補足です。
「Depth(回答の深さ、詳しさ)とInsightfulness(洞察の多さ)で、GPT-4はより良い性能を発揮した」というのは、以下のRegressionの結果から得られるものです。Regressionは、文字数や回答者のペルソナもコントロールした上で実施しています。興味のある方はSSRNの論文内の23-24ページに詳しい説明があります。
![](https://assets.st-note.com/img/1723488411884-kv3V4wrgpu.png)
また、Sentence Transformerを使って、人間とGPT-4の回答の意味的な差分を比較しています。Visualizationとして、Sentence Transformerの結果を、UMAPで2次元に落とし込んでマッピングしています。こちらもSSRN論文内の56-57ページに記載があります。
![](https://assets.st-note.com/img/1723488511751-66IeInlWbQ.png)
定量リサーチ
In-context learningやRAGの具体的なやり方は、次のセクションで図とともに説明します。このセクションは、エッセンスで述べた部分のデータでの補足を述べます。
以下のグラフは、ある3つの質問に対する回答の平均値(選択肢は1−5)と95%信頼区間をエラーバーで表したグラフです。人間の回答を「Actual」、Zero-shotのGPT-4を「LLM1」、回答と質問ペアの履歴を入れたものを「LLM2」、In-context learningに加えてRAGを施したものを「LLM3」としています。LLM2,3が、Zero-shotのGPT-4に比べて人間の回答に近づいていっている、及びその信頼区間が広がっている(=分散が高くなっている)ことがわかります。ただし、人間の散らばり程度によりも狭いままです。SSRN上では41ページ付近に図と説明があります。
![](https://assets.st-note.com/img/1723488760057-5QB4VmXUC4.png)
また、Internal consistencyについては、ある7つの問題に対するCorrelation matrixを調べています。以下の図で、LLM1から、LLM2,3に変化させたときの改善が見えます。SSRNの論文では、42ページにこの図と説明があります。LLM2だとちょっと相関が強く出すぎている一方、LLM3だとそれがよりマイルドになっています。ただし、LLM2,3どちらの結果も、人間のCorrelation matrixとは統計的に有意に異なっています。
![](https://assets.st-note.com/img/1723489742194-1cnzP4eZnR.png)
また、この論文では、最終的には、定性、定量のマーケティングリサーチにおいて、LLMをどこでどのように使えるかのフレームワークを提示しています。それが以下の図です。SSRNの論文で、17ページと43ページにある図を合わせたものです。左が定性リサーチ、右が定量リサーチのおすすめワークフローです。
![](https://assets.st-note.com/img/1723489917529-M1d4K3Nuo9.jpg?width=1200)
実装上の工夫
このセクションでは、まず全体のアーキテクチャを概説した後、定性、定量リサーチの回答生成において、実装上で工夫した点を説明します。
アーキテクチャ
システム図は以下のとおりです。ペルソナとリサーチコンテクストやリサーチ目的をSystem roleに入れて、具体的な質問をUser roleに入れています。それをAPI経由でサーバに送り、レスポンスをパースしてValidation check(例えば1-5の間の数値のみで回答しているか、など)にかけます。通ればそれを保存すると同時に、質問と回答のペアを次の質問のUser role内に入れます。これを、質問セットが完了するまで繰り返します。
上記のイテレーションを、必要なサンプル数だけ繰り返します。
![](https://assets.st-note.com/img/1723490024929-6BMr2zYpDe.png)
回答生成の工夫
定性リサーチ
上記に記載の通り、最も大きな工夫は、「LLMにモデレータの役割もやらせた」点です。
人間が行うIn-depth interviewでは、回答者の回答が不足していたり、もっと突っ込んだら面白そう、というときに、モデレータがより深く突っ込んだ質問を行いますよね(これをProbingと呼びます)。このProbingをLLMにやらせてみよう、というのがコンセプトです。私達は、これを"Moderated interview of LLMs by LLMs"と名付けました(そのままですね)。
![](https://assets.st-note.com/img/1723490363431-naH7Joyoh2.png?width=1200)
まず質問をLLMに投げます。
返ってきた回答を、別のリクエストとして、「この回答は、このリサーチの目的から考えると何点だと思う?」とインプットし、LLMに採点させます。
そのスコアが一定以下であれば、「このリサーチと質問、回答を踏まえて、Probingのための質問を考えて」と、LLMに問います。
返ってきたProbingの質問を、再度LLMに回答させます。
この一連の流れを、スコアが閾値以上になるまで、もしくは3回終わるまで実施します。
このモデレーションのためのコードスニペット(簡略化してます)は以下のとおりです。そのままでは動きません、疑似コード的にご覧ください。
# sys_dict includes data related to persona and research context.
persona, research_q = sys_dict['Persona'], sys_dict['ResearchContext']
probe_count = 0
while exist_probe and probe_count < MAX_PROBE:
# get score from LLM to decide if we should ask additional probe
ans_dict = ask_llm_to_score(persona, research_q, latest_q)
exist_probe = average_scores(ans_dict)
# if the confidence level higher than threshold, then go next q.
if exist_probe >= probe_threshold:
print("There is no additional probe. Go to next question.")
break
else: # generate additional probe
ask_probe = generate_probe(persona, research_q, latest_q)
ans = post_api(sys_role=sys_role, usr_role=ask_probe)
ask_llm_to_score関数では、「関連性、深さ、明確さ、インサイトがあるの4つの観点で、与えられた質問と回答を、与えられたリサーチコンテクストから採点して」をプロンプトとして、APIをリクエストしています。
generate_probe関数では、「与えられた質問と回答、及び与えられたリサーチコンテクストを踏まえて、追加で問うべき1つのProbeを出力して」をプロンプトとして、APIをリクエストしています。なおpost_apiは、エラーハンドリングなどを行いながらOpenAI APIを呼び出すための関数です。
定量リサーチ
定量リサーチでは、In-context learningとRAGを用いました。以下に使い方を述べます。
In-context learningの応用は、質問回答のペアの履歴を、System roleに入れる、というシンプルなものです。post_apiで回答を得たら、回答と質問をhistorical data を保存しているDictに保存して、それをパースして次の質問のときに取り込む、ということを実施しました。
RAGは、既存の別リサーチを外部データソースとして活用する、というものです。
![](https://assets.st-note.com/img/1723491617589-tkPGGg24KS.png?width=1200)
外部データソースは、この論文ではChromaDBを用いました。が、別のサービス、例えばPineconeでも構いません。
まず、外部データソースに何を使うか決めます。私達の論文では、既存の定性リサーチの質問と回答結果を使いました。他の候補としては、外部のリサーチ会社が作ったリサーチペーパーや公的なデータでも良いでしょう。重要なことは、自分が生成するリサーチの目的に「関連した」データを集める、ということです。
次に、外部データソースをベクトル化します。私達の場合はSentence Transformerを使いましたが、これもいろんなやり方があると思うので、好みの、もしくはより効果の高いモデルを使うと良いと思います。
次に、生成させたい質問と関連する情報を、外部データから取り出します(Retrieveします)。私たちは、これをChromaのメソッドを使って実施しましたが、RAGはこのRetrieveが本質的に重要なところなので、目的に沿ってより複雑なリトリーブ方法を導入しても良いと思います。図では、「Q: How important is "Made with Human-Grade Ingredients" to you? A: Somewhat Unimportant. Dogs do not have the same dietary needs as humans. 」が該当箇所です。
最後に、リトリーブした結果と、生成させたい質問(図では、「Q: How likely would you be to purchase Human graded dog food?」が該当)をセットでLLMに質問し、回答を得ます。本セクションもコードスニペットは省略します。
さいごに
今回の記事では、LLMにマーケティングリサーチを生成させてみた論文のエッセンスと実装上の工夫を、論文の図やステートメント、及びセミナーでの発表資料とかんたんな疑似コードを交えて説明しました。
今後も、自分たちのリサーチや最新のリサーチを、実際のマーケティングや経営、プロダクトの業務に従事している方を想定読者として、わかりやすく発信していきたいと思います。
本記事へのご意見、ご質問やリクエストがございましたら、ぜひコメント欄にお願いします!
また、私自身は、いつでも企業とのコラボレーションの機会を探し求めています!リサーチのコラボレーションは、私だけではなくWisconsin School of Businessの教授も含めて実施します。ぜひお声がけください!私の詳しいプロフィールはこのリンク先ページにございますので、お気軽にメールをいただければ幸いです!(Twitterでももちろん構いません!)
この記事が気に入ったらサポートをしてみませんか?