05.序列模型 W2.自然語言處理與詞嵌入
參考:
吳恩達視訊課
深度學習筆記
自然語言處理與詞嵌入
Natural Language Processing and Word Embeddings
1. 詞彙表徵
詞嵌入(word embeddings),這是語言表示的一種方式,可以讓演算法自動的理解一些類似的詞,比如 男人對女人,比如 國王對王后
one-hot 向量來表示詞,缺點:它把每個詞孤立起來,演算法對相關詞的泛化能力不強(每兩個詞之間的向量內積都是0)
2. 使用詞嵌入
用詞嵌入做遷移學習的步驟:
-
從大量的文字集中學習詞嵌入。或者下載網上預訓練好的詞嵌入模型
-
用詞嵌入模型把它遷移到你的新的只有少量標註訓練集的任務中
例如,用這個300維的詞嵌入來表示你的單詞,代替原來的10000維的one-hot向量 -
新的任務訓練模型時,你可以選擇要不要繼續微調,用新的資料調整詞嵌入。實際中,只有第二步中有很大的資料集你才會這樣做,如果資料集不是很大,通常不會在微調詞嵌入上費力氣(你的資料很小,微調詞嵌入,效果也不明顯)
詞嵌入 在語言模型、機器翻譯領域用的少一些,因為這些任務你有大量的資料(可用於訓練,不必使用遷移)
人臉識別中的人臉Encoding演算法,未來可能涉及到海量的人臉照片
而自然語言處理 有一個固定的詞彙表 embedding,而像一些沒有出現過的單詞我們就記為 未知單詞UNK
總結:
用詞嵌入來實現遷移學習,拋棄原來的one-hot表示,而是用之前的嵌入的向量,你的演算法會泛化的更好,你也可以從較少的標記資料中進行學習
3. 詞嵌入的特性
找到一個單詞
w
:
argmax
Similarity
(
e
w
,
e
king
−
e
man
+
e
woman
)
w : \operatorname{argmax} \operatorname{Similarity}\left(e_{w}, e_{\text {king }}-e_{\operatorname{man}}+e_{\text {woman }}\right)
w:argmaxSimilarity(ew,eking −eman+ewoman )
通過這種方法來做類比推理準確率大概只有30%~75%
還有餘弦相似度(夾角):
sim ( u , v ) = c o s ( θ ) = u T v ∣ u ∣ ∣ 2 ∣ ∣ v ∣ ∣ 2 \operatorname{sim}(u, v)= cos(\theta) = \frac{u^{T} v}{\left.|u|\right|_{2}|| v||_{2}} sim(u,v)=cos(θ)=∣u∣∣2∣∣v∣∣2uTv
4. 嵌入矩陣
我們的目標是學習一個嵌入矩陣。
我們將隨機地初始化矩陣,然後使用梯度下降法來學習這個300×10000
的矩陣中的各個引數,然後取出你需要的列
5. 學習詞嵌入
如果想建立一個語言模型,用目標詞的前幾個單詞作為上下文是常見做法
如果你的目標是學習詞嵌入,那麼你就可以用這些其他型別的上下文(下圖所示),也能得到很好的詞嵌入
6. Word2Vec
p
(
t
∣
c
)
=
e
θ
t
T
e
c
∑
j
=
1
10
,
000
e
θ
j
T
e
c
p(t \mid c)=\frac{e^{\theta_{t}^{T} e_{c}}}{\sum_{j=1}^{10,000} e^{\theta_{j}^{T} e_{c}}}
p(t∣c)=∑j=110,000eθjTeceθtTec
L ( y ^ , y ) = − ∑ i = 1 10 , 000 y i log y ^ i L(\hat{y}, y)=-\sum_{i=1}^{10,000} y_{i} \log \hat{y}_{i} L(y^,y)=−i=1∑10,000yilogy^i
為了解決 softmax 對分母求和很慢的問題:
- 採用 分級(hierarchical)的softmax分類器、負取樣(Negative Sampling)
如果對上下文進行隨機均勻取樣,像 the、of、a、and、to 之類出現得相當頻繁,於是你會發現你的上下文到目標詞的對映會相當頻繁地得到這些種類的詞。
實際上,詞 p ( c ) p(c) p(c) 的分佈並不是單純的在訓練集語料庫上均勻且隨機的取樣得到的,而是採用了不同的分級來平衡更常見的詞和不那麼常見的詞
以上就是 Word2Vec 的其中一種 Skip-Gram 模型,另一個叫做CBOW,即連續詞袋模型(Continuous Bag-Of-Words Model),它獲得中間詞兩邊的上下文,然後用周圍的詞去預測中間的詞,這個模型也很有效
總結下:CBOW是從原始語句推測目標字詞;而Skip-Gram正好相反,是從目標字詞推測出原始語句。
CBOW對小型資料庫比較合適,而Skip-Gram在大型語料中表現更好
7. 負取樣
構造一個新的監督學習問題,就是給定一對單詞,比如orange和juice,要去預測這是否是一對上下文詞-目標詞(context-target)
選取負樣本採用經驗分佈:
P ( w i ) = f ( w i ) 3 4 ∑ j = 1 10 , 000 f ( w j ) 3 4 P\left(w_{i}\right)=\frac{f\left(w_{i}\right)^{\frac{3}{4}}}{\sum_{j=1}^{10,000} f\left(w_{j}\right)^{\frac{3}{4}}} P(wi)=∑j=110,000f(wj)43f(wi)43
因為在softmax分類器中計算成本很高。本節我們學到了如何通過將其轉化為一系列二分類問題使你可以非常有效的學習詞向量。
當然網上也有別人預訓練過的詞向量,你想要在NLP問題上取得快速進展,去下載他人的詞向量是很好的方法,在此基礎上改進
8. GloVe 詞向量
GloVe代表用詞表示的全域性變數(global vectors for word representation)
對於GloVe演算法,我們可以定義上下文和目標詞為任意兩個位置相近的單詞,假設是左右各10詞的距離,那麼 X i j X_{ij} Xij 就是一個能夠獲取單詞 i i i 和單詞 j j j 出現位置相近時或是彼此接近的頻率的計數器
GloVe模型做的就是進行優化,我們將他們之間的差距進行最小化處理:
minimize
∑
i
=
1
10
,
000
∑
j
=
1
10
,
000
f
(
X
i
j
)
(
θ
i
T
e
j
+
b
i
+
b
j
′
−
log
X
i
j
)
2
\operatorname{minimize} \sum_{i=1}^{10,000} \sum_{j=1}^{10,000} f\left(X_{i j}\right)\left(\theta_{i}^{T} e_{j}+b_{i}+b_{j}^{\prime}-\log X_{i j}\right)^{2}
minimizei=1∑10,000j=1∑10,000f(Xij)(θiTej+bi+bj′−logXij)2
9. 情感分類
情感分類一個最大的挑戰就是可能標記的訓練集沒有那麼多。
對於情感分類任務來說,訓練集大小從10,000到100,000個單詞都很常見,甚至有時會小於10,000個單詞,採用了詞嵌入能夠帶來更好的效果(泛化好),尤其是隻有很小的訓練集時。
10. 詞嵌入除偏
根據訓練模型所使用的文字,詞嵌入能夠反映出性別、種族、年齡、性取向等其他方面的偏見,修改學習演算法來儘可能減少或是理想化消除這些非預期型別的偏見是十分重要的
- 定位偏見
- 中和,減少兩個詞在某個軸上的距離
- 均衡,將兩個詞移至與中間軸線等距的一對點上
作業
待寫,見下一篇
我的CSDN部落格地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
相關文章
- 自然語言處理:分詞方法自然語言處理分詞
- 自然語言處理之jieba分詞自然語言處理Jieba分詞
- 探索自然語言處理:語言模型的發展與應用自然語言處理模型
- 自然語言處理NLP(6)——詞法分析自然語言處理詞法分析
- 自然語言處理之序列標註問題自然語言處理
- 詞!自然語言處理之詞全解和Python實戰!自然語言處理Python
- 自然語言處理中的語言模型預訓練方法自然語言處理模型
- 自然語言處理與情緒智慧自然語言處理
- NPL---自然語言處理單詞界定問題自然語言處理
- 入門自然語言處理必看:圖解詞向量自然語言處理圖解
- Pyhanlp自然語言處理中的新詞識別HanLP自然語言處理
- 自然語言處理工具pyhanlp分詞與詞性標註自然語言處理HanLP分詞詞性標註
- 自然語言處理中的分詞問題總結自然語言處理分詞
- Python 自然語言處理(基於jieba分詞和NLTK)Python自然語言處理Jieba分詞
- NLP自然語言處理中的hanlp分詞例項自然語言處理HanLP分詞
- Hanlp自然語言處理中的詞典格式說明HanLP自然語言處理
- 自然語言處理(NLP)系列(一)——自然語言理解(NLU)自然語言處理
- 精通Python自然語言處理 4 :詞性標註--單詞識別Python自然語言處理詞性標註
- 牛津大學xDeepMind自然語言處理 第13講 語言模型(3)自然語言處理模型
- 自然語言處理NLP(四)自然語言處理
- 自然語言處理(NLP)概述自然語言處理
- HanLP 自然語言處理 for nodejsHanLP自然語言處理NodeJS
- 從語言學角度看詞嵌入模型模型
- Python自然語言處理實戰(3):中文分詞技術Python自然語言處理中文分詞
- [譯] 自然語言處理真是有趣!自然語言處理
- 如何用Python處理自然語言?(Spacy與Word Embedding)Python
- Python自然語言處理實戰(4):詞性標註與命名實體識別Python自然語言處理詞性標註
- NLP自然語言處理中英文分詞工具集錦與基本使用介紹自然語言處理分詞
- 牛津大學xDeepMind自然語言處理 第9講(下)語音模型自然語言處理模型
- 自然語言處理NLP快速入門自然語言處理
- 配置Hanlp自然語言處理進階HanLP自然語言處理
- 自然語言處理的最佳實踐自然語言處理
- 人工智慧 (06) 自然語言處理人工智慧自然語言處理
- Pytorch系列:(六)自然語言處理NLPPyTorch自然語言處理
- 精通Python自然語言處理 2 :統計語言建模Python自然語言處理
- 《NLP漢語自然語言處理原理與實踐》學習四自然語言處理
- 中國語文(自然語言處理)作業自然語言處理
- 自然語言處理怎麼最快入門?自然語言處理