1. 程式人生 > >NLP學習記錄:語言模型

NLP學習記錄:語言模型

學習了cs224n之後,深感這門課更偏深度學習,因此僅學習這門課後NLP基礎不足,NLP領域的知識學習並不系統,基礎概念不清,感覺對於NLP領域的問題直覺不足,因此開始學習Michael Collins的NLP課程,結合此前學習的體悟寫一些綜合性的感想。

語言模型

對於一個含有有限個單詞的單詞庫V:
單詞庫
從中選取若干個單詞,以某種順序排列,最後加上STOP符結束,就可以生成一個語句,將所有這些語句的集合稱為V+:
這裡寫圖片描述
由於在NLP任務中,V本身已經很大,所以可以認為V+是無限大的。
語言模型就是要計算V+的概率分佈p的模型:
這裡寫圖片描述
從直覺上來說,符合語言規範和人類思維的語句的概率應該較高,而人類看著很荒唐的語句的概率應該很低。
那麼這個概率分佈如何計算呢?
先從最簡單的方式開始:
這裡寫圖片描述


其中N是訓練集中語句的個數,c指x1…xn詞序列的語句出現的次數。
顯然,這種計算方式對於訓練集的要求太高了,需要預測的語句均在訓練集中出現,且要有一定的頻率來計算合理的概率,這顯然是很沒有效率、效能也很差的方法。

馬爾科夫過程

對於一個長度為n的序列:X1,X2,X3…Xn,要計算:
這裡寫圖片描述
考慮概率的鏈式分解:
P(A,B)=P(A)P(B|A)
P(A,B,C)=P(A)P(B|A)P(C|A,B)
…….
有:
這裡寫圖片描述
假設:
這裡寫圖片描述
則:
這裡寫圖片描述
這個假設的意思就是某個單詞出現的概率只與前一個單詞有關,似乎是一個過強的假設,實際應用中用處不大,所以我們可以使用弱一些的假設:某單詞出現的概率與之前兩個單詞有關。那麼會得到:
這裡寫圖片描述


其中x0=x-1=*。
這樣,我們就得到了常用的trigram模型:
對於包含有限個單詞的集合V(包含STOP和*):
這裡寫圖片描述
其中xi屬於V,xn=STOP,x0=x-1=*。
例:
這裡寫圖片描述
那麼如何計算p呢?
一種最簡單的方式:
這裡寫圖片描述
由於在實踐中可能會遇到count=0,為了避免這種情況,可以使用linear interpolation 方法:
這裡寫圖片描述

RNN

(個人腦洞部分)
現在,讓我們看一下RNN的公式:
這裡寫圖片描述
其中,e是詞向量,x是one-hot向量。
實際上,RNN可以看作是利用一個單詞序列來預測下一個單詞的模型,在預測過程中序列中的每一個單詞都有不同的權重——前一個單詞乘了一個I,再前一個乘了IH,再前一個乘了IHH…….與上面的linear interpolation思想如出一轍。
那麼,RNN是如何計算概率p的呢?
RNN輸出中的概率源於詞向量。
回想詞向量的計算過程,以CBOW為例,我們使用視窗中的上下文單詞預測中心詞,訓練過程中利用概率最大化來更新詞向量,這個過程中賦予了詞向量預測其他單詞出現的概率的能力,而RNN本質上只是將這些概率資訊組合起來而已。
要注意,這個概率組合的基本單位不是詞向量,而是詞向量的每一個維度。
不同的RNN架構給予了模型不同的提取和組合概率的能力。
這裡寫圖片描述


普通RNN只能在詞向量上乘IHH……,顯然,越遠的單詞乘的矩陣越多,必然越難準確地發揮作用,所以,GRU和LSTM通過設定一些gate使得模型獲得更大的靈活度,稍遠的單詞可以比更近的單詞發揮更為主動的作用,這就增加了有效提取詞向量中資訊的能力。
在CNN上,“組合”的意味更濃,設想一個句法樹,第一層卷積層計算了基於filter的所有可能的組合,然後在第一層pooling層上篩選出最有價值的組合方式,此時就相當於是經過了句法樹中最底層的一層組合,之後還可以有更深更多的組合,直到完成一顆句法樹,獲得一個語句向量。
目前,出現了非常多基於RNN、CNN和注意力機制的模型,其本質都是對詞向量資訊的提取組合。

困惑度

困惑度是用來衡量語言模型效能的一種方式。
對於測試集中的m個語句:
s1,s2…..sm
這裡寫圖片描述
其中M是測試集中的單詞個數。
對於|V|=50000的V,有實踐經驗估計的困惑度
這裡寫圖片描述

相關推薦

NLP學習記錄語言模型

學習了cs224n之後,深感這門課更偏深度學習,因此僅學習這門課後NLP基礎不足,NLP領域的知識學習並不系統,基礎概念不清,感覺對於NLP領域的問題直覺不足,因此開始學習Michael Collins的NLP課程,結合此前學習的體悟寫一些綜合性的感想。

小資料、高準確率的文字分類利用遷移學習創造通用語言模型

作者 | Jeremy Howard、Sebastian Ruder 譯者 | Liu Zhiyong 編輯 | Natalie,Vincent AI 前線導讀:本文是對 Fast.ai 新論文的介紹,面向大眾讀者,闡述瞭如何自動對文件進行分類,同時比以前的方法具有更高

R語言學習記錄因子分析的R實現

時間: 2018-08-09(學習時間)、2018-08-12(記錄時間) 教程:知乎:Learn R | 資料降維之主成分分析(上)、Learn R | 資料降維之因子分析(下) 作者:Jason 資料來源:《應用多元統計分析》 王學民 編著 P261

深度學習語言模型的評估標準

語言模型的評估主要measure the closeness,即生成語言和真實語言的近似度。 Classification accuracy provides additional information about the

spaCy 學習 第二篇語言模型

文本 除了 rip exc 一個 tokenize 常見 ear one spaCy處理文本的過程是模塊化的,當調用nlp處理文本時,spaCy首先將文本標記化以生成Doc對象,然後,依次在幾個不同的組件中處理Doc,這也稱為處理管道。語言模型默認的處理管道依次是:tagg

學習記錄 安裝配置自動化工具ansible

ansible學習記錄: 安裝配置ansible更新日期: 2016-11-30系統環境 :centos6.5本機ip :192.168.233.123被管理機ip :192.168.233.124—————————————————————————————————————py版本

Linux 學習記錄七、fdisk 分區工具

net 硬盤 code sta play 交互 技術 無法使用 編碼表 一、fdisk分區工具 fdisk 是來自 IBM 的老牌分區工具,支持絕大多數操作系統,幾乎所有的 Linux 發行版都裝有 fdisk,包括在 Linux 的 resuce 模式下依然能夠使用。

學習記錄gcc/g++ 編譯與鏈接

分析 相互 you get 步驟 後臺開發 四個步驟 targe 生成 gcc/g++ 編譯與鏈接 編譯與鏈接的過程可以分解為四個步驟:預處理、編譯、匯編、鏈接 預處理:源代碼文件和相關的頭文件,被預處理器cpp預處理成一個後綴為 .i 的文件(選項:-E) 編譯:把預

全文搜索引擎ElasticSearch學習記錄mac下安裝

round -c segment 嘻嘻 沒有 mas nod tin AS   最近開發組培訓了ElasticSearch,準備開展新項目,我也去湊了下熱鬧,下面把學習過程記錄一下。 一、安裝   1、環境需要jdk1.8;   2、下載:http://www.elas

CSS學習筆記盒子模型

dev docs eve cti http box out rect per 盒子模型(CSS basic box model):When laying out a document, the browser‘s rendering engine represents ea

JSP學習記錄request物件

1.獲取請求引數的值 例如:首先建立一個index.jsp頁面,然後在其中加入一個超連結請求show.jsp頁面,並增加一個引數id <a href="show.jsp?id=001">獲取請求引數的值</a> 然後新建一個show.jsp頁面 <b

小程式學習記錄讀取discuz生成的json資料

  在discuz後臺資料庫中建表,testjson,並輸入兩條記錄: testjson.php: <?php if(!defined('IN_DISCUZ')) { exit('Access Denied'); } header("Content-Typ

HTTP學習記錄四、頭資訊(請求和響應)

學習資源主要為:@小坦克HTTP相關部落格 一、請求頭資訊(Request Header) 請求頭資訊包含比較多,如下: 1、Cache頭域   if-modified-Since   作用:把瀏覽器端快取頁面的最後修改時間傳送到伺服器去,伺服器會把這個時間與伺服器上的實際檔案的最後修改時間進行對比

學習筆記生成模型(待完善)

這一章,是書中最後的一章,我認為是概念最大的一章,看完這一章之後, 我很是欣慰啊,高興,總算是結束了,有種心理是,讓你虐我千百遍.我始終待你如初戀啊。 相關玻爾茲曼機的生成模型 @@1.玻爾茲曼機  @@2.RBM 受限玻爾茲曼機 ,簧風琴 @@3. DBN 深度信

Qt5學習記錄QString與int值互相轉換

1)QString轉int 直接呼叫toInt()函式 例: QString str("100"); int tmp = str.toInt(); 或者: bool ok; QString str("100"); int tmp = str.toInt(&

小程式學習記錄顯示陣列內容2

index.js: //index.js //獲取應用例項 const app = getApp() Page({ data: { arr: [{ text: "青青園中葵" },

Coursera 學習記錄Tomorrow never knows?(實現日期加一的操作)

描述 甲殼蟲的《A day in the life》和《Tomorrow never knows》膾炙人口,如果告訴你a day in the life,真的會是tomorrow never knows? 相信學了計概之後這個不會是難題,現在就來實現吧。 讀入一個格式為y

Coursera 學習記錄四大湖排序(使用bool值的小技巧)

描述 我國有4大淡水湖。 A說:洞庭湖最大,洪澤湖最小,鄱陽湖第三。 B說:洪澤湖最大,洞庭湖最小,鄱陽湖第二,太湖第三。 C說:洪澤湖最小,洞庭湖第三。 D說:鄱陽湖最大,太湖最小,洪澤湖第二,洞庭湖第三。 已知這4個湖的大小均不相等,4個人每人僅答對一個, 請程式設計

Coursera 學習記錄發票統計(使用switch進行資料歸類)

描述 有一個小型的報賬系統,它有如下功能: (1)統計每個人所報發票的總錢數 (2)統計每類發票的總錢數 將此係統簡化為如下:假設發票類別共有A、B、C三種;一共有三個人,ID分別為1、2、3。

Coursera 學習記錄流感傳染(關於二維陣列的標記和統計)

描述 有一批易感人群住在網格狀的宿舍區內,宿舍區為n*n的矩陣,每個格點為一個房間,房間裡可能住人,也可能空著。 在第一天,有些房間裡的人得了流感,以後每天,得流感的人會使其鄰居傳染上流感,(已經得病的不變),空房間不會傳染。請輸出第m天得流感的人數。 輸入 第一行一個數字n,n不超過100,表示有n