コンテンツへスキップ

定性コーディングで LLM を使い、その使い方を報告する方法

LLM にコードを提案させる、信頼性サンプルを二重にコーディングさせる、または先にコーディングさせて人間がレビューする方法と、モデルの一致度の報告、記録の保護について解説します。

大規模言語モデルは、定性コーディングで三つの役割を担えます。人間のコーダーにコードを提案する、人間のコーダーと並べて信頼性サンプルをコーディングする、または人間がレビューするために先にコーパスをコーディングする、です。どの役割でも、コーダー間で使う係数でモデルと人間のコーダーの一致度を報告し、モデルのコードを人間のコードと分けて保管し、プロンプトとモデルのバージョンを記録し、インタビューのテキストの送信先を同意書がカバーしていることを確認してください。

定性コーディングは、インタビュー、フォーカスグループ、フィールドノート、自由記述式の回答の抜粋に、コードブックのコードを割り当てます。演繹的コーディングは、コーディングの開始前に書かれたコードブックを適用し、帰納的コーディングは、データからコードを構築します。大規模言語モデル(LLM)は、プロンプトからテキストを生成します。コードブックと一つの抜粋を含むプロンプトを与えると、モデルはその抜粋のコードを返します。コーダー間信頼性は、同じ素材を独立してコーディングするコーダー間の一致度で、通常は Cohen のカッパまたは Krippendorff のアルファとして報告されます。

ここで引用するコーディング研究は、いずれも研究者が書いたコードブックに対する演繹的コーディングを検証したもので、助言も同じ設計を前提としています。Wheeler(2025)は、リフレクシブ・テーマ分析は AI 支援の分析と相性がよくないと指摘しています。リフレクシブ・テーマ分析は、研究者の解釈があらゆる段階を形作ることを前提としています。個別のガイドが、コーダー間信頼性をいつ報告するか、コードブックの構築、モデルによる事前アノテーションの仕組み、ラベル付けの作業をいつ自動化するか、そして各 QDA プログラムがテキストをどこに送るかを扱います。

モデルの三つの役割

役割は、コードの最終判断を誰が行うか、またモデルが役立ったかどうかを示すために何を報告するかで異なります。

役割モデルが行うこと人間が行うこと報告すべきこと
コードの提案者コーダーが開いている抜粋に、コードやヒントを提示するすべてのコードを決めるコーダーが提案を採用した頻度と、提案なしでコーディングした抜粋での一致度
二人目のコーダー信頼性サンプルを独立してコーディングするモデルのコードを見ずに同じサンプルをコーディングするコードごとの、人間同士の一致度と並べたモデルと人間の一致度
一次パスの演繹的コーダー人間が抜粋を開く前に、すべての抜粋をコーディングする各コードを確認または修正するレビュアーが変更したコードの数と、ブラインドでコーディングしたサンプルでの一致度

LLM による定性コーディングの公刊研究

以下の研究では、モデルと人間のコーダーの一致度は、コードごとに、またプロンプトによって変わりました。したがって、別のコードブックで公刊された数値は、自分のコードブックでの一致度を知る手がかりとしては弱いものです。代わりに、自分の信頼性サンプルでモデルを測定してください。

Xiao ら(2023)は、心理学者のコードブックに照らして、温度 0 の GPT-3 で 668 件の子どもの質問をコーディングしました。専門家のコーディングとの一致度は、質問の複雑さで κ = 0.61、構文構造で κ = 0.38 に達し、専門家間ではそれぞれ κ = 0.88 と κ = 0.90 でした。最良のプロンプトは、コードごとの説明と例を持つ、コードブックのような形に整えられていました。

プレプリントで、Chew ら(2023)は、四つの公開データセットからの 100 文書のサンプルを GPT-3.5 でコーディングし、Gwet の AC1 で一致度を採点しました。モデルと人間の一致度は、ほとんどのコードで人間同士の一致度に近く、ハッシュタグ、@メンション、大文字に関するコードでは大きく下回りました。ハッシュタグでは、モデルと人間の一致度は 0.18 で、人間同士は 0.96 でした。

プレプリントで、Dunivin(2024)は、W.E.B. Du Bois に言及するニューヨーク・タイムズの記事の一節をコーディングしました。111 件のゴールドスタンダードの一節では、GPT-4 は 9 つのコードのうち 8 つで κ ≥ 0.6 に達し、GPT-3.5 は平均 κ = 0.34 でした。各コードに根拠を求めると、平均 κ は 0.59 から 0.68 に上がりました。

Tai ら(2024)は、三つのインタビュー抜粋のそれぞれで、一つのコードブックのプロンプトを ChatGPT 3.5 で 160 回実行しました。コードは実行ごとに変わりました。ある抜粋では、モデルがコード Persistence を割り当てたのは、実行の 59.4% でした。

Schroeder、Roy、Kabbara(2025)は、350 人のアノテーターによる主観的タスクで、提案者の役割を検証しました。提案があっても、アノテーターの作業は速くならず、ラベルの分布は変わりました。提案つきのラベルで評価されたモデルは、提案なしで付けられたラベルで評価されたモデルより、有意によく見えました。

信頼性サンプルでのモデルと人間の一致度

方法のセクションでコーダー間の Krippendorff のアルファを報告する場合は、同じ信頼性サンプルで、モデルと各コーダーの間のアルファをコードごとに計算し、その数値を、人間同士の数値の隣に示してください。人間同士の数値にはモデルを含めないでください。モデルと人間を混ぜた行列に対する一つの係数は、どちらの集団も表しません。モデルのコードを見たコーダーは、もはやモデルから独立していないため、人間のコーダーは、モデルのコードを見ない状態で信頼性サンプルをコーディングします。温度を 0 に設定するか、抜粋ごとにモデルを複数回実行し、実行間で一致した頻度を報告してください。

高い一致度だけでは、モデルがコーダーの代わりになれることは示されません。Calderon、Reichart、Dror(2025)の代替アノテーターテストは、人間のコーダーを一人ずつ除外します。このテストは、その後、モデルが残りのコーダーと、除外されたコーダーと同じくらいよく、許容幅の範囲内で一致するかどうかを確認します。Potato は、単一選択と評定のスキームについて、このテストを実行します。

データ内でのモデルのコードへのラベル付け

人の名前で保存されたモデルのコードは、その人の作業のように見え、そのファイルから計算されるコーダー間の数値は、モデルを人として数えてしまいます。モデルには別のコーダー ID を与え、各行が人間かモデルかを示す列を追加してください。一次パスのコーディングでは、モデルの元のコードを、レビュー後のコードの隣に残してください。両方のコードが保存されていれば、レビュアーが変更したコードの数を数えられます。

プロンプトとモデルの記録

読み手は、プロンプトなしにはモデルのコーディングを評価することも再実行することもできません。補足資料に、次の詳細を記録してください。

  • モデルの名前と正確なバージョン。日付付きの API スナップショットや、ollama list が表示する ID など。
  • モデルを実行したプロバイダーまたはサーバーと、実行日。
  • コードブックのテキストを含む完全なプロンプトと、日付付きの各改訂。
  • 温度と、抜粋ごとの実行回数。
  • モデルが有効なコードを返さなかった場合に何が起こったか。

ホスト型モデルとローカルモデル、および同意

ホスト型の API は、参加者のテキストをプロバイダーのサーバーで、プロバイダーの保持条件のもとで処理し、ローカルモデルは、テキストをチームが管理するマシンに留めます。ホスト型で実行する前に、保持と学習に関するプロバイダーの条件を、同意書と倫理審査の承認に照らして確認してください。Wheeler(2025)は、先にデータを匿名化すること、名前を変えるだけでは常に十分とは限らないこと、そして同意書に生成 AI による処理についての記載を入れることを勧めています。Rutgers の AI 同意ガイドは、ツールの名前、ツールが大学のライセンスのものか外部のものか、ベンダーがデータでモデルを学習してよいか、ベンダーがデータをどのくらいの期間保持するかを記載することを提案しています。

商用の QDA プログラムは、テキストを異なる送信先に送ります。ATLAS.ti の AI Coding はテキストを OpenAI に送り、MAXQDA の AI Assist Premium は自分のコンピューターやサーバーでホストされたモデルを使え、NVivo のアシスタント AURA は NVivo AI Cloud で動作します。エアギャップ環境でのアノテーションは、外部への経路がまったくない状態での作業を扱います。

Potato 2.13.1 での LLM 支援コーディング

ai_supportでは、モデルが、コーダーが開いている抜粋に、ヒント、キーワードのハイライト、各コードの根拠、提案されたコードを提示し、コーダーが決定します。アシスタントは、codebook: true を付けたスキームと、QDA モードのプロジェクトで動作します。プロンプトには、現在のコード名とスキームの description が含まれ、コードブックに保存された定義は含まれません。判断基準は description に書いてください。endpoint_type を ollama または vllm にし、base_url に自分のサーバーを指定すると、抜粋はそこに留まります。openai、anthropic、gemini は、各抜粋を指定されたプロバイダーに送ります。

一次パスのコーディングでは、pre_annotation が、別の predictions_file からモデルのコードを事前入力します。事前入力されたコードは、コーダーが保存したときにのみコーダーの回答になり、Potato は事前入力された値を、その抜粋の行動データに記録します。事前入力された値と保存されたコードを比較すれば、変更されなかったコードを数えられます。ai_support.holdout.fraction は、コーダーと抜粋のペアのランダムな一部について、提案と事前入力されたコードを差し控えます。管理ダッシュボードの AI influence タブは、モデルとの一致度と、各グループ内でのアルファについて、二つのグループを比較します。以下の設定は、ローカルモデルを使って、提案、事前入力されたコード、ホールドアウトを設定します。

yaml
annotation_task_name: Clinic access interviews
task_dir: .
output_annotation_dir: annotation_output/
data_files:
  - data/excerpts.json
item_properties:
  id_key: id
  text_key: text
user_config:
  allow_all_users: true
  users: []
 
# Coders apply the agreed codes and cannot add new ones
codebook_mode: fixed
 
annotation_schemes:
  - annotation_type: multiselect
    name: codes
    description: Which codes from the codebook apply to this excerpt?
    codebook: true
    labels: [access barriers, cost concerns, provider trust, administrative burden]
 
# A model on the team's own machine offers hints and suggested codes
ai_support:
  enabled: true
  endpoint_type: ollama
  ai_config:
    model: llama3.1:8b
    base_url: http://localhost:11434
    temperature: 0
    include:
      all: true
  holdout:
    fraction: 0.2
    salt: clinic-access-2026
 
# The model's first-pass codes, kept in their own file
pre_annotation:
  enabled: true
  predictions_file: data/model_codes.json
  allow_modification: true

予測ファイルは、{"p01-03": {"codes": ["access barriers"]}} のように、各抜粋 ID を、スキームごとのモデルのコードに対応づけます。include.all: true がなければ、アシスタントのボタンは表示されません。salt と fraction は、どちらの値を変えてもグループが入れ替わるため、調査の間は固定してください。

モデルを二人目のコーダーとして使うには、モデルとその実行日とともに、モデルのコーダー ID を machine_annotators の下に宣言します。プロバイダーが日付付きのスナップショットを公開している場合や、ollama list がモデルの ID を表示する場合は、その値を model の隣に version として追加してください。上の設定に次のブロックを追加します。

yaml
machine_annotators:
  enabled: true
  annotators:
    - id: llm_coder
      kind: llm
      endpoint_type: ollama
      model: llama3.1:8b
      run_date: "2026-11-02"

すると /admin/iaa は、見出しの数値を人間のみに保ち、モデルを別名の区画の下で報告します。csv、tsv、parquet のエクスポートには annotator_origin 列(human または llm)が追加され、jsonl エクスポートには完全な宣言が含まれます。reliability エクスポートは、抜粋上のすべてのコーダーをプールします。モデルと人間のアルファを計算するには、csv エクスポートを annotator_origin でフィルターし、その行を一致度計算ツールに読み込んでください。単一選択と評定のスキームについては、三人以上の人間のコーダーが、モデルもコーディングした 30 以上の抜粋をそれぞれコーディングした時点で、GET /admin/api/alt-test が代替アノテーターテストを実行します。

その ID の下にモデルのコードを記録するには、文書化したプロンプトをモデルに送り、llm_coder としてログインし、/updateinstance を通じて保存するスクリプトを書きます(API リファレンス)。シミュレーターの --strategy llm は代用になりません。シミュレーターは汎用のプロンプトを使い、各抜粋の最初の 500 文字を送り、返信がどのコードにも一致しない場合はランダムなコードを記録します。ソロモードは、一人のコーダーとモデルの間の生の百分率一致を報告し、ICL ラベリングは、抜粋とスキームごとに一つのコードを返します。どちらの機能の結果も、方法のセクションで報告する前に、エクスポートされたコードに対してアルファを計算してください。

よくある質問

定性コーディングに ChatGPT を使えますか?

自分のデータでモデルと人間のコーダーの一致度を測定し、その結果を報告するなら、書面のコードブックに対する演繹的コーディングに、ChatGPT や別の LLM を使えます。公刊された一致度はコードごとに異なり、Xiao ら(2023)の一つのコードブックでは κ = 0.61 から κ = 0.38 でした。インタビューデータの場合は、ホスト型サービスを使う前に、同意書と倫理審査の承認を確認してください。

LLM と人間のコーダーの間のコーダー間信頼性は、どのように計算しますか?

信頼性サンプルでは、モデルをもう一人のコーダーとして扱い、モデルと各人間のコーダーの間で、チームが使う係数を計算します。係数は通常、Krippendorff のアルファまたは Cohen のカッパです。モデルと人間の数値は、モデルを含めずに計算した人間同士の数値と並べて、コードごとに報告してください。一致度計算ツールは、コードの CSV からアルファとカッパを計算します。

方法のセクションで、LLM 支援コーディングをどのように報告すべきですか?

モデルの役割、名前とバージョン、プロバイダーまたはサーバー、実行日、温度、そしてコードごとのモデルと人間の一致度を、人間同士の一致度と並べて報告してください。コーダーがモデルのコードを見たかどうか、また不一致がどのように解決されたかを述べてください。コードブックのテキストを含む完全なプロンプトは、補足資料に載せてください。

インタビューの記録を ChatGPT にアップロードできますか?

記録をホスト型サービスにアップロードするのは、同意書と倫理審査の承認が、そのプロバイダーへの参加者のテキストの送信をカバーしている場合に限ってください。先に記録を匿名化し、名前を変えるだけでは常に十分とは限らないことに留意してください。チーム自身のサーバーで Ollama や vLLM によりモデルを実行すれば、記録は外部のサーバーに出ません。

関連資料

参考文献

  1. Calderon, N., Reichart, R., & Dror, R. (2025). The Alternative Annotator Test for LLM-as-a-Judge: How to Statistically Justify Replacing Human Annotators with LLMs. Proceedings of the 63rd Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), 16051-16081. https://doi.org/10.18653/v1/2025.acl-long.782
  2. Chew, R., Bollenbacher, J., Wenger, M., Speer, J., & Kim, A. (2023). LLM-Assisted Content Analysis: Using Large Language Models to Support Deductive Coding. arXiv preprint 2306.14924. https://arxiv.org/abs/2306.14924
  3. Dunivin, Z. O. (2024). Scalable Qualitative Coding with LLMs: Chain-of-Thought Reasoning Matches Human Performance in Some Hermeneutic Tasks. arXiv preprint 2401.15170. https://arxiv.org/abs/2401.15170
  4. Schroeder, H., Roy, D., & Kabbara, J. (2025). Just Put a Human in the Loop? Investigating LLM-Assisted Annotation for Subjective Tasks. Findings of the Association for Computational Linguistics: ACL 2025, 25771-25795. https://doi.org/10.18653/v1/2025.findings-acl.1323
  5. Tai, R. H., Bentley, L. R., Xia, X., Sitt, J. M., Fankhauser, S. C., Chicas-Mosier, A. M., & Monteith, B. G. (2024). An Examination of the Use of Large Language Models to Aid Analysis of Textual Data. International Journal of Qualitative Methods, 23. https://doi.org/10.1177/16094069241231168
  6. Wheeler, K. (2025). How to Use Generative AI to Assist the Analysis of Qualitative Data. Sage Research Methods: Data and Research Literacy. https://doi.org/10.4135/9781036217471
  7. Xiao, Z., Yuan, X., Liao, Q. V., Abdelghani, R., & Oudeyer, P.-Y. (2023). Supporting Qualitative Analysis with Large Language Models: Combining Codebook with GPT-3 for Deductive Coding. Companion Proceedings of the 28th International Conference on Intelligent User Interfaces, 75-78. https://doi.org/10.1145/3581754.3584136