AI アノテーター向けのコードブック:コーディングスキームを信頼できる LLM ラベラーに変える
LLM が実際に従えるアノテーションコードブックの書き方、そのラベルを人間のコーダーと突き合わせて検証する方法、人を関与させ続けるやり方を、動作する Potato の設定とともに解説します。
何十年ものあいだ、コードブックとは人に手渡す文書でした。それはコーダーのチームに、各ラベルが何を意味し、どの事例が該当し、厄介な境界がどこにあるかを伝えるものでした。いまやそれを読むコーダーは言語モデルであることが多く、三回目の訓練セッションを終えた大学院生に向けて書かれたコードブックは、全体を一度読んだきり質問を返してこないモデルにはそのまま移りません。
コードブックとは、あなたのラベルと世界との契約です。各コードについて、何を意味するのか、何が該当し何が該当しないのか、そして例を一つ二つ示すものです。LLM をアノテーターとして使うには、モデルがやり取りなしで実行できるようにその契約を書き直し、信頼する前に出力を人間のコーダーと突き合わせて確認します。
コードブックとは何なのか
内容分析と質的研究において、コードブックとは研究に登場するすべてのコードの共有された定義です。定番の参照文献は MacQueen らによる 1998 年のテンプレートで、各コードに名前、短い定義、いつ当てはまりいつ当てはまらないかのより詳しい記述、そして例となる一節を与えます。それらを書き下す目的は信頼性です。同じコードブックを読んだ二人のコーダーは同じテキストに同じラベルを付けるはずであり、実際にそうなっているかを測ることができます。
コードブックには二つの気質があります。固定のコードブックはコーディングを始める前に確定しており、大半の機械学習用ラベル集合やクラウドソーシング課題はこの形です。生きたコードブックは読み進めながら育っていくもので、グラウンデッド・セオリーの伝統に属します。繰り返し現れる考えに気づいて名前を与え、後になって二つのコードが同じものだと分かればそれらを統合します。どちらも LLM アノテーターを動かせますが、生きたコードブックは規模を拡大する前のどこかで動きを止めなければなりません。
人間向けのコードブックが LLM で破綻する理由
人間のコーダーは、コードブックの隙間を判断力と、難しい事例を話し合った訓練セッションとで埋めます。モデルにはそのどちらもありません。モデルは紙面の言葉を読むだけで、あなたが暗黙に済ませたところがそのまま誤りの出どころになります。
- 定義されていない境界。 「参加者が金銭に言及したら費用への懸念をコードする」では、何気ない「安くはなかった」が該当するかどうかが抜けています。人なら尋ねますが、モデルは推測し、しかもコーパス全体で一貫しない推測をします。
- 否定例の欠落。 人間のコーダーは「X に見えるがそうではない」から、肯定例と同じくらい多くを学びます。コードブックがそれを書き残すことはまれです。訓練担当者が口頭で補ってしまうからです。
- 指示の字義どおりの解釈。 モデルに「最大三つまでコードを付けよ」と伝えると、テキストがそれに値するかどうかに関わらず三つ付けて上限まで埋めることがよくあります。人はこれを天井と読みますが、モデルは目標と読みます。
- 分割の工程がない。 人は書き起こしを自然にコード可能な単位へ区切ります。モデルには、まず分割し、それから各単位をコードするよう指示する必要があります。さもないと文章全体を一つの塊としてコードし、望んでいた粒度が失われます。
四つとも、コードブックを編集すれば直ります。そしてその編集こそが、人間向けのコードブックをモデルが実行できるものに変えるのです。
LLM が従えるコードブックの書き方
何を足すべきかが分かれば、書き直しは機械的な作業です。各コードについて、人間なら推測で補う四つの事柄を明示します。
- 一行の定義。 平明な言葉で書き、コード名の言い換えにしないこと。
- 包含規則: そのコードが当てはまることを示す手がかり。
- 除外規則: 該当しない紛らわしい事例と、それぞれの短い例。
- 実例を二つか三つ。 素朴な読み手なら間違ってコードしそうなものを一つ含めるのが望ましい。
そのうえで、構造をラベルとは別に扱います。モデルにはまずテキストを単位に分割させ、各単位をコードブックに照らしてコードさせ、何も当てはまらないときは近いコードに手を伸ばすのではなく判断を控えさせます。明示的な「いずれでもない」という選択肢は、指示の段落をもう一つ足すよりデータ品質に効きます。コードブックが覆っていない事例を置く場所ができるので、当てはまらないコードへ押し込まずに済むからです。
信頼性という問題
LLM アノテーターを検証するのは、どれだけうまくやるかを事前には分からないからです。確立されたいくつかの課題では良い成績を出します。Gilardi、Alizadeh、Kubli(2023)は、ChatGPT が関連性、スタンス、フレーム検出でクラウドワーカーに匹敵するか上回り、コーダー間一致度はより高く、ラベルあたりの費用は 1 セント未満だったと報告しています。しかし「それらの課題で良い」ということは、あなたの課題については何も語りません。確かめる方法は測ることだけです。
その測定は、二人の人間のコーダーに対して行うものと同じです。標本を人にラベル付けさせ、同じ標本にモデルもラベルを付けさせ、Cohen's や Krippendorff's のような偶然一致を補正する一致度統計量を計算します。一致度が高いところではモデルにコーパスの大半を担わせられます。低いところでは、定義が思っていたほど働いていないコードを見つけたということであり、直すべきはたいていモデルではなくコードブックです。
人間のコードブックから LLM アノテーターへ、改訂ループとともに
注意しておくべき失敗の型が二つあります。モデルは、上限を与えられ、それを下回る理由がないときにコードを過剰適用します。そのため、有無については一致度が良く見えても、個数では崩れることがあります。もう一つ、人が新規にラベルを付けるのではなくモデルを検証する立場に回ると、自動化バイアスが忍び込みます。もっともらしいコードに異を唱えるより受け入れるほうが速いので、検証者はモデルの誤りを追認する側になります。どちらも、まったく盲検の人間のみによるラベルを一定量、物差しとして残しておくべき理由です。
人を関与させ続ける
うまくいく体制は、一致度の数値から決めるモデルと人の分担です。
一致度で振り分ける。自信のあるコードは通し、残りは差し戻す
ラベル付き済みのゴールド標本でモデルを走らせ、人と一致している箇所を見て、それに応じて振り分けます。モデルが安定して正しく付けるコードは軽い抜き取り検査を添えて通します。誤るコード、そしてモデルが判断を控えたり自信がなさそうだった単位は、人間のコーダーへ回します。人がそれらを解決するにつれ、不一致がコードブックへ戻り、次の周回はその分良くなります。これは事前アノテーションの背後にあるヒューマン・イン・ザ・ループの考えを、単一のラベルからコーディングスキーム全体へ拡大したものです。
Potato でのやり方
Potato はこのループを一つのツールで回します。コードブックに裏打ちされたコーディングスキーム、事前アノテーションを行う LLM、それを検証する人間のコーダー、そして結果に対する信頼性指標です。コードブックはコードブック裏打ちと指定した span スキームの中に置かれ、これが単なるラベル集合を編集可能で階層的なコーディングスキームに変えます。
annotation_schemes:
- annotation_type: span
name: codes
description: Highlight a passage and apply a code from the codebook
labels: [access barriers, cost concerns, provider trust]QDA モードでは、コードブックは既定で open です。スキームが固まっていく間、コーダーはコードを追加、改名、統合できます。安定したコードブックができたら、規模を拡大する前に fixed へ切り替え、共有スキームがモデルとコーダーの足元で動かないようにします。
モデルにコードを事前適用させるには、AI サポートを有効にし、使っているエンドポイントを指定します。
ai_support:
enabled: true
endpoint_type: anthropic # or openai, gemini, ollama, ...
ai_config:
model: claude-opus-4-8
api_key: ${ANTHROPIC_API_KEY}
temperature: 0.2モデルがコードを提案し、アノテーターが確定または修正します。自動化バイアスを測定可能にしておくため、一致度用に取り分けた項目には事前入力しないでください。人間のみの盲検の一区画を残して比較します。事前アノテーションのガイドに書かれているとおりです。
一巡が終わったら、二つのエクスポーターが成果物と監査証跡を出してくれます。
python -m potato.export config.yaml --format codebook -o codebook.csv
python -m potato.export config.yaml --format quotation_report \
--option include_memos=true -o quotations.csvcodebook エクスポートは一コードにつき一行で、説明と使用回数が付きます。モデルがどのコードに頼り、どのコードが一度も発火しなかったかが分かります。quotation_report はコードを付けたスパンごとに一行で、これが実際にモデルを突き合わせて確認するファイルです。Potato はコードに対する Cohen's と Fleiss' の κ を報告するので、モデルと人間の比較は報告できる数値として出てきます。
次に読むもの
- 効果的なアノテーションガイドラインの書き方、同じ技芸の人間側。
- LLM とビジョンによる事前アノテーション、モデルの提案の仕組みと自動化バイアスへの歯止め。
- アノテーター間一致度の解説、分担を決める信頼性統計。
- Potato で質的コーディングを行う、このワークフローが土台にするコードブック、メモ、ケースについて。
コードブックの比重が大きいデータセットは、よく規定されたスキームが実務でどう見えるかを示してくれます。GoEmotions の細粒度の感情コード、Social Chemistry の社会規範の判定、Media Frames のフレーミングのラベルです。