域大模型建設(shè)全路徑:從數(shù)據(jù)清洗到微調(diào)落地實(shí)戰(zhàn))
做垂直領(lǐng)域大模型這件事我不打算繞彎子。過(guò)去一年多我陸續(xù)參與幾條行業(yè)線的落地項(xiàng)目覆蓋零售、保險(xiǎn)、醫(yī)療、制造親眼看著不少團(tuán)隊(duì)把“訓(xùn)練大模型”搞成一場(chǎng)燒錢大賽——模型訓(xùn)完了demo演示很驚艷上生產(chǎn)就崩崩完之后還不知道問(wèn)題出在數(shù)據(jù)、參數(shù)還是評(píng)測(cè)上。所以這篇文章我想把從零開始建設(shè)垂直領(lǐng)域大模型的完整路徑寫清楚先講怎么判斷一個(gè)場(chǎng)景到底要不要做、怎么規(guī)劃路線再講技術(shù)架構(gòu)里的關(guān)鍵細(xì)節(jié)最后用三個(gè)行業(yè)案例把實(shí)戰(zhàn)場(chǎng)景完整復(fù)盤一遍。適合正在做技術(shù)選型的負(fù)責(zé)人、準(zhǔn)備轉(zhuǎn)崗做行業(yè)大模型應(yīng)用的技術(shù)同學(xué)也適合想搞清楚“行業(yè)大模型到底是怎么搞出來(lái)的”的產(chǎn)品和運(yùn)營(yíng)同學(xué)。1. 先搞清楚垂直領(lǐng)域大模型到底解決什么問(wèn)題1.1 通用模型的知識(shí)短板不是“不夠多”而是“不夠準(zhǔn)”通用大模型的訓(xùn)練語(yǔ)料基本來(lái)自公開互聯(lián)網(wǎng)行業(yè)內(nèi)部的規(guī)章制度、業(yè)務(wù)口徑、歷史經(jīng)驗(yàn)?zāi)P透緵](méi)機(jī)會(huì)學(xué)到。行業(yè)里我們常講一個(gè)詞叫“專業(yè)可靠性”保險(xiǎn)行業(yè)要的是條款引用準(zhǔn)確醫(yī)療要的是術(shù)語(yǔ)表述嚴(yán)謹(jǐn)制造要的是故障編碼統(tǒng)一。表面看是“知識(shí)不夠”本質(zhì)是“表達(dá)體系和判定標(biāo)準(zhǔn)不對(duì)”。我給你舉一個(gè)實(shí)際場(chǎng)景。你在通用大模型里問(wèn)“保險(xiǎn)合同里投保人對(duì)被保險(xiǎn)人具有保險(xiǎn)利益的情況有哪些”它能給你答出一個(gè)大致框架看起來(lái)邏輯通順。但如果你把某家公司一份帶補(bǔ)充條款的合同扔進(jìn)去讓它判斷一個(gè)具體案例是否屬于可保利益它就很難給出適用你業(yè)務(wù)規(guī)則的答案。這不是模型笨是因?yàn)樗挠?xùn)練數(shù)據(jù)里根本沒(méi)有你這套業(yè)務(wù)規(guī)則、術(shù)語(yǔ)體系和判定邏輯。垂直領(lǐng)域大模型做的就是把“通用的通才”訓(xùn)練成“某個(gè)行當(dāng)?shù)男屑摇薄?.2 垂直化改造的三條路線提示工程、檢索增強(qiáng)、參數(shù)微調(diào)很多第一次接觸的人以為“做垂直大模型”就等于“微調(diào)”其實(shí)不是。行業(yè)落地上通常有三條彼此配合的技術(shù)路線它們的本質(zhì)區(qū)別非常大。路線改的是什么優(yōu)勢(shì)短板典型場(chǎng)景提示工程輸入輸出的組織方式零訓(xùn)練成本、見(jiàn)效快不引入新知識(shí)復(fù)雜任務(wù)不穩(wěn)定簡(jiǎn)單抽取、格式轉(zhuǎn)換、少量few-shot問(wèn)答檢索增強(qiáng)RAG回答時(shí)的信息來(lái)源知識(shí)可更新、答案可溯源表達(dá)風(fēng)格難控制復(fù)雜推理仍受限知識(shí)庫(kù)問(wèn)答、政策咨詢、條款查詢參數(shù)微調(diào)模型權(quán)重本身輸出風(fēng)格穩(wěn)定、術(shù)語(yǔ)準(zhǔn)確、格式可控成本高、知識(shí)更新難、有遺忘風(fēng)險(xiǎn)結(jié)構(gòu)化輸出、領(lǐng)域風(fēng)格生成、專用分類我的經(jīng)驗(yàn)是這三條路線不是互斥的很多跑得穩(wěn)的系統(tǒng)是“RAG提供知識(shí) 微調(diào)控制表達(dá)”。你可以這么理解RAG管“知不知道”微調(diào)管“會(huì)不會(huì)說(shuō)”。知識(shí)缺口靠檢索補(bǔ)表達(dá)缺口靠訓(xùn)練補(bǔ)。如果只做RAG模型可能找到了答案但表達(dá)得不像行內(nèi)人如果只做微調(diào)行業(yè)知識(shí)更新一次就要重新訓(xùn)練一次成本扛不住。1.3 什么情況下你根本不需要做垂直大模型我見(jiàn)過(guò)太多團(tuán)隊(duì)把“自建垂直大模型”當(dāng)成政治任務(wù)做完才發(fā)現(xiàn)投入產(chǎn)出比很低。這里說(shuō)幾個(gè)“不該做”的判斷標(biāo)準(zhǔn)。第一如果你的場(chǎng)景本質(zhì)是“從現(xiàn)有文檔里找答案”而且用戶能接受“檢索后閱讀”這種交互那RAG加提示工程就夠了完全不用訓(xùn)練。比如內(nèi)部政策問(wèn)答、說(shuō)明書答疑這些場(chǎng)景用現(xiàn)成的通用模型API加一個(gè)向量數(shù)據(jù)庫(kù)就能達(dá)到80分。第二業(yè)務(wù)數(shù)據(jù)撐不起來(lái)。做指令微調(diào)我的底線是至少一萬(wàn)條高質(zhì)量樣本。如果只有三五千條模型訓(xùn)練完之后大概率只是“背下這些數(shù)據(jù)”換個(gè)說(shuō)法就不行還不如直接用提示工程。第三業(yè)務(wù)方說(shuō)不清楚“什么算答得好”。如果沒(méi)人能定義輸出格式、正確標(biāo)準(zhǔn)、邊界情況怎么處理那訓(xùn)練出來(lái)的模型也沒(méi)法驗(yàn)收。我建議在動(dòng)工之前先讓業(yè)務(wù)方寫十條真實(shí)問(wèn)題的“標(biāo)準(zhǔn)答案”再來(lái)討論要不要做。第四預(yù)算撐不住。一次像樣的微調(diào)訓(xùn)練成本用云GPU跑折算下來(lái)幾千到幾萬(wàn)塊不稀奇全量微調(diào)一次幾十萬(wàn)也很正常。如果你的需求用API調(diào)用一年都花不到這個(gè)數(shù)那別自建。2. 建設(shè)路徑從0到1的五階段路線圖2.1 階段一業(yè)務(wù)目標(biāo)與可行性評(píng)估第一步不是選模型而是把業(yè)務(wù)問(wèn)題翻譯成技術(shù)問(wèn)題。你需要回答四件事這個(gè)模型要替代或輔助什么任務(wù)在這之前人工是怎么完成的、耗時(shí)多少、錯(cuò)誤率多少上線之后準(zhǔn)確率達(dá)到多少才敢用數(shù)據(jù)資產(chǎn)在誰(shuí)手里能不能拿來(lái)訓(xùn)練合規(guī)上有沒(méi)有障礙這個(gè)階段最重要的動(dòng)作是做一個(gè)PoC用小成本驗(yàn)證方向。我的習(xí)慣是拿現(xiàn)成的通用大模型API跑20到30個(gè)真實(shí)業(yè)務(wù)case讓業(yè)務(wù)方打分看差距到底在哪里。如果通用模型配合提示詞已經(jīng)能解決八成問(wèn)題那你需要的只是RAG不是微調(diào)。如果業(yè)務(wù)方看了結(jié)果直搖頭你再把badcase整理出來(lái)作為后面建設(shè)數(shù)據(jù)集和評(píng)測(cè)集的起點(diǎn)。這一步經(jīng)常被跳過(guò)代價(jià)很大。我曾經(jīng)接手過(guò)一個(gè)項(xiàng)目團(tuán)隊(duì)沒(méi)做PoC直接買卡開訓(xùn)兩個(gè)月后模型效果達(dá)不到上線標(biāo)準(zhǔn)回來(lái)補(bǔ)數(shù)據(jù)前面訓(xùn)練的算力錢基本白扔。一次PoC最多幾天時(shí)間換來(lái)的是真實(shí)的基線數(shù)字這筆賬非常劃算。2.2 階段二數(shù)據(jù)資產(chǎn)盤點(diǎn)與清洗數(shù)據(jù)是垂直大模型的天花板。模型訓(xùn)練只是把數(shù)據(jù)里的規(guī)律學(xué)出來(lái)數(shù)據(jù)里沒(méi)有的東西模型不可能憑空長(zhǎng)出來(lái)。盤點(diǎn)數(shù)據(jù)時(shí)我習(xí)慣按四個(gè)來(lái)源分類內(nèi)部知識(shí)庫(kù)和制度文檔、歷史問(wèn)答和工單記錄、結(jié)構(gòu)化業(yè)務(wù)數(shù)據(jù)、外部公開行業(yè)資料。清洗是重活也是最容易被低估的環(huán)節(jié)。至少要做四件事去重大量重復(fù)樣本會(huì)讓模型過(guò)度學(xué)習(xí)某一種表達(dá)隱私脫敏去掉個(gè)人信息、手機(jī)號(hào)、身份證號(hào)尤其是醫(yī)療金融場(chǎng)景合規(guī)紅線不能碰格式統(tǒng)一把PDF、掃描件、表格統(tǒng)一成純文本編碼混亂的要處理低質(zhì)過(guò)濾太短的、亂碼的、純廣告的樣本直接扔掉。更關(guān)鍵的是把業(yè)務(wù)語(yǔ)料變成模型能學(xué)的“指令-回答”結(jié)構(gòu)。FAQ就轉(zhuǎn)成問(wèn)題答案對(duì)操作手冊(cè)可以拆成步驟問(wèn)答歷史工單可以整理成“問(wèn)題描述處理結(jié)果”的樣本報(bào)告文書可以轉(zhuǎn)成“原文結(jié)構(gòu)化字段”的抽取樣本。數(shù)據(jù)量參考值我放在這里簡(jiǎn)單分類任務(wù)幾千條就能起步開放域問(wèn)答建議至少一萬(wàn)條涉及復(fù)雜推理和多種任務(wù)類型的十萬(wàn)條才算充裕。清洗完之后一定要做一次人工抽檢。我堅(jiān)持每次訓(xùn)練前隨機(jī)抽兩百條數(shù)據(jù)自己過(guò)一遍再放進(jìn)訓(xùn)練集。這個(gè)土辦法看著慢實(shí)際是效率最高的操作它能攔住大量格式錯(cuò)亂、標(biāo)注錯(cuò)誤、隱私遺漏的問(wèn)題比訓(xùn)練完再排查省太多時(shí)間。2.3 階段三基座模型選型與合規(guī)確認(rèn)選基座模型我通??此膫€(gè)維度按優(yōu)先級(jí)排序語(yǔ)言適配度、推理能力、開源與商用授權(quán)、社區(qū)生態(tài)。中文行業(yè)場(chǎng)景里對(duì)中文語(yǔ)料支持不好的基座后面會(huì)吃很多苦頭要花額外數(shù)據(jù)量去補(bǔ)語(yǔ)言能力推理能力決定模型能不能處理復(fù)雜邏輯行業(yè)任務(wù)經(jīng)常需要多步判斷不能只看參數(shù)大小。模型規(guī)模怎么選我的經(jīng)驗(yàn)七B左右的輕量模型足夠應(yīng)付分類、抽取、格式化輸出這類任務(wù)部署成本低、延時(shí)短十三B到三十四B適合復(fù)雜問(wèn)答、長(zhǎng)文檔分析和多輪對(duì)話如果你的預(yù)算充足、數(shù)據(jù)合規(guī)允許出域直接用主流閉源大模型的API做微調(diào)也不是不行但要注意數(shù)據(jù)外送和成本控制。合規(guī)問(wèn)題我在這一步就拉響警報(bào)。開源不等于可以隨便商用每個(gè)模型都有自己的授權(quán)協(xié)議動(dòng)手之前必須確認(rèn)商用許可數(shù)據(jù)是否能出域涉密涉隱私的數(shù)據(jù)絕不允許送到外部API行業(yè)監(jiān)管要求也要提前調(diào)研比如金融、醫(yī)療領(lǐng)域?qū)I輔助決策普遍有更嚴(yán)格的管理要求。選型報(bào)告里我永遠(yuǎn)把合規(guī)清單單獨(dú)列一頁(yè)因?yàn)檫@個(gè)環(huán)節(jié)出事不是返工的問(wèn)題是法律風(fēng)險(xiǎn)的問(wèn)題。2.4 階段四訓(xùn)練、評(píng)測(cè)與迭代閉環(huán)訓(xùn)練本身不是一次性的動(dòng)作而是一個(gè)閉環(huán)先跑基線再訓(xùn)練再評(píng)測(cè)再分析badcase改進(jìn)數(shù)據(jù)重新訓(xùn)練?;€就是微調(diào)之前用基座模型在評(píng)測(cè)集上跑一遍的結(jié)果記錄所有badcase。這一步的價(jià)值在于給你一個(gè)“不訓(xùn)練的參照系”。很多時(shí)候你以為模型效果差其實(shí)通用模型更差那說(shuō)明建設(shè)方向是對(duì)的反過(guò)來(lái)如果通用模型已經(jīng)不錯(cuò)了你要考慮的不是再訓(xùn)一個(gè)而是用工程手段補(bǔ)短板。評(píng)測(cè)集是最容易被糊弄的地方我的要求是三條固定、業(yè)務(wù)方認(rèn)可、覆蓋典型場(chǎng)景。評(píng)測(cè)集不能邊做邊改否則分?jǐn)?shù)不斷變化無(wú)法判斷迭代效果評(píng)測(cè)集必須由業(yè)務(wù)方參與定義不能是純技術(shù)團(tuán)隊(duì)自嗨內(nèi)容上常見(jiàn)場(chǎng)景占七成邊界和疑難場(chǎng)景占三成全是簡(jiǎn)單題測(cè)出來(lái)的高分沒(méi)有意義。還有一個(gè)細(xì)節(jié)評(píng)測(cè)集不能和訓(xùn)練集有重疊。有人把訓(xùn)練數(shù)據(jù)抽一部分當(dāng)評(píng)測(cè)集測(cè)出來(lái)分?jǐn)?shù)虛高上線就露餡。這就是典型的數(shù)據(jù)泄漏我見(jiàn)過(guò)不止一次。2.5 階段五工程化部署與監(jiān)控模型訓(xùn)練完了事情才剛做了一半。部署環(huán)節(jié)有三個(gè)關(guān)鍵動(dòng)作推理加速包括量化、批處理、流式輸出用這些手段把延遲和成本壓下來(lái)服務(wù)化封裝把模型包裝成標(biāo)準(zhǔn)API定義好輸入輸出格式、錯(cuò)誤碼、超時(shí)策略方便業(yè)務(wù)系統(tǒng)對(duì)接監(jiān)控體系至少要盯延遲、token消耗、調(diào)用失敗率、badcase回流四個(gè)指標(biāo)。很多團(tuán)隊(duì)做到“API能調(diào)通”就認(rèn)為大功告成這是大錯(cuò)特錯(cuò)。上線之后模型在真實(shí)流量里的表現(xiàn)幾乎一定會(huì)和評(píng)測(cè)集有差異。我的做法是上線第一周每天抽聽線上badcase后面每周固定抽評(píng)一次把問(wèn)題追加到數(shù)據(jù)池?cái)€夠一批就做一輪增量微調(diào)或RAG知識(shí)更新。沒(méi)有這個(gè)回流閉環(huán)系統(tǒng)會(huì)隨著業(yè)務(wù)變化逐漸老化上線半年之后效果越來(lái)越差最后變成沒(méi)人敢用的擺設(shè)。3. 技術(shù)架構(gòu)與核心細(xì)節(jié)微調(diào)實(shí)操要點(diǎn)3.1 訓(xùn)練數(shù)據(jù)格式把業(yè)務(wù)語(yǔ)料變成模型能學(xué)的樣子準(zhǔn)備訓(xùn)練數(shù)據(jù)不是寫一堆文本丟進(jìn)去就行格式不統(tǒng)一損失函數(shù)根本不知道怎么算。指令微調(diào)最常用的是“指令-輸入-輸出”這種結(jié)構(gòu)把一條業(yè)務(wù)任務(wù)拆成三個(gè)字段。多輪對(duì)話場(chǎng)景則用“系統(tǒng)-用戶-助手”的結(jié)構(gòu)系統(tǒng)消息里固定角色和輸出風(fēng)格。單輪指令格式大致長(zhǎng)這樣{ instruction: 根據(jù)以下保險(xiǎn)合同條款判斷該理賠申請(qǐng)是否屬于免責(zé)范圍, input: 客戶投保意外險(xiǎn)駕駛機(jī)動(dòng)車時(shí)發(fā)生單方事故導(dǎo)致骨折。保單免責(zé)條款寫明被保險(xiǎn)人酒后駕車、無(wú)有效駕駛證駕駛或駕駛無(wú)有效行駛證的機(jī)動(dòng)車期間發(fā)生的事故不在保障范圍內(nèi)。, output: 根據(jù)保險(xiǎn)合同免責(zé)條款第2.3條該客戶駕駛無(wú)有效行駛證車輛期間發(fā)生事故屬于免責(zé)范圍理賠申請(qǐng)應(yīng)不予賠付。 }多輪對(duì)話格式則要求保持上下文連貫不能只給一對(duì)問(wèn)答就結(jié)束。系統(tǒng)提示詞在行業(yè)場(chǎng)景里特別重要它相當(dāng)于給模型立規(guī)矩。比如醫(yī)療場(chǎng)景系統(tǒng)提示詞就寫“你是某醫(yī)療機(jī)構(gòu)的病歷結(jié)構(gòu)化助手只輸出符合標(biāo)準(zhǔn)字段定義的JSON不輸出任何額外解釋”這樣模型在生成時(shí)天然傾向于遵循格式約束。構(gòu)建訓(xùn)練樣本的時(shí)候有幾個(gè)細(xì)節(jié)我反復(fù)強(qiáng)調(diào)樣本之間的風(fēng)格要一致不能一會(huì)兒長(zhǎng)篇大論一會(huì)兒幾個(gè)字答案必須是正確的寧可少做樣本也不要產(chǎn)出帶錯(cuò)誤的答案每條樣本最好加上“這道題在業(yè)務(wù)上是什么場(chǎng)景”方便后面復(fù)盤。3.2 微調(diào)方式選型全量、LoRA、QLoRA怎么選微調(diào)不是只有“把全部參數(shù)訓(xùn)練一遍”這一種方式?,F(xiàn)在行業(yè)里常用的有三種成本差一個(gè)數(shù)量級(jí)。方式更新參數(shù)顯存需求效果適用場(chǎng)景全量微調(diào)所有參數(shù)高上限最高數(shù)據(jù)量大、算力充足、任務(wù)復(fù)雜LoRA低秩增量矩陣中接近全量絕大多數(shù)行業(yè)項(xiàng)目的主力選擇QLoRA低秩增量量化基座低略遜于LoRA資源緊張、單卡微調(diào)LoRA的原理我用一個(gè)比喻講全量微調(diào)相當(dāng)于把整本書重新謄一遍來(lái)糾錯(cuò)LoRA則是在書后附一張勘誤表。原始權(quán)重保持不變旁邊訓(xùn)練一個(gè)低秩矩陣作為增量訓(xùn)練量通常只占全部參數(shù)的1%到2%但已經(jīng)足夠覆蓋常見(jiàn)的表達(dá)習(xí)慣修正和任務(wù)適配。QLoRA更進(jìn)一步把基座模型量化到4bit精度再跑LoRA單張消費(fèi)級(jí)顯卡就能微調(diào)幾十億參數(shù)的模型。我的選型建議比較直接團(tuán)隊(duì)資源有限、數(shù)據(jù)量在十萬(wàn)以內(nèi)、任務(wù)目標(biāo)是“讓模型掌握行業(yè)術(shù)語(yǔ)和輸出格式”首選QLoRA或LoRA。全量微調(diào)只有在數(shù)據(jù)規(guī)模很大、任務(wù)復(fù)雜度很高、團(tuán)隊(duì)又有充足算力的情況下才值得考慮真正常用的場(chǎng)景極少。很多團(tuán)隊(duì)動(dòng)不動(dòng)就上全量微調(diào)純屬資源浪費(fèi)。3.3 關(guān)鍵超參數(shù)與經(jīng)驗(yàn)值超參數(shù)這東西不同基座模型、不同數(shù)據(jù)質(zhì)量最優(yōu)點(diǎn)都不一樣但行業(yè)里有幾組經(jīng)驗(yàn)值可以當(dāng)起點(diǎn)我在多個(gè)項(xiàng)目里實(shí)測(cè)下來(lái)基本靠譜。學(xué)習(xí)率是最先要檢查的超參數(shù)。全量微調(diào)一般用1e-5到2e-5LoRA可以用高一個(gè)數(shù)量級(jí)通常1e-4到2e-4。學(xué)習(xí)率太高loss會(huì)劇烈震蕩甚至發(fā)散太低模型學(xué)不動(dòng)訓(xùn)練半天跟沒(méi)訓(xùn)一樣。批次大小不要看單卡batch要看有效的全局batch。我習(xí)慣用梯度累積把有效batch size做到128到256這樣訓(xùn)練更穩(wěn)定。epoch建議控制在2到3輪數(shù)據(jù)質(zhì)量很高可以只跑一輪跑太多輪很容易過(guò)擬合模型開始照著訓(xùn)練數(shù)據(jù)“背答案”稍微換個(gè)問(wèn)法就廢。序列長(zhǎng)度要根據(jù)領(lǐng)域文檔的平均長(zhǎng)度來(lái)定常用2048或4096。這里有取舍序列越長(zhǎng)一次能看到的信息越多但顯存和訓(xùn)練時(shí)間漲得也快。warmup比例給5%到10%權(quán)重衰減0.01到0.1這些是常規(guī)安全值。LoRA的rank怎么選我的經(jīng)驗(yàn)分類抽取這類簡(jiǎn)單任務(wù)rank給8到16就夠復(fù)雜生成和長(zhǎng)文檔任務(wù)rank給32到64。rank不是越大越好在數(shù)據(jù)量有限的時(shí)候rank太大反而會(huì)引入噪聲訓(xùn)練更慢還容易過(guò)擬合。3.4 評(píng)測(cè)體系別用BLEU自欺欺人評(píng)測(cè)是垂直大模型項(xiàng)目里最容易被技術(shù)團(tuán)隊(duì)自己騙自己的環(huán)節(jié)。很多人習(xí)慣用BLEU、ROUGE這類自動(dòng)指標(biāo)但生成式任務(wù)里這些指標(biāo)和“用戶體驗(yàn)”的相關(guān)性很低。模型完全可能輸出一段流暢但關(guān)鍵點(diǎn)全錯(cuò)的回答而BLEU分?jǐn)?shù)還挺高因?yàn)檫@些指標(biāo)只衡量字面重合度不衡量語(yǔ)義正確性。我的評(píng)測(cè)方案分三層。第一層是規(guī)則和關(guān)鍵信息匹配適合抽取、分類、格式化輸出任務(wù)比如合同要素抽取要求的那些字段直接用精確匹配查有沒(méi)有抽對(duì)。第二層是強(qiáng)模型當(dāng)裁判讓能力更強(qiáng)的模型當(dāng)評(píng)分員按給定維度打分。這樣做效率高但要注意打分穩(wěn)定性同一個(gè)輸出換個(gè)表達(dá)可能要測(cè)多次取均值。第三層是人工評(píng)估這是最終拍板的標(biāo)準(zhǔn)業(yè)務(wù)方每周固定抽檢一批真實(shí)badcase按業(yè)務(wù)標(biāo)準(zhǔn)打標(biāo)簽。評(píng)測(cè)結(jié)果需要形成閉環(huán)。我建過(guò)一個(gè)簡(jiǎn)單的badcase管理表每條badcase記錄輸入、輸出、錯(cuò)誤類型、來(lái)源場(chǎng)景然后定期反推是數(shù)據(jù)問(wèn)題還是訓(xùn)練問(wèn)題。數(shù)據(jù)問(wèn)題就去補(bǔ)同類型樣本訓(xùn)練問(wèn)題再調(diào)參數(shù)。沒(méi)有這種“評(píng)測(cè)-數(shù)據(jù)-模型”三閉環(huán)你永遠(yuǎn)只能靠感覺(jué)調(diào)模型。4. 行業(yè)應(yīng)用實(shí)戰(zhàn)三個(gè)案例全流程拆解4.1 案例一保險(xiǎn)理賠條款問(wèn)答助手某個(gè)財(cái)險(xiǎn)公司場(chǎng)景理賠員每天要查幾十份條款文檔線上客戶問(wèn)詢也經(jīng)常要求理賠口徑統(tǒng)一。原來(lái)的流程是人工翻PDF單次查詢平均十五分鐘遇到少見(jiàn)案例可能要更久。技術(shù)方案我定為兩步先用RAG解決知識(shí)檢索問(wèn)題把三千份條款文檔切塊入向量庫(kù)讓模型在回答前先檢索相關(guān)內(nèi)容再用指令微調(diào)解決表達(dá)問(wèn)題讓模型學(xué)會(huì)“先引用條款、再給結(jié)論”的固定輸出格式。數(shù)據(jù)建設(shè)是重頭。我們從歷史工單里整理出兩萬(wàn)對(duì)“客戶提問(wèn)-坐席答復(fù)”又讓資深理賠專家重寫了其中三千條標(biāo)準(zhǔn)答案保證答案口徑正確。微調(diào)用LoRA跑了三輪效果不錯(cuò)。上線后檢索命中率從67%提到89%單次查詢時(shí)間從十五分鐘降到三十秒以內(nèi)。這個(gè)項(xiàng)目踩過(guò)的坑很有代表性。條款文檔里有大量掃描件OCR識(shí)別質(zhì)量差很多章節(jié)標(biāo)題識(shí)別成亂碼檢索時(shí)經(jīng)常漏掉關(guān)鍵內(nèi)容。后來(lái)我們改了方案給每個(gè)文檔建“章節(jié)標(biāo)題正文”的雙層索引標(biāo)題識(shí)別準(zhǔn)確但正文模糊也能靠標(biāo)題把候選段落撈出來(lái)。另外條款編號(hào)在各文件里寫法不統(tǒng)一有的叫“2.3條”有的叫“第2.3節(jié)”我們做了標(biāo)準(zhǔn)化映射才解決。4.2 案例二醫(yī)療機(jī)構(gòu)影像報(bào)告結(jié)構(gòu)化某醫(yī)療機(jī)構(gòu)想把放射科報(bào)告里的關(guān)鍵信息自動(dòng)提取成結(jié)構(gòu)化字段比如病灶位置、大小、形態(tài)描述、結(jié)論意見(jiàn)。原來(lái)靠錄入員手工填表工作量大且容易漏項(xiàng)。這里我沒(méi)選RAG原因是報(bào)告結(jié)構(gòu)化的核心是輸出格式和術(shù)語(yǔ)理解知識(shí)都在文本本身里不需要外部知識(shí)庫(kù)。方案定為QLoRA微調(diào)直接讓模型把一段非結(jié)構(gòu)化報(bào)告轉(zhuǎn)成固定JSON結(jié)構(gòu)。數(shù)據(jù)準(zhǔn)備花了比訓(xùn)練更多的時(shí)間。三千份脫敏報(bào)告由醫(yī)生團(tuán)隊(duì)參與制定字段定義和標(biāo)注規(guī)范再逐份標(biāo)注。訓(xùn)練之后關(guān)鍵字段抽取F1從通用模型的78%提升到92%。上線前我們加了schema校驗(yàn)?zāi)P蜕傻腏SON先做字段合法性檢查字段名不匹配或缺失就觸發(fā)兜底邏輯不允許臟數(shù)據(jù)直接進(jìn)系統(tǒng)。踩坑的經(jīng)驗(yàn)有兩條。第一是標(biāo)注一致性兩位醫(yī)生對(duì)同一影像的描述用詞不同導(dǎo)致標(biāo)注標(biāo)準(zhǔn)漂移模型一會(huì)兒學(xué)A風(fēng)格一會(huì)兒學(xué)B風(fēng)格。解決辦法是先花一周定標(biāo)注規(guī)范做標(biāo)注一致性測(cè)試通過(guò)后再批量標(biāo)注。第二是合規(guī)醫(yī)療數(shù)據(jù)必須走脫敏和審批流程這個(gè)環(huán)節(jié)一點(diǎn)不能省我們?cè)诩夹g(shù)方案里就預(yù)留了字段級(jí)別的隱私保護(hù)。4.3 案例三制造企業(yè)維修工單智能分揀某制造企業(yè)每天收到上百?gòu)堅(jiān)O(shè)備維修工單人工分揀到機(jī)械、電氣、液壓等不同維修組分錯(cuò)一次維修周期就延長(zhǎng)一天。這個(gè)場(chǎng)景本質(zhì)是分類任務(wù)加少量要素抽取不需要生成太多內(nèi)容。方案是輕量微調(diào)直接用小規(guī)?;P妥龉收项愋头诸愅瑫r(shí)抽取設(shè)備編號(hào)和故障部位。數(shù)據(jù)來(lái)自兩萬(wàn)張歷史工單但我們先做了文本標(biāo)準(zhǔn)化工單口語(yǔ)化嚴(yán)重錯(cuò)別字、縮寫隨處可見(jiàn)“電柜跳閘”寫成“電貴跳軋”直接拿去訓(xùn)練效果很差。先做錯(cuò)別字糾正、縮寫展開、統(tǒng)一術(shù)語(yǔ)映射數(shù)據(jù)質(zhì)量上來(lái)之后再送訓(xùn)練。訓(xùn)練后分類準(zhǔn)確率從人工標(biāo)準(zhǔn)下的78%提升到95%分揀時(shí)效從平均四十分鐘縮到秒級(jí)。這個(gè)項(xiàng)目給我的體會(huì)是不是所有場(chǎng)景都需要大模型但長(zhǎng)尾表達(dá)復(fù)雜的分類任務(wù)確實(shí)比傳統(tǒng)規(guī)則引擎魯棒得多傳統(tǒng)關(guān)鍵詞匹配遇到口語(yǔ)化表達(dá)就崩潰微調(diào)模型能泛化到?jīng)]見(jiàn)過(guò)的說(shuō)法。最大的坑是標(biāo)簽體系。一開始工程部給的故障類型有四十幾種很多類型在語(yǔ)義上高度重疊模型怎么訓(xùn)都分不清。后來(lái)拉著維修組逐條梳理把類別合并成十二個(gè)大類并明確每個(gè)類型的判定邊界分類效果立刻上來(lái)了。標(biāo)簽體系不穩(wěn)定模型不可能穩(wěn)定。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 訓(xùn)練階段的問(wèn)題速查訓(xùn)練不收斂是最容易讓新手崩潰的問(wèn)題。看到loss不掉先別急著調(diào)參按順序排查第一條樣本格式對(duì)不對(duì)字段有沒(méi)有放錯(cuò)第二條學(xué)習(xí)率是不是過(guò)高loss曲線如果一開始就劇烈震蕩大概率是學(xué)習(xí)率問(wèn)題第三條數(shù)據(jù)質(zhì)量怎么樣有沒(méi)有混入大量亂碼或噪聲樣本。輸出變成亂碼是另一個(gè)高頻現(xiàn)象。我遇到過(guò)最典型的情況是訓(xùn)練數(shù)據(jù)里混入了OCR錯(cuò)誤文本模型學(xué)著學(xué)著開始輸出生僻字和亂碼。排查方法是隨機(jī)抽兩百條訓(xùn)練樣本人工過(guò)一遍大概率能發(fā)現(xiàn)源頭。顯存不夠用也很常見(jiàn)處理思路是降低序列長(zhǎng)度、調(diào)小batch size、用梯度累積實(shí)在不行換QLoRA相當(dāng)于把模型“壓縮”了以后再微調(diào)?,F(xiàn)象可能原因排查與解決loss不降數(shù)據(jù)格式錯(cuò)誤、學(xué)習(xí)率不合適檢查樣本結(jié)構(gòu)、調(diào)低學(xué)習(xí)率輸出亂碼訓(xùn)練數(shù)據(jù)里有噪聲、學(xué)習(xí)率過(guò)高抽檢樣本、降低學(xué)習(xí)率顯存溢出序列太長(zhǎng)、batch太大縮短序列、調(diào)小batch、梯度累積訓(xùn)練很快但沒(méi)效果數(shù)據(jù)量太小或重復(fù)數(shù)據(jù)太多擴(kuò)充數(shù)據(jù)、全量去重5.2 效果層面的問(wèn)題速查災(zāi)難性遺忘是垂直大模型項(xiàng)目里最典型的副作用。模型學(xué)會(huì)了行業(yè)術(shù)語(yǔ)但通用能力下降連基本的語(yǔ)法和常識(shí)都開始出錯(cuò)。原因通常是領(lǐng)域數(shù)據(jù)占比太高訓(xùn)練時(shí)把通用知識(shí)“擠掉”了。緩解手段三個(gè)訓(xùn)練數(shù)據(jù)里混合20%到30%的通用數(shù)據(jù)、降低學(xué)習(xí)率、少跑幾輪epoch用LoRA也能大幅緩解這個(gè)問(wèn)題。幻覺(jué)問(wèn)題要單獨(dú)說(shuō)。很多團(tuán)隊(duì)發(fā)現(xiàn)領(lǐng)域模型比通用模型更能一本正經(jīng)地胡說(shuō)八道原因之一是訓(xùn)練數(shù)據(jù)里全是“標(biāo)準(zhǔn)答案”模型形成了“必須回答”的慣性。我的做法是在數(shù)據(jù)里加入足量的拒答樣本讓模型遇到超出范圍的問(wèn)題時(shí)學(xué)會(huì)說(shuō)“抱歉該問(wèn)題超出我的知識(shí)范圍”同時(shí)結(jié)合RAG要求輸出必須引用檢索到的來(lái)源評(píng)測(cè)時(shí)單獨(dú)統(tǒng)計(jì)“無(wú)依據(jù)回答”的比例作為不可逾越的紅線。效果不好還有一個(gè)隱蔽原因數(shù)據(jù)泄漏。如果評(píng)測(cè)集里有訓(xùn)練數(shù)據(jù)的影子分?jǐn)?shù)會(huì)虛高上線就露餡。建議訓(xùn)練前用去重工具把訓(xùn)練集和評(píng)測(cè)集之間的重復(fù)樣本清干凈再測(cè)才算數(shù)。5.3 部署與成本的實(shí)際問(wèn)題推理慢是上線后最直接的體感問(wèn)題。處理手段有三板斧量化把模型權(quán)重降到INT8甚至INT4速度提升明顯且效果損失可控批處理把同類型請(qǐng)求攢一批一起算吞吐量成倍提升流式輸出讓用戶體驗(yàn)上感覺(jué)更快實(shí)際延遲改善不大但滿意度明顯提升。如果做完這些還是慢就要考慮換更小的基座模型畢竟行業(yè)任務(wù)里很多場(chǎng)景并不需要超大模型。成本失控是項(xiàng)目被砍的頭號(hào)原因。我的建議是做預(yù)算時(shí)把賬算透訓(xùn)練一次的成本包括GPU租賃、人力、數(shù)據(jù)標(biāo)注和一年API調(diào)用費(fèi)用放在同一張表里對(duì)比。如果訓(xùn)練成本比調(diào)用API高出太多就應(yīng)該回到RAG路線。另外連續(xù)三輪迭代后badcase數(shù)量減少不明顯說(shuō)明模型已經(jīng)到這個(gè)方案的瓶頸了這時(shí)候應(yīng)該回頭改數(shù)據(jù)或者換思路而不是繼續(xù)燒錢調(diào)參。5.4 三條獨(dú)家心得第一數(shù)據(jù)質(zhì)量永遠(yuǎn)是第一優(yōu)先級(jí)。模型是數(shù)據(jù)的鏡子壞數(shù)據(jù)會(huì)把錯(cuò)誤的學(xué)習(xí)固化進(jìn)去而且訓(xùn)練結(jié)束后很難通過(guò)調(diào)參救回來(lái)。我見(jiàn)過(guò)太多團(tuán)隊(duì)把時(shí)間花在調(diào)學(xué)習(xí)率上卻不愿意花兩天時(shí)間清理訓(xùn)練集里的OCR亂碼。第二RAG和微調(diào)是互補(bǔ)關(guān)系不是競(jìng)爭(zhēng)關(guān)系。行業(yè)知識(shí)日新月異靠微調(diào)更新知識(shí)既慢又貴行業(yè)表達(dá)風(fēng)格相對(duì)穩(wěn)定靠RAG解決表達(dá)問(wèn)題又力不從心。正確姿勢(shì)是讓RAG扛住知識(shí)層讓微調(diào)穩(wěn)住表達(dá)層。第三上線才是真正的開始。沒(méi)有badcase回流機(jī)制的系統(tǒng)很快會(huì)隨業(yè)務(wù)變化而老化。我堅(jiān)持每個(gè)項(xiàng)目上線后至少跟蹤兩個(gè)月每周從真實(shí)流量里撈badcase攢夠一千條就做一輪增量更新。這個(gè)習(xí)慣救了不少項(xiàng)目的命。最后講一個(gè)我踩過(guò)最深的坑。我第一次帶領(lǐng)域微調(diào)項(xiàng)目的時(shí)候花了整整兩周調(diào)訓(xùn)練參數(shù)結(jié)果效果不升反降后來(lái)一查問(wèn)題出在訓(xùn)練數(shù)據(jù)里混入了三千條OCR亂碼樣本——模型學(xué)著學(xué)著就開始輸出亂碼。從那以后我每次訓(xùn)練前都會(huì)隨機(jī)抽兩百條數(shù)據(jù)人工過(guò)一遍再交給模型。這個(gè)看似土辦法的檢查幫我避開了后面至少五次大返工。垂直大模型這條路真正的門檻不在訓(xùn)練這個(gè)動(dòng)作而在你愿不愿意把數(shù)據(jù)的臟活累活做扎實(shí)。