器人NLP意圖識(shí)別:技術(shù)選型與工程落地實(shí)踐)
做返利機(jī)器人最磨人的地方從來(lái)不是返利比例怎么算、傭金怎么跟蹤而是你永遠(yuǎn)猜不到用戶(hù)下一句會(huì)發(fā)什么。有人直接丟一個(gè)商品鏈接過(guò)來(lái)有人發(fā)一串?dāng)?shù)字編碼有人問(wèn)“這個(gè)能不能返現(xiàn)”還有人只是隨口說(shuō)了一句“在嗎”就開(kāi)始等回復(fù)。如果機(jī)器人把所有消息都按同一套流程處理那等待用戶(hù)的只有離譜的回復(fù)和流失的下單意愿。這就是自然語(yǔ)言處理NLP和用戶(hù)意圖識(shí)別在這個(gè)場(chǎng)景里繞不開(kāi)的原因。返利機(jī)器人的對(duì)話(huà)入口本身就長(zhǎng)在一個(gè)環(huán)境嘈雜、表述隨意、信息密度極高的渠道里用戶(hù)沒(méi)有耐心、更不會(huì)按你設(shè)計(jì)的菜單一步步點(diǎn)下去。把“用戶(hù)到底想干嘛”這個(gè)最難的問(wèn)題先解決掉后面的鏈接解析、返利查詢(xún)、訂單跟蹤才有意義。我自己從零完整做過(guò)一版這樣的系統(tǒng)踩過(guò)不少坑這篇文章把技術(shù)選型、核心模塊、落地路徑和線(xiàn)上問(wèn)題整理成一份可以直接參考的實(shí)踐記錄寫(xiě)給正在做或打算做類(lèi)似導(dǎo)購(gòu)、返利類(lèi)對(duì)話(huà)系統(tǒng)的朋友。1. 返利機(jī)器人場(chǎng)景里NLP 到底要解決什么問(wèn)題1.1 先看清用戶(hù)消息的真實(shí)形態(tài)返利機(jī)器人收到的消息比普通客服機(jī)器人更雜。我梳理過(guò)一版線(xiàn)上日志把用戶(hù)輸入按形態(tài)大致分成了四類(lèi)平臺(tái)鏈接最常見(jiàn)用戶(hù)把商品詳情頁(yè)鏈接直接粘貼過(guò)來(lái)可能是完整 URL、短鏈、帶推廣參數(shù)的長(zhǎng)鏈接甚至是從聊天記錄里復(fù)制出來(lái)的殘缺鏈接。商品關(guān)鍵詞用戶(hù)不給你鏈接只輸入“藍(lán)牙耳機(jī)”“性?xún)r(jià)比高的洗衣液”這類(lèi)模糊描述指望機(jī)器人能幫他找商品。操作指令例如“查返利”“提現(xiàn)”“綁定賬號(hào)”“我的訂單”這類(lèi)消息目標(biāo)是明確的功能操作不是商品本身。閑聊與噪音“在嗎”“謝謝”“能不能快點(diǎn)”以及各種表情、標(biāo)點(diǎn)、無(wú)效字符。關(guān)鍵問(wèn)題是這四類(lèi)消息互相之間并沒(méi)有明顯邊界。用戶(hù)可能先發(fā)一句“在嗎”等你回復(fù)之后才發(fā)鏈接“查返利”后面緊跟一串訂單號(hào)甚至有人在鏈接后面附帶一句“這個(gè)好用嗎”。如果機(jī)器人只是機(jī)械地檢測(cè)消息里有沒(méi)有鏈接就很難準(zhǔn)確理解用戶(hù)這一輪的完整訴求。1.2 把返利鏈路拆成機(jī)器能執(zhí)行的意圖單元我后來(lái)意識(shí)到不能把返利機(jī)器人當(dāng)成一個(gè)“看懂所有話(huà)”的對(duì)話(huà)助手而要把它當(dāng)成一個(gè)“意圖路由器”。無(wú)論用戶(hù)說(shuō)得怎么隨意最終服務(wù)端能做的事情只有那么幾件解析商品、查詢(xún)返利、綁定賬號(hào)、處理提現(xiàn)、查詢(xún)訂單、執(zhí)行搜索、觸發(fā)人工。那么 NLP 層的任務(wù)就變得非常聚焦把用戶(hù)輸入映射到這些有限的意圖單元里并抽取相應(yīng)的參數(shù)。這樣拆解有個(gè)直接好處每個(gè)意圖對(duì)應(yīng)的后續(xù)處理流程可以做得非常專(zhuān)精。比如識(shí)別到意圖是“解析商品鏈接”核心參數(shù)就是鏈接本身識(shí)別到意圖是“查詢(xún)訂單”核心參數(shù)就是訂單號(hào)或時(shí)間范圍。意圖識(shí)別做得準(zhǔn)下游每個(gè)模塊都可以像調(diào)用一個(gè)小型接口一樣工作整個(gè)系統(tǒng)才會(huì)穩(wěn)定。這里要說(shuō)一個(gè)我的經(jīng)驗(yàn)教訓(xùn)一開(kāi)始不要把意圖分類(lèi)做得太細(xì)。比如把“想要省錢(qián)”和“想了解優(yōu)惠”分成兩種意圖看上去更智能實(shí)際上樣本標(biāo)注和模型擬合都容易出問(wèn)題線(xiàn)上效果反而不如粗粒度分類(lèi)穩(wěn)定。先保證 78 個(gè)核心意圖的準(zhǔn)確率再根據(jù)數(shù)據(jù)表現(xiàn)做細(xì)分比一開(kāi)始就鋪一個(gè)大而全的意圖體系靠譜得多。2. 意圖識(shí)別方案選型規(guī)則、詞典還是模型2.1 三種主流路線(xiàn)各有各的適用邊界很多剛開(kāi)始做的人會(huì)在“要不要上深度學(xué)習(xí)模型”這個(gè)問(wèn)題上糾結(jié)很久。我的建議是先看清楚三條路的邊界再往自己的場(chǎng)景里套。純規(guī)則方案適合意圖邊界非常清晰、表達(dá)方式高度固定的場(chǎng)景。比如鏈接解析、訂單號(hào)識(shí)別用正則表達(dá)式就能做到極高準(zhǔn)確率。但規(guī)則很難覆蓋用戶(hù)千奇百怪的口語(yǔ)化表達(dá)你永遠(yuǎn)寫(xiě)不全所有說(shuō)法。詞典匹配方案適合領(lǐng)域詞匯集中、意圖表達(dá)有強(qiáng)關(guān)鍵詞的場(chǎng)景。比如“提現(xiàn)”“綁定”“返利”這些詞本身就有明顯指向性。詞典方案的優(yōu)點(diǎn)是不需要訓(xùn)練樣本可以快速上線(xiàn)缺點(diǎn)是分詞誤差、近義表達(dá)、上下文歧義都會(huì)導(dǎo)致誤判。機(jī)器學(xué)習(xí)方案適合意圖數(shù)量多、表達(dá)方式開(kāi)放的場(chǎng)景。短文本分類(lèi)、語(yǔ)義相似度匹配都能派上用場(chǎng)。但它依賴(lài)標(biāo)注數(shù)據(jù)冷啟動(dòng)成本高迭代周期也長(zhǎng)。如果一開(kāi)始就上復(fù)雜度很高的模型團(tuán)隊(duì)很容易被數(shù)據(jù)問(wèn)題拖垮。2.2 混合式架構(gòu)規(guī)則兜底模型提升上限我最終采用的是分層混合架構(gòu)這也是目前實(shí)際項(xiàng)目中比較穩(wěn)妥的解法。用戶(hù)輸入進(jìn)來(lái)后先走一層預(yù)處理和規(guī)則路由規(guī)則能穩(wěn)定判斷的直接處理掉規(guī)則判斷不了或置信度不夠的才交給模型做意圖分類(lèi)。模型輸出結(jié)果后再經(jīng)過(guò)一層合法性校驗(yàn)最終決定走哪個(gè)下游流程。這個(gè)設(shè)計(jì)背后有三個(gè)考慮。第一返利機(jī)器人場(chǎng)景里的高確定性輸入非常多根本不需要?jiǎng)佑媚P椭豢恳?guī)則就能做到接近 100% 的準(zhǔn)確率沒(méi)必要增加復(fù)雜度和風(fēng)險(xiǎn)。第二模型的強(qiáng)項(xiàng)是覆蓋開(kāi)放表達(dá)但它的輸出天然帶概率屬性不能完全信任必須兜底。第三規(guī)則和模型互相補(bǔ)充以后系統(tǒng)整體在新增渠道、新增功能時(shí)可以只改規(guī)則層不需要頻繁重訓(xùn)模型。2.3 用戶(hù)意圖分類(lèi)體系怎么建在搭混合架構(gòu)之前先要設(shè)計(jì)好意圖分類(lèi)體系。我的建議是采用分級(jí)結(jié)構(gòu)。第一級(jí)按業(yè)務(wù)模塊劃分商品解析、返利查詢(xún)、訂單管理、賬號(hào)管理、提現(xiàn)、閑聊、其他。第二級(jí)才在某個(gè)模塊內(nèi)部細(xì)化比如訂單管理下面再分“查詢(xún)收益”“查詢(xún)狀態(tài)”“補(bǔ)錄訂單”等子意圖。給每個(gè)意圖下定義時(shí)要極其小心因?yàn)槎x模糊直接導(dǎo)致標(biāo)注不一致進(jìn)而讓模型學(xué)不到穩(wěn)定特征。我最后定稿的時(shí)候給每個(gè)意圖都配了清晰的正例描述、反例描述和真實(shí)對(duì)話(huà)樣例標(biāo)注人員不用自己猜。比如“提現(xiàn)”意圖的定義是“用戶(hù)明確表達(dá)希望將可提現(xiàn)余額結(jié)算到自己的賬戶(hù)”反例是“用戶(hù)詢(xún)問(wèn)余額是多少”——后者歸為“收益查詢(xún)”。這里插一句閑聊意圖一定要單獨(dú)建類(lèi)。用戶(hù)消息里大量存在“謝謝”“你好”這類(lèi)社交性表達(dá)這類(lèi)消息沒(méi)有業(yè)務(wù)含義但如果不識(shí)別出來(lái)就會(huì)誤觸發(fā)業(yè)務(wù)意圖帶來(lái)很差的體驗(yàn)。我見(jiàn)過(guò)不少返利機(jī)器人因?yàn)闆](méi)做閑聊識(shí)別用戶(hù)發(fā)一句“好的吧”都被當(dāng)成“我要查單”非常尷尬。3. 意圖識(shí)別核心模塊的落地實(shí)現(xiàn)3.1 文本歸一化與預(yù)處理鏈路做意圖識(shí)別前文本歸一化這步看似不起眼實(shí)際上是決定上限的一步。返利機(jī)器人收到的文本噪音極大商品鏈接里經(jīng)常混著中文、英文、數(shù)字、各種參數(shù)符號(hào)用戶(hù)發(fā)送的一段話(huà)里可能帶表情、錯(cuò)別字、繁體字還有人會(huì)從聊天記錄里復(fù)制消息前面帶著別人的昵稱(chēng)和時(shí)間戳。我的預(yù)處理鏈路大致是這幾步原始消息先做編碼清洗把常見(jiàn)的異常字符、控制字符過(guò)濾掉再做全角半角統(tǒng)一把中文符號(hào)和英文括號(hào)統(tǒng)一成標(biāo)準(zhǔn)形態(tài)接著做鏈接提取用正則把 URL 抽出來(lái)單獨(dú)保存原文里剩余的部分才進(jìn)入意圖識(shí)別模塊最后做基礎(chǔ)糾錯(cuò)針對(duì)電商場(chǎng)景做了一批常見(jiàn)錯(cuò)別字映射比如把“返現(xiàn)”寫(xiě)成“返線(xiàn)”的情況修正過(guò)來(lái)。這里要特別強(qiáng)調(diào)一個(gè)容易忽略的點(diǎn)鏈接本身的識(shí)別要在意圖識(shí)別之前完成。因?yàn)殒溄邮且粋€(gè)確定性極高的信號(hào)一旦提取到有效鏈接這條消息的主意圖基本就可以判定為“商品解析”不需要再做復(fù)雜的語(yǔ)義分析。先撈確定性信號(hào)再去處理模糊表達(dá)整體準(zhǔn)確率會(huì)提升一個(gè)檔次。3.2 規(guī)則層關(guān)鍵實(shí)現(xiàn)要點(diǎn)規(guī)則層我拆成了兩部分分別是“意圖前置規(guī)則”和“參數(shù)抽取規(guī)則”。意圖前置規(guī)則解決高確定性輸入。比如消息中檢測(cè)到平臺(tái)鏈接直接判定為“商品解析”檢測(cè)到“訂單號(hào)”且格式合法判定為“訂單查詢(xún)”檢測(cè)到明確功能動(dòng)詞比如“提現(xiàn)”“綁定”判定為對(duì)應(yīng)操作意圖。這部分規(guī)則要寫(xiě)得非常克制寧可少攔截不要誤攔截。因?yàn)橐?guī)則誤判的傷害比模型誤判更大——規(guī)則有確定性一旦錯(cuò)誤用戶(hù)會(huì)立刻感到機(jī)器人“完全聽(tīng)不懂”。參數(shù)抽取規(guī)則關(guān)注的是從消息中拿核心參數(shù)。比如從鏈接里提取商品 ID、從訂單消息里提取訂單號(hào)、從提現(xiàn)消息里提取金額。這些抽取動(dòng)作都依賴(lài)正則和詞典我建議把所有正則表達(dá)式收斂到一個(gè)單獨(dú)的模塊里統(tǒng)一管理避免散落在各個(gè)業(yè)務(wù)代碼中。有個(gè)實(shí)操細(xì)節(jié)想提醒一下規(guī)則判斷要設(shè)置優(yōu)先級(jí)順序。比如一條消息既含有鏈接又含有“提現(xiàn)”這個(gè)詞這時(shí)候應(yīng)該先處理鏈接還是先處理提現(xiàn)我當(dāng)時(shí)的策略是“鏈接優(yōu)先級(jí)最高功能動(dòng)詞次之關(guān)鍵詞兜底”因?yàn)殒溄邮菑?qiáng)信號(hào)而“提現(xiàn)”這句話(huà)可能是用戶(hù)聊天聊到一半順口提的。3.3 短文本分類(lèi)與語(yǔ)義相似度模塊規(guī)則覆蓋不了的部分就要交給模型。返利機(jī)器人里的意圖識(shí)別本質(zhì)上是短文本分類(lèi)問(wèn)題句子長(zhǎng)度通常在 20 字以?xún)?nèi)句子風(fēng)格口語(yǔ)化領(lǐng)域詞匯相對(duì)固定。我實(shí)踐下來(lái)在文本分類(lèi)這條任務(wù)上輕量模型的效果與重型模型差距沒(méi)有想象中那么大但工程復(fù)雜度差距非常大。我的方案分兩層。第一層是短文本分類(lèi)模型候選集合是“商品搜索”“收益查詢(xún)”“訂單查詢(xún)”“提現(xiàn)”“賬號(hào)綁定”“閑聊”“其他”等核心意圖。模型輸入是歸一化之后的文本片段輸出各意圖的概率分布。第二層是相似度匹配主要用于商品搜索場(chǎng)景——用戶(hù)輸入“藍(lán)牙耳機(jī)”之類(lèi)的時(shí)候無(wú)法直接映射到既有意圖而是需要通過(guò)語(yǔ)義相似度與商品庫(kù)里的品類(lèi)詞做匹配。對(duì)于短文本分類(lèi)模型我在實(shí)踐里用過(guò)兩種方案。數(shù)據(jù)量少的時(shí)候用 FastText 這類(lèi)線(xiàn)性模型訓(xùn)練速度快參數(shù)量小部署省資源線(xiàn)上效果對(duì)返利場(chǎng)景足夠。數(shù)據(jù)量起來(lái)之后可以遷移到 BERT 類(lèi)模型做微調(diào)但要注意推理延遲。我當(dāng)時(shí)最終的線(xiàn)上服務(wù)采用了“輕量模型為主、BERT 輔助校驗(yàn)”的組合策略既能日均處理幾萬(wàn)條消息又保證了復(fù)雜樣本的識(shí)別質(zhì)量。3.4 多輪對(duì)話(huà)狀態(tài)管理與意圖識(shí)別的協(xié)作返利機(jī)器人有一個(gè)容易被忽略的問(wèn)題用戶(hù)經(jīng)常不是一條消息就完成操作。比如用戶(hù)先發(fā)一條鏈接機(jī)器人返還不完整用戶(hù)緊接著說(shuō)“這個(gè)呢”或者“幫我看看第二個(gè)”。這種指代表達(dá)如果脫離上下文根本無(wú)法判斷意圖。所以我額外做了一個(gè)簡(jiǎn)單的多輪狀態(tài)管理模塊原則是“用最有限的狀態(tài)記錄解決最關(guān)鍵的指代問(wèn)題”。每次會(huì)話(huà)保留最近幾輪的意圖、參數(shù)和用戶(hù)輸入摘要。當(dāng)新消息的意圖置信度偏低時(shí)先檢查上下文里是否存在未完成的意圖如果存在且新消息包含指代詞就認(rèn)為用戶(hù)是在延續(xù)上一輪意圖參數(shù)上做追加或替更。一個(gè)典型的例子用戶(hù)第一輪發(fā)鏈接意圖是“商品解析”參數(shù)是鏈接 A第二輪發(fā)“那這件多少錢(qián)”模型對(duì)“多少錢(qián)”的意圖判斷會(huì)落在閑聊或查詢(xún)的模糊地帶。這時(shí)候狀態(tài)管理模塊介入結(jié)合上一輪是“商品解析”判定本輪意圖依然是“商品解析”并把“多少錢(qián)”解析為對(duì)商品價(jià)格的追問(wèn)。這個(gè)設(shè)計(jì)雖然簡(jiǎn)單但極大地提升了真實(shí)用戶(hù)場(chǎng)景的流暢度。4. 訓(xùn)練數(shù)據(jù)體系建設(shè)從冷啟動(dòng)到持續(xù)迭代4.1 冷啟動(dòng)階段的數(shù)據(jù)從哪里來(lái)意圖識(shí)別模型最頭疼的就是沒(méi)有標(biāo)注數(shù)據(jù)。返利機(jī)器人工模冷啟動(dòng)時(shí)我建議先別急著找外包標(biāo)注因?yàn)橥獍藛T很難理解電商返利場(chǎng)景的上下文。最有效的方式是從真實(shí)用戶(hù)對(duì)話(huà)里采集原始語(yǔ)料然后做一輪定向清洗。具體做法是機(jī)器人上線(xiàn)初期只啟用規(guī)則層把模型層暫時(shí)關(guān)掉。規(guī)則識(shí)別不了的樣本全部落到“未識(shí)別”池子同時(shí)記錄會(huì)話(huà)上下文。跑一到兩周未識(shí)別池子里就有相當(dāng)可觀(guān)的真實(shí)用戶(hù)表達(dá)樣本。我把這批樣本拿出來(lái)做聚類(lèi)很快就發(fā)現(xiàn)集中在幾個(gè)沒(méi)覆蓋到的表達(dá)模式上比如“能返多少”“怎么還不給我錢(qián)”這類(lèi)。之后我建議用“小批量標(biāo)注快速上線(xiàn)”的節(jié)奏來(lái)做。第一批標(biāo)注 10001500 條訓(xùn)練一個(gè)初始模型拿它去跑“未識(shí)別”池子把高置信度樣本自動(dòng)打標(biāo)作為訓(xùn)練數(shù)據(jù)擴(kuò)展低置信度樣本再人工確認(rèn)。這樣兩三輪迭代之后模型基本就能覆蓋常規(guī)表達(dá)。4.2 標(biāo)注規(guī)范與一致性檢查標(biāo)注質(zhì)量直接影響模型效果但很多團(tuán)隊(duì)都在這個(gè)環(huán)節(jié)翻車(chē)。我見(jiàn)過(guò)最典型的問(wèn)題是一個(gè)句子兩個(gè)標(biāo)注員給的結(jié)果不同最后模型學(xué)一個(gè)錯(cuò)誤分布。解決辦法是在標(biāo)注規(guī)范里寫(xiě)清楚“意圖定義、正例和反例、邊界情況規(guī)則”并且讓標(biāo)注員先做幾十條試標(biāo)標(biāo)注結(jié)果兩兩比對(duì)一致性不一致的地方當(dāng)場(chǎng)討論修正。我當(dāng)時(shí)設(shè)定了幾個(gè)邊界規(guī)則比如“一條消息里同時(shí)出現(xiàn)多個(gè)意圖時(shí)以?xún)?yōu)先順序最高的為準(zhǔn)”“用戶(hù)詢(xún)問(wèn)‘怎么用’一律歸為賬號(hào)綁定相關(guān)意圖”“閑聊內(nèi)容即使包含返利詞只要無(wú)明確業(yè)務(wù)指向仍然算閑聊”。標(biāo)注平臺(tái)方面不用過(guò)度設(shè)計(jì)。團(tuán)隊(duì)小的時(shí)候一張結(jié)構(gòu)清晰的在線(xiàn)表格就夠用。數(shù)據(jù)量上到幾千條可以用開(kāi)源標(biāo)注工具但核心在標(biāo)注規(guī)范不在工具本身。4.3 主動(dòng)學(xué)習(xí)與難樣本挖掘模型上線(xiàn)后持續(xù)維護(hù)訓(xùn)練數(shù)據(jù)比初始建設(shè)更重要。我每?jī)芍軙?huì)跑一輪難樣本挖掘。流程是從線(xiàn)上日志中抽取模型預(yù)測(cè)置信度介于 0.40.8 之間的樣本人工復(fù)看一遍把錯(cuò)誤預(yù)測(cè)或低置信樣本歸入“待標(biāo)注池”再按批次補(bǔ)充到訓(xùn)練集里。另外要特別關(guān)注“硬負(fù)例”。比如“我不想要了”“退了吧”這類(lèi)表達(dá)容易被模型誤判為“提現(xiàn)”或“訂單查詢(xún)”。原因是兩者的表層語(yǔ)義都與“錢(qián)”相關(guān)。這類(lèi)硬負(fù)例需要單獨(dú)建集在訓(xùn)練時(shí)做加權(quán)模型才能逐漸學(xué)會(huì)區(qū)分“交易流程中的結(jié)果表達(dá)”和“直接的操作意圖”。數(shù)據(jù)量大了以后還要做類(lèi)目均衡。返利機(jī)器人里“商品解析”類(lèi)樣本遠(yuǎn)多于“提現(xiàn)”類(lèi)樣本模型天然傾向把模糊輸入分類(lèi)到樣本多的類(lèi)目。對(duì)少樣本類(lèi)目做少量過(guò)采樣或調(diào)整損失函數(shù)權(quán)重都可以緩解偏向問(wèn)題。5. 線(xiàn)上部署與問(wèn)題排查實(shí)錄5.1 服務(wù)架構(gòu)與延遲控制意圖識(shí)別服務(wù)在日常對(duì)話(huà)機(jī)器人里對(duì)延遲極其敏感。用戶(hù)發(fā)一條消息整個(gè)鏈路的響應(yīng)時(shí)間最好控制在 500 毫秒以?xún)?nèi)其中 NLP 部分分配到的預(yù)算大約在 100200 毫秒。如果模型響應(yīng)太慢用戶(hù)會(huì)直接放棄等待轉(zhuǎn)化率掉得很快。我的線(xiàn)上部署方案是獨(dú)立的 NLP 微服務(wù)與機(jī)器人主服務(wù)分離。這樣 NLP 服務(wù)可以獨(dú)立擴(kuò)縮容某個(gè)渠道的流量脈沖不會(huì)拖垮整個(gè)對(duì)話(huà)系統(tǒng)。服務(wù)內(nèi)部按接口拆成兩塊規(guī)則判定走純內(nèi)存計(jì)算模型推理走單獨(dú)的推理引擎。規(guī)則判定結(jié)果直接返回模型推理結(jié)果經(jīng)過(guò)緩存策略后返回。熱點(diǎn)輸入做了一層本地緩存特別是高頻商品鏈接、高頻搜索詞會(huì)直接命中緩存不再走全鏈路。實(shí)測(cè)中緩存命中率能到 20% 左右對(duì)響應(yīng)時(shí)間的改善非常明顯。5.2 高頻誤判場(chǎng)景與兜底策略我在線(xiàn)上調(diào)優(yōu)過(guò)程中遇到的高頻誤判場(chǎng)景整理出來(lái)大概有這么幾類(lèi)大家可以對(duì)照排查。第一類(lèi)是“鏈接與文本混合”導(dǎo)致的誤判。用戶(hù)發(fā)鏈接后追加了一句“多少錢(qián)”模型容易把整條消息分類(lèi)到商品解析卻把“多少錢(qián)”當(dāng)成無(wú)效噪音丟掉。這其實(shí)不是模型問(wèn)題而是信息抽取設(shè)計(jì)問(wèn)題。對(duì)策是把鏈接提取和文本分類(lèi)解耦鏈接提取后單獨(dú)解析剩余文本做“追加語(yǔ)”識(shí)別判斷它是對(duì)商品的追問(wèn)還是新的操作意圖。第二類(lèi)是口語(yǔ)縮略表達(dá)導(dǎo)致的誤判。“有沒(méi)有券”到底是在問(wèn)優(yōu)惠券還是隨口一問(wèn)在返利場(chǎng)景里這類(lèi)問(wèn)句語(yǔ)義比較強(qiáng)但“有券嗎”和“有貨嗎”這種方言性表達(dá)容易被模型搞混。經(jīng)驗(yàn)是給高頻口語(yǔ)表達(dá)單獨(dú)建詞典在規(guī)則層直接命中。第三類(lèi)是地域和行業(yè)黑話(huà)導(dǎo)致的誤判。不同用戶(hù)群體對(duì)同一功能有五花八門(mén)的叫法比如“返利”可以說(shuō)“反錢(qián)”“回血”“羊毛”。解決方式不是靠模型硬猜而是把行業(yè)黑話(huà)詞典持續(xù)維護(hù)下去同步給規(guī)則層和模型特征層使用。如果意圖識(shí)別結(jié)果最終還是要落到一個(gè)對(duì)用戶(hù)的操作響應(yīng)無(wú)論規(guī)則和模型怎么組合都存在一個(gè)置信度門(mén)檻問(wèn)題。我建議設(shè)置分級(jí)響應(yīng)機(jī)制置信度大于 0.9 直接執(zhí)行0.60.9 之間執(zhí)行但附帶確認(rèn)語(yǔ)低于 0.6 則觸發(fā)澄清話(huà)術(shù)或轉(zhuǎn)人工。這樣即使判斷出錯(cuò)用戶(hù)也有機(jī)會(huì)糾正不會(huì)覺(jué)得機(jī)器人亂來(lái)。5.3 一個(gè)典型的線(xiàn)上故障排查過(guò)程最后分享一個(gè)真實(shí)排障經(jīng)歷。一次線(xiàn)上監(jiān)控發(fā)現(xiàn)某渠道的“提現(xiàn)”意圖命中率突然下降用戶(hù)反饋“點(diǎn)提現(xiàn)沒(méi)反應(yīng)”。第一反應(yīng)是模型出了問(wèn)題但排查之后發(fā)現(xiàn)當(dāng)天的規(guī)則層日志顯示一批含“提現(xiàn)”關(guān)鍵詞的消息被前置的“鏈接提取”邏輯攔截了——這些消息里恰好含有一段 URL規(guī)則層判定為“商品解析”根本沒(méi)把文本送到模型層。排查結(jié)論讓我意識(shí)到混合架構(gòu)里的規(guī)則優(yōu)先級(jí)設(shè)計(jì)是有代價(jià)的。高優(yōu)先級(jí)規(guī)則能提升確定性場(chǎng)景的效率但它也會(huì)截?cái)嗟蛢?yōu)先級(jí)信號(hào)導(dǎo)致一部分意圖被“誤殺”。后來(lái)我把規(guī)則層調(diào)整成了并行判斷鏈接和意圖分類(lèi)同時(shí)進(jìn)行鏈接提取成功后剩余文本依然要做一次快速的意圖過(guò)濾兩條信號(hào)共同作用于最終決策。經(jīng)過(guò)這次故障我把線(xiàn)上的每一層決策都加了日志輸出規(guī)則判定結(jié)果、模型分類(lèi)結(jié)果、狀態(tài)管理結(jié)果各留一份記錄。排查問(wèn)題的時(shí)候直接沿著日志鏈路走能省掉大量猜測(cè)時(shí)間。6. 一些沉淀下來(lái)的實(shí)操體會(huì)與建議做返利機(jī)器人 NLP 這塊時(shí)間越長(zhǎng)越覺(jué)得核心不是算法多高級(jí)而是工程化能力夠不夠穩(wěn)。意圖識(shí)別模型再怎么調(diào)線(xiàn)上總會(huì)遇到?jīng)]見(jiàn)過(guò)的表達(dá)方式規(guī)則怎么寫(xiě)都覆蓋不全這是正常的。系統(tǒng)的穩(wěn)定性本質(zhì)上取決于三件事意圖體系設(shè)計(jì)得清不清楚、兜底策略是否完備、數(shù)據(jù)反饋鏈路是否順暢。數(shù)據(jù)反饋鏈路是我最想強(qiáng)調(diào)的一點(diǎn)。模型建好只是開(kāi)始每一條被誤判的用戶(hù)消息都是高價(jià)值資產(chǎn)。我當(dāng)時(shí)會(huì)定期把“用戶(hù)二次追問(wèn)情緒強(qiáng)烈”的會(huì)話(huà)挑出來(lái)單獨(dú)分析這類(lèi)數(shù)據(jù)不僅暴露意圖識(shí)別的問(wèn)題還常常暴露用戶(hù)對(duì)返利流程理解上的偏差反過(guò)來(lái)推動(dòng)產(chǎn)品側(cè)優(yōu)化。如果你現(xiàn)在正準(zhǔn)備做一個(gè)類(lèi)似的倒購(gòu)類(lèi)對(duì)話(huà)系統(tǒng)我的建議是不要一上來(lái)就追求大模型、全鏈路智能化。先把規(guī)則層和狀態(tài)管理做扎實(shí)讓機(jī)器人能在 80% 的高確定性場(chǎng)景里不出錯(cuò)再逐步引入模型覆蓋剩余的模糊表達(dá)。這樣每一步都在已有穩(wěn)定系統(tǒng)上疊加風(fēng)險(xiǎn)可控迭代節(jié)奏也舒服。路線(xiàn)圖如果按階段來(lái)規(guī)劃大概是第一階段鏈接解析與規(guī)則路由做到位第二階段接模型做意圖分類(lèi)同時(shí)建立未識(shí)別樣本池第三階段完善多輪狀態(tài)管理和主動(dòng)學(xué)習(xí)閉環(huán)。每個(gè)階段都有明確產(chǎn)出和驗(yàn)證指標(biāo)團(tuán)隊(duì)心里有數(shù)踩坑的概率會(huì)小很多。最后再分享一個(gè)小技巧所有意圖識(shí)別的日志一定要和業(yè)務(wù)結(jié)果關(guān)聯(lián)起來(lái)。我后來(lái)把 NLP 層的判斷結(jié)果和用戶(hù)最終是否成功下單、是否發(fā)起提現(xiàn)關(guān)聯(lián)到同一條日志鏈路里這讓評(píng)估模型真實(shí)價(jià)值變得非常直觀(guān)。你會(huì)發(fā)現(xiàn)有些識(shí)別“錯(cuò)”的意圖用戶(hù)實(shí)際行為根本沒(méi)受到負(fù)面影響——有些用戶(hù)并不要求機(jī)器人百分之百理解他只要求別擋著他的路。想清楚這個(gè)你的 NLP 系統(tǒng)設(shè)計(jì)會(huì)少掉很多過(guò)度設(shè)計(jì)。