朝日新聞の「運動でがん治る」は誤り 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"