自然语言处理自学笔记-02 Word2vec——基于神经网络学习单词表示
Word2vec
Word2vec通过查看单词上下文并以数字方式表示它,来学习给定单词的含义。“上下文”指目标单词前面和后面的固定数量的单词。比如包含 w 0 , w 1 , . . . , w i , . . . , w n w_0,w_1,...,w_i,...,w_n w0,w1,...,wi,...,wn的 n n n个单词的语料库。在给定单词 w i w_i wi之后,可以预测上下文单词。这意味着对于任何给定的单词 w i w_i wi,以下的概率较高:
P ( ω i − m , ω i − 1 , ω i + 1 , . . . , ω i + m ∣ ω i ) = ∏ j ≠ i Λ j = i − m i + m P ( ω j ∣ ω i ) P({
{\omega }_{i-m}},{
{\omega }_{i-1}},{
{\omega }_{i+1}},...,{
{\omega }_{i+m}}|{
{\omega }_{i}})=\prod\limits_{j\ne i\Lambda j=i-m}^{i+m}{P({
{\omega }_{j}}|{
{\omega }_{i}})} P(ωi−m,ωi−1,ωi+1,...,ωi+m∣ωi)=j=iΛj=i−m∏i+mP(ωj∣ωi)
定义损失函数
在现实世界,词汇量会轻易超过10000个单词。因此需要机器学习算法自动找到好的词嵌入。这样任务就变成了让损失最小化。为神经网络定义成本函数如下:
J ( θ ) = − ( 1 / N − 2 m ) ∑ i = m + 1 N − m ∏ j ≠ i Λ j = i − m i + m P ( ω j ∣ ω i ) J(\theta )=-(1/N-2m)\sum\limits_{i=m+1}^{N-m}{\prod\limits_{j\ne i\Lambda j=i-m}^{i+m}{P({
{\omega }_{j}}|{
{\omega }_{i}})}} J(θ)=−(1/N−2m)i=m+1∑N−mj=iΛj=i−m∏i+mP(ωj∣ωi)
我们想要是 P ( w j ∣ w i ) P(w_j|w_i) P(wj∣wi)最大化,需要在上式前面加一个负号将其转化为损失函数。
将上式转化为对数空间,可得:
J ( θ ) = − ( 1 / N − 2 m ) ∑ i = m + 1 N − m ∏ j ≠ i Λ j = i − m i + m l o g P ( ω j ∣ ω i ) J(\theta )=-(1/N-2m)\sum\limits_{i=m+1}^{N-m}{\prod\limits_{j\ne i\Lambda j=i-m}^{i+m}{logP({
{\omega }_{j}}|{
{\omega }_{i}})}} J(θ)=−(1/N−2m)i=m+1∑N−mj=iΛj=i−m∏i+mlogP(ωj∣ωi)
上式被称为“负对数似然”。
skip-gram算法
从原始文本到结构化数据
可以送入学习模型的数据集,应是格式为(输入,输出)的一组元祖。而且需要以无监督的方式创建。数据准备过程需要执行以下操作:
- 获得给定的单词的周围单词
- 以无监督的方式执行
skip-gram的创建方式为:
1.对于给定的单词 w i w_i wi,假设上下文窗口大小为m。对于 w i w_i wi,上下文窗口的大小为2m+1,即 [ w i − m , . . . , w i − 1 , w i , w i + 1 , . . . , w i + m ] [w_{i-m},...,w_{i-1},w_i,w_{i+1},...,w_{i+m}] [wi−m,...,wi−1,wi,wi+1,...,wi+m]。
2.输入输出元祖的格式为 [ . . . ,