メディアプロダクト開発部マーケティングサービス開発グループ(通称 msdev)の三條です。広告システムやメーカーズタウンというBtoBtoCプラットフォームなどクックパッドにおける toB 向け事業の開発・保守・運用を担当しています。
今週は msdev week と題して、 msdev のメンバーから連続で記事の投稿をしていきます。楽しみにしていてください!
今回は、今流行りの ChatGPT API をメーカーズタウンというプロダクトに活用して機能開発を行い、課題解決を試みた例を紹介したいと思います。
私たちのチームでは、新しい技術を積極的に取り入れつつ、楽しみながらサービスを作っていっていますので、もし興味を持っていただけたら末尾に採用サイトへのリンクがあるのでそちらからご応募いただけると嬉しいです!
メーカーズタウンとは
メーカーズタウンは、食関連メーカーとクックパッドユーザーが双方向のコミュニケーションを取りながら、さまざまな課題を解消していく、企業マーケティングを支援するユーザー参加型のプラットフォームです。
メーカーズタウンというプラットフォーム上で、企業はユーザーとコミュニケーションを取りながらマーケティングを行うことができます。
例えば、自社商品を活用したレシピをユーザーに募集したり、一部のファンユーザーに対して発売前の商品へのフィードバックをもらったりできます。
メーカーズタウンには他にも様々な機能があるのですが、今回はその中の機能のひとつである「トピックス」機能について焦点を絞って紹介します。
トピックスとは
トピックスは企業がユーザーに対して情報を発信することができる機能です。 ここでは企業に興味があるユーザーに対してレシピや商品の紹介、イベントの告知など企業主体で情報を発信することができます。
ユーザーはそのトピックスに対してコメントをすることができ、さらに企業はそのコメントに対して返信を行うことができます。
これらのやり取りを通して、企業とユーザーがコミュニケーションを行っています。
トピックスにおける課題
サービスの成長にともなってユーザーからコメントが投稿されることが多くなってきました。 企業もコメントが増えたことを喜んでいて、とても丁寧に返信作業を行ってくださっています。
その一方で、現在利用している企業の多くはメーカーズタウン専用の担当者がいるわけではなく、その他業務の傍らでメーカーズタウンの運用をしているため、ユーザーからのコメントが増えるにつれて返信作業の負荷が高くなってきています。
企業も慣れないなか、多くの時間を割いて返信作業を行っていますが、返信作業が滞ってしまったり、負担に感じている企業もいるのが現状です。
せっかくユーザーがコメントをしてくれているにも関わらず、返信がこなかったり時間がかかったりすると、ネガティブな印象を与えてしまうため、どうにか返信作業の負荷を下げたいという要望が企業や営業担当の方からありました。
しかし、安易に返信テンプレートを用意したりすると、サービスに同じような返信が投稿されることになるし、本来のコミュニケーションを取る目的からも逸れてしまうのではないか、ということでいい解決策が思いついていない状況でした。
そこで白羽の矢を立てたのが ChatGPT でした。
ChatGPT とは
ChatGPT は OpenAI が提供している AI チャットサービスです。
GPT と呼ばれる大規模言語モデルをチャット用にチューニングしたものを利用しており、自然言語の理解や文章の自動生成などを高度に行うことができます。
ChatGPT は GUI で提供されており、気軽に利用することができますが、開発者向けに API も提供されており、今回は API を利用しました。
ChatGPT では利用するモデルを選択できますが、今回は gpt-3.5-turbo を利用しています。(gpt-4 を使いたい)
ChatGPT API の活用
ChatGPT を使うとコメントに対してとても自然な返信内容を生成することができます。 返信作業の中で負荷が高いのは文の構成を 0 から考える部分であると考え、ChatGPT に基礎となる返信内容の骨組みを考えてもらい、それを元に企業が本来取りたいコミュニケーションにあわせて加筆修正を加えるだけで返信ができるようにすることで、負荷軽減ができるのではないかと考えました。
今回は返信内容の骨組みを生成することが目的で、加筆修正されることが前提にあるので、文言生成に求められる精度が高くないのもまだ不慣れな ChatGPT を活用する上でとても嬉しいポイントでした。
実際に作成した画面は以下になります。
この画面を構築するにあたって、私たちのチームにはデザイナーがいないため、ディレクターやビジネスチームと一緒になって UI や UX について議論しました。
UI/UX においての工夫点
以下、議論の中で考えた工夫点です。
- 本来の目的であるコミュニケーションを阻害しないように注意する
自分で 0 から考えたい担当者がいた際に意図せずバイアスを与えてしまうことを避けるため、担当者がアクションを起こした場合のみ、生成された文言を提示するようにしました。 - あくまで参考程度にして、自身で加筆修正を行ってほしいことを伝える
ChatGPT は不適当な内容を生成する可能性があり、企業とユーザーのコミュニケーションを行うのが本来の目的であるため、生成内容をそのまま投稿するのではなく、参考にしつつ自身の文言で返信をしてもらいたいと考えています。 - ワクワク感の演出
ChatGPT の Web UI の徐々に文言が表示される表現がワクワク感が出て楽しいのでそれを取り入れたいという意見から、メーカーズタウンでも同じようにローディングの演出を行いました。
実装コストの観点から、1 文字ずつ表示されるものではなく、既存 UI で利用していたローディングを再利用しました。
実装においての工夫点
ChatGPT API において生成文言をコントロールするためには、以下が重要になってきます。
- どのようなプロンプトを与えるか
- HyperParameter をどう設定するか
今回は上述のように求められる精度がそれほど高くなかったのと実現までのスピードを優先したため、網羅的な実験を行ったわけではないのですが、プロンプトについていくつか工夫した点を紹介します。
返信内容を生成するにあたって、定量的に評価できる指標などを用意することができていなかったので、以下の 2 点を軸にして主観でよいと思う文言が生成されるようなプロンプトにしました。
- コメント内容に自然に触れていること
- 企業の返信スタイルに沿っていること
また、 HyperParameter のチューニングはできていないのですが、利用したパラメーターは temperature=0.7 でその他はデフォルト値にしています。
パラメーターの詳細はドキュメントに詳しく記載されています。
コメント内容に自然に触れていること
これは以下のようなプロンプトを ChatGPT に与えることでユーザーのコメントに触れつつ、自然な返信を生成することができました
[ { 'system': system_role_prompt }, { 'user': user_role_prompt }, ]
system role prompt
メーカーである${企業名}の広報担当者として振る舞ってください。 あなたのSNSの投稿にユーザーからコメントが来たので返信を考えてください。 ## メーカー名 ${企業名} ## メーカー情報 ${企業の説明文} ## 返信の目的 より${企業名}の商品を好きになってもらうこと。 ## 制約 - ユーザーのコメント内容に間接的に触れること - 投稿内容・コメント内容を繰り返さないこと - 返信内容のみを回答すること - ${その他システムやサービスの都合で必要な制約を列挙}
user role prompt
## あなたの投稿内容 ${トピックスの内容} ## ユーザーの名前 ${ユーザー名} ## ユーザーのコメント ${コメント内容}
具体的な生成例
生成文言例を作成するソースは、今回の記事用に用意したテストデータを利用しています。
この後説明する企業のスタイルに合わせて生成文言が変わっていることを示すための例なので、企業の説明文など細かい情報は省略します。
上記プロンプトを用いて生成された返信文言は以下になります。
種別 | 内容 |
---|---|
コメント | みそにこんなにたくさんの栄養素が含まれていることは知りませんでした! |
生成された返信文言 | クックWU2JRU☆さん、コメントありがとうございます! そうなんです、みそは発酵させることでたくさんの栄養素が生成されるんですよ。食事の栄養補給にもってこいですね!私たちも、美味しさと共に栄養たっぷりの味噌をお届けできるよう取り組んでいます。ぜひ、新郷醸造の味噌を試してみてください! |
かなり自然な受け答えになっていると思います。(個人的には「食事の栄養補給にもってこいですね!」あたりはやや違和感がありますが、このへんは加筆修正してもらう想定です。)
企業の返信スタイルに沿っていること
返信内容には企業によって特色が異なります。
例えば、絵文字をよく使う企業や、言い回し、ユーザー名の引用方法などは企業によって異なります。
これらを再現するため、過去の企業とユーザーのやり取りを利用し few-shot prompting を行いました。
具体的には以下のようにしました。
[ { 'system': system_role_prompt }, { 'user': ${過去のトピックスとユーザーコメント} }, { 'assistant': ${過去の企業の返信} }, ... // 3つ分繰り返す { 'user': user_role_prompt}, ]
生成例
先程例を紹介したものと同じコメントに対して、 few-shot prompting を行った際の例を紹介します。
過去の企業の返信コメントを1つだけ与えてみました。(下表)
わかりやすく極端な例を用意しました。名前の引用方法や、絵文字を多用している点などが先程の生成された文言とは異なります。
種別 | 内容 |
---|---|
コメント | 「畑の肉」という別名かっこいいですね☆ 豆知識勉強になります! |
企業の返信内容 | >クックW66VXK☆さん コメントありがとうございます✨ 私たちも「畑の肉」という別名があることに驚きました❗ 今後もたくさんの役に立つ情報を発信していきますのでよろしくお願いします✨ |
これを例として与えた場合の生成文言は以下になります。
>クックWU2JRU☆さん コメントありがとうございます! そうなんです!みそにはさまざまな栄養素が含まれていて、体に良い影響を与えることが期待されています。また、無添加や有機の味噌もあるので、安心して食べることができますよ✨
例を与えなかった場合(zero-shot)と比べて、 few-shot では名前の引用や絵文字などが反映されていることがわかります。
種別 | 内容 |
---|---|
コメント | みそにこんなにたくさんの栄養素が含まれていることは知りませんでした! |
zero-shot | クックWU2JRU☆さん、コメントありがとうございます! そうなんです、みそは発酵させることでたくさんの栄養素が生成されるんですよ。食事の栄養補給にもってこいですね!私たちも、美味しさと共に栄養たっぷりの味噌をお届けできるよう取り組んでいます。ぜひ、新郷醸造の味噌を試してみてください! |
few-shot | >クックWU2JRU☆さん コメントありがとうございます! そうなんです!みそにはさまざまな栄養素が含まれていて、体に良い影響を与えることが期待されています。また、無添加や有機の味噌もあるので、安心して食べることができますよ✨ |
過去に企業が実際に返信している例を参考情報として ChatGPT に与えることで、絵文字や言い回しなど、企業の返信スタイルを再現してくれるようになりました。
余談ですが、プロンプトのトークン数は、投稿内容によりますが、多いもので 2000~2500 トークンくらいなので、1つの返信内容を生成するのにだいたい $0.05 くらいの金額感でした。
今後の課題と試してみたいこと
今回は、コミュニケーションの負荷軽減を目的として、 ChatGPT API を利用して、返信の参考文言を生成しました。 ある一定のクオリティで文言を生成することができましたが、課題もあります。
- 文言生成性能の定量評価
定量的に評価するための指標が定められておらず、主観による定性評価しかできていません。 - Hallucination の検知
定量評価ができていないことにも関連しますが、生成された文言を評価することができていないので ChatGPT が生成する文言が不適当だった場合に自動で検知することができていません。
現在はコメント数的に手動で確認できる量なので直接見て不適当なものがあれば、手動で再生成するようにしています。 - UI/UX の改善
UI/UX の専門家がいないので手探り状態です。これらは企業からのフィードバックをもらいながら徐々に改善していく予定です。
試してみたいこと
上記の課題に対して改善案として試してみたいことは以下になります。
企業からのフィードバックを元に優先度等を調整して、挑戦していく予定です。
- 性能改善について
few-shot の例として取得する過去事例を、今回対象とするトピックスやコメントの内容に近いものを利用するようにしてみたいなと考えています。
現在は最新の事例を3つ取得しているので、テキストをベクトルに変換して類似度が高いものを採用するとより文脈に沿った文言を生成してくれるかもしれません。 - 定量評価について
定量評価についてはまだいい方法が思いついていないのですが、人手でいくつかの正解データセットを作り、評価するのが一歩目かなと思っています。 - Hallucination の検知
出力結果を評価するようにプロンプトで統制した GPT を利用して、生成された返信内容が適当かどうかを評価させるとどうだろうか、考えています。
その GPT モデルが不適当と判断した場合は再生成したり、アラートを上げるなどして検知させる仕組みを構築できるといいなと考えています。 - UX 改善
企業が返信内容の主題を入力し、それを元に文言を生成させるのはどうだろうか、と考えています。
現在は私たちが用意した目的が固定化されているので、企業の意図した返信内容ではない可能性があります。
しかし、ここは本来の目的であるコミュニケーションに大きく関わる部分なので慎重に検討していきたいと思っています。
まとめ
今回は、ChatGPT API をメーカーズタウンというプロダクトに活用して機能開発を行い、企業の課題解決を試みた例を紹介しました。
網羅的な実験はできていないものの、うまく活用できた一例としてみなさんの参考になっていれば幸いです。
私たちのチームでは、新しい技術を積極的に取り入れつつ、楽しみながらサービスを作っていっていますので、もし興味を持っていただけたら下記の採用サイトからご応募いただけると嬉しいです!
また、今回、ChatGPT を活用するにあたり、機械学習グループの深澤さんに多大なるサポートをいただきました。
機械学習グループの目標として「ChatGPT などの LLM を会社全体で活用できる状態にする。」というものがあるので、プロダクトに LLM を活用していくことに興味がある方はぜひご連絡ください!
機械学習グループについては下記のインタビューをご覧ください。