深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等
【深度學習入門到進階】必看系列,含激活函數、優化策略、損失函數、模型調優、歸一化算法、卷積模型、序列模型、預訓練模型、對抗神經網絡等
專欄詳細介紹:【深度學習入門到進階】必看系列,含激活函數、優化策略、損失函數、模型調優、歸一化算法、卷積模型、序列模型、預訓練模型、對抗神經網絡等
本專欄主要方便入門同學快速掌握相關知識。后續會持續把深度學習涉及知識原理分析給大家,讓大家在項目實操的同時也能知識儲備,知其然、知其所以然、知何由以知其所以然。
聲明:部分項目為網絡經典項目方便大家快速學習,后續會不斷增添實戰環節(比賽、論文、現實應用等)
專欄訂閱:
- 深度學習入門到進階專欄
- 深度學習應用項目實戰篇
深度學習應用篇-自然語言處理[10]:N-Gram、SimCSE介紹,更多技術:數據增強、智能標注、多分類算法、文本信息抽取、多模態信息抽取、模型壓縮算法等
1.N-Gram
N-Gram是一種基于統計語言模型的算法。它的基本思想是將文本里面的內容按照字節進行大小為N的滑動窗口操作,形成了長度是N的字節片段序列。每一個字節片段稱為gram,對所有gram的出現頻度進行統計,并且按照事先設定好的閾值進行過濾,形成關鍵gram列表,也就是這個文本的向量特征空間,列表中的每一種gram就是一個特征向量維度。
該模型基于這樣一種假設,第N個詞的出現只與前面N-1個詞相關,而與其它任何詞都不相關,整句的概率就是各個詞出現概率的乘積。這些概率可以通過直接從語料中統計N個詞同時出現的次數得到。常用的是二元的Bi-Gram和三元的Tri-Gram。
N-gram的用途很廣,比如搜索引擎或者輸入法提示,詞性標注,垃圾短信分類,分詞,機器翻譯,語音識別能等等等。
- 概率計算
假設我們有一個由n nn個詞組成的句子 S = ( w 1 , w 2 , . . . , w n ) S=(w_{1},w_{2},...,w_{n}) S=(w1?,w2?,...,wn?),如何衡量它的概率呢?讓我們假設,每一個單詞 w i w_{i} wi?都要依賴于從第一個單詞 w 1 w_{1} w1?到到它之前一個單詞 w i ? 1 w_{i-1} wi?1?的影響:
p ( S ) = p ( w 1 w 2 . . . w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) . . . p ( w n ∣ w n ? 1 . . . w 2 w 1 ) p(S)=p(w_{1}w_{2}...w_{n})=p(w_{1})p(w_{2}|w_{1})...p(w_{n}|w_{n-1}...w_{2}w_{1}) p(S)=p(w1?w2?...wn?)=p(w1?)p(w2?∣w1?)...p(wn?∣wn?1?...w2?w1?)
這個衡量方法有兩個缺陷:
為了解決第一個問題,引入馬爾科夫假設(Markov Assumption):一個詞的出現僅與它之前的若干個詞有關。
p ( w 1 . . . w n ) = ∏ p ( w i ∣ w i ? 1 . . . w 1 ) ≈ ∏ p ( w i ∣ w i ? 1 . . . w i ? N + 1 ) p(w_{1}...w_{n})=\prod{p(w_{i}|w_{i-1}...w_{1})} \approx \prod{p(w_{i}|w_{i-1}...w_{i-N+1})} p(w1?...wn?)=∏p(wi?∣wi?1?...w1?)≈∏p(wi?∣wi?1?...wi?N+1?)
如果一個詞的出現僅依賴于它前面出現的一個詞,那么我們就稱之為 Bi-gram:
p ( S ) = p ( w 1 w 2 . . . w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) . . . p ( w n ∣ w n ? 1 ) p(S)=p(w_{1}w_{2}...w_{n})=p(w_{1})p(w_{2}|w_{1})...p(w_{n}|w_{n-1}) p(S)=p(w1?w2?...wn?)=p(w1?)p(w2?∣w1?)...p(wn?∣wn?1?)
如果一個詞的出現僅依賴于它前面出現的兩個詞,那么我們就稱之為 Tri-gram:
p ( S ) = p ( w 1 w 2 . . . w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) . . . p ( w n ∣ w n ? 1 w n ? 2 ) p(S)=p(w_{1}w_{2}...w_{n})=p(w_{1})p(w_{2}|w_{1})...p(w_{n}|w_{n-1}w_{n-2}) p(S)=p(w1?w2?...wn?)=p(w1?)p(w2?∣w1?)...p(wn?∣wn?1?wn?2?)
N-gram的 N NN 可以取很高,然而現實中一般 bi-gram 和 tri-gram 就夠用了.
用極大似然估計來計算每一項的條件概率,即頻數:
p ( w n ∣ w n ? 1 ) = C ( w n ? 1 w n ) C ( w n ? 1 ) p(w_{n}|w_{n-1})=\frac{C(w_{n-1}w_{n})}{C(w_{n-1})} p(wn?∣wn?1?)=C(wn?1?)C(wn?1?wn?)?
p ( w n ∣ w n ? 1 w n ? 2 ) = C ( w n ? 2 w n ? 1 w n ) C ( w n ? 2 w n ? 1 ) p(w_{n}|w_{n-1}w_{n-2})=\frac{C(w_{n-2}w_{n-1}w_{n})}{C(w_{n-2}w_{n-1})} p(wn?∣wn?1?wn?2?)=C(wn?2?wn?1?)C(wn?2?wn?1?wn?)?
p ( w n ∣ w n ? 1 . . . w 2 w 1 ) = C ( w 1 w 2 . . . w n ) C ( w 1 w 2 . . . w n ? 1 ) p(w_{n}|w_{n-1}...w_{2}w_{1})=\frac{C(w_{1}w_{2}...w_{n})}{C(w_{1}w_{2}...w_{n-1})} p(wn?∣wn?1?...w2?w1?)=C(w1?w2?...wn?1?)C(w1?w2?...wn?)?
具體地,以Bi-gram為例,我們有這樣一個由三句話組成的語料庫:
I am Sam Sam I am I do not like apple容易統計,“I”出現了3次,“I am”出現了2次,因此能計算概率:
p ( a m ∣ I ) = 2 3 p(am|I)=\frac{2}{3} p(am∣I)=32?
同理,還能計算出如下概率:
p ( S a m ∣ a m ) = 0.5 p(Sam|am)=0.5 p(Sam∣am)=0.5
p ( d o ∣ I ) = 0.33 p(do|I)=0.33 p(do∣I)=0.33
等等
2.SimCSE
句向量表征技術一直都是NLP領域的熱門話題,在BERT前時代,一般都采用word2vec訓練出的word-embedding結合pooling策略進行句向量表征,或者在有訓練數據情況下,采用TextCNN/BiLSTM結合Siamese network策略進行句向量表征。在BERT時代,人們借助預訓練語言模型的固有優勢,一般采用BERT模型的[CLS]向量(即句子的起始字符向量)作為句向量表征;SimCSE采用對比學習的方法,進行句向量表征,在BERT模型上獲取更好的句向量表征,詳細介紹如下:
2.1.介紹
SimCSE(simple contrastive
sentence embedding framework),即簡單的對比句向量表征框架。SimCSE共包含了無監督和有監督的兩種方法。無監督方法,采用dropout技術,對原始文本進行數據增強,從而構造出正樣本,用于后續對比學習訓練;監督學習方法,借助于文本蘊含(自然語言推理)數據集,將蘊涵-pair作為正例,矛盾-pair作為難負例,用于后續對比學習訓練。并且通過對比學習解決了預訓練Embedding的各向異性問題,使其空間分布更均勻,當有監督數據可用時,可以使正樣本直接更緊密。模型結構如下圖所示:
其中,圖a為無監督SimCSE,圖b為有監督SimCSE,詳細模型介紹見第3節和第4節。
下面將從對比學習背景、無監督SimCSE、有監督SimCSE、各向異性問題、實驗細節五個方面進行詳細介紹。
2.2.對比學習背景
2.2.1定義
對比學習就是以拉近相似數據,推開不相似數據為目標,有效地學習數據表征。給定一個pair對樣本集合 D = { ( x i , x i + ) } i = 1 m D=\{(x_{i}, x_{i}^{+})\}^{m}_{i=1} D={(xi?,xi+?)}i=1m?,其中 x i x_{i} xi?和 x i + x_{i}^{+} xi+?為相似樣本,優化目標一般采用通過批內負樣本(in-batch negatives)交叉熵損失函數,如下,
l i = ? log ? e s i m ( h i , h i + ) / τ ∑ j = 1 N e s i m ( h i , h j + ) / τ l_{i}=-\log\frac{e^{sim(h_{i},h_{i}^{+})/\tau}}{\sum_{j=1}^{N} e^{sim(h_{i},h_{j}^{+})/\tau}} li?=?log∑j=1N?esim(hi?,hj+?)/τesim(hi?,hi+?)/τ?
其中, h i h_{i} hi?和 h i + h_{i}^{+} hi+?為 x i x_{i} xi?和 x i + x_{i}^{+} xi+?的句向量表示, N N N為訓練過程中batch的大小, s i m ( h i , h i + ) sim(h_{i},h_{i}^{+}) sim(hi?,hi+?)為向量 h i h_{i} hi?和 h i + h_{i}^{+} hi+?余弦相似度, τ \tau τ為溫度超參。
在SimCSE論文中,采用BERT模型對句子進行句向量表征,即 h = f θ ( x ) h=f_{\theta}(x) h=fθ?(x),其中, f θ f_{\theta} fθ?為BERT模型參數,并通過對比學習損失優化網絡全部參數。
2.2.2構造正樣本
對比學習中的一個關鍵問題是如何構建 ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi?,xi+?)數據對。在計算機視覺中,通過對一張圖片進行簡單地裁剪,翻轉,扭曲和旋轉就可以獲取質量很高的 x i + x_{i}^{+} xi+?;而在自然語言處理中,構造 x i + x_{i}^{+} xi+?的方法與圖像類似,一般對原始句子進行轉譯、重排,或對部分詞語刪除、插入、替換等;但是由于離散性,導致NLP中的數據擴充往往會引入大量的負面噪聲,使得 x i + x_{i}^{+} xi+?的質量難以保證。
在SimCSE論文中,提出使用標準dropout操作構造高質量 x i + x_{i}^{+} xi+?,并達到比上述數據擴充更好的效果。
2.2.3對齊性和均勻性
在對比學習中,通常使用對齊性(alignment)和均勻性(uniformity)來衡量表征質量的好壞。
alignment是計算 ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi?,xi+?)數據對向量表征之間的距離,表示數據之前的緊密程度,
l a l i g n ? E ( x i , x i + ) p p o s ∣ ∣ f ( x ) ? f ( x + ) ∣ ∣ 2 l_{align} \triangleq \mathop{E}\limits_{(x_{i}, x_{i}^{+})~p_{pos}} ||f(x)-f(x^+)||^2 lalign??(xi?,xi+?)?ppos?E?∣∣f(x)?f(x+)∣∣2
uniformity是計算 x i x_{i} xi?向量表征在整體特征分布上的均勻程度,
l u n i f o r m ? l o g E x , y ~ i . i . d . p d a t a e ? 2 ∣ ∣ f ( x ) ? f ( y ) ∣ ∣ 2 l_{uniform} \triangleq log \mathop{E}\limits_{x,y \mathop{\sim}\limits^{i.i.d.} p_{data}} e^{-2||f(x)-f(y)||^2} luniform??logx,y~i.i.d.pdata?E?e?2∣∣f(x)?f(y)∣∣2
其中, p d a t a p_{data} pdata?表示數據分布。
這兩個指標與對比學習的目標是一致的:正例之間應該保持緊密,而任意向量的語義特征應該盡可能地分散在超球體上。
2.3.無監督SimCSE
無監督SimCSE的思想非常簡單,給定一個句子集合 { x i } i = 1 m \{x_i\}_{i=1}^{m} {xi?}i=1m?,將 x i x_{i} xi?分別輸入到編碼器中兩次,分別得到向量 z i z_{i} zi?的正例和 z i ’ z_{i}^{’} zi’?;由于隨機dropout masks機制存在于模型的fully-connected layers和attention probabilities上,因此相同的輸入,經過模型后會得到不同的結果;將 z i ’ z_{i}^{’} zi’?向量作為 z i z_{i} zi?的正例,其他向量作為負例,SimCSE的訓練目標變成:
l i = ? log ? e s i m ( h i z i , h i z i ’ ) / τ ∑ j = 1 N e s i m ( h i z i , h j z j ’ ) / τ l_{i}=-\log\frac{e^{sim(h_{i}^{z_i},h_{i}^{^{z_i^{’}}})/\tau}}{\sum_{j=1}^{N} e^{sim(h_{i}^{z_i},h_{j}^{z_j^{’}})/\tau}} li?=?log∑j=1N?esim(hizi??,hjzj’??)/τesim(hizi??,hizi’??)/τ?
注意: z z z為Transformers中的標準dropout mask,在無監督SimCSE沒有額外增加任何dropout。
2.3.1Dropout數據增強與其他的比較
通過dropout masks機制進行數據增強構造正例的方法,可以視為一種最小形式的數據擴充,正例與原始樣本之間采用完全相同的句子,只有在向量表征過程中的dropout mask有所不同。
在STS-B的開發集上,比較該方法與其他數據增強方法的差異。在英文維基上隨機抽取 1 0 6 10^6 106個句子進行訓練,學習速率=3e-5,批次大小為64。并訓練過程中沒有使用STS訓練集。
- 裁剪,刪除和替換等數據增強方法,效果均不如dropout masks機制,即使刪除一個詞也會損害性能,詳細如下表所示,
- 使用下一句作為目標訓練,或者采用兩個獨立的編碼器進行編碼的效果,不如采用一個編碼器的dropout masks機制,詳細如下表所示,
3.2為什么該方法可以work?
- 為了進一步理解dropout噪聲在無監督SimCSE中的作用,論文嘗試了不同的dropout率,如下表所示,
可以發現僅在默認dropout概率p=0.1時效果最優,并且當dropout概率p=0,或者相同輸入有同樣的dropout mask時,效果顯著下降。
- 在訓練過程中,每隔10步檢查一次模型,并可視化alignment和uniformity在訓練過程中的變化,如下圖所示,
可以發現,在訓練過程中,所有模型的均勻性都在提高,但是對于no-dropout和fixed-0.1模型來說對齊性急劇下降,而無監督SimCSE和delete-one-word模型進本持平。雖然delete-one-word模型的對齊性好于無監督SimCSE,但是均勻性相差較多,因此在整體效果上,無監督SimCSE更勝一籌。
2.4.有監督SimCSE
對比學習的關鍵是如何構建 ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi?,xi+?)數據對,在無監督SimCSE中,借助dropout mask機制,構造高質量 x i + x_{i}^{+} xi+?數據,已經獲得了較好的句向量表征;在有監督SimCSE中,如何通過監督數據,進一步提高句向量表征,具體如下:
2.4.1監督數據的選擇
共存在四種數據集,適合構造對比學習 ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi?,xi+?)數據對,分別是:
- QQP:Quora問題對;
相似的問題對為正樣本,如下:
正樣本 How can I improve my communication and verbal skills? What should we do to improve communication skills?不相似的問題對為負樣本,如下:
負樣本 Why are you so sexy? How sexy are you?- Flickr30k:每個圖像都有5個人進行描述,可以認為同一圖像的任意兩個描述為一對 ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi?,xi+?)數據對;
以下圖為例:
對圖片中的人物的5段描述,如下:
人物描述 Gray haired man in black suit and yellow tie working in a financial environment. A graying man in a suit is perplexed at a business meeting. A businessman in a yellow tie gives a frustrated look. A man in a yellow tie is rubbing the back of his neck. A man with a yellow tie looks concerned.- ParaNMT:大規模的回譯數據集;
針對原數據進行機器翻譯,獲得回譯數據,如下:
原數據:so, what’s half an hour? 回譯數據:half an hour won’t kill you.- NLI datasets:自然語言推理數據集,包括:SNLI和MNLI。
自然語言推理數據集,包含蘊含、矛盾和中立;蘊含表示第二句話可以推理出第一句話;矛盾表示第二句話不能推理出第一句話;中立表示兩句話無關;舉例如下:
蘊含樣本 well you see that on television also You can see that on television, as well. 矛盾樣本 but that takes too much planning It doesn't take much planning. 中立樣本 Conceptually cream skimming has two basic dimensions - product and geography. Product and geography are what make cream skimming work.在四種數據集上,直接使用 ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi?,xi+?)數據對進行訓練的結果如下表所示,
可以發現,NLI數據集上,采用語義蘊含對作為 ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi?,xi+?)數據對的效果最好;并且統計發現,語義蘊含對(SNLI + MNLI)的詞匯重疊僅占比39%,而QQP和ParaNMT數據集占比60%和55%。最終,選擇NLI數據集進行監督學習。
2.4.2難負例的使用
NLI數據集中,一個前提假設文本,具有對應的蘊含文本和矛盾文本,將矛盾文本作為難負例;即, ( x i , x i + ) (x_{i}, x_{i}^{+}) (xi?,xi+?)數據對變成 ( x i , x i + , x i ? ) (x_{i}, x_{i}^{+}, x_{i}^{-}) (xi?,xi+?,xi??)數據組,其中, x i + x_{i}^{+} xi+?為蘊含文本, x i ? x_{i}^{-} xi??為矛盾文本;監督學習SimCSE的訓練目標變成:
l i = ? log ? e s i m ( h i , h i + ) / τ ∑ j = 1 N ( e s i m ( h i , h j + ) / τ + e s i m ( h i , h j ? ) / τ ) l_{i}=-\log\frac{e^{sim(h_{i},h_{i}^{+})/\tau}}{\sum_{j=1}^{N} (e^{sim(h_{i},h_{j}^{+})/\tau} +e^{sim(h_{i},h_{j}^{-})/\tau})} li?=?log∑j=1N?(esim(hi?,hj+?)/τ+esim(hi?,hj??)/τ)esim(hi?,hi+?)/τ?
通過上表可以發現,增加矛盾文本作為難負例后,效果有所提高。
直觀上,區分難負例(矛盾文本)和Batch內其他負例可能是有益的,將監督學習SimCSE的訓練目標變成:
l i = ? log ? e s i m ( h i , h i + ) / τ ∑ j = 1 N ( e s i m ( h i , h j + ) / τ + α 1 i j e s i m ( h i , h j ? ) / τ ) l_{i}=-\log\frac{e^{sim(h_{i},h_{i}^{+})/\tau}}{\sum_{j=1}^{N} (e^{sim(h_{i},h_{j}^{+})/\tau} + \alpha^{1_{i}^{j}} e^{sim(h_{i},h_{j}^{-})/\tau})} li?=?log∑j=1N?(esim(hi?,hj+?)/τ+α1ij?esim(hi?,hj??)/τ)esim(hi?,hi+?)/τ?
用不同的α值訓練SimCSE模型,并在STS-B開發集上對訓練的模型進行評價,發現當α為1時效果最優,并且中性數據不會帶來更多的收益,如下表所示,
2.5.各向異性問題
最近的研究發現了語言表征中的各向異性問題,即訓練后的embeddings僅占據在向量空間中狹窄的部分,嚴重限制了向量的表現力。
緩解這個問題的一個簡單方法是后處理,可以消除主要的主成分或將embeddings映射到各向同性分布。另一種常見的解決方案是在訓練過程中添加正則項。
而對比學習的優化目標可以改善緩解各向異性問題,當負例數趨近于無窮大時,對比學習目標的漸近表示為:
? 1 τ E ( x i , x i + ) ~ p p o s [ f ( x ) T f ( x + ) ] + E x ~ p d a t a [ log ? E x ? ~ p d a t a [ e f ( x ) T f ( x ? ) / τ ] ] - \frac{1}{\tau}\mathop{E}\limits_{(x_{i}, x_{i}^{+}) \sim p_{pos}}[f(x)^{T}f(x^+)] + \mathop{E}\limits_{x \sim p_{data}}[\log \mathop{E}\limits_{x^- \sim p_{data}}[e^{f(x)^{T}f(x^-)/ \tau}]] ?τ1?(xi?,xi+?)~ppos?E?[f(x)Tf(x+)]+x~pdata?E?[logx?~pdata?E?[ef(x)Tf(x?)/τ]]
其中,第一項使正例之間更相似,第二項使將負例之間分開。而第二項在優化過程中,會壓平向量空間的奇異譜,因此對比學習有望緩解表征退化問題,提高句向量表征的均勻性。并通過下圖,可以發現,
- 雖然預訓練embeddings具有良好的對齊性,但其均勻性較差;
- 后處理方法,大大改善均勻性,但也使其對齊性變差;
- 無監督SimCSE有效地提高了預訓練embeddings的均勻性,同時保持了良好的對齊性;
- 有監督SimCSE,可以進一步提高對齊性。
2.6.實驗細節
對7個語義文本相似度(STS)任務進行了實驗,將無監督和有監督的SimCSE與STS任務中的最先進的句子嵌入方法進行了比較,可以發現,無監督和有監督的SimCSE均取得了sota的效果,具體如下表所示,
2.6.1訓練參數
對于有監督的SimCSE,對模型進行3個輪的訓練,在STS-B的開發集上每訓練250步進行一次模型驗證,并保存測試集上最優效果的節點。對于無監督的SimCSE與有監督的SimCSE操作一致,但僅訓練一個epoch。并對批次大小和學習率進行網格搜索,找尋最優參數,如下圖所示,
實驗發現,只要相應地調整學習速率,SimCSE對批量大小并不敏感,這與對比學習需要大批次的發現相矛盾。可能原因為所有SimCSE模型都是在原有預訓練模型基礎上繼續訓練的,已經提供了較好的初始化參數。
2.6.2MLP Layer
對于無監督和有監督的SimCSE,訓練過程均采用在帶有一個MLP層的[CLS]向量作為句向量表征。但,對于無監督的SimCSE,在測試中丟棄了MLP層,僅使用[CLS]向量作為句向量表征,詳細實驗如下表所示,
2.6.3MLM
在訓練過程中引入masked language modeling變量,可以提到模型的遷移效果,如下表所示,
但值得注意的是,遷移性的提高,會造成原始任務上的效果下降。
2.6.4溫度
溫度主要用于調整softmax函數的平滑程度,在訓練過程中,溫度為0.05時,效果最佳。
SimCSE論文,在無監督句向量表征上,通過簡單的dropout方式,構造了對比學習的正例,達到堪比監督學習效果,堪稱大道至簡。并且在監督學習上,對比學習框架效果也取得了SOTA。
- 參考文獻
- SimCSE: Simple Contrastive Learning of Sentence Embeddings
更多文章請關注公重號:汀丶人工智能
3.NLP更多詳細介紹:數據增強、智能標注、意圖識別算法|多分類算法、文本信息抽取、多模態信息抽取、可解釋性分析、性能調優、模型壓縮算法等
前人栽樹后人乘涼,本專欄提供資料:數據增強、智能標注、意圖識別算法|多分類算法、文本信息抽取、多模態信息抽取、可解釋性分析、性能調優、模型壓縮算法等項目代碼整合,省去你大把時間,效率提升。 幫助你快速完成任務落地,以及科研baseline。
NLP專欄簡介:數據增強、智能標注、意圖識別算法|多分類算法、文本信息抽取、多模態信息抽取、可解釋性分析、性能調優、模型壓縮算法等
總結
以上是生活随笔為你收集整理的深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重庆电信强化线上渠道基础管理
- 下一篇: NLP for Quant:使用NLP和