【關于 文本分類】那些你不知道的事
作者:小豬呼嚕
項目地址:https://github.com/km1994/NLP-Interview-Notes
個人論文讀書筆記:https://github.com/km1994/nlp_paper_study
個人介紹:大佬們好,我叫楊夕,該項目主要是本人在研讀頂會論文和復現(xiàn)經(jīng)典論文過程中,所見、所思、所想、所聞,可能存在一些理解錯誤,希望大佬們多多指正。

一、 抽象命題
1.1 分類任務有哪些類別?它們都有什么特征?
分類任務是機器學習中最常見的監(jiān)督學習任務之一。以文本分類為例,情感分類,新聞分類,主題分類、問答匹配、意圖識別、推斷等等領域都使用到了文本分類的相關知識或技術。
分類任務按照數(shù)據(jù)集的不同,可以分為二分類、多分類、多標簽分類;按照數(shù)據(jù)的不平衡程度,還可以分為普通的分類問題和不平衡數(shù)據(jù)的分類問題(異常檢測)等。
分類任務是監(jiān)督學習任務,因此數(shù)據(jù)集是帶標簽的,而且是離散的標簽。許多回歸任務通過標簽離散化也可以使用分類任務解決。
1.2 文本分類任務相較于其他領域的分類任務有何不同之處?
同樣是分類任務,文本分類和圖像分類、語音信號分類不同點在于處理的數(shù)據(jù)不同。圖像、語音信號等數(shù)據(jù)是連續(xù)的,而文本數(shù)據(jù)是離散的。
1.3 文本分類任務和文本領域的其他任務相比有何不同之處?
可以從分類任務和回歸任務的區(qū)別、分類任務和聚類任務的區(qū)別來回答。
1.4 文本分類的過程?

二、數(shù)據(jù)預處理
2.1 文本分類任務的數(shù)據(jù)預處理方法有哪些?
分詞:將句子分割成獨立的語義單元組成的序列的過程
去停用詞:識別并刪除那些對分類意義不大的出現(xiàn)頻率卻很高的單詞
詞性標注:在分詞后判斷詞性(動詞、名詞、形容詞、副詞…)來添加特征
2.2 你使用過哪些分詞方法和工具?
hanlp、jieba、哈工大LTP、清華THULAC、北大pkuseg、斯坦福分詞器、KCWS分詞器、NLTK分詞器、snowNLP等。
關于分詞工具的詳細介紹,可以看【參考資料1】
2.3 中文文本分詞的方法?
基于字符串匹配的分詞方法
基于統(tǒng)計語言模型的分詞方法:
基于統(tǒng)計機器學習的分詞方法:中文分詞可以建模成一個“序列標注”問題,即一個考慮上下文的字分類問題。因此可以先通過帶標簽的分詞語料來訓練一個序列標注模型,再用這個模型對無標簽的語料進行分詞。
統(tǒng)計序列標注模型的代表就是生成式模型的代表——隱馬爾可夫模型(HMM),和判別式模型的代表——(線性鏈)條件隨機場(CRF)。
2.4 基于字符串匹配的分詞方法的原理 是什么?
基于詞典直接進行貪心匹配。直接從句子開頭的第一個字開始查字典,找出字典中以該字開頭的最長的單詞。
舉個例子,比如這句“小豬呼嚕整天除了吃就是睡”,查字典發(fā)現(xiàn)“小豬呼?!笔亲铋L的詞了,于是得到
小豬呼嚕 / 整天除了吃就是睡
然后從下一個詞的開頭開始繼續(xù)匹配字典,發(fā)現(xiàn)“整天”就是最長的詞了,于是
小豬呼嚕 / 整天 / 除了吃就是睡
依此類推,最終得到
小豬呼嚕 / 整天 / 除了 / 吃 / 就是 / 睡
這種簡單的算法即為前向最大匹配法(FMM)
由于中文句子本身具有重要信息后置的特點,從后往前匹配的分詞正確率往往要高于從前往后,于是就有了反向進行的“后向最大匹配法(BMM)”。當然了,無論是FMM還是BMM,都一定存在不少切分錯誤,因此一種考慮更周到的方法是“雙向最大匹配”。
雙向最大匹配算法是指對待切分句子分別使用FMM和RMM進行分詞,然后對切分結果不重合的歧義句進行進一步的處理。通??蓪煞N方法得到的詞匯數(shù)目進行比較,根據(jù)數(shù)目的相同與否采取相應的措施,以此來降低歧義句的分詞錯誤率。
基于字符串匹配的分詞算法的不足在于其無法應對歧義與單詞表外的單詞。
這一部分內容參考:【參考資料2】
2.5 統(tǒng)計語言模型如何應用于分詞?N-gram最大概率分詞?
假定一個句子S可能有很多種分詞方法,那么最好的一種分詞方法應該保證分完詞后這個句子出現(xiàn)的概率最大。因此,只需利用統(tǒng)計語言模型計算出每種分詞后句子出現(xiàn)的概率,并找出其中概率最大的,就能找到最好的分詞方法。
如果一個句子可以分成以下詞序列:

則語言模型可以計算出這個詞序列存在的可能性:


這里面還有一個實現(xiàn)上的技巧,即如果窮舉所有可能的分詞方法,并計算出每種可能性下句子的概率,那么計算量是相當大的。因此可以把該問題看作一個動態(tài)規(guī)劃問題,并利用維特比(Viterbi)算法快速找到最佳分詞。
需要指出的是任何方法都有它的局限性,雖然利用統(tǒng)計語言模型進行分詞可以取得比人工更好的結果,但是也不能做到百分之百準確。因為統(tǒng)計語言模型受限于訓練它的語料,因此得到的結果很大程度上是依照“大眾的想法”,或者“多數(shù)句子的用法”,而在特定情況下可能是錯的。
這一部分內容參考:【參考資料3】
2.6 基于序列標注的分詞方法 是什么?
將分詞問題轉換為給每個位置的字進行分類的問題,即序列標注問題。其中,類別有4個,一般用{B:begin, M:middle, E:end, S:single}這4個類別來描述一個分詞樣本中每個字所屬的類別。它們代表的是該字在詞語中的位置。其中,B代表該字是詞語中的起始字,M代表是詞語中的中間字,E代表是詞語中的結束字,S則代表是單字成詞。
人/b 們/e 常/s 說/s 生/b 活/e 是/s 一/s 部/s 教/b 科/m 書/e
根據(jù)序列標注結果,得到的分詞序列為:
人們 / 常 / 說 / 生活 / 是 / 一 / 部 / 教科書
因此只需要使用數(shù)據(jù)集訓練合適的機器學習模型來完成序列標注任務即可完成分詞任務。
2.7 基于(Bi-)LSTM的詞性標注 是什么?
字的上下文信息對于排解切分歧義來說非常重要,能考慮的上下文越長,自然排解歧義的能力就越強。而前面的n-gram語言模型也只能做到考慮一定距離的上下文,那么有沒有在理論上能考慮無限長上下文距離的分詞模型呢?答案就是基于LSTM來做。當然啦,LSTM是有方向的,為了讓每個位置的字分類時既能考慮全部歷史信息(左邊的所有的字),又能考慮全部未來信息(右邊所有的字),我們可以使用雙向LSTM(Bi-LSTM)來充當序列標注的骨架模型
LSTM完成對每個位置的上下文信息的編碼后,最終通過softmax分類層完成對每個位置的分類,從而跟HMM和CRF一樣完成了基于序列標注的中文分詞。
2.8 詞干提取和詞形還原有什么區(qū)別?
詞形還原(Lemmatization),是把一個任何形式的語言詞匯還原為一般形式(能表達完整語義),而詞干提取(Stemming)是抽取詞的詞干或詞根形式(不一定能夠表達完整語義)。詞形還原和詞干提取是詞形規(guī)范化的兩類重要方式,都能夠達到有效歸并詞形的目的,二者既有聯(lián)系也有區(qū)別。
首先讓我們看一下聯(lián)系:
1、目標一致。詞干提取和詞形還原的目標均為將詞的屈折形態(tài)或派生形態(tài)簡化或歸并為詞干(stem)或原形的基礎形式,都是一種對詞的不同形態(tài)的統(tǒng)一歸并的過程。
2、結果部分交叉。詞干提取和詞形還原不是互斥關系,其結果是有部分交叉的。一部分詞利用這兩類方法都能達到相同的詞形轉換效果。如“dogs”的詞干為“dog”,其原形也為“dog”。
3、主流實現(xiàn)方法類似。目前實現(xiàn)詞干提取和詞形還原的主流實現(xiàn)方法均是利用語言中存在的規(guī)則或利用詞典映射提取詞干或獲得詞的原形。
4、應用領域相似。主要應用于信息檢索和文本、自然語言處理等方面,二者均是這些應用的基本步驟。
接下來我們看看區(qū)別:
a、在原理上,詞干提取主要是采用“縮減”的方法,將詞轉換為詞干,如將“cats”處理為“cat”,將“effective”處理為“effect”。而詞形還原主要采用“轉變”的方法,將詞轉變?yōu)槠湓?,如將“drove”處理為“drive”,將“driving”處理為“drive”。
b、在復雜性上,詞干提取方法相對簡單,詞形還原則需要返回詞的原形,需要對詞形進行分析,不僅要進行詞綴的轉化,還要進行詞性識別,區(qū)分相同詞形但原形不同的詞的差別。詞性標注的準確率也直接影響詞形還原的準確率,因此,詞形還原更為復雜。
c、在實現(xiàn)方法上,雖然詞干提取和詞形還原實現(xiàn)的主流方法類似,但二者在具體實現(xiàn)上各有側重。詞干提取的實現(xiàn)方法主要利用規(guī)則變化進行詞綴的去除和縮減,從而達到詞的簡化效果。詞形還原則相對較復雜,有復雜的形態(tài)變化,單純依據(jù)規(guī)則無法很好地完成。其更依賴于詞典,進行詞形變化和原形的映射,生成詞典中的有效詞。
d、在結果上,詞干提取和詞形還原也有部分區(qū)別。詞干提取的結果可能并不是完整的、具有意義的詞,而只是詞的一部分,如“revival”詞干提取的結果為“reviv”,“ailiner”詞干提取的結果為“airlin”。而經(jīng)詞形還原處理后獲得的結果是具有一定意義的、完整的詞,一般為詞典中的有效詞。
e、在應用領域上,同樣各有側重。雖然二者均被應用于信息檢索和文本處理中,但側重不同。詞干提取更多被應用于信息檢索領域,如Solr、Lucene等,用于擴展檢索,粒度較粗。詞形還原更主要被應用于文本挖掘、自然語言處理,用于更細粒度、更為準確的文本分析和表達。
這一部分內容參考:【參考資料4】
三、特征提取
3.1 (一個具體的)文本分類任務可以使用哪些特征?
考察面試者特征工程的能力。自然語言處理領域可以使用的特征有字母、單詞和單詞的組合,甚至可能是字母出現(xiàn)的頻率、二元字母出現(xiàn)的頻率等等。
3.2 (對于西文文本)使用單詞和使用字母作為特征相比,差異如何?
使用字母會讓模型更穩(wěn)定,但這樣要處理的文本也就更長,同時模型更難從文本中學習到有效的信息。
3.3 能不能簡單介紹下詞袋模型?
用于機器學習的文本表示有一種最簡單的方法,也是最常用的方法,就是使用詞袋(bag-of-words)表示。使用這種表示方式時,我們舍棄了輸入文本中的大部分結構,如章節(jié)、段落、句子和格式,只計算語料庫中每個單詞在每個文本中的出現(xiàn)頻次。舍棄結構并僅計算單詞出現(xiàn)次數(shù),這會讓腦海中出現(xiàn)將文本表示為“袋”的畫面。
3.4 n-gram 篇
3.4.1 什么是n元語法?為什么要用n-gram?
使用詞袋表示的主要缺點之一是完全舍棄了單詞順序。因此,“it’s bad, not good at all”(電影很差,一點也不好)和“it’s good, not bad at all”(電影很好,還不錯)這兩個字符串的詞袋表示完全相同,盡管它們的含義相反。將“not”(不)放在單詞前面,這只是上下文很重要的一個例子(可能是一個極端的例子)。幸運的是,使用詞袋表示時有一種獲取上下文的方法,就是不僅考慮單一詞例的計數(shù),而且還考慮相鄰的兩個或三個詞例的計數(shù)。兩個詞例被稱為二元分詞(bigram),三個詞例被稱為三元分詞(trigram),更一般的詞例序列被稱為 n 元分詞(n-gram)。我們可以通過改變 CountVectorizer 或 TfidfVectorizer 的 ngram_range 參數(shù)來改變作為特征的詞例范圍。ngram_range 參數(shù)是一個元組,包含要考慮的詞例序列的最小長度和最大長度。
3.4.2 n-gram算法的局限性是什么?
在大多數(shù)情況下,添加二元分詞會有所幫助。添加更長的序列(一直到五元分詞)也可能有所幫助,但這會導致特征數(shù)量的大大增加,也可能會導致過擬合,因為其中包含許多非常具體的特征。
原則上來說,二元分詞的數(shù)量是一元分詞數(shù)量的平方,三元分詞的數(shù)量是一元分詞數(shù)量的三次方,從而導致非常大的特征空間。
在實踐中,更高的 n 元分詞在數(shù)據(jù)中的出現(xiàn)次數(shù)實際上更少,原因在于(英語)語言的結構,不過這個數(shù)字仍然很大。
3.5 主題建模篇
3.5.1 介紹一下主題建模任務?
常用于文本數(shù)據(jù)的一種特殊技術是主題建模(topic modeling),這是描述將每個文檔分配給一個或多個主題的任務(通常是無監(jiān)督的)的概括性術語。
直觀來講,如果一篇文章有一個中心思想,那么一些特定詞語會更頻繁的出現(xiàn)。比方說,如果一篇文章是在講狗的,那“狗”和“骨頭”等詞出現(xiàn)的頻率會高些。一個主題模型試圖用數(shù)學框架來體現(xiàn)文檔的這種特點。
3.5.2 主題建模的常用方法
凡是能篩選一部分詞語來代表一篇文檔的方法,都可以將其歸類為主題建模方法。
主題建模方法包括tf-idf、LDA等
3.5.3 TF-IDF算法是做什么的?簡單介紹下TF-IDF算法
TF-IDF(Term Frequency-inverse Document Frequency)是一種針對關鍵詞的統(tǒng)計分析方法,用于評估一個詞對一個文件集或者一個語料庫的重要程度?;舅枷胧侨绻硞€字詞在一篇文檔中出現(xiàn)的頻率較高,而在其他文檔中出現(xiàn)頻率較低,則認為這個字詞更能夠代表這篇文檔。


3.5.4 tf-idf高意味著什么?
高權重的tf-idf意味著該詞語在某一特定類別(文件)中出現(xiàn)頻率高,且在整個類別的語料中出現(xiàn)頻率相對較低。因此,tf-idf傾向于過濾掉常見的詞語,保留重要的詞語。
3.5.5 tf-idf的不足之處
tf-idf算法是創(chuàng)建在這樣一個假設之上的:對區(qū)別文檔最有意義的詞語應該是那些在文檔中出現(xiàn)頻率高,而在整個文檔集合的其他文檔中出現(xiàn)頻率少的詞語,所以如果特征空間坐標系取tf詞頻作為測度,就可以體現(xiàn)同類文本的特點。
另外考慮到單詞區(qū)別不同類別的能力,tf-idf法認為一個單詞出現(xiàn)的文本頻數(shù)越小,它區(qū)別不同類別文本的能力就越大。因此引入了逆文本頻度idf的概念,以tf和idf的乘積作為特征空間坐標系的取值測度,并用它完成對權值tf的調整,調整權值的目的在于突出重要單詞,抑制次要單詞。
但是在本質上idf是一種試圖抑制噪聲的加權,并且單純地認為文本頻率小的單詞就越重要,文本頻率大的單詞就越無用,顯然這并不是完全正確的。
idf的簡單結構并不能有效地反映單詞的重要程度和特征詞的分布情況,使其無法很好地完成對權值調整的功能,所以tf-idf法的精度并不是很高。
此外,在tf-idf算法中并沒有體現(xiàn)出單詞的位置信息,對于Web文檔而言,權重的計算方法應該體現(xiàn)出HTML的結構特征。
特征詞在不同的標記符中對文章內容的反映程度不同,其權重的計算方法也應不同。因此應該對于處于網(wǎng)頁不同位置的特征詞分別賦予不同的系數(shù),然后乘以特征詞的詞頻,以提高文本表示的效果。
這一部分內容參考:【參考資料5】
3.6 文本相似度篇
3.6.1 如何計算兩段文本之間的距離?
衡量文本之間的距離,與相似性計算是同一回事的兩個方面,距離可以理解成“不相似性”。
如果我們比較相似度的計算對象是分詞后的詞匯序列、詞性序列、命名實體序列等,那么常用的計算距離的方法有:Jaccard距離、Dice系數(shù)、漢明距離、編輯距離等等。
如果我們使用詞嵌入向量作為相似度的比較對象,那么文本距離問題就簡化成向量相似度計算方法了。常用的向量距離計算方法有余弦距離等。
3.6.2 什么是jaccard距離?
Jaccard指數(shù)又稱為雅卡爾指數(shù),是用來衡量兩個有限集合之間的不相似度的度量指標。定義為兩個集合交集大小與并集大小之間的比例:

3.6.4 同樣是編輯距離,萊文斯坦距離和漢明距離的區(qū)別在哪里?
漢明距離是編輯距離中的一個特殊情況,僅用來計算兩個等長字符串中不一致的字符個數(shù)。
因此漢明距離不用考慮添加及刪除,只需要對比不同即可,所以實現(xiàn)比較簡單。萊文斯坦距離需要考慮插入和刪除字符。
3.6.5 寫一下計算編輯距離(萊溫斯坦距離)的編程題吧?
編輯距離指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數(shù)。,把這個次數(shù)叫做距離。這道題是leetcode 72題,用到了動態(tài)規(guī)劃。
下面給出我的實現(xiàn):
class Solution:
def minDistance(self, word1: str, word2: str) -> int:
dp = [[0 for _ in range(len(word2)+1)] for _ in range(len(word1)+1)]
for i in range(len(word1)+1):
dp[i][0] = i
for i in range(len(word2)+1):
dp[0][i] = i
for i in range(1, len(word1)+1):
for j in range(1, len(word2)+1):
if word1[i-1] == word2[j-1]:
dp[i][j] = min(dp[i-1][j-1], 1+dp[i][j-1], 1+dp[i-1][j])
else:
dp[i][j] = 1 + min(dp[i-1][j-1], dp[i][j-1], dp[i-1][j])
return dp[-1][-1]
四、模型篇
4.1 fastText 篇
4.1.1 fastText的分類過程?
fastText首先把輸入轉化為詞向量,取平均,再經(jīng)過線性分類器得到類別。輸入的詞向量可以是預先訓練好的,也可以隨機初始化,跟著分類任務一起訓練。
4.1.2 fastText的優(yōu)點?
fastText是一個快速文本分類算法,與基于神經(jīng)網(wǎng)絡的分類算法相比有兩大優(yōu)點:1、fastText在保持高精度的情況下加快了訓練速度和測試速度 2、fastText不需要預訓練好的詞向量,fastText會自己訓練詞向量 3、fastText兩個重要的優(yōu)化:使用層級 Softmax提升效率、采用了char-level的n-gram作為附加特征。
4.2 TextCNN 篇
4.2.1 TextCNN進行文本分類的過程?
卷積神經(jīng)網(wǎng)絡的核心思想是捕捉局部特征,對于文本來說,局部特征就是由若干單詞組成的滑動窗口,類似于N-gram。卷積神經(jīng)網(wǎng)絡的優(yōu)勢在于能夠自動地對N-gram特征進行組合和篩選,獲得不同抽象層次的語義信息。因此文本分類任務中可以利用CNN來提取句子中類似 n-gram 的關鍵信息。


第一層為輸入層。將最左邊的7乘5的句子矩陣,每行是詞向量,維度=5,這個可以類比為圖像中的原始像素點了。
圖中的輸入層實際采用了雙通道的形式,即有兩個n*k 的輸入矩陣,其中一個用預訓練好的詞嵌入表達,并且在訓練過程中不再發(fā)生變化;另外一個也由同樣的方式初始化,但是會作為參數(shù),隨著網(wǎng)絡的訓練過程發(fā)生改變。
第二層為卷積層。然后經(jīng)過有 filter_size=(2,3,4) 的一維卷積層,每個filter_size 有兩個輸出 channel。第三層是一個1-max pooling層,這樣不同長度句子經(jīng)過pooling層之后都能變成定長的表示了。
最后接一層全連接的 softmax 層,輸出每個類別的概率。
每個詞向量可以是預先在其他語料庫中訓練好的,也可以作為未知的參數(shù)由網(wǎng)絡訓練得到。
這一部分內容參考:【參考資料6】
4.2.2 TextCNN可以調整哪些參數(shù)?
輸入詞向量表征:詞向量表征的選取(如選word2vec還是GloVe)
卷積核大?。阂粋€合理的值范圍在1~10。若語料中的句子較長,可以考慮使用更大的卷積核。另外,可以在尋找到了最佳的單個filter的大小后,嘗試在該filter的尺寸值附近尋找其他合適值來進行組合。實踐證明這樣的組合效果往往比單個最佳filter表現(xiàn)更出色
feature map 特征圖個數(shù):主要考慮的是當增加特征圖個數(shù)時,訓練時間也會加長,因此需要權衡好。這個參數(shù)會影響最終特征的維度,維度太大的話訓練速度就會變慢。這里在100-600之間調參即可。
當特征圖數(shù)量增加到將性能降低時,可以加強正則化效果,如將dropout率提高過0.5
激活函數(shù):ReLU和tanh
池化策略:1-max pooling表現(xiàn)最佳,復雜任務選擇k-max
正則化項(dropout/L2):指對CNN參數(shù)的正則化,可以使用dropout或L2,但能起的作用很小,可以試下小的dropout率(<0.5),L2限制大一點
這一部分內容參考:【參考資料7】
4.2.3 使用CNN作為文本分類器時,不同通道channels對應著文本的什么信息?
圖像中可以利用 (R, G, B) 作為不同channel,而文本的輸入的channel通常是不同方式的embedding方式(比如 word2vec或Glove),實踐中也有利用靜態(tài)詞向量和fine-tunning詞向量作為不同channel的做法。
4.2.4 TextCNN中卷積核的長與寬代表了什么?
在TextCNN中,卷積核不是一個正方形,是一個寬和word embedding相同、長表示n-gram的窗口。一個卷積層會使用多個不同大小的卷積核,往往是(3, 4, 5)這種類型。每一種大小的卷積核也會使用很多個。
4.2.5 在TextCNN中的pooling操作與一般CNN的pooling操作有何不同?
TextCNN中用的是最大池化(1-Max pooling),但是可以多保留k個最大信息。pooling階段保留 k 個最大的信息,保留了全局的序列信息。
舉個例子:
“我覺得這個地方景色還不錯,但是人也實在太多了 ”
雖然前半部分體現(xiàn)情感是正向的,全局文本表達的是偏負面的情感,利用 k-max pooling能夠很好捕捉這類信息。
4.2.6 TextCNN的局限性?
TextCNN是很適合中短文本場景的強baseline,但不太適合長文本,因為卷積核尺寸通常不會設很大,無法捕獲長距離特征。同時max-pooling也存在局限,會丟掉一些有用特征。TextCNN和傳統(tǒng)的n-gram詞袋模型本質是一樣的,它的好效果很大部分來自于詞向量的引入。
4.3 DPCNN 篇
4.3.1 如何解決長文本分類任務?
可以使用改進的CNN,如DPCNN
可以使用RNN結構的分類器,也可以使用基于Attention機制的分類器
4.3.2 簡單介紹DPCNN模型相較于TextCNN的改進?
TextCNN不太適合長文本分類任務,DPCNN通過疊加CNN來實現(xiàn)了這一點。



4.4 TextRCNN 篇
4.4.1 簡要介紹TextRCNN相較于TextCNN的改進?
TextRCNN實際是將RNN和CNN進行結合,先使用雙向RNN獲取輸入文本的上語義和語法信息,接著使用最大池化自動地篩選出最重要的特征。然后接一個全連接層用于分類。
使用RNN處理輸入序列時,是對輸入序列的詞按照次序進行處理,它通過隱藏層儲存了之前的序列信息,能更好地獲取上下文信息。然而RNN是有偏模型,后面輸入的詞的重要性要高于之前的詞,而實際上一個文本中后面的詞并不一定是最重要的詞,最重要的詞可能出現(xiàn)在文本的任何地方。而CNN則是無偏模型,通過最大池化來自動地篩選文本中重要的詞,能夠解決RNN有偏的問題。然而CNN是通過使用一定尺寸的窗口來提取特征(卷積操作),窗口的尺寸實際很難確定,尺寸太小則會丟失重要的信息,尺寸過大導致參數(shù)過多且難以訓練。


4.5 RNN+Attention 篇
4.5.1 RNN+Attention進行文本分類任務的思路,以及為什么要加Attention / 注意力機制如何應用于文本分類領域?
CNN和RNN用在文本分類任務中盡管效果顯著,但都有一個不足的地方就是不夠直觀,可解釋性不好,特別是在分析badcase時候感受尤其深刻。而注意力(Attention)機制是自然語言處理領域一個常用的建模長時間記憶機制,能夠很直觀的給出每個詞對結果的貢獻。
加入Attention之后最大的好處自然是能夠直觀的解釋各個句子和詞對分類類別的重要性。

上圖所示只是一個示例,attention層做最后的特征融合。這個加attention的套路用到CNN編碼器之后代替pooling也是可以的。
也有學者先對每個句子用 BiGRU+Att 編碼得到句向量,再對句向量用 BiGRU+Att 得到doc級別的表示進行分類。具體模型示意圖如下:

該模型就是HAN的示意圖。HAN是attention機制用于文本分類的典型工作,通過將(1)文本組織成層次結構(詞,句子),(2)并分別在詞級別和句子級別使用注意力機制,保證最終文本表示由不同層次上重要的信息構成,在多個數(shù)據(jù)集上都取得較好效果。
4.6 GNN 圖神經(jīng)網(wǎng)絡篇
4.6.1 GNN 圖神經(jīng)網(wǎng)絡如何應用于文本分類領域?
自然語言可以當作樹結構和圖結構來解析,文本中同時包含圖結構,如句法分析和語法樹往往以樹形結構表示。
TextRank將圖神經(jīng)網(wǎng)絡應用到處理這些圖數(shù)據(jù)上。用來處理這種拓撲結構信息的模型,除了Tree-LSTM之外,就是GNN了。Graph-CNN首先將文本轉換為由詞構成的圖,并使用圖卷積來獲取文本語義信息
4.7 Transformer 篇
4.7.1 基于Transformer的預訓練模型如何應用于文本分類領域?
預訓練模型的提出,極大的促進了NLP的發(fā)展,也是未來NLP應用和演化的重要方向之一。比如BERT等。這幾乎是NLP領域面試必定會被問到的問題。但是BERT的使用范圍不局限于文本分類,幾乎所有的NLP領域的應用BERT都能做,因此適合單獨開一章來講。
當用于分類任務時,這些預訓練模型都可以后接一個線性分類層來微調模型參數(shù)。
4.8 預訓練模型 篇
4.8.1 你了解哪些預訓練模型?它們的特點是什么?
自回歸訓練的模型:ELMo、OpenGPT、XLNet等
自編碼的訓練方法:BERT、RoBERTa等
OpenGPT是最早的自回歸模型,它由12層Transformer組成,每個Transformer塊都包含著(一個masked多頭注意力模塊+Layer Norm+全連接網(wǎng)絡)。OpenGPT原來是做序列生成的,從左到右生成逐個單詞,下個單詞的生成的概率依賴于之前的生成結果。但是OpenGPT也可以用于文本分類任務中。

自編碼模型中最著名的是BERT。不像OpenGPT在預測單詞時依賴于前一個單詞,BERT通過雙向Transformer利用了整個序列的全部信息。BERT是通過隨機mask掉序列中的單詞后,令模型預測mask來訓練的。這種思路正是降噪自編碼器的思路。
RoBERTa是更加魯棒的BERT,使用了更多的數(shù)據(jù)。ALBERT則減少了內存消耗和增加了訓練速度。DistillBERT則通過知識蒸餾技術,在保證原有BERT的99%能力下,縮小了40%規(guī)模(猜想是參數(shù)量),推理速度提升60%。SpanBERT提升了BERT對文本span的表示能力和預測能力。
也有研究試圖合并自回歸和自編碼模型。XLNet沒有在pretraining階段使用隨機加mask的自編碼模式,而是在pretraining階段和fine-tune階段采用了permutation operation。具體地說,XLNet依然是使用自回歸器的訓練模式,依賴context_before來預測當前的單詞,只不過會對輸入序列進行隨機重排,這樣context_after也有機會排到context_before去了。這個重新排序的操作是通過Attention Mask的方式實現(xiàn)的,它不會真正mask掉某個單詞,只是通過Query向量,把那個單詞的attention降到最低,這樣模型就看不到它了。
XLNet的改進有三點,第一是吸收了BERT等自編碼模型的經(jīng)驗,在自回歸模型的訓練和預測過程中引入了下文信息;第二是像GPT-2一樣使用了 高質量的訓練數(shù)據(jù);第三是借鑒了Transformer XL中的技術(相對位置編碼和分段RNN),能夠應用于長文檔的NLP場景。此外,由于XLNet是自回歸模型,能夠更好地融入文本生成類任務。
五、損失函數(shù)
5.1 激活函數(shù)sigmoid篇
5.1.1 二分類問題使用的激活函數(shù)sigmoid簡介?
二分類問題中,我們可以使用sigmoid函數(shù)將輸入Wx+b映射到(0,1)區(qū)間中,從而得到屬于某個類別的概率。
Sigmod激活函數(shù)和導函數(shù)分別為

對應的圖像分別為:

5.1.2 Sigmod的缺點是什么?
輸出范圍在0~1之間,均值為0.5,不是關于原點對稱。需要做數(shù)據(jù)偏移,不方便下一層的學習。
當x很小或很大時,存在導數(shù)很小的情況。神經(jīng)網(wǎng)絡主要的訓練方法是BP算法,BP算法的基礎是導數(shù)的鏈式法則,也就是多個導數(shù)的乘積。而sigmoid的導數(shù)最大為0.25,多個小于等于0.25的數(shù)值相乘,其運算結果很小。隨著神經(jīng)網(wǎng)絡層數(shù)的加深,梯度后向傳播到淺層網(wǎng)絡時,基本無法引起參數(shù)的擾動,也就是沒有將loss的信息傳遞到淺層網(wǎng)絡,這樣網(wǎng)絡就無法訓練學習了。這就是所謂的梯度消失。
計算exp比較耗時。
5.2 激活函數(shù)softmax篇
5.2.1 softmax函數(shù)是什么?

二分類問題中,我們可以使用sigmoid函數(shù)將輸入Wx+b映射到(0,1)區(qū)間中,從而得到屬于某個類別的概率。將這個問題進行泛化,推廣到多分類問題中,我們可以使用softmax函數(shù),對輸出的值歸一化為概率值
這一部分內容參考:【參考資料9】
5.2.2 softmax函數(shù)怎么求導?
softmax函數(shù)如下:

5.3 分類問題使用的損失函數(shù)還有有哪些?
負對數(shù)似然損失(neg log-likelihood loss)
交叉熵損失(cross entropy loss)
指數(shù)損失(exponential loss)
平方損失
這一部分內容參考:【參考資料10、11、12】
六、模型評估和算法比較
6.1 文本分類任務使用的評估算法和指標有哪些?
準確率、召回率、ROC,AUC,F(xiàn)1、混淆矩陣,kappa

6.2 簡單介紹混淆矩陣和kappa?
混淆表(有時也稱為混淆矩陣)是具有兩行兩列的表,該表報告假陽性,假陰性,真陽性和真陰性的數(shù)量。所有正確的預測都位于表格的對角線上(以粗體突出顯示),因此很容易從視覺上檢查表格中的預測錯誤,因為它們將由對角線之外的值表示。
Kappa系數(shù)用于一致性檢驗,也可以用于衡量分類精度,但kappa系數(shù)的計算是基于混淆矩陣的。

其中,po 是每一類正確分類的樣本數(shù)量之和除以總樣本數(shù),也就是總體分類精度 。
假設每一類的真實樣本個數(shù)分別為a1,a2,...,aC,而預測出來的每一類的樣本個數(shù)分別為b1,b2,...,bC,總樣本個數(shù)為n,則有:

參考資料
中文分詞方法和軟件工具匯總筆記
史上最全的分詞算法與工具介紹
《數(shù)學之美》第二版
第6天:文本處理流程——停用詞的過濾、正則化操作
tf-idf 介紹
BAT面試題42:深度學習解決大規(guī)模文本分類問題
深入TextCNN(一)詳述CNN及TextCNN原理
文本分類——DPCNN模型
【機器學習】softmax函數(shù)總結
分類問題中的損失函數(shù)
常見的損失函數(shù)(loss function)總結
常用的分類問題中的損失函數(shù)

