(2):golden dataset 構(gòu)建:線上數(shù)據(jù)的采樣與標(biāo)注流程)
問題背景上一篇用兩組模擬數(shù)據(jù)說明了一把太小的尺子如何讓 47% 的正確結(jié)論被判反結(jié)論是評測集必須存在、規(guī)模要按可分辨差距倒推。這一篇解決尺子上的刻度從哪來一個跑了三個月的客服 RAG 機器人日志里躺著八萬多條真實會話怎么從中提煉出三百來條能代表線上真實分布、標(biāo)注質(zhì)量可復(fù)核的金標(biāo)準(zhǔn)數(shù)據(jù)集golden dataset。直接照抄線上問題會踩兩個坑一是頭部意圖吃掉八成流量隨機抽出來評測集全是退款多久到賬越界拒答、多輪追問這些恰恰最容易出事故的長尾一條沒有二是線上原話本身是臟的——錯別字、半截話、夾帶訂單號的隱私串不清洗不能用。本篇把整條流水線拆成四段分層采樣、隱私脫敏、近重復(fù)去重、雙人標(biāo)注加一致性仲裁每段給出可操作的判據(jù)。核心原理**采樣的第一原則是按業(yè)務(wù)意圖分層而不是按流量均勻。**均勻隨機抽樣的方差與層內(nèi)樣本量成反比而流量分布天然頭重腳輕占比 3% 的多輪追問意圖在 300 條均勻樣本里平均只有 9 條單這一層的通過率估計誤差就逼近 ±30 個百分點——等于這層沒測。工程解法是帶下限的分層抽樣stratified sampling with floor大層按流量占比分配配額小層強制保底比如每層不少于 25 條代價是評測集分布與線上分布有意的偏離收益是每層都有最低可用分辨率。要注意這個偏離必須在報告里寫明分層評測的總分不再是線上期望表現(xiàn)的無偏估計它是各層分?jǐn)?shù)的加權(quán)平均權(quán)重由你聲明而不是流量決定。**標(biāo)注對象不是正確答案而是判分合同。**golden dataset 里每條用例的真正資產(chǎn)是它的評分契約參考回答要點必須出現(xiàn)哪些事實、負(fù)向約束出現(xiàn)哪些內(nèi)容直接判錯比如承諾具體到賬日期、以及分類標(biāo)簽該條屬于哪個意圖、難度、是否含陷阱。三個人獨立對同一批 50 條寫要點交集部分就是可自動化的硬規(guī)則差集部分暴露的是需求理解分歧——標(biāo)注流程順帶產(chǎn)出的這份分歧清單往往比數(shù)據(jù)集本身更有價值。**一致性用雙標(biāo) 仲裁閉環(huán)控制。**每條用例至少兩人獨立標(biāo)注不一致的進(jìn)仲裁批次級別跟蹤標(biāo)注者間一致性下一篇會用 Cohen’s kappa 給出算法。經(jīng)驗閾值原始一致率低于 80% 的批次整批返工因為這說明標(biāo)注指南本身有洞修補指南比返工標(biāo)注便宜。**去重要發(fā)生在標(biāo)注之前。**近重復(fù)問題“退款多久到賬與退款大概幾天能到呢”不僅浪費標(biāo)注預(yù)算還會讓評測集對某個高頻措辭隱性過采樣。字符級 n-gram 的 Jaccard 相似度在中文短query上簡單有效閾值 0.8 上下能把同一政策的換皮問法并進(jìn)一個簇每簇只標(biāo)一條。實驗一分層抽樣 vs 均勻隨機長尾層的分辨率差多少本機以確定性模擬演示采樣機制固定種子生產(chǎn)用真實日志與抽樣腳本。importrandom INTENTS{policy_qa:0.42,# 售后政策問答order_query:0.28,# 訂單/物流查詢complaint:0.12,# 投訴安撫chitchat:0.09,# 閑聊跑題edge_reject:0.06,# 應(yīng)拒答的越界問題multiturn_followup:0.03,# 多輪追問改寫}FLOOR25# 每層最低樣本量(小意圖保底)TARGET300# 評測集目標(biāo)規(guī)模pool[]rngrandom.Random(7)forintent,shareinINTENTS.items():for_inrange(int(5000*share)):pool.append((intent,q_%s_%04d%(intent,len(pool))))defstratified(pool,target,floor,seed):rngrandom.Random(seed)by_intent{}foriteminpool:by_intent.setdefault(item[0],[]).append(item)picked[]forintent,itemsinsorted(by_intent.items()):quotamax(floor,round(target*len(items)/len(pool)))pickedrng.sample(items,min(quota,len(items)))returnpickeddefnaive(pool,target,seed):rngrandom.Random(seed)returnrng.sample(pool,target)stratstratified(pool,TARGET,FLOOR,seed11)naive_setnaive(pool,TARGET,seed11)defdist(sample):c{}forintent,_insample:c[intent]c.get(intent,0)1returncprint(意圖 | 線上占比 | 分層抽樣 | 均勻隨機抽樣)ds,dndist(strat),dist(naive_set)forintent,shareinINTENTS.items():print(%-20s | %6.1f%% | %7d | %7d%(intent,share*100,ds.get(intent,0),dn.get(intent,0)))print(分層抽樣總數(shù) %d, 均勻隨機總數(shù) %d%(len(strat),len(naive_set)))運行輸出意圖 | 線上占比 | 分層抽樣 | 均勻隨機抽樣 policy_qa | 42.0% | 126 | 139 order_query | 28.0% | 84 | 75 complaint | 12.0% | 36 | 40 chitchat | 9.0% | 27 | 19 edge_reject | 6.0% | 25 | 17 multiturn_followup | 3.0% | 25 | 10 分層抽樣總數(shù) 323, 均勻隨機總數(shù) 300對比最后兩行均勻隨機下多輪追問層只有 10 條上一篇的置信區(qū)間表告訴我們這個規(guī)模的通過率半寬超過 ±28 個百分點純屬裝飾越界拒答層 17 條同樣不夠看分層保底后兩層各 25 條總數(shù)只多花 23 條預(yù)算長尾分辨率卻從不存在變成可用。另一個細(xì)節(jié)是總數(shù) 323 300下限配額會讓總量微超目標(biāo)工程上接受這個超支或者從最大層里扣回——但絕不為湊整數(shù)砍掉小層。實驗二標(biāo)注前去重把同一政策的換皮問法并進(jìn)一簇importrandom BASE_QUERIES[七天無理由退貨怎么操作,退款多久能到賬,訂單什么時候發(fā)貨,發(fā)票開錯了能重開嗎,會員積分怎么兌換,跨境商品支持退換貨嗎,商品價格保價規(guī)則是什么,客服人工電話是多少,]SUFFIXES[,呢,啊,急,謝謝,麻煩告訴我,在線等]rngrandom.Random(5)candidates[]forqinBASE_QUERIES:candidates.append(q)forsuffixinrng.sample(SUFFIXES,3):mutatedqsuffixifrng.random()0.4:# 再抖掉一兩個字制造臟變體posrng.randrange(len(mutated)-1)mutatedmutated[:pos]mutated[pos1:]candidates.append(mutated)extrarng.randrange(len(BASE_QUERIES))# 另一主題的干凈樣本candidates.append(BASE_QUERIES[extra][:-2])defshingles(s,k3):return{s[i:ik]foriinrange(max(len(s)-k1,1))}defjaccard(a,b):returnlen(ab)/len(a|b)if(a|b)else0.0threshold0.8clusters[]# 每簇保留第一個成員作為代表shingle_cache[shingles(q)forqincandidates]foridx,qinenumerate(candidates):placedFalseforclusterinclusters:ifjaccard(shingle_cache[cluster[0]],shingle_cache[idx])threshold:cluster.append(idx)placedTruebreakifnotplaced:clusters.append([idx])kept[clusters[c][0]forcinrange(len(clusters))]print(候選 %d 條 - 去重后保留 %d 條(閾值 Jaccard%.1f)%(len(candidates),len(kept),threshold))sizessorted((len(c)forcinclusters),reverseTrue)print(簇大小分布 Top5:,sizes[:5])print(示例簇(代表 | 被合并的近似重復(fù)):)biggestmax(clusters,keylen)print( 保留:,candidates[biggest[0]])forminbiggest[1:]:print( 合并:,candidates[m])運行輸出候選 40 條 - 去重后保留 27 條(閾值 Jaccard0.8) 簇大小分布 Top5: [4, 3, 3, 2, 2] 示例簇(代表 | 被合并的近似重復(fù)): 保留: 跨境商品支持退換貨嗎 合并: 跨境商品支持退換貨嗎啊 合并: 跨境商品支持退換貨嗎呢 合并: 跨境商品支持退換貨嗎謝40 條候選壓成 27 條三成預(yù)算省下來了更重要的是簇大小分布本身就是流量結(jié)構(gòu)的信息——跨境退換貨聚成 4 條簇說明該政策有歧義、用戶變著法問這反而是提示該層要加權(quán)采樣的信號。兩點實操提醒真實日志里 Jaccard 閾值建議從 0.8 起調(diào)人工抽檢 50 個合并決策再定中文短文本對 3-gram 敏感0.7 以下開始誤傷同主題不同意圖的問句數(shù)據(jù)量上萬后逐對比較是平方復(fù)雜度換 MinHash 或倒排塊blocking做候選對生成。流水線落地四步第一步導(dǎo)出與脫敏先于行日志落地評測工作區(qū)之前過一遍正則加實體識別手機號、地址、訂單號一律替換為保留格式的假值138****0001這類脫敏規(guī)則本身要 review——“幫我查訂單 20240713xxxx里的日期串經(jīng)常被漏掉但它能關(guān)聯(lián)到真人。第二步分層配額表評審業(yè)務(wù)方、標(biāo)注方、算法方對每張意圖層的配額和目標(biāo)占比簽字避免出分后爭論為什么閑聊占一成”。第三步標(biāo)注平臺留痕跡每條用例記錄標(biāo)注人、時長、修改輪次純秒標(biāo)與十分鐘標(biāo)的可信度不是一個量級事后質(zhì)檢按這個元數(shù)據(jù)抽查。第四步季度滾動更新每季度從線上新意圖里補 20% 新樣本、同時把過時的樣本降級為歸檔可見、不進(jìn)總分防止評測集老化成2024 年的互聯(lián)網(wǎng)。常見陷阱其一標(biāo)注指南用形容詞“回答有幫助沒有可操作性指南必須寫成若回答包含 X 且未包含 Y 則判通過級別。其二讓最懂業(yè)務(wù)的人單干標(biāo)注專家標(biāo)注最準(zhǔn)但單點不可復(fù)核、進(jìn)度是瓶頸且專家腦中的標(biāo)準(zhǔn)沒寫進(jìn)指南就永遠(yuǎn)是黑箱——雙標(biāo)的意義一半在質(zhì)量一半在逼專家把知識外化。其三評測集里保留隱私原話以便還原現(xiàn)場”金標(biāo)準(zhǔn)數(shù)據(jù)集會被很多工具和很多人訪問脫不干凈的樣本直接不進(jìn)集。其四把失敗案例只修不存處理完一個線上投訴就刪掉現(xiàn)場等于每個 bug 只付一次學(xué)費正確動作是清洗后進(jìn)評測集。其五去重用力過猛把支持退換貨嗎與退換貨要多久并成一簇兩個意圖被一個合并決策吃掉所以合并必須抽檢。落地清單按意圖分層設(shè)配額并給小層保底≥25 條報告里聲明加權(quán)方式全量脫敏先于一切規(guī)則評審覆蓋能關(guān)聯(lián)到真人的組合字段每條用例寫判分合同必含要點 負(fù)向約束 意圖/難度標(biāo)簽雙人獨立標(biāo)注批次一致率 80% 整批返工并修指南標(biāo)注前 n-gram Jaccard 去重0.8 起步人工抽檢合并決策季度補樣 20%線上壞案例清洗后入集數(shù)據(jù)集有了接下來的瓶頸立刻轉(zhuǎn)移到打分三百條用例每次變更都跑一遍誰來判每一條的好壞人判太快就糙、太準(zhǔn)就貴。下一篇《LLM Ops 評測與可觀測實戰(zhàn)3自動打分規(guī)則評分、LLM-as-judge 與一致性校驗》給出三層打分器架構(gòu)以及怎么證明你的自動打分器不是在瞎打分。參考來源WikipediaStratified samplinghttps://en.wikipedia.org/wiki/Stratified_samplingWikipediaJaccard indexhttps://en.wikipedia.org/wiki/Jaccard_indexWikipediaMinHashhttps://en.wikipedia.org/wiki/MinHashWikipediaInter-rater reliabilityhttps://en.wikipedia.org/wiki/Inter-rater_reliabilityLangSmith 評測與數(shù)據(jù)集文檔https://docs.smith.langchain.com/