メルマガ登録
このたびブレインパッドは、LLM/Generative AIに関する研究プロジェクトを立ち上げ、この「Platinum Data Blog」を通じてLLM/Generative AIに関するさまざまな情報を発信をしています。
今回は、議論を活性化する質問をLLM技術によって生成できないかと考え、『この分野は素人なのですが…Bot』を開発した内容を、ご紹介します。
こんにちは、アナリティクスサービス部の藤田です。
ブレインパッドでは、有志による社内勉強会がとても活発で、ほぼ毎日何かしらの勉強会が開かれています。社内勉強会では、参加者による質問が重要な役割を果たします。質問によって、質問者は理解を深めることができ、他の参加者や発表者にとっても新しい視点を得ることができます。しかし、参加者が多い勉強会では少し質問しにくい空気があり、質問がないまま終わってしまうこともあります。
これは発表者にとっても参加者にとっても損失です。
そこで今回、議論を活性化する質問を生成することがLLM技術によって実現できるのではないかと考え『この分野は素人なのですが…Bot』を開発しました。
大まかなつくりとしては、Slackbotにメンションをつけて発表資料となるドキュメントのURLを送ると、内部で生成した質問をリプライで返してくれる、というツールになっています。
出力時間は15秒程度と少しかかりますが、ChatGPTに慣れている人であればそれほど苦にならないレベルです。
肝心のLLMとのやり取りの部分ですが、下記図の通り「前のステップの出力を次のステップの入力の一部とする」という処理を4段階連続させるやや複雑なつくりになっています。
①と③は入力文章の内容を踏まえる必要があるため記事の内容を入力していますが、②と④はあえて独立して動かしています。
なぜわざわざ複雑な4段階構造にしているかについては、後ほど詳しく説明します。
データガバナンスの概要をまとめた資料に対する質問
答えられるかは別として、気になる質問が並んでいる印象です。botだからこそ聞きづらい質問も遠慮なく聞けるという点もメリットになりそうです。
pytestの使い方をデータサイエンティスト向けに説明した資料に対する質問
追加情報をとにかく求めていますが聞き方がちょっと冷たいですね。他との優位性の質問は、ありがちですがいい質問です。
4段階に分けている点がこのbotの一番の工夫点です。分けた理由としては以下が挙げられます。
一般的に、LLMに入力するプロンプトは回答までの道筋を段階的にすることで性能が上がると言われています。ここでは2つ例を紹介します。
有名なChatGPTのプロンプト術として、入力の最後に「ステップバイステップで考えてください」と付け加えるだけで出力の精度が上がるというテクニックがあります。これは、Zero-Shot CoTと呼ばれるテクニックで、「市場に行って10個のリンゴを買いました。隣人に2つ渡しました。それから5つのリンゴを買って1つ食べました。残りは何個ですか?」のような段階的な思考が必要なタスクも回答の精度が上がるというものです。
さらにその発展形としてGPT-4登場以降に出てきたChatGPT/LLMに関する論文や技術の振り返りでも紹介されているPlan-and-Solveというテクニックがあります。これは、
紹介した2つの例はどちらも道筋そのものからLLMに考えさせるテクニックですが、今回は下記2つの理由からその道筋も固定したいと考え、明示的に4段階に分割しました。
最初はダイレクトに質問を生成するプロンプトを書いていましたが、そこには大きな問題がありました。それは、質問の内容が資料に書いてあることに制約されてしまうということです。これでは、質問によって新しい視点を提供し、議論を活性化させることができません。
その問題を解決するために、まず資料を①トピックレベルに抽象化し、②そのトピックに関する一般的な論点を列挙。③資料と照らし合わせて不足している論点を抽出する。ステップを踏みました。これによって、資料にはない視点からの質問が可能になりました。
LLMの出力をSlackに投稿する際はできるだけフォーマットを固定したいと考えています。output形式を指示することは可能ですが、指示が複雑であるほど、指示通りにならないことが増えます。
今回は、質問文に変換する部分だけを最後に切り出すことで、出力を安定させることができるようになりました。
今回プロトタイプとして実装しましたが、たくさんの課題が残っています。
これらの課題を解決しながら、社内の誰でも使える状態を作り、勉強会の活性化につなげたいと考えています。
今回は、LLMを使った「鋭い質問で議論を活性化するSlack Botの開発」についてご紹介しました。
今回、実際にbotを作ってみたことで、これまでのプログラミングでは難しかったアイデアも、LLMをうまく使えば実現可能になることを体感しました。また、出力を安定させるためにはタスクを細かく切ったり、フォーマットを指定するなどプロンプトの工夫が非常に重要であることも身をもって理解できました。
この記事が、「LLMを使って何か作ってみたい」と思っている方の参考になれば幸いです。
あなたにオススメの記事
2023.12.01
生成AI(ジェネレーティブAI)とは?ChatGPTとの違いや仕組み・種類・活用事例
2023.09.21
DX(デジタルトランスフォーメーション)とは?今さら聞けない意味・定義を分かりやすく解説【2024年最新】
2023.11.24
【現役社員が解説】データサイエンティストとは?仕事内容やAI・DX時代に必要なスキル
2023.09.08
DX事例26選:6つの業界別に紹介~有名企業はどんなDXをやっている?~【2024年最新版】
2023.08.23
LLM(大規模言語モデル)とは?生成AIとの違いや活用事例・課題
2024.03.22
生成AIの評価指標・ベンチマークとそれらに関連する問題点や限界を解説