【ブロードリスニング】Talk-To-The-Cityで実現するお客さまの声分析
この投稿は、2024年JINSのアドベントカレンダー13日目の記事です。
はじめに
2024年8月にJ!NSに入社したKa2です。
僕は、人々の行動や社会のトレンドの分析と深い理解から得たインサイトを基に、お客さまの行動をポジティブに変化させ、より良い体験や選択肢を提供することを目指しています。
問題意識
SNSやスマートフォンの普及により、お客さまの声はかつてないほど可視化されました。企業は、レビュー、SNS、アンケート結果など、膨大な量のお客さまの声にアクセスできるようになりました。
しかし、情報が溢れすぎて、お客さまの声を適切に抽出することは容易ではありません。
例えば、ある商品に対するレビューを分析する場合、肯定的な意見、否定的な意見、機能に関する要望、価格に関する意見、購入プロセスの煩雑さなど、様々な情報が混在しています。数十程度のコメントであれば、1つずつ確認していけば良いと思いますが、数千コメントを超えると現実的でありません。
また、インターネット上では、エコーチェンバー現象(自分と似た意見を持つ人々が集まることで、特定の意見が増幅される現象)やフィルターバブル現象(アルゴリズムによって自分に都合の良い情報ばかりが表示されるようになり、視野が狭まってしまう現象)が起こりやすく、偏った情報に影響されてしまう可能性があります。これらの現象によって、情報が溢れすぎるがために、お客さまの声を"正しく"理解することが難しくなっています。
ブロードリスニング
どのようにすれば、全体感を失わない状態で、包括的かつ理解しやすい単位でお客さまの声を収集することができるのか?様々な意見を公平に聞き、全体像を把握する考え方こそが、ブロードリスニングです。
ブロードリスニングは、オードリー・タンらによって使われるようになった言葉で、東京都知事選でも話題になった安野貴博さんらが活用したことでも注目されました。
政治関連での活用が多いようですが、ビジネスの世界でも「お客さまの声を聞く」「マーケットの声を聞く」「社員の声を聞く」などなど幅広い活用があると思います。
先にも書きましたが、ネットに限らずオフラインの世界でも、自分の趣味志向に近いクラスタの中で生活することが多くなるので、どうしても偏った捉え方になりがちです。そこで、「他人がどういう考えを持っているのか」を客観的かつフェアに理解するツールとしても役立つと考えられます。
Talk-To-The-City
Talk-To-The-Cityは、AI Objectives Instituteが開発したAIツールで、大量のテキストデータを分析し、様々な意見を人間が理解しやすい形に整理してくれます。例えば、意見をグルーピングして、それぞれのグループの特徴を要約したり、意見の分布を視覚的に表示したりすることができます。
従来の自然言語処理を使った分析では、ワードクラウドなどに代表される単語レベルでの可視化では、文脈を読み取りづらく、結局何が言いたいのかがわかりにくかったり、LDA(Latent Dirichlet Allocation)などのトピックモデルでは、大量のテキストから自動的にトピックを抽出する手法ですが、結果が抽象的で解釈が難しかったり...などの課題がありました。
そこで、Talk-To-The-Cityです。LLM(Large Language Models)の発展によって、文章を直接解釈できることになったことや、それほど専門的な知識がなくても、それなりに良い感じの分析することがサクッとできるようになったことは画期的です。
Talk-To-The-Cityには、scatter
とturbo
の2つのツールがあります。scatter
は大量のテキストデータをもとに意見の分布を可視化することに優れています。turbo
はscatter
で得られた結果を、詳細に深掘りする際に役立ちます。本投稿では、scatter
の使い方について記載します。turbo
については別の機会に。
まず、このツールの中で何が行われているか?を超大雑把にいうと
- 各テキストコメントの要点を抽出(LLMの得意なところ)
- 要点ごとにグループ化(クラスタリング)
- クラスタごとに何がいいたいのかまとめる
と理解しています。
これまでは、各ステップ別々にコード作って〜とかやっていたのを、このツールでは一気通貫でやってくれます。なんと素晴らしきこと。
実際の動かし方については、How to generate reports
の通り進めていけば良いですが、いくつか細かい注意点に触れていきます。
前提
Talk-To-The-Cityを使用する前に、以下の準備が必要です。
Pythonのバージョンは、3.10または3.11がおすすめです。3.12だと途中でエラーが出る可能性があります。(2024/12/13時点)
Talk-To-The-Cityは、GPTのAPI
を利用します。まだ持っていない人は、こちらを参考にして、APIキーを取得してください。
データの準備
今回は、Talk-To-The-Cityの使い方を紹介するために、Yahoo!ニュース(元記事:小型スマホがオワコン化している理由-時代は「薄さ」を追求)に寄せられたコメントを活用したいと思います。
(注)今回は使い方の紹介が主題なので、データ元を気にしませんが、業務上使うときは、回答者の属性とトピックの知りたいことの整合性など、データ元の議論はとても大切です。
コメントデータは、カラム名が「comment-id」と「comment-body」で保存します。
/talk-to-the-city-reports-main/scatter/pipeline/inputs/example-polis.csv
example-polis.csv
comment-id,comment-body
1,スマホのサイズは、結局使い方次第ですよね。動画をよく見る人は大画面がいいだろうし、持ち運びやすさを重視する人は小型がいい。最近は折りたたみスマホもあるし、選択肢が増えて嬉しいです。
2,私は手が小さいので、大型スマホは片手で操作しづらくて困っています。でも、小型スマホだと画面が見づらく感じることも。メーカーには、持ちやすさと見やすさを両立させたスマホを開発してほしいです。
3,最近のスマホは高性能になりすぎて、オーバースペックだと感じています。シンプルな機能の小型スマホを、低価格で販売してほしいです。
4,スマホでゲームをすることが多いので、大画面で高性能な機種が必須です。バッテリー持ちも重要なので、小型化よりもバッテリー容量を重視してほしいです。
5,スマホのサイズだけでなく、デザイン性も重視しています。おしゃれで個性的なデザインの小型スマホが増えてほしいです。
6, ......
各種ファイルの設定
configs
: 設定を記述するファイルです。
prompts
: LLMに与えるプロンプトを記述するファイルです。
configs
/talk-to-the-city-reports-main/scatter/pipeline/configs/example-polis.json
example-polis.json
{
"name": "Recursive Public, Agenda Setting",
"question": "小型スマホがオワコン化している理由は?",
"input": "example-polis",
"model": "gpt-4o",
"extraction": {
"workers": 3,
"limit": 100
},
"clustering": {
"clusters": 8
},
"translation": {
"model": "gpt-4o",
"languages": ["Japanese"],
"flags": ["JP"]
},
"intro": "This AI-generated report relies on data from a Polis consultation run by the Recursive Public team."
}
・input
:(.csvを除いた)データのファイル名
・clusters
:クラスタ数(結果を見ながら調整する)
・model
:利用するGPT model
prompts
/talk-to-the-city-reports-main/scatter/pipeline/prompts/extraction/default.txt
/talk-to-the-city-reports-main/scatter/pipeline/prompts/labelling/default.txt
/talk-to-the-city-reports-main/scatter/pipeline/prompts/overview/default.txt
/talk-to-the-city-reports-main/scatter/pipeline/prompts/takeaways/default.txt
/talk-to-the-city-reports-main/scatter/pipeline/prompts/translation/default.txt
LLMを利用する際のプロンプトになります。
デフォルトでは英語であることや、AIに関する調査結果を前提にしたプロンプトになっているので、トピックによって書き換えた方が良く、プロンプトの中に含まれるFew-Shotプロンプト
(少数の例を示すことで、特定のタスクの実行方法を教える方法で、下記の例に含まれる/human
以下の部分)もトピックにあわせた例に修正した方が良いと思います。
/extraction/default.txt
/system
あなたは一流のプロフェッショナルリサーチアシスタントです。
あなたの仕事は、私をサポートすることです。
私の仕事は、スマートフォンの小型化トレンドに関する議論から、整理されたデータセットを作成することです。
これから共有するコメントをより簡潔で読みやすくするのを手伝ってほしい。
必要に応じて、1つのコメントを複数の個別の意見に分割することができますが、可能な限り、1つのトピックにまとめることを優先してください。
要約した結果を、適切にフォーマットされた、JSON形式の文字列リストとして返してください。
/human
小型スマートフォンは使いやすいですが、バッテリー容量が小さいのが難点です。大画面のほうが動画視聴には適していると思います。
/ai
[
"小さいスマートフォンは使いやすいが、バッテリー容量に難がある",
"大きいスマートフォンは動画視聴に適している"
]
/human
値段が高すぎる大きいスマホより、基本性能搭載で比較的安価な小さいスマホの方が有難いです。
/ai
[
"基本的な機能が備わっていて、安くて小さいスマートフォンの方が良い"
]
/human
最新の小型スマホは、省電力チップの採用で以前よりバッテリー持ちが良くなっているので、サイズと性能のバランスが取れてきていると思います。
/ai
[
"最新の小型スマホは省電力技術の進歩でサイズと性能のバランスが向上している"
]
/human
大画面スマホの普及で、電子書籍や動画視聴の利便性が格段に上がったことは否定できません。しかし、通話やメッセージングだけを重視する人にとっては、やはりコンパクトな端末の方が使い勝手が良いでしょう。
/ai
[
"使用目的によってスマートフォンの適切なサイズが異なる"
]
/human
小型スマホは片手操作が楽で、ポケットにも入りやすいのがいいですね。でも、最近のアプリは大画面向けに作られているものが多くて使いづらいこともあります。
/ai
[
"小型スマホは携帯性に優れるが、大画面向けアプリの使用に難がある場合がある"
]
英語のままのデフォルトのプロンプトでも実行できましたが、言わずもがな、プロンプトは超重要です。もちろん、テキストの要約やクラスタリングの結果の質に影響があります。なので、使うデータセットによったり、GPTのバージョンによっても、しっかり見直していくことが必要です。
実行
- 環境の設定
cd ./talk-to-the-city-reports-main/scatter
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python -c "import nltk; nltk.download('stopwords')"
- JavaScriptの依存関係のインストール
cd next-app
npm install
- OpenAI APIキーの設定
export OPENAI_API_KEY=sk-proj-XXXXXXXXXX
- 実行
cd ../pipeline
python main.py configs/example-polis.json
結果
/talk-to-the-city-reports-main/scatter/pipeline/outputs/example-polis/report/index.html
実行結果として、次のような図が作成されます。
それぞれの点が各コメントを表していて、距離が近い点どうしが意味が近いコメントを表しています。
今回はクラスタ数を8個に設定したので、8色に分かれていて、各クラスタごとにそのクラスタのまとめのラベルもついています。
例えば「小型スマートフォンへの欲求」と「大画面の需要」を結びつけているのが「携帯性と多機能化のバランス」というのは良いまとめだなと感じました。確かに「通話機能など最低限の機能とを求める人たち」は小型でよく、「充電を気にせず、動画もがっつり見たい人たち」は大型を求める傾向にあり、それらは、目的も違うし、技術的には機能性とのバランス問題につながるよね、と。
それぞれのクラスタの詳細については、次のとおり、要点のまとめと、アサインされたコメントの割合をそれぞれ表示してくれるので、各クラスタのボリューム感も、具体的なコメントも1つの図で確認できるのは効率的です。
・「年齢に関連した画面の好み」クラスタでは、同じ大画面需要でも、高齢者は視認性の観点から、若者は動画視聴やゲームの観点
・「需要と収益性の低さ」では、小型スマートフォンを好むユーザは電話機能などの最低限の機能を求めていることから、買い替え需要も少なく、販売台数で利益を稼ぐのが難しいこと
などの多様な観点を含んだ結果になったことも素晴らしいです。
なお、クラスタ数を10にして実行すると、以下のような結果になります。
・「コンパクトサイズの好み」と「小型スマートフォンの需要」
・「バッテリーとパフォーマンスのニーズ」と「バッテリー容量不足」
などは、それぞれ似ているクラスタともいえるので、クラスタ数は10でなく8のままでいいか、など、結果を見ながら、クラスタ数は調整していきました。
これらのレポートが、それほど専門的な知識がなくても、作成することができるのはすごいですよね。
まとめ
Talk-To-The-Cityは非常に強力なツールですが、まだいくつかの課題も存在します。例えば、クラスタのラベリングが不正確な場合や、分析結果にノイズが含まれる場合があったり、日本語が少しスムーズでなかったり。これらの課題に対しては、プロンプトの改善、データのクリーニング、分析結果の確認など、様々な対応策を検討する必要があります。もちろん、結果の妥当性についても、分析者が1つ1つチェックする必要があります。ただ、「まずは概要を把握する」という目的であれば、かなり使い勝手が良いな、と感じました。
今回は、「Yahoo!コメント」のコメントを利用したので、記事に対するさまざまな軸のコメント(例えば、ある人は自分の好みのコメント、ある人は企業視点でのコメント、ある人は俯瞰したコメントなど)が含まれるので取り扱いに注意が必要です。また、投稿者の属性にも偏りがあるかもしれないので、この結果だけでどうこうを判断するというより、あくまで、この「Yahoo!コメント」の軸で斬った場合にどうなるか、の観点になります。
なので、実務で使うときは、当然、「質問の聞き方」、「データ収集の方法」が非常に大切になります。
つまり、AIにデータを処理してもらうことを考えた上で、データ収集をすることで、効率が良いフローを構築することができるとも考えることができます。
発想としては、業務にAIを合わせるのではなく、AIに業務を合わせる、ですね。この変革こそが、AIの業務への装着の鍵だと思います。
いずれにせよ、以前に比べると、テキストデータの扱いが格段に楽になってきたのは、間違いないですし、テキストを柔軟に扱えることで、業務への応用範囲もめちゃくちゃ広がります。LLMの進化は、仕事のやり方・あり方を確実に変えるので、しっかりとキャッチアップを続けていきたいと思います。
参考
https://takahiroanno.com/directvote
https://note.com/nishiohirokazu/n/n0661204bda5b
Discussion