メインコンテンツへスキップ
見出し画像

ブロードリスニングツールTTTCを試してみた〜魔法の杖にも人間の知恵〜

     大量の意見をAIで収集・要約する「ブロードリスニング」。その代表的なツールTalk to the City(TTTC)を試してみた。一見すると魔法の杖のようなツールだが、実際にSNS投稿を題材に試してみると、人が理解できる形に仕上げるにはやはり人間の知恵と工夫が必要だった。



    魔法のようなツール(TTTC)との出会い

     TTTCは米国のNPO「AI Objectives Institute」が提供する。多くの意見には、似た話題や関心があり、自然とまとまりが発生している。それを瞬時に見つけて集約するだけでなく、細やかなニュアンスも拾い上げる“魔法の杖”のような存在だと感じた。
     きっかけは政治部からの依頼だった。政治家がAI活用に乗り出しているという記事を準備する中で、「社内でもTTTCを試し、その成果を記事に反映したい」との相談を受けたのである。

    画像
    NPO「AI Objectives Institute」のホームページ


    消費税減税をテーマにTTTCを実験

     取り上げたテーマは「消費税減税」。物価高対策をめぐって「食料品だけ税率を下げるべき」「全品目を減税すべき」「いっそ廃止すべき」といった議論が活発になっていた時期だ。
     TTTCはコードが公開されており、自由に書き換えて使える。導入は意外に簡単で、公式GitHubからコードを入手し、Pythonライブラリを整えるだけで基本的に使える状態になった。

    OpenAIの最新モデルを利用するためコードに少し手を加えたが、最近まであまりプログラムに触れてこなかった私でも導入は難しくなかった。
    <TTTC設定方法>(2025/9/9現在。近々、読み取り専用になりアーカイブされる予定)

    1. 公式GitHubからコードをダウンロード。

    2. pythonの環境でrequirements.txt(scatterディレクトリー内)にある必要なライブラリをインストール。

    3. 読み込ませるCSV形式のファイルの準備。コメントごとのIDを入れる列名を「comment-id」、コメント本体を入れる列名を「comment- body」に設定。そのファイルをscatter>pipeline>inputsディレクトリーに入れる。

    4. scatter>pipeline>configsディレクトリーにある、JSONファイルを参考にカスタマイズ。最低でも以下を設定する。

      1. input:3で用意したファイル名。

      2. clusters:クラスター数(任意)。

      3. translation:この項目は不要なので削除。

    5. OpenAIに指示する各処理のプロンプトを設定。scatter>pipeline>promptsの下にある、extraction(コメントの前処理)、labelling(クラスターのタイトル付)、overview(全コメントのサマリー)、takeaways(各クラスターのサマリー)を変更する。

    6. JavaScriptのパッケージをインストール。scatter>next-appディレクトリーで
      npm installを実行。

    7.  OpenAIのAPIキーを環境変数に設定。
      export OPENAI_API_KEY=sk-proj-xxxxxxxx。

    8. scatter>pipelineディレクトリーでmain.pyを以下のように実行。
      python main.py configs/xxxxxxxx.json
      (xxxxxxxxは4で作成したjsonファイル)

    9. 分析が完了したら、ブラウザで「http-server -p 8080」を開き結果レポートを表示する。


     inputデータはX(旧Twitter)の投稿から「消費税」と「減税」の両方、または「消費減税」が含まれるものを抽出し、ランダムに約1万件まで絞り込んだ。後はクラスター数を設定すれば、半自動的に意見が整理されるはずだと期待していた。




    プロンプトと格闘の日々

     しかし現実は甘くなかった。分析の精度を高めるには、LLMに与えるプロンプトを緻密に設計する必要があった。特に以下の二つに時間をかけた。

    1. 前処理(エクストラクト)
       趣旨に合わない投稿を除外し、意見が複数あれば分割。差別的・過激な表現は修正するよう指示した。数回の修正では不十分で、何度も試行錯誤を重ねた。

    2. ラベリング
       単に「議論」という言葉が乱立する結果になりがちなので、できるだけ具体性のある表現を引き出すよう工夫した。

     さらに難しかったのはクラスター数の設定だ。最初は多くても10程度だろうと思い実行すると、構成数上位のクラスターが意味的なまとまりを欠いていて困惑した。最終的に15に調整したところ、ようやく解釈可能な分類が得られた。代表的なラベルは「減税策の効果・公平性と代替財源検証」「減税見送りで揺らぐ与党への信頼」「代替財源放置の無責任批判」などである(結果の記事のリンク)。クラスタ(図の点の集まり)の大きさは、同じ意見の多さで、どれだけ同じ話題を述べているかである。クラスタ間の距離はテーマの関連性の強さを意味している。近いと似たような話題が述べられていて、遠いと共通点が少ないことを示している。同色で飛び地になっているものは、大枠は同じテーマでも、議論している方向性が違っている場合などに発生する。


    画像
    消費税減税に関するXの投稿をTTTCで分析した結果の散布図。15種類に色分けされそれぞれがクラスター。下にある紫色の一番大きな塊が「減税策の効果・公平性と代替財源検証」について語られている。その右上の緑色は2番目に大きく「減税見送りで揺らぐ与党への信頼」の塊になった


    TTTCによる参院選分析と新たな発見

     1か月後には「参院選に関する投稿」を同じくTTTCで分析した。テーマが広いため意見が多様に分散し、15クラスターでは解釈困難だった。数を徐々に増やし、最終的に 35クラスター で落ち着いた。
     ただし、構成数の多いクラスターのラベルが解釈しづらかったため、レベルに加えて小見出しを5つ付けるようにプロンプトを書き換え、各クラスターの解釈を可能にした(結果の記事のリンク)。



    画像

    魔法ではなく、人とAIの協働

     「データを集めれば、あとは自動で可視化してくれる」と当初は思っていた。しかし実際には、プロンプト設計やクラスター数調整などに人の知恵と試行錯誤が欠かせなかった。
     それでもTTTCの強みは大きい。少数意見でもある程度まとまりがあれば可視化され、従来の統計的クラスタリングより多様な声が拾いやすい。さらに、一度設定したプロンプトを使えば、時系列で意見の変化を比較することも容易だ。SNS分析のみならず、アンケートの自由記述にも応用できそうだ。行政機関などはパブリックコメントにも活用できるだろう。
     結局のところ、AIツールは“魔法の杖”ではなく、人と協働して初めて力を発揮する存在なのだと強く感じた。
    (メディア研究開発センター・大津正一)

     
     
    朝日新聞社の研究開発チーム(通称「M研」)です。このブログでは、社内の技術者たちが、日々のお仕事や研究開発しているテーマ、実験的な「やってみた」記録などを、時に真面目に、時にゆるっと発信していきます。

    あなたへのおすすめ