BERT模型的應用回顧(階段性總結)
1 引言
BERT(Bidirectional Encoder Representations from Transformers)是一個以自監督方式在大型英語數據語料庫上預訓練的transformers模型。Transformers架構在論文《 Attention is All You Need 注意力是你所需要的》提出,其中編碼器(encoder)對輸入文本進行編碼,解碼器(decoder)對編碼進行處理,以理解序列背后的上下文信息。堆棧中的每個編碼器和解碼器都使用一個注意力機制,將每個輸入與其他輸入一起處理,以權衡它們之間的相關性,并在解碼器的幫助下生成輸出序列。注意力機制能夠動態地突出和理解輸入文本的特征。
BERT模型基于Transformers架構,在BookCorpus上進行了預訓練,該數據集由11,038本沒有出版的書籍和英文維基百科組成(不包括列表、表格和標題)。BERT的預訓練有兩個目標: (1) Masked Language Modeling (MLM): 掩蔽語言模擬(MLM)---取一個句子,模型隨機掩蔽輸入中15%的單詞,然后通過模型運行整個掩蔽的句子預測掩蔽的單詞。這與傳統的遞歸神經網絡RNN不同,RNN通常是一個接一個地看單詞,或者與自回歸模型GPT不同,GPT在內部屏蔽未來的標記, 而MLM允許模型學習句子的雙向表示,這樣的訓練為需要雙向語境的下游任務,如SQuAD奠定了堅實基礎。程序為 geotech-fill-mask.py, 代表性例子:完形填空---遮蔽式語言模擬(Masked Language Modeling). (2) Next Sentence Prediction (NSP): 下一句預測(NSP)---模型在預訓練期間將兩個被掩蓋的句子連接起來作為輸入。作為隨機變量, 有時它們對應于原文中彼此相鄰的句子,有時則不是,然后該模型預測這兩個句子是否彼此相接。
BERT模型可以用來提取對下游任務有用的特征, 是我們迄今為止使用最廣泛的模型,這個筆記簡要總結了目前BERT在我們工作中的應用,包括使用的工具及其技術。
2 主題模擬
主題模擬(Topic Modeling)是一種從大量非結構化文本中提取隱藏主題的技術,面臨的挑戰是如何提取出清晰、分離和有意義的高質量主題,這在很大程度上取決于文本預處理的質量和尋找最佳主題數量的策略,因此主題模擬在很大程度上是一門藝術。BERT在主題模擬方面表現突出,目前主要使用下述方法進行主題模擬:
(1) BERTopic---利用Transformers等模型嵌入,用UMAP來降低嵌入的維度; 用HDBSCAN對減少的嵌入進行聚類,并創建語義相似的文件群,用c-TF-IDF提取和減少主題,提高具有最大邊際相關性的詞匯連貫性。BERTopic默認的嵌入是sentence-transformers,默認的模型是paraphrase-MiniLM-L6-v2,也可以使用Spacy, Flair, Gensim, USE等嵌入模型。主要依賴的庫:transformers, torch, sentence-transformers, 程序為 geotech-bertopic-topic-modeling.py,代表性例子:BERTopic(V0.9.0)主題模擬技術
(2) Top2Vec---Top2Vec不像BERTopic一樣,可以任意選擇預訓練模型,目前它只內置了四種模型可供選擇,默認的模型是Gensim的Doc2Vec, 另外三種模型是:
universal-sentence-encoder (USE)
universal-sentence-encoder-multilingual (USEM)
distiluse-base-multilingual-cased (DBMC)
USE和USEM依賴于Tensorflow,DBMC依賴于sentence-transforers模型, 由于我們的背景框架是Torch,因此目前只使用Doc2Vec和DBMC兩個模型。在用GeotechSet數據集的測試中,發現DBMC得出的結果比Doc2Vec的結果好。BERTopic默認的數據集是paraphrase-MiniLM-L6-v2。程序為 geotech-top2vec-sentences.py,代表性例子:
主題模擬的藝術(The Art of Topic Modeling)---以Step-Path Failure為例
GeotechSet數據集主題模擬(Topic Modeling)
(3) sentence-transformers---SBERT使用sklearn的聚類算法也能產生主題模擬,程序為geotech-st-cluster.py,代表性例子:
3 問題對答
問題對答是信息檢索和自然語言處理中的一項任務, 也是NLP中最難處理的一項內容, 該任務要求系統正確回答以人類自然語言提出的問題。在提取性問題解答方案中,通過提供一段文字,使用模型根據上下文來預測答案在段落中的位置。這是一項非常具有挑戰性的任務。在這個任務中,主要使用了三個數據集: 第一個數據集是mrm8488/bert-multi-cased-finetuned-xquadv1. 這個數據集是一個多語言預訓練模型,由Google創建,并在XQuAD之類的數據上進行了微調,用于多語言(11種不同的語言)的問答任務。由于數據集基于SQuAD v1.1(SQuAD數據集包含大約15萬個問題),所以數據中沒有無法回答的問題, 以便模型可以專注于跨語言的轉移。第二個數據集是bert-large-uncased-whole-word-masking-finetuned-squad,該數據集不區分字母大小寫, 使用了屏蔽語言模擬masked language modeling (MLM) 目標對英語語言進行預訓練。可以在問題回答管道中使用它,或者使用它來輸出給定查詢和上下文的原始結果。與其他BERT模型不同的是,這個模型使用了全詞屏蔽Whole Word Masking技術進行訓練。在這種情況下,一個詞所對應的所有標記(tokens)都會被一次性屏蔽掉, 而整體屏蔽率保持不變。訓練是相同的 -- 每個被屏蔽的WordPiece標記都是獨立預測的。在預訓練之后,這個模型在SQuAD數據集上用一個微調腳本進行了微調。第三個數據集是ktrapeznikov/albert-xlarge-v2-squad-v2。程序為 geotech-AutoModelForQuestionAnswering.py,代表性例子:
閱讀理解回答問題(Question Answering)---一個更強的BERT預訓練模型
Transformers之問題對答(Question Answering)
4 Longformer
上面的問題對答都使用了512個標記(token)序列, 當處理長文本超出這個限制時,就會發生錯誤,因而我們必須使用Longformer代替標準的Bert模型。Longformer在長文檔任務中的表現優于其他大多數模型,可以明顯減少內存和時間的復雜度。長文本的預訓練模型使用valhalla/longformer-base-4096-finetuned-squadv1,這個模型基于SQuAD v1進行了微調, 可以處理最多4096個標記的序列。程序為 geotech-longtransformer-AutoModelForQuestionAnswering.py,代表性例子:
Longformer---回答問題長文本的Transformer
5 語義相似
迄今為止,發現SBERT是語義相似查詢最好的方法,已經集成了幾乎差不多所有驗證可靠的Bert數據集。程序為 geotech-Sbert-similarity.py,代表性例子:
6 段落總結
Sentence-Transformers使用Lexrank庫尋找文件中最核心的句子,這些中心句子用來構成文檔總結。LexRank以基于圖的句子中心性評分,是一種無監督的文本總結方法。其中心思想是,句子向讀者 "推薦 "其他類似的句子。如果一個句子與其他許多句子非常相似,那么它將可能是一個非常重要的句子。這個句子的重要性也源于 "推薦 "它的句子的重要性。因此為了獲得高排名并被放在摘要中,一個句子必須與許多句子相似,而這些句子又與其他許多句子相似。模型選用paraphrase-mpnet-base-v2,程序為 geotech-st-lexrank-summarization.py,代表性例子:
LaxRank抽取式文本總結(Text Summarization)
7 Zero Shot分類
另一種非常有趣的主題模擬技術稱為零點文本分類(Zero Shot Text Classification),這種技術是根據用戶指定的分類標簽來判斷一段文本是否屬于這個類別。目前使用的是distilbert-base-uncased-mnli,該模型是uncased DistilBERT model在Multi-Genre Natural Language Inference (MNLI)上微調產生的。MNLI語料庫包含大約433k個假設/前提對。它與SNLI語料庫類似,但涵蓋了一系列的口語和書面文本。程序為 geotech-zero-shot-classifier.py, 代表性例子:
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















