如何在質性編碼中使用 LLM 並加以報告
用 LLM 推薦程式碼、對信度樣本做雙重編碼,或先行編碼再交人工稽核,然後報告模型的一致性並保護訪談轉錄稿。
大語言模型在質性編碼中可以承擔三種角色:向人類編碼者推薦程式碼、與人類編碼者一起為信度樣本編碼,或先為整個語料編碼再交由人工稽核。無論哪種角色,都要用編碼者之間所用的同一係數報告模型與人類編碼者的一致性,把模型的程式碼與人的程式碼分開儲存,記錄提示詞和模型版本,並確認知情同意書涵蓋訪談文本的去向。
質性編碼把碼本中的程式碼分配給訪談、焦點小組、田野筆記或開放式回答中的摘錄。演繹編碼使用編碼開始前寫好的碼本,歸納編碼則從資料中提煉程式碼。大語言模型(LLM)根據提示詞生成文本。給定一個包含碼本和一段摘錄的提示詞,模型會返回這段摘錄的程式碼。編碼者間信度是各自獨立編碼同一材料的編碼者之間的一致性,通常以 Cohen's kappa 或 Krippendorff's alpha 報告。
本文引用的編碼研究檢驗的都是依據研究者自己編寫的碼本進行的演繹編碼,本文的建議也以同樣的設計為前提。Wheeler(2025)指出,反身性主題分析與 AI 輔助分析難以相容。反身性主題分析認為研究者的詮釋貫穿每一個階段。另有幾篇指南分別介紹何時報告編碼者間信度、編制碼本、模型預標註的具體做法、何時把標註工作自動化,以及各個 QDA 程式把文本發往何處。
模型的三種角色
三種角色的區別在於由誰對程式碼做最終決定,以及為了說明模型是否有幫助需要報告什麼。
| 角色 | 模型做什麼 | 人做什麼 | 報告什麼 |
|---|---|---|---|
| 程式碼推薦者 | 在編碼者開啟的摘錄上給出程式碼或提示 | 決定每一個程式碼 | 編碼者採納推薦的頻率,以及在不顯示推薦時編碼的摘錄上的一致性 |
| 第二編碼者 | 獨立地為信度樣本編碼 | 在看不到模型程式碼的情況下為同一樣本編碼 | 逐個程式碼列出模型與人的一致性,並與人與人的一致性並列 |
| 先行演繹編碼者 | 在人開啟摘錄之前為每段摘錄編碼 | 確認或修改每個程式碼 | 稽核者改動了多少程式碼,以及在盲編碼樣本上的一致性 |
已發表的 LLM 質性編碼研究
在下面的研究中,模型與人類編碼者之間的一致性隨程式碼而變,也隨提示詞而變。因此,來自另一份碼本的已發表數值難以說明你的碼本上的一致性。請改為在你自己的信度樣本上衡量模型。
Xiao 等(2023)用溫度為 0 的 GPT-3,依據心理學家編寫的碼本為 668 個兒童提問編碼。與專家編碼的一致性在問題複雜度上達到 κ = 0.61,在句法結構上為 κ = 0.38,而專家之間分別為 κ = 0.88 和 κ = 0.90。效果最好的提示詞按碼本的樣式編排,為每個程式碼給出描述和示例。
Chew 等(2023)在一篇預印本中用 GPT-3.5 為來自四個公開資料集、每份 100 篇文件的樣本編碼,並用 Gwet's 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 次。程式碼在各次執行之間都有變化。對其中一段摘錄,模型在 59.4% 的執行中給出了 Persistence 這個程式碼。
Schroeder、Roy 和 Kabbara(2025)在主觀性任務上用 350 名標註者檢驗了推薦者角色。看到推薦時,標註者的速度沒有提高,標籤的分佈卻發生了偏移。以有推薦時給出的標籤為基準評估的模型,看起來顯著優於以無推薦時給出的標籤為基準評估的模型。
信度樣本上的模型與人一致性
如果你的方法部分報告編碼者之間的 Krippendorff's alpha,就在同一信度樣本上逐個程式碼計算模型與每名編碼者之間的 alpha,並把這些數值與人與人的數值並列給出。人與人的數值中不要包含模型。在混合了模型和人的矩陣上算出的單一系數,既描述不了模型,也描述不了人。看過模型程式碼的編碼者不再獨立於模型,因此人類編碼者要在看不到模型程式碼的情況下為信度樣本編碼。把溫度設為 0,或者對每段摘錄執行模型多次,並報告各次執行的一致頻率。
一致性高本身並不能說明模型可以替代一名編碼者。Calderon、Reichart 和 Dror(2025)提出的替代標註者檢驗每次留出一名人類編碼者。檢驗隨後判斷模型與其餘編碼者的吻合程度是否至少與被留出的編碼者相當,允許一定的容差。Potato 可以對單選和評分類方案執行這項檢驗。
在資料中標記模型程式碼
儲存在某個人名下的模型程式碼看起來就像這個人的工作,用這份檔案算出的任何編碼者間數值都會把模型當成一個人。為模型分配單獨的編碼者 ID,並新增一列,標明每一行來自人還是模型。對於先行編碼,把模型的原始程式碼與稽核後的程式碼並列儲存。兩種程式碼都儲存下來後,你就可以統計稽核者改動了多少程式碼。
提示詞和模型的記錄
沒有提示詞,讀者就無法評判或重現模型編碼。請在補充材料中記錄以下內容:
- 模型名稱和確切版本,例如帶日期的 API 快照,或
ollama list輸出的 ID。 - 執行模型的服務提供方或伺服器,以及各次執行的日期。
- 包含碼本文本的完整提示詞,每次修訂都註明日期。
- 溫度,以及每段摘錄的執行次數。
- 模型沒有返回有效程式碼時如何處理。
託管模型與本地模型,以及知情同意
託管 API 在服務提供方的伺服器上、按服務提供方的保留條款處理參與者文本,本地模型則把文本留在團隊控制的機器上。在使用託管服務執行之前,對照知情同意書和倫理審批,檢查服務提供方關於資料保留和模型訓練的條款。Wheeler(2025)建議先對資料去標識化,提醒只更改姓名並不總是足夠,並建議在知情同意書中加入關於生成式 AI 處理的說明。羅格斯大學 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 標籤頁會比較這兩組在與模型的一致性上的差異,以及各組內部的 alpha。下面的配置用本地模型同時設定推薦、預填程式碼和留出組:
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預測檔案把每個摘錄 ID 對映到模型在每個方案上的程式碼,例如 {"p01-03": {"codes": ["access barriers"]}}。沒有 include.all: true 時,不會出現任何助手按鈕。在整個研究期間保持 salt 和 fraction 不變,因為改動其中任何一個值都會重新打亂分組。
要把模型用作第二編碼者,請在 machine_annotators 下宣告模型的編碼者 ID,並寫明模型和執行日期。如果服務商提供帶日期的快照,或者 ollama list 為該模型列印了 ID,請把這個值作為 version 寫在 model 旁邊。把下面這段新增到上面的配置中:
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 匯出會把一段摘錄上的所有編碼者合併計算。要計算模型與人的 alpha,請按 annotator_origin 篩選 csv 匯出,再把這些行載入一致性計算器。對於單選和評分類方案,當三名或更多人類編碼者各自編碼了至少 30 段模型也編碼過的摘錄後,GET /admin/api/alt-test 會執行替代標註者檢驗。
要把模型的程式碼記錄在這個 ID 下,請編寫一個指令碼,把你記錄在案的提示詞傳送給模型,以 llm_coder 身份登入,並通過 /updateinstance 儲存(API 參考)。模擬器的 --strategy llm 不能替代這樣的指令碼。模擬器使用通用提示詞,只發送每段摘錄的前 500 個字元,並在回覆與任何程式碼都不匹配時記錄一個隨機程式碼。Solo Mode報告一名編碼者與模型之間的原始百分比一致率,ICL 標註則對每段摘錄和每個方案只返回一個程式碼。在方法部分報告這兩項功能的結果之前,請先在匯出的程式碼上計算 alpha。
常見問題
可以用 ChatGPT 做質性編碼嗎?
可以用 ChatGPT 或其他 LLM 依據成文的碼本做演繹編碼,前提是在你自己的資料上衡量模型與人類編碼者的一致性並報告結果。已發表的一致性因程式碼而異,在 Xiao 等(2023)的一份碼本上從 κ = 0.61 到 κ = 0.38 不等。對於訪談資料,在使用託管服務之前請檢查知情同意書和倫理審批。
如何計算 LLM 與人類編碼者之間的編碼者間信度?
把模型當作信度樣本上的又一名編碼者,在模型與每名人類編碼者之間計算你的團隊所用的係數。這個係數通常是 Krippendorff's alpha 或 Cohen's kappa。逐個程式碼報告模型與人的數值,並與不含模型計算的人與人數值並列。一致性計算器可以根據程式碼的 CSV 計算 alpha 和 kappa。
在方法部分應該如何報告 LLM 輔助編碼?
報告模型的角色、名稱和版本、服務提供方或伺服器、執行日期、溫度,以及逐個程式碼的模型與人一致性,並與人與人一致性並列。說明編碼者是否看過模型的程式碼,以及分歧是如何解決的。把包含碼本文本的完整提示詞放進補充材料。
可以把訪談轉錄稿上傳到 ChatGPT 嗎?
只有當知情同意書和倫理審批涵蓋把參與者文本傳送給該服務提供方時,才能把轉錄稿上傳到託管服務。先對轉錄稿去標識化,並記住只更改姓名並不總是足夠。在團隊自己的伺服器上用 Ollama 或 vLLM 執行的模型,可以讓轉錄稿不經過外部伺服器。
延伸閱讀
- Potato 中的質性研究:Potato 的質性研究功能集中在一處
- 質性資料分析軟體對比
- 編寫 LLM 能遵循的碼本
- 如何衡量 LLM 評審與人類標註者之間的一致性
- 如何區分預標註資料中的認真稽核與橡皮圖章
- 為質性編碼準備訪談轉錄稿
參考文獻
- 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
- 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
- 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
- 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
- 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
- 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
- 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