ソーシャル経済メディア「NewsPicks」の中村です。普段はデータ基盤の開発、運用をしたりLLMで遊んだりしています。
さて、NewsPicksは名前の通りニュースアプリですが、ユーザーの皆様がニュースにコメントを付けることができるのがひとつの特徴となっています。一般のユーザーだけでなく様々な分野の専門家の方々にも「プロピッカー」として専門の観点からコメントしていただいており、「この分野のニュースであればあの人のコメントが読みたい!」と思ってコメント欄を開くユーザーの方も多いと思われます。
しかし、特定のユーザーのコメントが読みたいと思っても目当ての方が必ずコメントしてくれているとは限りません。悲しいですね。そこで本記事では、LLM(大規模言語モデル)の力を使って読みたいコメントを生成する実験をしてみたいと思います。
この記事はNewsPicks アドベントカレンダー 2023の5日目の記事です。
実験の前提
「あの人のコメントが読みたい!」と思うときに具体的に我々が期待しているのはどんなことでしょうか。本人が書いたかのようであり、かつ読者にとって有益な内容を含むコメントを生成するためには、少なくとも以下の2点は必要なように思われます。
文体。コメントにおける語の選び方や表現の仕方、口調などがその人らしいものであること
知識、経験。コメントがその人の過去の経験や専門的な知識を反映した内容であること
これらの要素を考慮してLLMに望みの文章を生成してもらうための主な技術としてファインチューニングとプロンプトエンジニアリングがありますが、本記事ではプロンプトエンジニアリングのみでその人らしいコメントを生成することを目指します。
実験設定
LLMで模倣する対象者は、我らがNewsPicksのCPO/CTOである文字拓郎さんとします。
使用するLLMはGPT-4、特にその最新版であるgpt-4-1106-preview
とし、再現性を高めるためtemperatureは0に設定します。
使用するプロンプト(GPT-4のシステムプロンプト)は以下のようなテンプレートに従うものとします。
あなたはソーシャル経済メディア「NewsPicks」のCTO/CPOの文字拓郎さんです。以下の情報を参考にして、与えられたニュース記事に対して文字拓郎さんとしてコメントを書いてください。 # 文字拓郎さんのプロフィール NewsPicks をつくっています。プロダクト開発・プログラミング・DX・Web 3・デザイン・小説・NBA などに関心を示します。もともとはデリバティブのトレーディングシステムやリスク管理システムなどの金融システムを開発していました。エンジニア募集中です! # 文字拓郎さんの過去のコメント例 {examples} # 注意事項 以下では記事のタイトルとサマリを 記事タイトル:<ここに記事タイトルが入る> 記事サマリ:<ここに記事サマリが入る> という形式で与えるので、与えられた記事に対する文字拓郎さんのコメントだけを出力してください。「コメント:」のようなプレフィックスや前置きの挨拶は必要ありません。
テンプレート内の{examples}
には以下のような形式で過去のコメント例を埋め込みます。
記事タイトル:【全記事無料】2013→23 インタビュー記事ベスト 記事サマリ:みなさんこんにちは。NewsPicksの土山です…(以下略) コメント:改めてトップの出木場さんのインタビューを読んでみましたが、面白いですね…(以下略) --- 記事タイトル:【新】Gメール、YouTubeも…。グーグル「新AI戦略」が本気だ 記事サマリ:今年3月、グーグルは対話型AI(人工知能)「バード(BARD)」をリリースした…(以下略) コメント:先日サンフランシスコのイベントに行ったときのレポートを書いたのですが…(以下略) --- …(以下同様に、コメント例を5件並べる)
ここで、コメント例としてどんなものを埋め込むかは任意です。このようにプロンプト内にLLMの外部から取得した情報を埋め込んで文章を生成する手法はRAG(Retrieval-Augmented Generation)と呼ばれていますが、どのようなRAG戦略を取れば本人らしい質の高いコメントが生成できるのでしょうか。本実験ではコメント例の選び方として以下の3パターンを試します。
- [fixed] 常に同じコメント例を使う:あまり良いコメントが生成されなさそうに思えますが、ベンチマークとして用意
- [random] ランダムに選ぶ:あえてコメント生成対象となる記事と関係の薄いコメント例を選ぶことで、一見関係なさそうな話題を結びつけた意外性のあるコメントが生成されることを期待
- [nearest] コメント生成対象となる記事と類似した過去の記事に対するコメント例を選ぶ:過去のコメントに含まれる本人ならではの知識や観点を反映したコメントが生成されることを期待。記事の類似性の計算にはOpenAIのembedding([
text-embedding-ada-002
])(https://platform.openai.com/docs/guides/embeddings/what-are-embeddings)を用います
これら3パターンのそれぞれについて、本人が実際にはコメントしていない記事30件に対してLLMでコメントを生成しました。
なお、プロンプトで利用したプロフィールやコメント例はすべてNewsPicksの本人のユーザーページで公開されているものです。
実験結果
元々の予定では、生成された各コメントについて以下のような観点から評価を行って集計するつもりでした。
- 文体が本人らしいか
- コメントの内容が記事の内容に即したものになっているか
- 意外性のあるコメントか
- コメントが本人の経験や知識を反映した内容を含んでいるか
しかし、実際に生成されたコメントを見ると、3パターンのどれもあまり変わりばえのしないコメントが生成されている場合がほとんどでした。以下に例を示します。
コメント生成対象記事
記事タイトル:【体験談】低予算で「空き家」のビジネスを始めてみた 記事サマリ:「タダでもいいから、手放したい」所有者がそんな風に思っている空き家が、日本には無数に存在する…(以下略)
fixedパターン
埋め込んだコメント例
記事タイトル:【全記事無料】2013→23 インタビュー記事ベスト 記事サマリ:みなさんこんにちは。NewsPicksの土山です…(以下略) コメント:改めてトップの出木場さんのインタビューを読んでみましたが、面白いですね…(以下略) --- 記事タイトル:【新】Gメール、YouTubeも…。グーグル「新AI戦略」が本気だ 記事サマリ:今年3月、グーグルは対話型AI(人工知能)「バード(BARD)」をリリースした…(以下略) コメント:先日サンフランシスコのイベントに行ったときのレポートを書いたのですが…(以下略) --- …(以下略)
生成されたコメント
空き家問題は日本のみならず、世界的にも注目されている社会課題の一つですね。 …(中略)… DX(デジタルトランスフォーメーション)を推進することで、空き家問題の解決に貢献できる可能性があります。 私たちNewsPicksも、こうした社会課題に対して、テクノロジーを活用した解決策を提案し、実現に向けて貢献していきたいと考えています。
randomパターン
埋め込んだコメント例
記事タイトル:NewsPicks の Google Chrome 拡張をリリースしました - NewsPicks Blog 記事サマリ:こんにちは、NewsPicks の開発を担当している文字(もんじ)です…(以下略) コメント:不具合のご報告ありがとうございます…(以下略) --- 記事タイトル:【山崎元】2017年版、個人のお金の運用戦略 記事サマリ:本稿では、2017年に個人がどのようにお金を運用したらいいかについて考えてみます…(以下略) コメント:NewsPicks 平均読者の想定貯蓄額がヤバい…(以下略) --- …(以下略)
生成されたコメント
空き家問題は日本のみならず、世界的にも注目されている社会課題の一つですね。 …(中略)… また、テクノロジーを活用して空き家の情報を集約し、マッチングを効率化するプラットフォームの開発など、DXの観点からも面白い取り組みが期待されます。 NewsPicksとしても、こうした新しいビジネスモデルの動向を注視し、情報提供をしていきたいと考えています。
nearestパターン
埋め込んだコメント例
記事タイトル:【新常識】若者よ。稼ぎたいなら、日本を出よ 記事サマリ:「実は今タワマンの30階に住んでいます(笑)」…(以下略) コメント:「NEO 出稼ぎ」という言葉のインパクトがすごい…(以下略) --- 記事タイトル:賃貸にすべきか、持ち家にすべきか。それが問題だ 記事サマリ:前回もまとめましたが、40代にとっての資産運用で質問が多く寄せられるのは…(以下略) コメント:住宅購入年齢が平均 40 歳代というのは意外…(以下略) --- …(以下略)
生成されたコメント
空き家問題は日本の縮図のようなものですね。 …(中略)… このような取り組みは、地方創生や持続可能な社会づくりにも寄与する可能性を秘めています。 …(中略)… また、私たちのプラットフォームが、こうした新しい試みに対する情報交換の場としても機能することを期待しています。
生成されたコメントには、全般的に以下の傾向が見られました。
- ですます調という点では本人の文体を再現しているものの、本人なら使うであろう記号や砕けた表現(「…」「(笑)」等)が見られない。「素のChatGPT臭さ」が抜けきっていない
- プロンプトに埋め込んだコメント例の内容はほとんど生成されたコメントに反映されない。特にコメントの最初と最後は似たような内容になりがち(「〜は興味深いですね」「NewsPicksでは〜していきたいと考えています」等)。ただしこれはtemperatureを0にした影響も大きそうです
- プロンプトのプロフィールに記載した内容は生成されたコメントにもしばしば反映される(「DXの観点では〜」等)
唯一3つのパターンで明確な差があったのは生成されたコメントの長さです。randomパターンでは他の2パターンより埋め込まれるコメントの平均長が短いのですが(「おもしろい!」「素敵!」のようなごく短いコメントが多く含まれるため)、生成されるコメントの平均長もrandomパターンで最小となっていました。
おわりに
本記事ではLLMのプロンプトエンジニアリングによって、特定の人物らしいコメントを生成することを試みました。特に、プロンプトに埋め込むコメント例によって生成されるコメントの内容に違いが生まれるかを簡易的に検証しました。
私にとっては意外なことでしたが、埋め込むコメント例の内容は生成されるコメントの内容にほとんど影響しないという結果が得られました。仮説に過ぎませんが、「与えられた記事に対して関連性のあるコメントを生成する」というタスクだけが適切にin-context learningされて、コメント例の内容がほとんど影響を与えなかったということなのかもしれません。他方で、プロンプト内のプロフィール記述は生成されるコメントの内容にもしっかり影響しており、プロンプトエンジニアリングの難しさを感じました。
いずれにせよ、「あの人のコメントが読みたい!」という欲求にLLMで応えるまでの道のりはまだ長そうです。