來源 | NewBeeNLP
作者 | Maple小七
BERT向量大家平時肯定經常在用,但你是否掌握正確使用姿勢? 來自字節跳動和CMU的 EMNLP2020工作深入分析了BERT向量,並扔給你一個SOTA模型
「Key insight:」 雖然預訓練BERT已經廣泛地運用到了各種下遊的NLP任務上,但在文本語義相似度計算任務上,未經微調的BERT句向量的質量常常不如GloVe句向量。針對這個問題,作者首先分析了BERT句向量分布的性質,然後利用標準化流無監督地將BERT句向量的分布變換成更規整的高斯分布,實驗結果表明作者提出的BERT-flow在多項任務上取得了SOTA表現。
提醒: 微信深色模式下,有些公式會看不清,建議在正常模式下(白底)閱讀本文~
將預訓練BERT遷移到文本語義相似度計算任務上大致有兩種思路:
「交互編碼:」 這是BERT原文給出的微調方法,也就是把兩個需要計算語義相似度的文本用[SEP]拼接起來,將其作為輸入來微調BERT。雖然BERT的cross-attention可以讓兩個文本得到充分的信息交互,在一些對文本交互要求較高的任務上表現得很好(比如需要模型具備句間推理能力的AFS數據集[3])。
但在文本檢索的場景下,「從文本庫 ,當文本規模
「向量空間模型:」 利用預訓練BERT生成的句向量(sentence embeddings)作為文本的整體表示,比如取[CLS]對應的hidden state或對最後一層或幾層的hidden states做average pooling(後者更好),然後用句向量的cosine相似度來表示文本的語義相似度。這種方式沒有利用句子對相似度標籤來微調BERT,因此是無監督的,因此非常適用於大規模文本檢索的應用場景,「但奇怪的是,實驗表明BERT句向量的表現有時候還不如non-contextualized的GloVe句向量。」
針對上面的問題,Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks (EMNLP 2019)[4]提出了基於siamese雙塔結構的SBERT,SBERT利用了語料庫中的語義相似度標籤有監督地訓練BERT生成更好的句向量,並且SBERT的訓練目標和cosine相似度度量是完全契合的。「SBERT將信息交互限制在了最頂層,避免了從底層就開始交互的BERT難以接受的計算複雜度,將
。但SBERT有一個不可忽視的缺點和一個沒有解答的問題:「需要監督信息:」 想要標註任意句子對的相似度的工作量是
但上面已經提到,實驗結果表明BERT句向量還不如簡單得多的GloVe句向量,似乎只有像SBERT那樣提供監督信息來"修正"BERT的參數,BERT才能生成可以直接用簡單的cosine相似度計算語義相似度的句向量。這個看似無法解決的困境就引出了下面需要思考的問題。
「為什麼預訓練BERT句向量的cosine相似度不能很好地近似語義相似度?:」 SBERT沒有解釋為什麼沒有經過監督式微調的BERT生成的句向量不好用,是因為BERT句向量本身沒有包含足夠的語義相似度信息,還是因為簡單的cosine相似度無法準確刻畫語義相似度?如果是後者,「有沒有什麼方法可以在無監督的條件下更有效地抽取出BERT句向量中隱含的語義相似度信息呢?」
上面的幾點思考就是本文致力於解決的問題,作者首先分析了BERT句向量是否包含了足夠的語義相似度信息,然後分析了為什麼不能直接計算BERT句向量的cosine相似度來表示語義相似度,最後針對如何在無監督的條件下更有效地處理BERT句向量來計算語義相似度的問題,提出了BERT-flow模型。
BERT句向量我們首先回答第一個問題:預訓練BERT句向量是否能夠包含足夠的能夠反映語義相似度的信息?,換一個角度來看,就是說「BERT的訓練目標和文本語義相似度計算的目標是否是一致的。」
BERT預訓練與語義相似性考慮一個句子
而BERT提出的掩碼語言模型將其分解為
其中
其中
我們只好回到
其中 為
再進一步,我們可以猜想如果兩個上下文
因此我們繼續考慮下面的問題:「我們使用BERT句向量的方法是否不夠有效?」
各向異性向量與語義相似性由於我們用的相似度度量都是很簡單的度量,比如cosine相似度,minkowski距離等,這些度量對語義分布的性質可能會有一定的要求,而BERT句向量的分布不一定滿足這些性質,或者說「BERT句向量隱含的語義相似度信息沒那麼容易被抽取出來」,因此我們嘗試分析一下句向量在高維空間中的分布情況。
目前已經出現了不少針對語義向量空間性質的研究,比如Representation Degeneration Problem in Training Natural Language Generation Models (ICLR 2019)[6]發現語言模型學習到的詞向量分布通常是各向異性的(anisotropic),且詞嵌入常呈現錐形分布,Towards Understanding Linear Word Analogies (ACL 2019)[7]在BERT和GPT2的詞向量分布上也得到了同樣的結論。因此作者猜想BERT句向量同樣存在這樣的問題,作者在上述結論的基礎上,進一步發現了詞向量的非均勻分布和詞頻的非均勻分布有關。
為了方便,我們只探討詞向量空間,因為詞向量空間和句向量空間共享的是同一個高維空間,如果詞向量空間有什麼問題,那句向量空間也會有同樣的問題。為了驗證BERT詞向量分布是否和詞頻有關,作者計算了詞向量的
我們可以發現高頻詞的
我們還可以發現高頻詞之間的
BERT-flow為了解決BERT句向量分布不平整的問題,作者認為可以利用標準化流(Normalizing Flows)將BERT句向量分布變換成一個光滑的,各向同性的標準高斯分布。
標準高斯分布有一些很好的性質,首先,標準高斯分布是各向同性的(isotropy),在傳統的詞嵌入方法中,研究表明詞向量矩陣的前面幾個奇異值通常和高頻詞高度相關,通過將嵌入分布變換到各向同性的分布上,奇異值就可以被壓縮。另外,標準高斯分布是凸的,或者說是沒有"空洞",因此語義分布更為光滑。
Flow-based Generative Model基於標準化流的生成模型定義了一個從潛在空間
通過變量代換定理,
在BERT-flow中,
其中
Experiments為了驗證BERT-flow的有效性,作者以SBERT的實驗結果為基礎,在一系列文本語義相似度計算任務上進行了模型對比和評估。
Semantic Textual Similarity作者利用SentEval Toolkit在STS-B,SICK-R,STS tasks 2012-2016的測試集上進行模型評估。與SBERT的評估過程一致,作者首先使用句子編碼器得到句向量,然後計算句向量對的cosine相似度作為語義相似度的預測值,最後計算預測相似度和人工標註相似度的Spearman秩相關係數。
Unsupervised Training由於標準化流的訓練過程是完全無監督的,所以作者在整個目標數據集上(train+val+test)訓練了標準化流(flow(target)),為了與SBERT對比,作者也用SNLI和MNLI數據集(統稱為NLI)無監督地訓練標準化流(flow(NLI*)),注意在整個訓練過程中預訓練BERT部分的參數是不變的,實驗結果如下表所示。
可以發現,在目標數據集上訓練flow(BERT-flow(target))比在NLI數據集上訓練flow(BERT-flow(NLI*))要好不少,除了SICK-R數據集,這是因為SICK-R數據集包含了文本蘊含和文本相關兩類任務,而NLI數據集正好包含了文本蘊含任務,因此SICK-R和NLI數據集的差異可能很小,又因為NLI數據集比SICK-R大得多,所以這樣的結果是可以理解的。但在實際應用場景下,在目標數據集上訓練模型通常是更好的選擇。
Supervised Training當前文本語義相似度計算的SOTA基線模型依舊是SBERT,SBERT同樣是在NLI數據集上以有監督的方式訓練的,為了和SBERT對比,作者首先以SBERT的訓練方式在相同的數據集上微調了BERT部分(BERT-NLI),然後再無監督地微調flow部分。「這實際上等價於在SBERT後面加了個flow,區別在於BERT-flow利用了目標數據集來無監督訓練flow,而SBERT並沒有以任何方式利用目標數據集」,所以BERT-flow好也是好得理所當然的。實驗結果如下表所示,可以認為BERT-flow是一個新的SOTA模型。
上面的文本語義相似度計算任務是回歸式的,而文本語義匹配任務是二分類式的,比如判斷某個答案是否能夠回答某個問題。因此作者在問答蘊含(QA entailment)任務上進一步測試了BERT-flow。作者在QNLI數據集上進行實驗,並計算出了不同模型在驗證集上的AUC,實驗結果表明flow的引入能夠較大幅度地提高模型表現。
針對句向量空間分布不規整的問題,前人也提出了一些修正方法,比如對句向量做標準化(SN):
作者進一步討論了文本的語義相似度和詞彙相似度(Lexical Similarity)的關係,作者將編輯距離(edit distance)作為文本詞彙相似度的度量,然後分別計算了人類標註的語義相似度、BERT語義相似度、BERT-flow語義相似度和詞彙相似度的Spearman相關係數
我們可以發現真實的語義相似度和詞彙相似度的相關性很弱(
Discussion標準化流用於規整分布的思想挺有價值的,VAE和標準化流的結合就非常多,比如在CV裡面,Variational Autoencoders with Normalizing Flow Decoders (2020)[8]就把Glow和VAE結合起來同時解決Glow難以訓練和VAE生成圖像偏模糊的問題。因此如何在其他模型裡面有效地利用標準化流的優秀性質也是值得一灌的方向.
本文參考資料[1]On the Sentence Embeddings from Pre-trained Language Models: https://arxiv.org/abs/2011.05864
[2]bohanli/BERT-flow: https://github.com/bohanli/BERT-flow
[3]AFS數據集: https://www.aclweb.org/anthology/W16-3636.pdf
[4]Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks (EMNLP 2019): https://arxiv.org/abs/1908.10084
[5]Breaking the Softmax Bottleneck: A High-Rank RNN Language Model (ICLR 2018): https://arxiv.org/abs/1711.03953
[6]Representation Degeneration Problem in Training Natural Language Generation Models (ICLR 2019): https://arxiv.org/abs/1907.12009
[7]Towards Understanding Linear Word Analogies (ACL 2019): https://arxiv.org/abs/1810.04882
[8]Variational Autoencoders with Normalizing Flow Decoders (2020): https://arxiv.org/abs/2004.05617?context=stat