跳到正文
土土金API

社科文本分析與定性編碼

社科文本分析的穩妥做法,是把大模型當作按編碼本工作的編碼員:研究者寫好編碼本,模型逐段給出編碼並引用原話,程式核對每條原話確實出自原文;再抽一部分樣本,由人工和第二個模型分別獨立編碼,計算一致性,分歧由研究者裁定。社交媒體這類大語料用同樣的方法標註情感和主題,再用向量模型聚類探索話題。按每月 40 份訪談、8,000 條開放題回答和 10 萬條社交媒體帖子估算,用各模型最低價分組的即時價格計算,模型費用每月約 ¥124。

價格更新於 2026年11月13日 下午5:58

月成本估算

假設:每月處理 40 份訪談,切成 1,200 段,每段輸入約 2,500 tokens(編碼本約 1,800、正文約 700)、輸出約 250 tokens;8,000 條問卷開放題回答,每條輸入約 2,000 tokens、輸出約 120 tokens;10 萬條社交媒體帖子標註情感和話題,每條輸入約 500 tokens、輸出約 40 tokens;從訪談段落和開放題中抽 20%(1,840 條)由第二個模型獨立編碼;10 萬條帖子向量化,每條約 120 tokens。

¥124.3/ 月

  • 訪談逐段編碼¥5.38
  • 開放題回答編碼¥24.37
  • 社交媒體情感與話題¥82.88
  • 一致性抽樣(第二編碼員)¥8.56
  • 帖子向量化與聚類¥3.12
看用量假設

業務問題

訪談逐字稿、問卷開放題、社交媒體帖子,一個專案動輒幾十萬字。人工逐段編碼要花幾週,幾位編碼員之間還要反覆校準。

直接讓模型「總結一下主題」很快,但結論沒法檢驗:依據什麼標準、哪句原話,換一次會不會變,都說不清,寫進論文也難以經得起評審。

更可靠的用法是讓模型嚴格按編碼本工作:編碼本由研究者定,模型只能從中選編碼,並給出原話;程式逐條核對原話,再抽樣和人工編碼比較一致性,分歧和最終解釋都由研究者負責。

資料的知情同意、倫理審查、脫敏,以及能不能傳送給第三方模型服務,由研究者和所在機構按自己的規定判斷,我們不對此作承諾。按平臺預設配置,用量日誌不記錄請求和回覆正文;為了生成回覆,請求會轉發給所選分組對應的模型服務方處理。

推薦模型組合

推薦模型按即時目錄自動選取,價格取各模型最低價分組,更新於 2026年11月13日 下午5:58。點模型名可檢視全部分組價格。

參考架構

  1. 1

    整理與脫敏

    訪談錄音先轉成逐字稿,再按段落切分,每段帶上受訪者編號和段落號,例如 INT07-P012。傳送前去掉姓名、單位、聯絡方式等能識別個人的資訊,原始資料只留在本地。

  2. 2

    寫編碼本

    每個編碼寫清定義、適用和不適用的情況,再配一兩個原文例子。可以先用向量聚類瀏覽語料、找候選話題,但編碼本由研究者確定,並標上版本號。

  3. 3

    模型逐段編碼

    編碼本放在系統提示詞裡,temperature 設為 0,要求按 JSON 返回編碼和對應的原話。程式檢查編碼是否在編碼本里、原話是否逐字出現在這一段,不符合的進入人工核對。

  4. 4

    一致性檢驗

    隨機抽取一部分段落,例如 10% 到 20%,由人工和第二個模型分別獨立編碼,按每個編碼計算 Cohen’s kappa 或 Krippendorff’s alpha。分歧大的編碼多半是定義不清,修改編碼本後重新編碼;達標的門檻按你所在學科的慣例確定。

  5. 5

    情感與話題

    社交媒體帖子這類大語料,用固定的情感標籤和話題清單逐條標註,做法和資料標註方案相同;再結合向量聚類看話題分佈,每一類抽幾條原文人工閱讀。

  6. 6

    回到原文

    分析結果裡的每條編碼都保留段落編號和原話,引用時直接用原話,不用模型的轉述。編碼本版本、提示詞、模型 ID、呼叫日期和一致性結果寫進分析日誌,便於在論文的方法部分如實報告。

成本估算

假設:每月處理 40 份訪談,切成 1,200 段,每段輸入約 2,500 tokens(編碼本約 1,800、正文約 700)、輸出約 250 tokens;8,000 條問卷開放題回答,每條輸入約 2,000 tokens、輸出約 120 tokens;10 萬條社交媒體帖子標註情感和話題,每條輸入約 500 tokens、輸出約 40 tokens;從訪談段落和開放題中抽 20%(1,840 條)由第二個模型獨立編碼;10 萬條帖子向量化,每條約 120 tokens。

專案模型用量假設費用
訪談逐段編碼qwen3.5-plus1,200 次 × 輸入 2,500 + 輸出 250 tokens¥5.38
開放題回答編碼qwen3.5-plus8,000 次 × 輸入 2,000 + 輸出 120 tokens¥24.37
社交媒體情感與話題qwen3.5-plus100,000 次 × 輸入 500 + 輸出 40 tokens¥82.88
一致性抽樣(第二編碼員)gpt-5.4-mini1,840 次 × 輸入 2,200 + 輸出 150 tokens¥8.56
帖子向量化與聚類text-embedding-3-large100,000 次 × 輸入 120 tokens¥3.12
合計(每月)¥124.3

按各模型最低價分組的即時價格計算,價格更新於 2026年11月13日 下午5:58。

只含模型呼叫費用,不含人工編碼和錄音轉寫的費用(轉寫見語音轉寫方案)。編碼本越長,每條的輸入 tokens 越多;編碼本固定不變、模型又支援上下文快取時,命中快取的部分按更低的快取讀取價計費,實際費用會更低。語料量翻倍,對應那一項的費用大致翻倍。

示例程式碼

模型只能從編碼本里選編碼,並給出原話;程式丟掉不在編碼本里的編碼和對不上原文的原話,記為待人工核對,再在同一批樣本上計算模型與人工、模型與第二個模型的 Cohen’s kappa。

示例程式碼(Python,按編碼本編碼、核對原話與一致性)
import json
import os

from openai import OpenAI

client = OpenAI(base_url="https://www.tutujin.com/v1", api_key=os.environ["TUTUJIN_API_KEY"], max_retries=3)

CODEBOOK = {  # written and versioned by the research team
    "COST": "Money, prices or affordability given as a reason for a decision.",
    "TRUST": "Trust or distrust in an institution, a platform or a person.",
    "FAMILY": "Family members influence or take part in the decision.",
}
SYSTEM = (
    "You are a qualitative coder. Apply only these codes, as defined:\n"
    + "\n".join(f"{code}: {definition}" for code, definition in CODEBOOK.items())
    + "\nFor every code that applies, copy the exact words of the segment that justify it. "
    'Reply with JSON only: {"codes": [{"code": "COST", "quote": "exact words"}]}, or {"codes": []} if none apply.'
)


def code_segment(segment, model="qwen3.5-plus"):
    resp = client.chat.completions.create(
        model=model,
        messages=[{"role": "system", "content": SYSTEM}, {"role": "user", "content": segment["text"]}],
        temperature=0,
    )
    raw = resp.choices[0].message.content
    found = json.loads(raw[raw.find("{"): raw.rfind("}") + 1]).get("codes", [])
    # keep a code only if it is in the codebook and its quote appears word for word in the segment
    kept = [c for c in found if c.get("code") in CODEBOOK and c.get("quote") and c["quote"] in segment["text"]]
    return {"id": segment["id"], "model": resp.model, "codes": sorted({c["code"] for c in kept}),
            "quotes": kept, "to_check": len(found) - len(kept)}


def cohen_kappa(a, b):
    """Agreement of two coders on one code; a and b are 0/1 lists over the same segments."""
    n = len(a)
    observed = sum(x == y for x, y in zip(a, b)) / n
    pa, pb = sum(a) / n, sum(b) / n
    expected = pa * pb + (1 - pa) * (1 - pb)
    return float("nan") if expected == 1 else (observed - expected) / (1 - expected)


# the agreement sample: a few hundred segments in practice, de-identified before sending
sample = [
    {"id": "INT07-P012", "text": "My mother said the rent there was too high, so we stayed where we were."},
    {"id": "INT11-P003", "text": "I never believed what the agency told us about the subsidy."},
]
human = {"INT07-P012": {"COST", "FAMILY"}, "INT11-P003": {"TRUST"}}  # coded without seeing the model output
first = [code_segment(s) for s in sample]
second = [code_segment(s, model="gpt-5.4-mini") for s in sample]

for code in CODEBOOK:
    m1 = [int(code in r["codes"]) for r in first]
    m2 = [int(code in r["codes"]) for r in second]
    h = [int(code in human[r["id"]]) for r in first]
    print(code, "model vs human:", round(cohen_kappa(m1, h), 2), "| model vs second model:", round(cohen_kappa(m1, m2), 2))
# Exploring themes first: embed answers or posts with text-embedding-3-large and cluster the vectors.

用一把 Key 試試這個方案

註冊後在控制台建立 API Key,把上面程式碼裡的 base_url 和 Key 換成你的就能執行。企業採購、開發票可以加客服微信 JsnonoChat。

土土金客服微信二維碼
微信JsnonoChat

掃碼或搜尋微信號新增客服

常見問題

大模型能代替人工編碼嗎?

不能代替研究者的判斷。模型適合按明確的編碼本做大批次的初次編碼;編碼本怎麼定、分歧怎麼裁、結論怎麼解釋,都由研究者負責。論文裡如實寫明模型的用法、所用的模型和一致性檢驗的結果。

怎麼檢驗模型編碼和人工編碼的一致性?

隨機抽一部分段落,由人工在看不到模型結果的情況下獨立編碼,按每個編碼計算 Cohen’s kappa(兩位編碼員)或 Krippendorff’s alpha(多位編碼員或有缺失值)。一致性低的編碼多半是定義不清,改編碼本後再測;門檻按你所在學科的慣例定。

訪談資料涉及隱私,可以發給模型嗎?

能不能發,取決於知情同意書、倫理審查批准的範圍和所在機構的資料規定,需要研究者自己判斷,我們不能替你作合規承諾。技術上建議先去掉姓名、單位、聯絡方式等識別資訊,只發送分析需要的段落;對線路來源有要求的,選標著「官方轉發」的分組。

每月大概要花多少錢?

按每月 40 份訪談、8,000 條開放題回答、10 萬條社交媒體帖子估算,用最低價分組計算約 ¥124。編碼本的長度和帖子的數量對費用影響最大。

英文或其他語言的語料也能用嗎?

可以,流程不變。編碼本最好和語料用同一種語言;需要把原話譯成論文的寫作語言時,見翻譯方案,引用時仍以原文為準。

情感和話題的標註結果能直接寫進結論嗎?

把它們當作描述性的線索:每個情感標籤和話題都抽原文人工閱讀,確認含義和你的研究問題一致,再寫進結論。