Word2Vec的一些个人学习心得

本文只从原理上进行推导公式,尽量使用通俗易懂的语言进行讲解。

预备知识

详见word2vec中的数学原理详解
- sigmoid函数
- logistics回归
- Bayes公式
- Huffman编码


词向量的理解

在NLP任务中,我们将自然语言交给机器学习算法来处理,但是机器无法直接理解文本语言,我们要做的工作就是将语言数学化,简单来说,就是为每个词进行唯一的编码,这个唯一编码也称之为词向量。有两种词向量的表示方法:

  • One-hot represention。
    基本思想是:通过训练将某种语言中的每一个词映射成一个固定长度的短向量,这个短向量除了某一维为1之外,其他元素全部为0。
  • Distributed represention。
    基本思想与One-hot represention相似,但是每个短向量有大量非零分量。Distributed represention其实就是把一起稀疏矩阵变成了一个稠密矩阵。

词向量,通俗来讲,就是对语料库中每个词的编码


统计语言模型

统计语言模型是用来计算一个句子出现的概率的概率模型。假设 W=wT1:=(w1,w2,,wT) 表示有T个词 w1,w2,,wT 按顺序构成一个句子,则 w1,w2,,wT 的联合概率密度

p(W)=p(wT1)=p(w1,w2,,wT)

利用Bayes公式,上式可以被链式分解为
p(wT1)=p(w1)(w2|w1)(w3|w21)p(wT|wT11)

其中的概率 p(w1),p(w2|w1),,p(wT|wT11) 就是语言模型的参数,给定一个句子 wT1 就可以很快地算出相应的 p(wT1)
接下来是怎么计算这些参数的问题了,常见的方法有n-gram模型、决策树、最大熵模型、最大熵马尔科夫模型、条件随机场、神经网络等方法。
我们先考虑n-gram模型。


n-gram模型

考虑 p(wk|wk11)(k>1) 的计算。利用Bayes公式,有

p(wk|wk11)=p(wk1)p(wk11)(1)

根据大数定理,当语料库足够大的时候, p(w1|wk11) 可近似地表示为
p(w1|wk11)=count(wk1)count(wk11)

其中 count(wk1) count(wk11) 分别表示词串 wk1 wk11 在语料库中出现的次数。
这样计算虽然简单了许多,但是依旧很耗时,接下来应该是n-gram模型出场了。
从公式(1)我们可以看出,一个词出现的概率与它前面所有的词都相关。我们可不可以假定一个词出现的概率只与它前面固定数目的词相关呢?根据 n-1阶的Markov假设,认为一个词的出现概率只与它前面的n-1个词相关,即
p(wk|wk11)p(wk1kn+1)

于是,
p(wk|wk11)count(wkkn+1)count(wk1kn+1)

这便是n-gram模型了。


神经网络模型

机器学习领域通常这么解决一个问题:对所考虑的问题建模后先为其构造一个目标函数,然后对这个目标函数进行优化,从而求得一组最优参数,最后利用这组最优参数对应的模型来进行预测。
对于统计语言模型而言,利用最大似然,可把目标函数定义为

wClog(p(w|Context(w)))(2)

其中 C 表示语料(Corpus), Context(w) 表示词 w 的上下文,即其周边的词的集合。对于n-gram模型来说 Context(wi)=wi1in+1
实际应用中我们常采用 最大对数似然,
L=wClogp(w|Context(w))(3)

然后对这个函数进行最大化。
从公式(3)可见,概率 p(w|Context(w)) 已被视为关于 w Context(w) 的函数,即
p(w|Context(w))=F(w,Context(w),θ)

其中 θ 为待定参数集。
很显然,这种方法的最关键的地方在于 函数F的构造了。接下来我们可以进入正题了。
废话少说,先上图
这里写图片描述

神经网络主要包含四个层:输入层、投影层、隐藏层、输出层。其中W,U分别表示为投影层与隐藏层以及隐藏层和输出层之间的权值矩阵,p、q分别表示隐藏层和输出层上的偏置向量。

对于语料库 C 中的任何一个词 w ,将 Context(w) 取为其前面的n-1个词,这样对于一个二元对 (Context(w),w) 就是一个训练样本了。

注意,一旦语料库和词向量长度给定后,投影层和输出层的规模就确定了,前者为(n-1)m,后者为 N=|D| 即语料 C 的词汇量大小。而隐藏层的规模 nh 是可调参数,由用户指定。
为什么投影层的规模是(n-1)m呢?因为输出层包含 Context(w) 中n-1个词,而投影层的向量 Xw 是这样构造的:将输入层的n-1个词向量按顺序首尾相连地拼起来形成一个长向量,其长度当然是(n-1)m了。接下来

{ zw=tanh(WXw+p)yw=UZw+q(4)

其中tanh为双曲正切函数,用来作隐藏层的激活函数,上式中,tanh作用在向量上表示它用在向量的每一个分量上。

经过上述两步的计算得到 yw=(yw,1,yw,2,,yw,N) 只是一个长度为N的向量,其分量不能表示概率,如果想要其分量表示当上下文为 Context(w) 时下一个词恰为词典 D 第i个词的概率,则需要做一个softmax归一化,即

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值