LLMで分類

朝日新聞の「運動でがん治る」は誤り SNSの情報を医師がファクトチェックという記事の元になった Fact-Checking Cancer Information on Social Media in Japan: Retrospective Study Using Twitter という論文を教えていただいた。これはTwitterでがんに関する「いいね」トップ100ツイートのファクト度を1〜5のスケールで2人で評価したもので、44%が誤情報だというもの。

上記論文ページのAppendix 2(Detail of the top 100 tweets)のExcelファイルに具体的なツイートと評価などが収められている。これをいただいてきて、ローカルLLM(ここではGemma 3 27B)で1(正しい)〜5(間違い)を5段階で評価させ、2人の専門家による評価と比べてみる。

import numpy as np
import pandas as pd
from ollama import chat

def ai(prompt):
    response = chat(
        model="gemma3:27b-it-q8_0",
        messages=[{ 'role': 'user', 'content': prompt }],
        options={ "temperature": 0, "num_ctx": 2048 }
    )
    return response['message']['content']

def find_first_1_to_5_digit(s):
    for char in s:
        if char in '12345':
            return int(char)
    return np.nan

df = pd.read_excel("formative_v7i1e49452_app2.xlsx")
df['AI'] = np.nan

for index, row in df.iterrows():
    prompt = f"次のメッセージの正しさを、1(まったく正しい)〜5(まったく間違い)の5段階で評価してください。1、2、3、4、5の数字だけで答えてください。\n\n{row['Text']}"
    ans = find_first_1_to_5_digit(ai(prompt))
    print(ans)
    df.at[index, 'AI'] = ans

print(df[['Q1-R1', 'Q1-R2', 'AI']].corr())

最後に出力されるのは、2人のレビューアーR1、R2とAIによる評価の相関行列である:

          Q1-R1     Q1-R2        AI
Q1-R1  1.000000  0.699216  0.437922
Q1-R2  0.699216  1.000000  0.522670
AI     0.437922  0.522670  1.000000

2人のレビューアー間には0.699という高い相関があるが、AIと人間では0.438、0.523という中位の値になった。

もっと賢いAIを使えばどうなるか、どなたかやってみてください。

追記: GPTシリーズ最安値の4o-miniでやってみた。プログラムの差分:

from openai import OpenAI

client = OpenAI()

def ai(prompt):
    res = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}],
        temperature=0
    )
    return res.choices[0].message.content

結果:

          Q1-R1     Q1-R2        AI
Q1-R1  1.000000  0.699216  0.625462
Q1-R2  0.699216  1.000000  0.586375
AI     0.625462  0.586375  1.000000

たいした値段ではなかったので、gpt-4oでもやってみた:

          Q1-R1     Q1-R2        AI
Q1-R1  1.000000  0.699216  0.598850
Q1-R2  0.699216  1.000000  0.560533
AI     0.598850  0.560533  1.000000

若干悪くなったようだ。次はgpt-4.1の結果:

          Q1-R1     Q1-R2        AI
Q1-R1  1.000000  0.699216  0.773849
Q1-R2  0.699216  1.000000  0.646012
AI     0.773849  0.646012  1.000000

これはなかなか良い結果だ。

ここまでで入力44.28Kトークン、出力300トークン。費用は微々たるものだった。

各AIの出力をまとめておく:

gemma3 = "3344445143324331332113544154433223143331344351344333335342351313431133111335313431113344534313243333"
gpt4omini = "4144425144421322312144343344432233142121144331354234435332241212332313212333213332223234313212343433"
gpt4o = "3355255333333332331133353153331323131111153331353333335352353311311313311333213331111333513111353313"
gpt41 = "4355455354543413231244155153511223142111145431354145335352152312312213111322223231111244513111351424"