文本表示方法Parts3
word2Vec模型
語言模型+訓練算法
自然語言處理最細的粒度是詞語,詞語是人類的抽象總結,是一種符號,對計算機而言是無法識別的。因此,要先把詞語表示成可以讓計算機識別並處理的數字或向量,這個過程叫做詞嵌入(word Embedding)方法。
word2Vec模型 |
|
|
語言模型 |
CBOW:預測目標單詞 |
SG:預測上下文 |
訓練算法 |
Hierachical Softmax |
Negtive Sampling |
基本思想
word2vec模型背後的基本思想是出現在上下文環境裏的詞進行預測。對於每一條輸入文本,選取一個上下文窗口和一箇中心詞,並基於中心詞去預測窗口裏其他詞出現的概率。
符號說明:w(t)代表當前詞語在句子中位置t,其他記號同理。在這兩種語言模型的示意圖中,窗口大小爲5,除了當前詞語之外的其他詞語共同構成上下文。
- Word2Vec模型實際上分爲了兩個部分,第一部分是建立模型,第二部分是通過模型獲取嵌入詞向量。
- Word2Vector的整個建模過程實際上與自編碼器的思想很相似,即先基於訓練數據構建一個神經網絡,當這個模型訓練好以後,我們並不會以這個訓練好的模型處理新的任務,我們真正需要的是這個模型通過訓練數據所學的的參數,例如隱層的權重矩陣。後面我們將會看到這些權重在Word2Vec中實際上就是我們試圖去學習的「word vectors」。
如果看不懂的話,還有更白話的解釋,神仙指路。
語言模型
- 在統計自然語言處理中,語言模型指的是計算一個句子的概率模型。傳統的語言模型中詞的表示是原始的、面向字符串的、兩個語義相似地詞的字符串可能完全不同,比如「土豆」和「洋芋」。字符串本身無法儲存語義信息。
- 神經概率語言模型(Neuaral Probabilistic Language
Model)中詞的表示是向量形式、面向語義的。是一種有監督的機器學習模型。
語言模型CBOW
sample
{(Context(w),w)∣w∈C}
model
y=f(x)
goal: 基於訓練集數據用機器學習算法得到語言模型f。這樣做的好處是:利用這個f的模型參數得到輸入x的某種向量化表示。
最大化對數似然函數
L=w∈C∑logP(w∣Context(w))
其中w表示語料庫C中任意一個詞。
- Input(輸入層)是下文詞語的詞向量(什麼!我們不是在訓練詞向量嗎?不不不,我們是在訓練CBOW模型,詞向量只是個副產品,確切來說,是CBOW模型的一個參數。訓練開始的時候,詞向量是個隨機值,隨着訓練的進行不斷被更新)
- Projection(投影層)對其求和,所謂求和,就是簡單的向量加法。
- Output(輸出層)輸出最可能的w。由於語料庫中詞彙量是固定的|C|個,所以上述過程其實可以看做一個多分類問題。給定特徵,從|C|個分類中挑一個。
解決基於神經網絡模型的多分類問題常用方法是softmax迴歸。
⎣⎢⎢⎡p(y(i)=1∣x(i);θ)p(y(i)=2∣x(i);θ)...p(y(i)=k∣x(i);θ)⎦⎥⎥⎤=∑j=1keθjTx(i)1⎣⎢⎢⎢⎡eθjTx(1)eθjTx(2)...eθjTx(n)⎦⎥⎥⎥⎤
也就是說,softmax迴歸需要對語料庫中每個詞語(類)都計算一遍輸出概率並進行歸一化。(一個詞一個類 ????這。。)因此,
爲了避免要計算所有詞的softmax概率,word2vec採樣了霍夫曼樹來代替從隱藏層到輸出softmax層的映射。
CBOW模型的網絡輸出層就是一個霍夫曼樹。
非葉子節點相當於一個神經元(感知機,邏輯斯諦迴歸就是感知機的輸出帶入
f(x)=1+ex1),二分類決策輸出1或者0,分別代表向下左轉或向下右轉;每個葉子節點代表語料庫中的一個詞語,於是每個詞語都可以被01唯一地編碼,並且其編碼序列對應一個事件序列,於是我們可以計算條件概率
P(w∣Context(w))具體的推算過程可見數學推導。
語言模型Skip-grams
舉例說明Skip-grams過程:
假如我們有一個句子「The dog barked at the mailman」。
1、首先我們選句子中間的一個詞作爲我們的輸入詞,例如我們選取‘doa’作爲input word,稱其爲中心詞;
2、有了中心詞,我們再設置一個skip_window
的參數,它代表着我們從當前input word的一側(左邊或者右邊)選取詞的數量,稱其爲窗口大小。如果我們設置skip_window = 2,那我們最終獲得窗口的詞就是[‘The’, ‘dog’,‘barked’,‘at’]。skip_window = 2代表着選取左input word左側2個詞和右側2個詞進入我們的窗口,所以整個窗口大小span = 2*2=4。中心詞兩側的詞稱其爲背景詞。另一個參數叫做num_skips,它代表着我們從整個窗口中選取多少個不同的詞作爲我們的output word。語料庫中的每一個詞都有兩種身份,中心詞或者背景詞。
3、神經網絡基於這些訓練數據將會輸出一個概率分佈,這個概率代表着我們的詞典中每個詞作爲input word的ouput word 的可能性。
- 模型構建:
sample
{(w,Context(w))∣w∈C}
model
y=f(x)
goal: 基於訓練集數據用機器學習算法得到語言模型f。這樣做的好處是:利用這個f的模型參數得到輸入x的某種向量化表示。