算法工業(yè)界文本分類避坑指南

完整的思維導(dǎo)圖關(guān)注包包算法筆記回復(fù)【避坑指南】獲取下載查看鏈接。

image.png

公眾號包包算法筆記,包包(包大人)的機(jī)器學(xué)習(xí)筆記吆视,分享算法棚贾,機(jī)器學(xué)習(xí),程序員弯淘,職場等算法工程師話題绿店。

背景

說起文本分類,也算是一個(gè)老掉牙的話題庐橙,之前大家都喜歡琢磨模型假勿。最近從工業(yè)界的視角看一下文本分類,看一些從0到1做一些和文本分類項(xiàng)目态鳖,可能大家都會踩過的坑转培,以及經(jīng)驗(yàn)教訓(xùn),都是一些比較有意思的問題浆竭,主要從問題拆解與數(shù)據(jù)浸须,算法選型與推薦,細(xì)節(jié)策略與實(shí)現(xiàn)補(bǔ)充邦泄。

思維導(dǎo)圖回復(fù)【避坑指南】獲取下載查看鏈接删窒。

目錄

一、問題拆解和數(shù)據(jù)

  1. Q1 構(gòu)建文本分類標(biāo)簽體系有哪些坑顺囊?

  2. Q2 初期監(jiān)督數(shù)據(jù)不夠怎么辦肌索?

  3. Q3 如何高效的積累標(biāo)注數(shù)據(jù)?

  4. Q4 如何發(fā)現(xiàn)新的類別包蓝?擴(kuò)充類別空間驶社?

二企量、算法抽象和選型

  1. Q5 文本分類任務(wù)有哪些難點(diǎn)?

  2. Q6 如何定義一個(gè)文本分類問題的難度亡电?

  3. Q7 文本分類算法選型有何推薦届巩?

  4. Q8 如何確定驗(yàn)證集和評價(jià)方法?

三份乒、細(xì)節(jié)策略和實(shí)現(xiàn)

  1. Q9 如何處理溢出詞表詞恕汇?

  2. Q10 文本分類技術(shù)演進(jìn)的明線和暗線?

  3. Q11 策略和算法如何結(jié)合或辖?

  4. Q12 有哪些可以刷分的技巧瘾英?

  5. Q13 模型inference資源限制條件下,如何挑戰(zhàn)算法選型的天花板

問題拆解與數(shù)據(jù)

Q1 構(gòu)建文本分類標(biāo)簽體系有哪些坑颂暇?

在我們在做真實(shí)的業(yè)務(wù)問題的時(shí)候缺谴,不像給定一個(gè)數(shù)據(jù)集,標(biāo)簽就是定死的耳鸯。如何確定一個(gè)合理的分類標(biāo)簽體現(xiàn)其實(shí)是十分關(guān)鍵的湿蛔。這個(gè)階段一定要做數(shù)據(jù)充分的探索性分析。圖省事吃大虧县爬。

下面幾個(gè)基本的原則:

  • 稀疏程度合理阳啥。一般正常的分類體系都是符合一個(gè)長尾分布,大概可以分為1.主要類A财喳,主要類B察迟,xxx,其他類耳高。softmax based分類模型還是主要解決這部分樣本比較多的問題扎瓶。有個(gè)小技巧,按照業(yè)務(wù)上出現(xiàn)問題的頻度祝高,分類空間最好預(yù)留其他方便迭代栗弟。

  • 類間可分污筷,類內(nèi)聚集工闺。不要搞一些分不開的類,最后發(fā)現(xiàn)學(xué)出來的兩個(gè)結(jié)果瓣蛀,置信度都不高陆蟆,對我們沒有什么意義的。

  • 標(biāo)簽的關(guān)系明確惋增。是多分類問題呢叠殷,還是多類別問題呢,還是層級分類呢诈皿?不同的問題有對應(yīng)不同的方法林束,尤其是層級分類像棘,坑比較多,這里先不展開了壶冒。

Q2 初期監(jiān)督數(shù)據(jù)不夠缕题?

標(biāo)注數(shù)據(jù)總需要一定的時(shí)間,這時(shí)候除了用規(guī)則胖腾,詞典之類的方法外烟零,或者fewshot learnig的一些思路解決問題,大體的思路是兩種咸作。

  • Fewshot Learning 把分類問題轉(zhuǎn)化為匹配或者相似度學(xué)習(xí)的問題锨阿,減小分類空間學(xué)習(xí)的難度,問一個(gè)小孩這個(gè)水果是啥比记罚,總要比墅诡,選擇一個(gè)最像的水果要簡單。

  • **遷移學(xué)習(xí) **Bert在小數(shù)據(jù)上表現(xiàn)其實(shí)挺出色的桐智,除了慢一點(diǎn)书斜,似乎沒有其他毛病了。上兩個(gè)階段大概只需要幾千條數(shù)據(jù)就可以跑起來了酵使。

Q3 如何高效地積累標(biāo)注數(shù)據(jù)荐吉?

有了前面起步的baseline,我們至少可以扔到線上把模型跑著了口渔,然后人工標(biāo)注數(shù)據(jù)怎么積累又是一個(gè)問題样屠,不同的樣本對于我們當(dāng)前的價(jià)值是不一樣的,類別空間會擴(kuò)充以及長尾標(biāo)注樣本數(shù)量不足是兩個(gè)最常見的問題缺脉。大體的原則是通過不確定性度量和多樣性度量兩個(gè)角度痪欲,來選取對當(dāng)前模型增量送訓(xùn)樣本最優(yōu)價(jià)值的樣本。

  • 不確定的樣本 典型的特點(diǎn)是模型輸出的置信度不高攻礼,沒有把握判斷是哪一個(gè)類別业踢,這種樣本需要人工給出真實(shí)的類別,指導(dǎo)學(xué)習(xí)礁扮。baseline可以用熵來度量知举。

  • 不一樣的樣本 典型的特點(diǎn)就是一些與積累數(shù)據(jù)分布有差異的,玩比賽的常用的adversrial validation太伊,也是一個(gè)簡單高效的辦法雇锡。學(xué)術(shù)界在度量分布差異的時(shí)候,總喜歡從數(shù)學(xué)的角度提出一些奇奇怪怪的指標(biāo)僚焦,甚至還有結(jié)合ugly的聚類去做锰提。而adversrial validation直接從監(jiān)督學(xué)習(xí)的視角出發(fā),讓模型來自動學(xué)習(xí)給定標(biāo)簽的分布差異,從而有一定的區(qū)分能力立肘。并且边坤,這個(gè)過程中,特征重要性和預(yù)測的置信度兩個(gè)結(jié)果分別完成了特征選擇谅年,樣本粒度的分度度量置信度評價(jià)惩嘉。看一下uber這篇論文Adversarial Validation Approach to Concept Drift Problem in User Targeting Automation Systems at Uber踢故,在concept drift detection里面文黎,這也是一種神器。本質(zhì)原理都是一樣的殿较,只不過concept drift detection里耸峭,我們用的是特征重要性反饋,在分布度量里淋纲,我們用的是結(jié)果的置信度劳闹。

  • 圖片

Q4 如何發(fā)現(xiàn)新的類別,擴(kuò)充類別空間洽瞬?

有一些方法還挺不錯(cuò)的本涕,推薦ACL2019的那個(gè)論文** Deep Unknown Intent Detection with Margin Loss **

圖片

非常簡潔明了。我們在Kaggle Bengali的比賽里面也用了類似的方法檢測新類別伙窃,不過用的是arcface異曲同工吧菩颖,都是margin softmax,簡單又效果非常好为障。具體可以前情回顧發(fā)表在我知乎上的(無法插入跳轉(zhuǎn)鏈接)

從kaggle看2020的手寫體識別:從MISNIT到Bengali.AI 手寫體識別大賽

https://zhuanlan.zhihu.com/p/114131221

本質(zhì)上都是找出晦闰,與已知類別不相似(分布差異較大)的樣本,其實(shí)用前面的adversrial validation也可以解決鳍怨,實(shí)測margin softmax效果更好一點(diǎn)呻右。

算法抽象和選型

Q5 文本分類任務(wù)有哪些難點(diǎn)?

圖片

文本分類的難點(diǎn)也是自然語言的難點(diǎn)鞋喇,其根本原因是自然語言文本各個(gè)層次上廣泛存在的各種各樣的歧義性或多義性(ambiguity)和演化的問題声滥,下面典型的例子:

  • 輸入層面:短文本->長文本和超長文本

  • 標(biāo)簽層面:復(fù)雜語義識別,如陰陽怪氣

  • 時(shí)間演化:川普VS 川普侦香,開車VS開車

  • 上下文:美食論壇蘋果小米黑莓 VS手機(jī)論壇蘋果小米黑莓

Q6 如何定義一個(gè)文本分類問題的難度落塑?

典型難度排序:主題分類-情感分類-意圖識別-細(xì)粒度情感識別-復(fù)雜語義識別(如陰陽怪氣)

  • 數(shù)據(jù)量 典型的例子:one/zero shot VS 海量

  • 非線性 典型的例子 :陰陽怪氣 VS 垃圾郵件

  • 類間距離 典型的例子:細(xì)粒度的情感分類 VS 正負(fù)情感傾向

Q7 文本分類的算法選型推薦?

算法選型的出發(fā)點(diǎn)就是權(quán)衡各種約束鄙皇,考慮模型的天花板能力芜赌,選擇合適的模型仰挣。一般對應(yīng)任務(wù)的難度伴逸,權(quán)衡計(jì)算時(shí)效,選擇合適的模型膘壶。除了忽略一些比千分點(diǎn)的場景错蝴,比如競賽和論文洲愤,一般這塊在確定算法選型后,就沒啥油水了顷锰,建議少花精力柬赐。有經(jīng)驗(yàn)的算法工程師,一定能人腦搜索出一個(gè)當(dāng)前選型下的最優(yōu)結(jié)構(gòu)官紫。一個(gè)特別經(jīng)典的建議大家試一下肛宋,concat_emb-> spartial dropout(0.2)->LSTM ->LSTM->concat(maxpool,meanpool)->FC。

結(jié)合前面的任務(wù)難度定義束世,推薦的算法選型行為

  • Fasttext(垃圾郵件/主題分類) 特別簡單的任務(wù)酝陈,要求速度

  • TextCNN(主題分類/領(lǐng)域識別) 比較簡單的任務(wù),類別可能比較多毁涉,要求速度

  • LSTM(情感分類/意圖識別) 稍微復(fù)雜的任務(wù)

  • Bert(細(xì)粒度情感/陰陽怪氣/小樣本識別)難任務(wù)

Q8 如何確定驗(yàn)證集和評價(jià)方法沉帮?

這是個(gè)老大難的問題,特別是實(shí)際應(yīng)用中贫堰,由于文本分類符合一個(gè)長尾分布穆壕,常見類別的識別能力其實(shí)一般比較ok,長尾識別的稀爛其屏,如果單純看準(zhǔn)確度的話喇勋,是個(gè)還不錯(cuò)的模型,但你不能說他好吧偎行。對應(yīng)著指標(biāo)就是acc很高茄蚯,macro-f1很低。

  • 確定各類別錯(cuò)分的代價(jià) 特別是在類別較細(xì)或者層級標(biāo)簽的時(shí)候睦优,如果在一顆子樹上的標(biāo)簽渗常,犯錯(cuò)的成本并不高。要是完全截然相反的類別汗盘,犯錯(cuò)的代價(jià)就特別大皱碘。這里建議通過懲罰矩陣的方法,構(gòu)建細(xì)粒度的懲罰代價(jià)隐孽。

  • 合理采樣的驗(yàn)證集 真實(shí)的標(biāo)簽分布可能過于不均衡癌椿,建議掐頭補(bǔ)尾,這樣的驗(yàn)證集評價(jià)往往更有區(qū)分度菱阵。

  • **語義壓測 **各種花里胡哨的變體輸入踢俄,未糾錯(cuò)的文本都來一套,實(shí)在不行晴及,上adversrial attack 攻擊一下都办。

細(xì)節(jié)策略和實(shí)現(xiàn)

Q9 如何處理溢出詞表詞(OOV)?

這個(gè)在前Bert時(shí)代是一個(gè)挺關(guān)鍵的問題,以前回答過琳钉,還可以參考势木。從數(shù)據(jù)中來到數(shù)據(jù)中去, 要么想辦法還原次干歌懒,找到可以替換的詞向量啦桌。要么從sub-word的層次學(xué)習(xí)出語義,參考Bert BPE的方法及皂。很早很早念書的時(shí)候甫男,還沒有Bert做過一些文本分類的比賽,在一些任務(wù)上搞定OOV提分還是很大的验烧。給之前回答過的一個(gè)前Bert時(shí)代方法的鏈接查剖。

WordEmbedding如何處理未登陸詞?

https://www.zhihu.com/question/308543084/answer/604729983

Q10 文本分類模型演進(jìn)的明線和暗線噪窘?

針對上文提出來的文本分類的難點(diǎn)笋庄,其演進(jìn)路徑大概也是從統(tǒng)計(jì)機(jī)器學(xué)習(xí),詞向量+深度學(xué)習(xí)倔监,預(yù)訓(xùn)練語言模型的發(fā)展直砂。

  • 明線:統(tǒng)計(jì)-機(jī)器學(xué)習(xí)-深度學(xué)習(xí)-更深的深度學(xué)習(xí)

  • 暗線a:簡單表達(dá)-語義表達(dá)-上下文語義表達(dá)

  • 暗線b:特征輸入粒度 從詞到subword

  • 暗線c:預(yù)訓(xùn)練權(quán)重從輸入層擴(kuò)展到網(wǎng)絡(luò)結(jié)構(gòu)內(nèi)部

關(guān)于路線的演進(jìn),這里有個(gè)前幾天畫的思維導(dǎo)圖:部分截圖如

圖片

<figcaption style="margin: 0.66667em 0px 0px; padding: 0px 1em; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">思維導(dǎo)圖部分截圖</figcaption>

Q11 策略和算法怎么結(jié)合浩习?

算法工程師不能老鄙視規(guī)則静暂,很難一個(gè)模型搞定所有問題。

  • 串行式 典型的代表是谱秽,規(guī)則捕捉-分類-匹配兜底洽蛀,大概這樣的流程會比較合理,規(guī)則部分負(fù)責(zé)解決高頻疟赊,和bad/hard case,分類負(fù)責(zé)解決長尾中的頭部郊供, 匹配負(fù)責(zé)解決長尾。這樣的優(yōu)點(diǎn)是近哟,效率很高驮审,往往大部分case很快就過完了。

  • 并行式 規(guī)則吉执,分類疯淫,匹配都過,然后進(jìn)行歸一化后的置信度進(jìn)行PK戳玫,有點(diǎn)類似于廣告競價(jià)熙掺,這樣的好處是能充分融合多重策略,結(jié)果更可靠咕宿。

Q12 有哪些可以刷分的奇技淫巧币绩?

可以嘗試的點(diǎn)還蠻多的蜡秽,搜索空間特別大,感興趣的可以試試类浪,不保證都有效载城。這部分的方法大多需要在算法選型敲定后肌似,在模型結(jié)構(gòu)上下功夫费就,需要遍歷一些搜索空間。不建議花太大的精力川队,具體可以參照之前的回答力细,而且有了bert之后,他們越來越不重要了固额,也就沒有補(bǔ)充Bert上面的一些操作了:

在文本分類任務(wù)中眠蚂,有哪些論文中很少提及卻對性能有重要影響的tricks?斗躏?

https://www.zhihu.com/question/265357659/answer/582711744

Q13 模型inference資源限制下逝慧,如何挑戰(zhàn)算法選型的天花板

玩比賽的經(jīng)常遇到過這個(gè)問題,典型的場景Kaggle上要求提交模型啄糙,更換測試數(shù)據(jù)笛臣,只給兩個(gè)小時(shí)的推斷時(shí)間。

除此之外隧饼,我們在工業(yè)界耗時(shí)嚴(yán)格的場景下沈堡,Bert總表示遺憾,效果雖好燕雁,但是臣妾做不到啊诞丽。想要TextCNN的速度,又想要逼近Bert的效果拐格。

圖片

這時(shí)候模型蒸餾就派上用場了僧免,模型蒸餾在Kaggle一些線上推斷比賽的top solotion必不可少的。Hinton給的baseline是這樣的捏浊,通過teacher model產(chǎn)出soft-target猬膨。然后student同時(shí)學(xué)習(xí)hard target和teacher model的soft-target。不過要注意的是呛伴,用的時(shí)候不要leak勃痴,先用KFold產(chǎn)出soft-target的oof,然后和GroundTruth一起給student訓(xùn)練热康。在不少開源代碼里看到leak soft-target的情況沛申,用teacher摸過訓(xùn)練標(biāo)簽的樣本給student學(xué)習(xí)。

圖片
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姐军,一起剝皮案震驚了整個(gè)濱河市铁材,隨后出現(xiàn)的幾起案子尖淘,更是在濱河造成了極大的恐慌,老刑警劉巖著觉,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件村生,死亡現(xiàn)場離奇詭異,居然都是意外死亡饼丘,警方通過查閱死者的電腦和手機(jī)趁桃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肄鸽,“玉大人卫病,你說我怎么就攤上這事〉渑牵” “怎么了蟀苛?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長逮诲。 經(jīng)常有香客問我帜平,道長,這世上最難降的妖魔是什么梅鹦? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任裆甩,我火速辦了婚禮,結(jié)果婚禮上帘瞭,老公的妹妹穿的比我還像新娘淑掌。我一直安慰自己,他們只是感情好蝶念,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布抛腕。 她就那樣靜靜地躺著,像睡著了一般媒殉。 火紅的嫁衣襯著肌膚如雪担敌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天廷蓉,我揣著相機(jī)與錄音全封,去河邊找鬼。 笑死桃犬,一個(gè)胖子當(dāng)著我的面吹牛刹悴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播攒暇,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼土匀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了形用?” 一聲冷哼從身側(cè)響起就轧,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤证杭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后妒御,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體解愤,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年乎莉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了送讲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梦鉴,死狀恐怖李茫,靈堂內(nèi)的尸體忽然破棺而出揭保,到底是詐尸還是另有隱情肥橙,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布秸侣,位于F島的核電站存筏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏味榛。R本人自食惡果不足惜椭坚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搏色。 院中可真熱鬧善茎,春花似錦、人聲如沸频轿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽航邢。三九已至耕赘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間膳殷,已是汗流浹背操骡。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赚窃,地道東北人册招。 一個(gè)月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像勒极,于是被迫代替她去往敵國和親是掰。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容