策略產品經理--NLP技術基礎與演算法模型
前言:BERT模型的出現,使NLP技術進入新的時代。由此機會窺探NLP技術全貌,學習瞭解NLP相關技術與演算法模型。
一、基本概念
詞向量(Word Embedding):
詞向量主要用於將自然語言中的詞符號數學化,這樣才能作為機器學習問題的輸入。
數學化表示詞的方式很多,最簡單的有獨熱編碼,即“足球”=[0,0,1,0,0,0,0,…],“籃球”=[0,0,0,0,0,1,0,…],向量的長度為總詞數。顯然,獨熱編碼有以下缺點:1.可能導致維數過大,對深度學習來說複雜度過高。2.兩個詞的相似程度無法表示。
詞向量與獨熱編碼不同,一般是以下形式:[0.2333,0.4324,0.6666,-0.9527,….],維數以50維和100維比較常見。詞向量解決了維度過大的問題,且兩個詞的相似度可以用歐幾里得距離,餘弦相似度等方法求得。
語言模型:
語言模型形式化的描述就是,給定一個字串,看它是自然語言的概率P(w1,w2,…,wt),其中wi表示這句話中的各個詞。有個很簡單的推論,(語言模型就是用來計算一個句子的概率的模型):
P(w1,w2,…,wt)=P(w1)×P(w2|w1)×P(w3|w1,w2)×…×P(wt|w1,w2,…,wt−1)(條件概率公式)
而事實上,常用的語言模型都是在近似地求P(wt|w1,w2,…,wt-1),語言模型後續介紹,谷歌的BERT模型也屬於語言模型(預訓練類)。
分類衡量指標:
以資訊檢索為例,總共50篇文獻,其中20篇是我感興趣的目標文獻。輸入特定檢索條件返回10篇文獻,其中5篇是我要的文獻。則
精確率(Precision) = 查出的文章中有多少是正確目標 = 5/10
召回率(Recall) = 總共正確的文章中有多少被正確查出 = 5/20
兩種值都是我們想要提高的,但不能兩全其美:想要精確率為1,最好的結果就是一篇文獻也沒搜到,返回的結果肯定沒有分類錯誤,但這樣也沒有意義;想要召回率為1,最好的情況就是50篇 返回,這樣搜尋本身也失去了意義。
定義F1分數為精確率與召回率的調和平均數:
這樣可以避免出現精確率和召回率一個為1一個為0的極端情況出現
還可以根據對精確率/召回率的不同偏好設定F_beta分數
另一個角度來看這個問題。假設我們現在要判斷一個使用者是好人還是壞人,定義:TP(True Positive)為預測正確的好人的個數,FP(False Positive)為預測錯誤的好人的個數,FN(False Negative)為預測錯誤的壞人的個數,TN(True Negative)為預測正確的壞人的個數。可以寫出混淆矩陣(Confusion matrix)如下:
(返回的預測正確的與預測錯誤的目標的總數)
(召回率的分母是總的正確的符合目標的數目,TP是返回的正確的符合目標的,FN是未返回的符合目標 的數目,即未返回的預測正確的好人的數目,也即預測錯誤的壞人的個數的另一種解釋),注意與準確率和錯誤率(包含了預測正確的負向的那部分)相區別開。
(參考原文:https://blog.csdn.net/qq547276542/article/details/78274459?utm_source=copy )
二、NLP的兩個關鍵問題
選擇什麼樣的語言模型? 不同語言模型的區別,也就是對文字提取特徵的不同。
選擇什麼樣的分類演算法? 後續介紹
2.1 常用的語言模型及演算法介紹
語言模型的演化圖
這裡只講幾個簡單的模型原理,LSA等都是對基於BOW,利用TF,IDF等
A、Bag-of-words模型(BOW,詞袋模型)類
1,BOW模型
最初應用於文字處理領域,用來對文件進行分類和識別。BoW 模型因為其簡單有效的優點而得到了廣泛的 用。其基本原理可以用以下例子來給予描述。給定兩句簡單的文件:
文件 1:“我喜歡跳舞,小明也喜歡。”
文件 2:“我也喜歡唱歌。”
基於以上這兩個文件,便可以構造一個由文件中的關鍵片語成的詞典:
詞典={1:“我”,2:“喜歡”,3:“跳舞”,4:“小明”,5:“也”,6:“唱歌”}
這個詞典一共包含6個不同的詞語,利用詞典的索引號,上面兩個文件每一個都可以用一個6維向量表示(用整數數字0~n(n為正整數)表示某個單詞在文件中出現的次數。這樣,根據各個文件中關鍵詞出現的次數,便可以將上述兩個文件分別表示成詞向量的形式:
文件 1:[1, 2, 1, 1, 1, 0]
文件 2:[1, 1, 0, 0, 1, 1]
從上述的表示中,可以很清楚地看出來,在文件表示過程中並沒有考慮關鍵詞的順序,而是僅僅將文件看成是一些關鍵詞出現的概率的集合(這是Bag-of-words模型的缺點之一),每個關鍵詞之間是相互獨立的,這樣每個文件可以表示成關鍵詞出現頻率的統計集合。
2、基於Term frequency(TF) , Inverse document frequency(IDF), 以及TF-IDF的統計特徵的模型
這種語言模型主要是用詞彙的統計特徵來作為特徵集,每個特徵都能夠說得出物理意義,看起來會比bag-of-words效果好,但實際效果也差不多。其實也屬於基於BOW模型的一種。
詞頻 (term frequency, TF) 指的是某一個給定的詞語在該檔案中出現的次數。這個數字通常會被歸一化(一般是詞頻除以文章總詞數), 以防止它偏向長的檔案。
(N1為在某一類中詞條w出現的次數,N為該類中所有的詞條數目)
逆向檔案頻率 (inverse document frequency, IDF) IDF的主要思想是:如果包含詞條t的文件越少, IDF越大,則說明詞條具有很好的類別區分能力。某一特定詞語的IDF,可以由總檔案數目除以包含該詞語之檔案的數目,再將得到的商取對數得到。
(N3為語料庫的文件總數,NW為相應的包含詞條w的文件總數,+1是是為了防止分母為0,即一種最原始的平滑演算法,拉普拉斯平滑)
(參考:http://www.ruanyifeng.com/blog/2013/03/tf-idf.html)
3. LSA潛在語義分析–文字稀疏表示–>文字相似度度量、主題模型
瞭解了TF-IDF模型,我們得到了文字的基本向量化表示,即得到了文字的(特徵)向量,向量具有一定語義表達的能力。LSA正是在此基礎上挖掘文字的潛在語義,建構主題模型等。
遍歷語料庫,得到全部文字-單詞的權重矩陣,權重即上文所求TF-IDF值。建立文字-單詞權重矩陣X後,可以通過SVD奇異值矩陣分解的方式將矩陣X轉換為它的低秩逼近矩陣。可以去前k維作為主要特徵,實現資料降維(原矩陣X維度為N*M,M為語料詞彙總數)
其他BOW模型演算法如PLSA,可以參考https://blog.csdn.net/tiffanyrabbit/article/details/72650606
B、N-gram模型類
一種考慮了詞彙順序的模型,每個樣本轉移成了轉移概率矩陣。用來根據前(n-1)個item來預測第n個item。在應用層面,這些item可以是音素(語音識別應用)、字元(輸入法應用)、詞(分詞應用)或鹼基對(基因資訊)。一般來講,可以從大規模文字或音訊語料庫生成n-gram模型。 習慣上,1-gram叫unigram,2-gram稱為bigram,3-gram是trigram。還有four-gram、five-gram等,不過大於n>5的應用很少見。
理論依據例子:給定一串字母,如”for ex”,下一個最大可能性出現的字母是什麼。從訓練語料資料中,我們可以通過極大似然估計的方法,得到N個概率分佈:是a的概率是0.4,是b的概率是0.0001,是c的概率是。。。。
n-gram模型概率公式推導,根據條件概率和乘法公式:
得到
拿一個應用來講,假設T是由詞序列A1,A2,A3,…An組成的,那麼P(T)=P(A1A2A3…An)=P(A1)P(A2|A1)P(A3|A1A2)…P(An|A1A2…An-1) 如果直接這麼計算,是有很大困難的,需要引用馬爾科夫鏈的假設,即當前這個詞僅僅跟前面幾個有限的詞相關,因此也就不必追溯到最開始的那個詞,這樣便可以大幅縮減上訴算式的長度,即:一個item的出現概率,只與其前m個items有關,當m=0時,就是unigram,m=1時,是bigram模型(n元表示相鄰的n個詞之間是有關係的)。
因此,P(T)可以求得,例如,當利用bigram模型時,P(T)=P(A1)P(A2|A1)P(A3|A2)…P(An|An-1) 而P(An|An-1)條件概率可以通過極大似然估計求得,等於Count(An-1,An)/Count(An-1)。
n-gram的應用:文化研究(不瞭解)、分詞演算法、語音識別、輸入法、垃圾郵件識別。輸入法中例如搜狗輸入法如下,根據拼音判斷合理的句子,其實底層原理是根據概率算出最優的一些演算法。其實這個思想可以用在一些推薦策略上,根據概率算出。
N-gram計算原理:根據已有的(歷史)語料庫的詞句統計的概率或者次數來預測新的語句的概率,然後輸出概率最高的語句結果。
其應用例如搜尋引擎的提示答案(輸入一個關鍵詞,自動輸出幾個結果提示)。
NNLM等都是對N-gram模型進行訓練後延伸出的一些神經網路模型。
C、word embeding、Word2vec、 GloVe 、CBOW、skip-gram,one-hot,N-gram關係
word embedding 是一個將詞向量化的概念,詞嵌入。
Word2vec、 GloVe是 執行word embedding的具體演算法,是一種訓練演算法。
CBOW、skip-gram是Word2vec訓練演算法中用到的語言模型(通過神經網路訓練得到最後的詞向量矩陣)
one-hot是最初的得到詞向量的方法,n-gram是語言模型,這種語言模型和word2vec演算法中模型是並列的關係,只不過n-gram自己可以利用概率計算得到相關的應用結果,我認為也可以說n-gram是一種演算法。
上述這些都是圍繞著“詞向量”的概念的NLP演算法模型技術,都屬於淺層的方法,“效率換表達力”。
D、語言模型的遷移學習(預訓練語言模型)
預訓練的語言表徵經過精調後可以在眾多NLP任務中達到更好的表現,所以新出的這些預訓練演算法與模型是最新的技術發展概念,以及最新的BERT預訓練模型。通過遷移學習與特定的任務相結合的方式有2種
feature-based:訓練出的representation作為feature用於任務,也就是利用預訓練的語言模型獲得特徵向量,將其用於具體任務。新的ELMo也屬於這類,但遷移後需要重新計算出輸入的表徵。
fine-tuning:在預訓練的語言模型基礎上稍作改變,根據具體任務引入新的結構和引數,再次進行訓練。通過與預訓練語言模型的結合,許多原有的模型在任務上的效果進步提升。以閱讀理解為例,人類在做道閱讀理解題目時,並不僅僅從這篇文章,以及類似的閱讀理解任務(訓練集)中學習,而是會使用在此之前積累的各項知識。大規模語料預訓練的語言模型正是這種知識的積累。這個主要借鑑於CV,就是在預訓練好的模型上加些針對任務的層,再對後幾層進行精調。新的ULMFit和OpenAI GPT屬於這一類。
關於谷歌最新推出的BERT,全稱是Bidirectional Encoder Representation from Transformers,即雙向Transformer的Encoder,因為decoder是不能獲要預測的資訊的。模型的主要創新點都在pre-train方法上,即用了Masked LM和Next Sentence Prediction兩種方法分別捕捉詞語和句子級別的representation。關於BERT的模型介紹可參考:https://zhuanlan.zhihu.com/p/46652512