BERT-Flow | 文本語義表示新SOTA

2021-01-14 磐創AI


來源 | NewBeeNLP

作者  | Maple小七


BERT向量大家平時肯定經常在用,但你是否掌握正確使用姿勢? 來自字節跳動和CMU的 EMNLP2020工作深入分析了BERT向量,並扔給你一個SOTA模型

論文:On the Sentence Embeddings from Pre-trained Language Models[1]代碼:https://github.com/bohanli/BERT-flow

「Key insight:」 雖然預訓練BERT已經廣泛地運用到了各種下遊的NLP任務上,但在文本語義相似度計算任務上,未經微調的BERT句向量的質量常常不如GloVe句向量。針對這個問題,作者首先分析了BERT句向量分布的性質,然後利用標準化流無監督地將BERT句向量的分布變換成更規整的高斯分布,實驗結果表明作者提出的BERT-flow在多項任務上取得了SOTA表現。

提醒: 微信深色模式下,有些公式會看不清,建議在正常模式下(白底)閱讀本文~


Introduction

將預訓練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生成的句向量可以直接用來有效地計算文本相似度」

但上面已經提到,實驗結果表明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詞向量分布是否和詞頻有關,作者計算了詞向量的

我們可以發現高頻詞的 「這會導致即使一個高頻詞和一個低頻詞的語義是等價的,但詞頻的差異也會帶來很大的距離偏差,從而詞向量的距離就不能很好地代表語義相關性」

我們還可以發現高頻詞之間的 「語義不平滑的(semantically non-smoothing)」,這導致句向量相似度不一定能夠準確表示句子的語義相似度。

BERT-flow

為了解決BERT句向量分布不平整的問題,作者認為可以利用標準化流(Normalizing Flows)將BERT句向量分布變換成一個光滑的,各向同性的標準高斯分布。

Motivation

標準高斯分布有一些很好的性質,首先,標準高斯分布是各向同性的(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模型。

Unsupervised Question-Answer Entailment

上面的文本語義相似度計算任務是回歸式的,而文本語義匹配任務是二分類式的,比如判斷某個答案是否能夠回答某個問題。因此作者在問答蘊含(QA entailment)任務上進一步測試了BERT-flow。作者在QNLI數據集上進行實驗,並計算出了不同模型在驗證集上的AUC,實驗結果表明flow的引入能夠較大幅度地提高模型表現。

Comparison with Other Embedding Calibration Baselines

針對句向量空間分布不規整的問題,前人也提出了一些修正方法,比如對句向量做標準化(SN):

Semantic Similarity Versus Lexical Similarity

作者進一步討論了文本的語義相似度和詞彙相似度(Lexical Similarity)的關係,作者將編輯距離(edit distance)作為文本詞彙相似度的度量,然後分別計算了人類標註的語義相似度、BERT語義相似度、BERT-flow語義相似度和詞彙相似度的Spearman相關係數

我們可以發現真實的語義相似度和詞彙相似度的相關性很弱(「這表明BERT-flow計算的相似度更接近於真實的語義相似度,而不是詞彙相似度。」

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

相關焦點

  • 前沿|通用句子語義編碼器,谷歌在語義文本相似性上的探索
    近年來,基於神經網絡的自然語言理解研究取得了快速發展(尤其是學習語義文本表示),這些深度方法給人們帶來了全新的應用,且還可以幫助提高各種小數據集自然語言任務的性能。本文討論了兩篇關於谷歌語義表示最新進展的論文,以及兩種可在 TensorFlow Hub 上下載的新模型。
  • 使用BERT和TensorFlow構建搜尋引擎
    為了證明這一點,將使用BERT特徵提取為文本構建最近鄰搜尋引擎。import osimport tensorflow as tf from bert_serving.server.graph import optimize_graphfrom bert_serving.server.helper import get_args_parser MODEL_DIR = '/content
  • Keras 教程:BERT 文本摘要
    字幕組雙語原文:Keras 教程:BERT一個token作為答案開始的概率是由S和在最後一層BERT中表示的token之間的點積給出的,然後是所有token的softmax。token作為最終答案的概率的計算方法與向量T類似。微調BERT,學習S和T。
  • 【注意力機制】transformers之轉換Tensorflow的Checkpoints
    /bert#pre-trained-models))此CLI將TensorFlow checkpoints(三個以bert_model.ckpt開頭的文件)和關聯的配置文件(bert_config.json)作為輸入,並為此配置創建PyTorch模型,並加載在PyTorch模型中從TensorFlow checkpoints進行權重計算,然後將生成的模型保存到標準PyTorch格式文件中,該文件可以使用
  • 教你用BERT進行多標籤文本分類
    大數據文摘出品來源:medium編譯:李雷、睡不著的iris、Aileen過去的一年,深度神經網絡的應用開啟了自然語言處理的新時代。預訓練模型在研究領域的應用已經令許多NLP項目的最新成果產生了巨大的飛躍,例如文本分類,自然語言推理和問答。
  • TFX 最新博文:如何使用 TensorFlow 生態系統實現快速高效的 BERT...
    理想情況下,我們希望將原始文本發送到伺服器,但是 BERT 模型需要對輸入文本進行預處理,然後才能從實際模型中獲得預測。有一些解決方案通過在客戶端對文本進行預處理來解決這個問題,還有的解決方案是,在伺服器端實現了一個中間步驟來處理輸入數據。這兩個方法都不太正確,因為它們需要額外的部署協調,降低了推理的效率。圖 1:當前的 BERT 部署什麼是最佳部署?
  • 大神教程乾貨:使用BERT的多類別情感分析!(附代碼)
    使用BERT輕鬆快速地實現針對Yelp評論的多類別文本情感分析。在本文中,我們將使用BERT在Yelp評論上開發多類文本分類。BERT概述BERT是用於通用「語言理解」 的深度雙向表示模型,可從左至右和從右至左學習信息。
  • 詞向量詳解:從word2vec、glove、ELMo到BERT
    目前,詞向量(又叫詞嵌入)已經成為NLP領域各種任務的必備一步,而且隨著bert elmo,gpt等預訓練模型的發展,詞向量演變為知識表示方法,但其本質思想不變。學習各種詞向量訓練原理可以很好地掌握NLP各種方法。生成詞向量的方法有很多種,本文重點介紹word2vec,glove和bert。
  • 基於Bert和通用句子編碼的Spark-NLP文本分類
    Spark NLP中有幾個文本分類選項:Spark-NLP中的文本預處理及基於Spark-ML的ML算法Spark-NLP和ML算法中的文本預處理和單詞嵌入(Glove,Bert,Elmo)Spark-NLP和ML算法中的文本預處理和句子嵌入(Universal Sentence Encoders)Spark-NLP中的文本預處理和ClassifierDL模塊(基於TensorFlow
  • 谷歌最強NLP模型BERT,為何炫酷又強大?騰訊程式設計師給你從頭講起
    query-title 分檔任務要求針對 query 和 title 按文本相關性進行 5 個檔位的分類(1~5 檔),各檔位從需求滿足及語義匹配這兩方面對 query-doc 的相關度進行衡量,檔位越大表示相關性越高,如 1 檔表示文本和語義完全不相關,而 5 檔表示文本和語義高度相關,完全符合 query 的需求。
  • NLP之文本分類:「Tf-Idf、Word2Vec和BERT」三種模型比較
    詞嵌入法:用gensim擬合Word2Vec,用tensorflow/keras進行特徵工程和深度學習,測試和評估,用Attention機制解釋。語言模型:用transformers進行特徵工程,用transformers和tensorflow/keras進行預訓練BERT的遷移學習,測試和評估。
  • 文本匹配模型TextMatching
    寫在前面本次分享一篇NLP文本匹配的經典文章,主要思路是借鑑圖像識別的思路來解決NLP文本匹配問題,畢竟計算機視覺技術的發展在當時異常迅猛。個人心得:文本匹配問題可轉化為二分類問題,輸出概率則為相似度將圖像識別的思路應用於文本匹配任務中,利用卷積抽取文本特徵論文地址:https://arxiv.org/pdf/1602.06359.pdf1.
  • 乾貨| BERT fine-tune 終極實踐教程
    google此次開源的BERT是通過tensorflow高級API—— tf.estimator進行封裝(wrapper)的。因此對於不同數據集的適配,只需要修改代碼中的processor部分,就能進行代碼的訓練、交叉驗證和測試。以下是奇點機智技術團隊對BERT在中文數據集上的fine tune終極實踐教程。
  • 李偉:輿情事件等級評估及基於語義理解實現文本精細化分類
    與會的數據建模、計算機技術應用、輿情領域專家學者就如何有效地利用新技術完善重大風險評估體系建設進行了分享和探討。人民網輿情數據中心主任數據分析師李偉分享的主題是:輿情事件等級評估及基於語義理解實現文本精細化分類。
  • 百度正式發布ERNIE 2.0:16項中英文任務超越BERT、XLNet刷新SOTA
    然而,除了語言共現信息之外,語料中還包含詞法、語法、語義等更多有價值的信息。例如,人名、地名、機構名等詞語概念知識,句子間順序和距離關係等結構知識,文本語義相似度和語言邏輯關係等語義知識。那麼如果持續地學習各類任務,模型的效果能否進一步提升?這就是 ERNIE 2.0 希望探索的。
  • 百度NLP主任架構師全面講解百度語義表示技術及最新進展
    當時百度主要解決的問題是怎樣做這種新文檔的表示,難點是超大規模語料訓練、Online EM、MPI並行化。此外,百度還將自研的主題模型以及一些主流的主題模型整理為工業應用工具,對外開源了百度NLP主題模型工具包FAMILIA。
  • 谷歌搜索:幾乎所有的英文搜索都用上BERT了
    作為自然語言處理領域裡程碑式的進展,BERT 為該領域帶來了以下創新:利用無標籤文本進行預訓練;雙向上下文模型;transformer 架構的應用;masked 語言建模;注意力機制;文本蘊涵(下一句預測)
  • 「金猿技術展」文心ERNIE——基於知識增強的語義理解技術
    文心(ERNIE)是一個取得世界級突破的語義理解技術與平臺,依託百度的深度學習平臺飛槳打造,將機器理解語言的水平提升到新的高度,全面刷新了各項NLP任務的世界最好效果,取得了諸多權威語義評測比賽的世界冠軍。除語言理解外,提出的基於多流機制生成完整語義片段語言生成技術ERNIE-GEN、知識增強跨模態語義理解技術ERNIE-ViL等,均達到世界領先水平。
  • 文本分類六十年
    此外,這類方法通常不考慮文本數據中的自然順序結構或上下文信息,這使得模型很難具備學習單詞之間語義信息的能力。2010年代之後,文本分類已逐漸從淺層學習模型轉變為深度學習模型。與基於淺層學習的方法相比,深度學習方法避免了人工設計規則和特徵,可以自動從文本中挖掘出大量且豐富的語義表示。因此,大多數文本分類研究工作都是基於數據驅動且計算複雜度較高的DNNs來進行的。
  • 百度NLP | 神經網絡語義匹配技術
    傳統的文本匹配技術如信息檢索中的向量空間模型 VSM、BM25 等算法,主要解決詞彙層面的匹配問題,或者說詞彙層面的相似度問題。而實際上,基於詞彙重合度的匹配算法有很大的局限性,原因包括:1)語言的多義同義問題相同的詞在不同語境下,可以表達不同的語義,例如「蘋果」既表示水果,也表示一家科技公司。