天然語言處理:從詞頻到word embedding到Bert模型

通用的天然語言處理(natural language processing, nlp)過程以下:網絡

  1. 文本預處理
    • 清洗數據、進行分詞等
  2. 特徵工程
    • 傳統ML特徵(如tf-idf特徵, 主要集中於提取關鍵詞)
    • 語法、語義信息(詞向量word embedding,句向量等)
  3. 創建模型
    • 傳統模型:LinearSVM, LogicRegression
    • 深度模型: TextCNN, TextRNN, TextRCNN, Bert

因爲模型以張量爲輸入,所以面對nlp數據集,第一個任務就是將文本轉爲向量,是本文談論的重點。其中大概有如下幾種方法:框架

  1. 作好數據清洗、分詞,將word進行one-hot embedding,優勢是簡單,但會損失不少信息而且中間有tricky的地方須要處理
  2. 利用詞頻、tf-idf等信息,直接對文本進行編碼。這些特徵可能在word分佈比較平均的時候沒有多大做用
  3. 利用預訓練方法,根據語言的通用性,將word映射到一個隱空間表示它的語義,或許還能加上context對其語義向量進行微調(解決多義詞問題)

傳統特徵

利用傳統特徵如詞頻、tf-idf等對文本進行編碼,而後扔到LinearSVC中,若是是二分類任務,效果基本還行,並且比較簡單。這些特徵的缺點在於:工具

  • 效果比較吃數據集,若是數據集自己的詞比較散,效果會不好學習

  • 不具有通用性動畫

  • 計算比較慢,相比於利用word embedding + frozen而言ui

Word Embedding

Word Embeddind是一種預訓練技術。編碼

在CV任務中,經常使用層級CNN結構,通常會使用CNN方法加以輔助。對於層級CNN結構來講,不一樣層級的神經元學習到不一樣類型的圖像特徵,由底向上造成層級結構,所以越接近底層的神經元學習到特徵越具備通用型(好比邊角線、弧線等基礎特徵),越高層神經元學習到的特徵越與具體任務相關。3d

所以,可使用ImageNet等大型數據集對網絡進行預訓練,抽取其底層任務無關的特徵提取器的參數對特定任務的網絡進行初始化:code

  • 對於小數據集,因爲網絡參數通常以億計,少許數據難以訓練複雜網絡,所以使用預訓練+fine tuning調整參數更爲合適
  • 對於大型數據集,能夠爲參數設置一個較好的初始化值

NLP語言模型 語言模型包括文法語言模型和統計語言模型,通常咱們指統計語言模型。 統計語言模型:把句子(sequence of word)看做一個隨機事件,以相應機率描述其屬於某種語言集合的可能性。給定一個詞聚集合V,對於一個由V中的詞構成的序列S=(w_1, \cdots, w_T) \ \in \ V^n,賦予機率P(S)衡量其複合天然語法語義的置信度 常見的統計語言模型由N-gram Modelorm

那麼容易想到在nlp領域也可使用預訓練的方式對語義進行提取,其中最先的工做多是2003年的神經網絡語言模型(NNLM),在2013年深度學習火爆以後開始收到重視,word embedding是網絡訓練的副產品,是一個由詞向量組成的矩陣。2013年最火的用語言模型作word embedding的工具是word2vec。

Word2Vec的網絡結構和NNLM相似,區別在於訓練方法:

  • CBOW: 從一個句子裏把一個詞扣掉,用這個詞的上下文預測扣掉的詞
  • Skip-gram: 與CBOW相反,輸入某個單詞要求預測其上下文

嘗試word2vec可使用gensim

WordEmbedding的問題在於:多義詞問題,它的訓練方式致使無論單詞的上下文都是預測相同的這個單詞,致使兩種不一樣的上下文信息都會編碼到相應的word embedding空間

ELMO

Deep contextualized word representation -- Embedding from Language Models,提供了多義詞問題的解決方案。WordEmbedding在訓練好以後每一個單詞的表達就固定了,不會跟着context進行變化,也就是說它的embedding是靜態的。

ELMO的本質思想是:使用語言模型訓練單詞的WordEmbedding,實際使用時根據上下文單詞的語義進行調整,即根據上下文對Word Embedding進行調整。

ELMO採起了兩階段訓練過程:

  1. 上游:利用語言模型進行預訓練,這邊通常提取了詞義
  2. 下游:從與訓練網絡提取對應單詞的網絡隔層的word embedding做爲新特徵補充到下游任務,這邊通常提取了語法信息和語義信息

缺點(與GPT和Bert對比):

  1. LSTM抽取特徵的能力遠遠弱於Transformer
  2. 經過拼接方式融合特徵,融合能力偏弱

Transformer Transformer是個疊加的Self Attention構成的深度網絡。注意力機制指掃描全局得到須要重點關注的目標區域,抑制無用信息。 Attention機制通常依附於Encoder-Decoder框架,單純的Encoder-Decoder通常用於輸入輸出維度不一致,那麼就利用Encoder將其編碼爲固定長度的信息向量(中間語義表示),再使用Decoder進行解碼,其缺點在於:

  • 中間語義表示長度有限,可能存在信息損耗
  • Decoder根據中間語義表示即句子的全局信息進行解碼,沒法注重句子的局部信息

引入Attention模型後至關於給每一個單詞都增長了權重,能夠關注於局部信息了 動畫演示 本質上Attention是對Source中元素的Value值進行加權求和(Source就是句子,元素就是每一個單詞,其value就是embedding):\text{Attention}(\text{Query}, \ \text{Source}) = \Sigma_{i=1}^{L_x} \textit{Similarity}(\text{Query}, \text{Key}_i) \cdot \text{Value}_i

Self Attention也稱爲intra Attention,attention機制中Source和Target內容不同,Self Attention機制是句子內部元素之間發生Attention的機制(能夠看做Source=Target的特殊狀況)。Self Attention能夠捕獲同一個句子中單詞之間的一些句法特徵/語義特徵,它直接捕獲兩個單詞的特徵,不一樣於RNN的序列計算(這會致使越遠的單詞有效捕獲的可能性越小)

GPT

Generative Pre-Training一樣使用兩階段過程:

  1. 利用語言模型進行預訓練
  2. 經過fine tuning模式解決下游任務

與ELMO不一樣之處在於:

  • 特徵抽取使用Transformer
  • 使用Context-before進行預訓練(ELMO採用Bi-LSTM所以能夠提取上下文信息)

缺點:

  • 語言模型是單向的,只能提取到Context-Before信息

Bert

Bert採用GPT徹底相同的兩階段模型(不一樣之處在於它使用了雙向且預訓練語言模型的數據規模更大),因此其實:

  • 把ELMO的特徵抽取器換成Transformer就獲得了Bert
  • 把GPT語言模型換成雙向的也得倒Bert

那麼問題就在於Transformer如何雙向使用進行訓練呢?

  • Maked LM:使用[MASK]或者其餘詞對須要預測的詞進行替換
    • 之因此須要其餘詞是由於,後面真正使用是不會有MASK標記的,所以不能只針對這個標記進行訓練
  • Next Sentence Prediction: Masked LM集中在單詞粒度,對NLP中對句子關係預測來講粒度太細,所以須要將語料中句子順序進行替換
  • 所以Bert的預訓練是個多任務的過程

Bert的輸入由三種embedding進行疊加:

  • Token Embedding: 詞義
  • Segment Embedding: 由於句子關係預測的任務,須要將所在句子的embedding也做爲單詞輸入的一部分
  • Positionn Embeddinng: 位置信息,NLP中單詞順序十分重要

參考

從Word Embedding到Bert模型—天然語言處理中的預訓練技術發展史

相關文章
相關標籤/搜索