NLP自動預(yù)標(biāo)注實戰(zhàn))
先聊點(diǎn)實際的。做 NLP 相關(guān)的項目尤其是文本分類、NER、翻譯評測這類任務(wù)繞不開數(shù)據(jù)標(biāo)注這個環(huán)節(jié)。而 Label Studio 作為一款開源標(biāo)注工具界面友好、插件生態(tài)也不錯確實有不少團(tuán)隊在用。但我猜很多人和我一樣第一次用 Label Studio 的時候心里都在糾結(jié)一件事標(biāo)注界面再順手鼠標(biāo)一個個點(diǎn)過去還是太慢了尤其是拿到一批臟數(shù)據(jù)光清洗和初標(biāo)就能耗掉一兩天。這時候如果能有一個自動預(yù)標(biāo)注的環(huán)節(jié)先把大模型的結(jié)果填進(jìn)去人工只需要做校對和修正效率立馬就不一樣。CubeStudio 的 LLM 標(biāo)注后端正好解決這個痛點(diǎn)。簡單說它的思路是把自己包裝成 Label Studio 的 ML Backend讓標(biāo)注入口和模型推理打通——不需要你懂 FastAPI 怎么寫也不用單獨(dú)部署一個推理服務(wù)就能在 Label Studio 里完成基于大模型的自動預(yù)標(biāo)注。支持文本分類、NER、翻譯、圖片描述等常見任務(wù)整個接入過程幾乎是零配置的。這篇文章就圍繞著怎么讓大模型給 Label Studio 做自動預(yù)標(biāo)注來寫我會把我實際跑通的流程、踩過的坑、還有幾個關(guān)鍵參數(shù)的經(jīng)驗值都記錄下來給想上手的人一個足夠直接的參考。1. 為什么要給 Label Studio 接一個大模型預(yù)標(biāo)注后端先別急著看操作我覺得有必要把為什么是 ML Backend這件事說清楚。很多人剛接觸 Label Studio 的時候會走一條彎路把大模型的輸出結(jié)果導(dǎo)出成 JSON再手動合成 Label Studio 的標(biāo)注格式最后通過導(dǎo)入預(yù)標(biāo)注任務(wù)的方式一次性塞進(jìn)去。這條路不是不能走但新數(shù)據(jù)一旦來舊腳本就得重新跑一遍標(biāo)注人員每次都要等文件生成流程斷了體驗很差。ML Backend 是 Label Studio 官方提供的一種擴(kuò)展方式用在線的機(jī)器學(xué)習(xí)服務(wù)實時返回預(yù)標(biāo)注結(jié)果。你在標(biāo)注界面打開一個任務(wù)后臺會調(diào)用模型推理把返回的標(biāo)簽、實體或者文本直接渲染到界面上人只需要確認(rèn)和修正。這樣人工標(biāo)注和模型預(yù)測是同一個數(shù)據(jù)流不需要額外同步也不需要腳本中轉(zhuǎn)。CubeStudio 做的事就是把這個 ML Backend 的實現(xiàn)給封裝好了底層對接的是大模型 API你不需要自己去寫 FastAPI 的請求轉(zhuǎn)發(fā)代碼。我在實際用下來覺得這種方案最大的好處有三個第一標(biāo)注效率提升明顯。預(yù)標(biāo)注的價值不只在快更在于讓人工只處理模型拿不準(zhǔn)的樣本而不是從零開始看每一條。第二流程干凈。輸入輸出都是 Label Studio 原生的數(shù)據(jù)格式不用維護(hù)一堆亂七八糟的中間腳本。第三模型換得方便。CubeStudio 里面配置的是模型調(diào)用層想從 A 模型切到 B 模型只需要改配置標(biāo)注端基本不動。另外這類預(yù)標(biāo)注還有一個隱性好處你可以在正式標(biāo)注之前快速抽幾十條樣本看一眼模型輸出的質(zhì)量提前判斷這批數(shù)據(jù)適不適合用大模型做初標(biāo)。這比標(biāo)完才發(fā)現(xiàn)模型結(jié)果沒法用要省錢得多。2. CubeStudio 的 LLM 標(biāo)注后端到底做了什么2.1 從 Label Studio 的 ML Backend 協(xié)議說起想要理解 CubeStudio 的標(biāo)注后端就得先明白 ML Backend 的協(xié)議長什么樣。Label Studio 約定了一個 HTTP 接口核心就兩個路由GET /health健康檢查Label Studio 用它判斷 ML 后端是否在線。POST /predict接收標(biāo)注任務(wù)的原始數(shù)據(jù)返回預(yù)測結(jié)果。返回結(jié)果不是隨便寫的它對應(yīng) Label Studio 內(nèi)部的標(biāo)注格式。比如文本分類返回結(jié)果里要帶上你的標(biāo)簽名、置信度NER 要帶上實體起止位置、類型翻譯和圖片描述則要帶上一段生成文本。CubeStudio 內(nèi)部做了一系列轉(zhuǎn)換把大模型返回的自然語言內(nèi)容映射成這種格式這也是它能無縫接入的原因。這里有個細(xì)節(jié)值得注意/predict接口傳過來的數(shù)據(jù)里包含任務(wù)的data字段這個字段對應(yīng)你在 Label Studio 里配置的數(shù)據(jù)源字段名。所以你在 CubeStudio 里設(shè)置文本字段為text實際讀取的就是任務(wù)數(shù)據(jù)里的text鍵。一旦名字對不上模型拿到的就是空字符串預(yù)標(biāo)注自然什么都不返回。2.2 CubeStudio 的零部署是怎么實現(xiàn)的說是零部署更準(zhǔn)確的說法是你不需要自己在服務(wù)器上維護(hù)一套 FastAPI 服務(wù)。CubeStudio 會把 ML Backend 的邏輯內(nèi)置在一個可直接運(yùn)行的進(jìn)程里你只需要保證它能訪問到大模型 API然后把端口地址告訴 Label Studio 就行。從操作層面看它就是三步下載或啟動 CubeStudio 的標(biāo)注后端、配置模型參數(shù)、在 Label Studio 里連接 URL。這種架構(gòu)的優(yōu)勢在于前后端分離得很干凈。Label Studio 只是消費(fèi)方它不關(guān)心你的模型是私有化部署還是云端 API。CubeStudio 充當(dāng)了一個適配層把大模型的響應(yīng)時間、鑒權(quán)方式、重試機(jī)制這些瑣碎事情都擋在標(biāo)注流程之外。我在本地試的時候是用 Docker 起的后端因為環(huán)境不用自己裝 Python 依賴。生產(chǎn)環(huán)境建議用同樣的方式省去很多依賴沖突的煩惱。2.3 支持的四種任務(wù)類型CubeStudio 的標(biāo)注后端目前對文本分類、NER、翻譯、圖片描述的支持比較成熟。我逐一說明一下它對各類任務(wù)的底層處理方式文本分類把項目里配置的標(biāo)簽列表傳給大模型要求模型從這些標(biāo)簽里選一個返回標(biāo)簽名。實際流程中中文的文本分類效果很大程度上取決于標(biāo)簽名是否清晰。如果標(biāo)簽名太模糊模型很容易給出不穩(wěn)定的結(jié)果。NER需要模型返回實體類型 實體文本的配對CubeStudio 再根據(jù)實體文本在原文中的位置計算起止偏移。這里有個常見坑模型返回的實體文本如果和原文不一致比如全角半角差異字符定位會失敗所以偶爾會出現(xiàn)標(biāo)了但位置對不上的情況。翻譯這個比較簡單模型輸出句子直接作為結(jié)果Label Studio 端把它當(dāng)作文本類型的標(biāo)注展示。如果配置了多個目標(biāo)語言可以通過提示詞區(qū)分。圖片描述把圖片 Base64 傳給多模態(tài)大模型生成描述文本返回。這里比較依賴模型本身的視覺能力我用開源的多模態(tài)小模型試過效果比商業(yè) API 差不少。3. 實操給文本分類任務(wù)接上自動預(yù)標(biāo)注3.1 準(zhǔn)備一個 Label Studio 項目接 ML Backend 之前先得在 Label Studio 里把標(biāo)注項目建好。關(guān)鍵配置是標(biāo)注界面Labeling Config這個配置里的標(biāo)簽名就是后面 CubeStudio 用來約束模型輸出的依據(jù)。拿文本分類舉例Labeling Config 大概長這樣View Text nametext value$text/ Choices namelabel toNametext choicesingle Choice value正面的/ Choice value負(fù)面的/ Choice value中性的/ /Choices /View這里有幾個細(xì)節(jié)要講清楚nametext里的text對應(yīng)任務(wù)數(shù)據(jù) JSON 里的字段名。如果你的任務(wù)數(shù)據(jù)用的是content字段這里就要改成value$content。Choice value必須和 CubeStudio 提示詞里的候選標(biāo)簽保持一致。如果兩邊不一致模型返回的標(biāo)簽不在列表里預(yù)標(biāo)注結(jié)果就會被拒絕顯示。選擇choicesingle或choicemultiple會直接影響提示詞的構(gòu)造方式。多標(biāo)簽分類時需要告訴模型可以返回多個標(biāo)簽不然模型總是只挑一個最自信的。如果你只是為了測試可以直接在 Label Studio 里用Add Sample Task功能手動造幾條數(shù)據(jù)。不過更推薦先通過 API 導(dǎo)入一批真實數(shù)據(jù)這樣后面看預(yù)標(biāo)注效果才有參考價值。3.2 啟動 CubeStudio 的標(biāo)注后端開始之前先確認(rèn)你手上有一個可用的模型 API Key。這里說的模型 API我建議優(yōu)先選兼容大模型格式的。CubeStudio 本身不綁定具體廠商所以只要你的 Key 能通過標(biāo)準(zhǔn)接口調(diào)用就行。拉取并啟動后端的命令大概是這樣的具體請以你實際拿到的最新文檔為準(zhǔn)docker pull cubestudio/llm-mlbackend:latest docker run -d --name ls-mlbackend \ -p 9090:9090 \ -e API_KEY你的密鑰 \ -e MODEL_NAME你的模型名 \ -e API_BASEhttps://api.example.com/v1 \ cubestudio/llm-mlbackend:latest啟動完成后先自己驗證一下http://localhost:9090/health如果返回正常的 JSON 狀態(tài)說明服務(wù)起來了。這里的MODEL_NAME很有講究。不同的模型在指令遵循能力、中文理解、上下文長度上都有差別。我實測下來文本分類這種簡單任務(wù)指令遵循能力不錯的開源模型也能勝任但 NER 任務(wù)對模型的指令遵循要求高一些因為要穩(wěn)定輸出結(jié)構(gòu)化內(nèi)容建議選能力更強(qiáng)、上下文更長的模型。3.3 在 Label Studio 里連上 ML Backend打開 Label Studio 項目的 Settings找到 ML Backends機(jī)器學(xué)習(xí)后端頁面點(diǎn)擊 Add ML Backend添加。URL 填寫http://localhost:9090如果你的 CubeStudio 跑在遠(yuǎn)程服務(wù)器上就寫服務(wù)器的公網(wǎng)地址。點(diǎn)擊 Connect 測試連通性。連接成功后打開任意一個任務(wù)左側(cè)的Auto Annotation區(qū)域就會出現(xiàn)模型返回的預(yù)標(biāo)注結(jié)果你點(diǎn)一下 Apply 就能應(yīng)用標(biāo)簽到當(dāng)前樣本。實際使用中我建議把預(yù)標(biāo)注的閾值Score Threshold調(diào)到一個合理值比如 0.5。低于閾值的預(yù)測結(jié)果不會顯示這樣可以減少人工校對低置信度標(biāo)簽的負(fù)擔(dān)。這里有個值得說的點(diǎn)Label Studio 的預(yù)標(biāo)注結(jié)果里會帶置信度信息也就是score字段。CubeStudio 在為文本分類生成結(jié)果時會給每個候選標(biāo)簽計算一個概率。如果你發(fā)現(xiàn)預(yù)標(biāo)注出來的結(jié)果經(jīng)常和真實標(biāo)簽差很多優(yōu)先去看看 score 分布如果大部分結(jié)果 score 都很低說明模型對這個任務(wù)的區(qū)分度不夠換模型比換提示詞更有效。4. NER 任務(wù)的接入細(xì)節(jié)與字符偏移問題4.1 NER 的 Label Studio 配置NER 在 Label Studio 里的配置和文本分類差別很大你需要定義一個 Span 類型的標(biāo)注控件才能支持實體起止位置的標(biāo)注。示例配置如下View Labels namelabel toNametext Label value人名 backgroundyellow/ Label value地名 backgroundgreen/ Label value機(jī)構(gòu)名 backgroundblue/ /Labels Text nametext value$text/ /View同樣這里L(fēng)abels里面的value值是后端提示詞的重要參考。Label Studio 內(nèi)部對實體標(biāo)注的存儲格式大概是start和end兩個整數(shù)加上labels數(shù)組。CubeStudio 收到模型的實體抽取結(jié)果后要在原文里反查實體的準(zhǔn)確位置。4.2 字符偏移誤差是怎么產(chǎn)生的這個部分是我最想強(qiáng)調(diào)的。用大模型做 NER 預(yù)標(biāo)注最大的坑不是模型抽不抽得出實體而是模型抽取的實體文本和原文里的實際文本存在細(xì)微差異導(dǎo)致起始位置算錯。常見原因有模型把全角括號轉(zhuǎn)成了半角括號()。模型多帶了一個句號或者空格。實體文本在原文里出現(xiàn)多次模型沒有指明是哪一次出現(xiàn)。中英文之間多了一個空格。CubeStudio 在處理時一般會先在原文里精確查找模型返回的實體文本。如果完全匹配直接用find()得到的位置如果找不到有些實現(xiàn)會做模糊匹配或返回空結(jié)果。這意味著在標(biāo)注界面里偶爾會看到某個實體沒有預(yù)標(biāo)注。我個人建議處理策略是把 CubeStudio 的 NER 任務(wù)當(dāng)做一個召回環(huán)節(jié)而不是精確標(biāo)注環(huán)節(jié)。模型抽出來的實體哪怕位置偏了一兩個字只要實體類型正確人工調(diào)整起止點(diǎn)也比從零開始快得多。如果你要求每一條預(yù)標(biāo)注都必須完美那期望值需要調(diào)整一下。4.3 一個提升 NER 穩(wěn)定性的提示詞思路CubeStudio 允許你對不同任務(wù)自定義提示詞這是我后來才發(fā)現(xiàn)的保留功能。我用的 NER 提示詞大概長這樣你是一個命名實體識別助手。請從下面的文本中抽取出所有屬于以下類型的人名、地名、機(jī)構(gòu)名實體。 輸出要求以 JSON 數(shù)組返回每個元素包含 entity 字段和 type 字段。 只輸出 JSON不要額外說明。 文本{input}關(guān)鍵點(diǎn)不是提示詞多花哨而是讓模型約束輸出格式。模型一旦用自然語言回答比如以下是抽取結(jié)果后端的 JSON 解析就可能會掛。把只輸出 JSON寫在提示詞里能顯著降低解析失敗率。我遇到過幾次模型在輸出末尾加了句號導(dǎo)致 JSON 解析失敗的案例后來在后端重試邏輯里加了一個提取 JSON 片段的兜底情況好轉(zhuǎn)很多。5. 翻譯和圖片描述任務(wù)的特殊處理5.1 翻譯預(yù)標(biāo)注的配置思路翻譯任務(wù)的 Label Studio 配置要簡單不少因為輸出本質(zhì)上是一段文本不需要標(biāo)簽枚舉??梢杂靡粋€TextArea控件來接住模型翻譯結(jié)果View Text namesrc value$source/ TextArea nametranslation toNamesrc editabletrue/ /View這種模式下CubeStudio 的預(yù)標(biāo)注結(jié)果就是譯文文本會直接填進(jìn)對應(yīng)的TextArea里。人工評估的時候只需要看譯文是否正確把不好的改掉比從零翻譯快很多。我做翻譯預(yù)標(biāo)注的時候比較喜歡把原文的語言類型和期望的目標(biāo)語言寫進(jìn)項目描述里。如果一條原文本身是英文目標(biāo)語言是中文提示詞里最好明確說明。有些場景下還會遇到文本本身不是目標(biāo)任務(wù)語言的情況比如中文項目里混入了一條英文句子模型可能因為理解語義就直接翻譯成目標(biāo)語言反而把不該翻的也翻了。所以翻譯類預(yù)標(biāo)注更依賴你的數(shù)據(jù)質(zhì)量建議前期先把明顯混雜的數(shù)據(jù)篩掉。5.2 圖片描述任務(wù)要注意的 Base64 與多模態(tài)圖片描述這個任務(wù)依賴的是多模態(tài)大模型。對應(yīng)的 Label Studio 配置大概是View Image nameimage value$image_url/ TextArea namecaption toNameimage/ /View這里的value$image_url可以是遠(yuǎn)程圖片地址也可以是個帶data:image/...;base64,前綴的 Base64 字符串。CubeStudio 的圖片描述后端會把圖片數(shù)據(jù)轉(zhuǎn)成模型能接受的格式然后請求多模態(tài)大模型生成描述文本。我實測下來的感受是圖片描述這類任務(wù)模型能不能看清圖片的影響遠(yuǎn)大于提示詞寫得好不好。如果業(yè)務(wù)場景里的圖片分辨率很低、主體不清晰、或者有很多專業(yè)概念商用多模態(tài) API 的表現(xiàn)會明顯比通用開源小模型更好。另外還要特別關(guān)注圖片源站是否允許被公網(wǎng)訪問如果你的圖片存在內(nèi)網(wǎng)或者私有存儲桶里CubeStudio 后端讀取不到圖片預(yù)標(biāo)注就會一直失敗。6. 我踩過的坑和常見問題速查6.1 連接成功但沒有任何預(yù)標(biāo)注結(jié)果這是最讓人抓狂的問題。模型接口正常ML Backend 也能連上但打開任務(wù)就是沒有預(yù)標(biāo)注。我的排查順序是這樣的先手動調(diào)用一次/predict接口直接在命令行里 POST 一條任務(wù)數(shù)據(jù)看看后端返回什么。如果返回報錯優(yōu)先看日志。檢查任務(wù)數(shù)據(jù)字段名是否和預(yù)標(biāo)注配置里的data字段一致??纯春蠖巳罩纠镉袥]有模型請求超時的記錄。如果大模型 API 每次響應(yīng)超過 30 秒預(yù)標(biāo)注體驗會很差需要更換響應(yīng)更快的模型服務(wù)。確認(rèn) Label Studio 的Auto Annotation按鈕是否開啟有些版本需要手動開啟才會觸發(fā)請求。6.2 文本分類的 label 對不上如果 CubeStudio 返回的預(yù)測標(biāo)簽名不在你項目的標(biāo)注配置里預(yù)標(biāo)注結(jié)果會被丟棄。這個問題排查起來也簡單把后端返回的完整 JSON 打出來看里邊的labels數(shù)組。說得直白點(diǎn)標(biāo)簽名這個東西兩邊差一個字都不行。我的習(xí)慣是在配置 Labeling Config 時盡量用簡單的、無歧義的標(biāo)簽名。如果你非要用中文標(biāo)簽?zāi)翘崾驹~里也必須是同樣的中文絕對不能靠模型自己猜。6.3 NER 實體偏移不準(zhǔn)這個問題前面提過最直接的處理方式是調(diào)整提示詞讓模型按原文逐字抽取而不是概括抽取。比如在提示詞中加上不要改寫實體原文只能從文本中復(fù)制原文字符串。我還見過有人通過給模型返回偏移量而不是實體字符串的方案但那種做法要求模型本身具備字符精確計數(shù)能力實測錯誤率反而更高不如讓后端自己定位。6.4 不同任務(wù)更換模型后效果變差很多人會忽略一個問題大模型的能力分布差異很大有的模型對中文 NER 理解更好有的模型在指令遵循上更強(qiáng)、但文本生成質(zhì)量一般。CubeStudio 允許你按任務(wù)設(shè)置不同的模型參數(shù)我的實踐是任務(wù)類型推薦的模型能力側(cè)重說明文本分類指令遵循、標(biāo)簽理解對文本長度要求不高關(guān)鍵是別亂發(fā)明標(biāo)簽NER實體識別、字符精確匹配模型輸出穩(wěn)定性優(yōu)先格式控制很重要翻譯語言生成、語義理解上下文窗口要夠大超長文本需要分段圖片描述視覺理解、細(xì)節(jié)描述更看重多模態(tài)模型本身的視覺能力我試過一個通用小模型跑分類任務(wù)效果還不錯但一換到 NER 就經(jīng)常漏實體。這不是配置寫錯了單純是模型能力的差異。如果預(yù)算允許建議關(guān)鍵任務(wù)單獨(dú)分配模型別用一個模型包打天下。6.5 大量任務(wù)一次性預(yù)標(biāo)注如何不阻塞ML Backend 默認(rèn)是在標(biāo)簽界面打開任務(wù)時才請求模型如果你有一大批數(shù)據(jù)想一次性批量預(yù)標(biāo)注逐個打開根本不現(xiàn)實。CubeStudio 的標(biāo)注后端一般會提供一個批量預(yù)測的接口可以配合腳本一次性下發(fā)整個數(shù)據(jù)集。我自己的操作方式是先用一個小腳本讀入 Label Studio 的數(shù)據(jù)集然后把它按批切好每批并發(fā)調(diào)用批量預(yù)測接口把返回結(jié)果直接更新到任務(wù)里。這樣標(biāo)注人員進(jìn)入項目的時候所有任務(wù)都已經(jīng)帶上了預(yù)標(biāo)注結(jié)果不需要再等模型實時推理。這樣做還有一個好處就是能提前發(fā)現(xiàn)模型對哪一批數(shù)據(jù)效果不好及時止損。7. 把預(yù)標(biāo)注結(jié)果用起來的幾條個人經(jīng)驗7.1 預(yù)標(biāo)注不是直接采納要建立抽查機(jī)制我見過最多的問題是團(tuán)隊把預(yù)標(biāo)注當(dāng)成免檢標(biāo)注直接全量采納模型結(jié)果后面模型效果一旦變差錯誤的標(biāo)注就喂給了下游模型形成惡性循環(huán)。比較穩(wěn)妥的做法是在標(biāo)注流程里加個強(qiáng)制步驟人工必須點(diǎn)擊確認(rèn)且系統(tǒng)記錄修改前后的差異。用這些差異數(shù)據(jù)可以持續(xù)評估哪些樣本類型模型容易錯再針對性地優(yōu)化提示詞或補(bǔ)充 few-shot 示例。7.2 留一部分?jǐn)?shù)據(jù)完全不給預(yù)標(biāo)注導(dǎo)致你不知不覺對模型結(jié)果產(chǎn)生路徑依賴的理由很簡單人看完預(yù)標(biāo)注后再去修正修正的幅度往往會變小。為了評估模型真實能力我建議留 5% 到 10% 的任務(wù)不開啟自動預(yù)標(biāo)注讓人工完全獨(dú)立標(biāo)注。這批數(shù)據(jù)的質(zhì)量可以用來對比預(yù)標(biāo)注和純?nèi)斯さ牟町愐部梢宰鳛楹罄m(xù)微調(diào)模型的驗證集。7.3 把預(yù)標(biāo)注結(jié)果反哺給模型做少樣本優(yōu)化所有完成校對的數(shù)據(jù)其實都是高質(zhì)量的監(jiān)督信號。無論是你現(xiàn)在用的模型還是未來的模型都可以用這一批數(shù)據(jù)做 few-shot 或者微調(diào)。CubeStudio 里沒有內(nèi)置微調(diào)流程但我通常會把人工修正后的數(shù)據(jù)導(dǎo)出整理成對話格式或指令格式用于后續(xù)的訓(xùn)練迭代。這等于你在標(biāo)注階段就已經(jīng)同步積累了一份訓(xùn)練集。8. 把 CubeStudio 預(yù)標(biāo)注配置固化到項目里最后說說配置的固化。如果你負(fù)責(zé)的是一個長期存在的標(biāo)注項目不希望每次都手工敲一遍環(huán)境變量和提示詞建議把 CubeStudio 的配置以文件形式管理起來。我的做法是在項目倉庫里放一份mlbackend.env文件記錄下模型名、API 地址、溫度參數(shù)等然后在部署腳本里引用它。以下是一個簡化版的配置示例# mlbackend.env API_KEY你的密鑰 MODEL_NAME你的模型名 TASK_TYPEtext_classification LABELS正面的,負(fù)面的,中性的 TEXT_FIELDtext SCORE_THRESHOLD0.5把這些參數(shù)變成配置而不是散落在代碼里后續(xù)換模型、調(diào)閾值、加標(biāo)簽都只需要更新環(huán)境變量。這個習(xí)慣在項目從試點(diǎn)走向正式生產(chǎn)時尤其重要不然每次調(diào)試都要翻歷史記錄真的很累。我還建議你在 Label Studio 項目里加一層質(zhì)量校驗規(guī)則比如某一天預(yù)標(biāo)注結(jié)果被人工修改的比例突然變大第一時間給出告警。這說明模型服務(wù)的狀態(tài)可能出了問題或者數(shù)據(jù)分布發(fā)生了變化。最后再分享一個小技巧CubeStudio 的預(yù)標(biāo)注后端在啟動時會有一個顯式的配置檢查日志我能跑通整套流程很大程度上得益于每次重啟服務(wù)后都習(xí)慣性先看一眼日志。不要覺得這一步?jīng)]必要當(dāng)你改了模型名稱或標(biāo)簽列表后發(fā)現(xiàn)預(yù)標(biāo)注異常時日志里通常早就給你提示了。用這種方式排查比在標(biāo)注界面里反復(fù)刷新要高效得多。