词向量

转自:http://licstar.net/archives/328#s22
C&W 的 SENNA

  Ronan Collobert 和 Jason Weston 在 2008 年的 ICML 上发表的《A Unified Architecture for Natural Language Processing: Deep Neural Networks with Multitask Learning》里面首次介绍了他们提出的词向量的计算方法。和上一篇牛文类似,如果现在要看的话,应该去看他们在 2011 年投到 JMLR 上的论文《Natural Language Processing (Almost) from Scratch》。文中总结了他们的多项工作,非常有系统性。这篇 JMLR 的论文题目也很霸气啊:从头开始搞 NLP。他们还把论文所写的系统开源了,叫做 SENNA(主页链接),3500 多行纯 C 代码也是写得非常清晰。我就是靠着这份代码才慢慢看懂这篇论文的。可惜的是,代码只有测试部分,没有训练部分。

  实际上 C&W 这篇论文主要目的并不是在于生成一份好的词向量,甚至不想训练语言模型,而是要用这份词向量去完成 NLP 里面的各种任务,比如词性标注、命名实体识别、短语识别、语义角色标注等等。
  
  由于目的的不同,C&W 的词向量训练方法在我看来也是最特别的。他们没有去近似地求 P(wt|w1,w2,,wt1)P(wt|w1,w2,,wt1) ,而是直接去尝试近似 P(w1,w2,,wt)P(w1,w2,,wt) 。在实际操作中,他们并没有去求一个字符串的概率,而是求窗口连续 n个词的打分 f(wtn+1,,wt1,wt)f(wtn+1,,wt1,wt) 。打分 ff 越高的说明这句话越是正常的话;打分低的说明这句话不是太合理;如果是随机把几个词堆积在一起,那肯定是负分(差评)。打分只有相对高低之分,并没有概率的特性。有了这个对 f 的假设,C&W 就直接使用 pair-wise 的方法训练词向量。具体的来说,就是最小化下面的目标函数。
xXwDmax{0,1f(x)+f(x(w))}
  
   X 为训练集中的所有连续的 n 元短语,D 是整个字典。第一个求和枚举了训练语料中的所有的 n 元短语,作为正样本。第二个对字典的枚举是构建负样本。 x(w) 是将短语 x 的最中间的那个词,替换成 w。在大多数情况下,在一个正常短语的基础上随便找个词替换掉中间的词,最后得到的短语肯定不是正确的短语,所以这样构造的负样本是非常可用的(多数情况下确实是负样本,极少数情况下把正常短语当作负样本也不影响大局)。同时,由于负样本仅仅是修改了正样本中的一个词,也不会让分类面距离负样本太远而影响分类效果。再回顾这个式子, x 是正样本,x(w)是负样本, f(x) 是对正样本的打分, f(x(w)) 是对负样本的打分。最后希望正样本的打分要比负样本的打分至少高 1 分。

   f 函数的结构和 Bengio 2003 中提到的网络结构基本一致。同样是把窗口中的 n 个词对应的词向量串成一个长的向量,同样是经过一层网络(乘一个矩阵)得到隐藏层。不同之处在于 C&W 的输出层只有一个节点,表示得分,而不像 Bengio 那样的有|V|个节点。这么做可以大大降低计算复杂度,当然有这种简化还是因为 C&W 并不想做一个真正的语言模型,只是借用语言模型的思想辅助他完成 NLP 的其它任务。(其实 C&W 的方法与 Bengio 的方法还有一个区别,他们为了程序的效率用 HardTanhHardTanh 代替 tanhtanh 激活函数。)

  他们在实验中取窗口大小 n=11,字典大小 |V|=130000,在维基百科英文语料和路透社语料中一共训练了 7 周,终于得到了这份伟大的词向量。
  如前面所说 C&W 训练词向量的动机与其他人不同,因此他公布的词向量与其它词向量相比主要有两个区别:
  1.他的词表中只有小写单词。也就是说他把大写开头的单词和小写单词当作同一个词处理。其它的词向量都是把他们当作不同的词处理的。
  2.他公布的词向量并不直接是上述公式的优化结果,而是在此基础上进一步跑了词性标注、命名实体识别等等一系列任务的 Multi-Task Learning 之后,二次优化得到的。也可以理解为是半监督学习得到的,而非其他方法中纯无监督学习得到的。

  不过好在 Turian 在 2010 年对 C&W 和 M&H 向量做对比时,重新训练了一份词向量放到了网上,那份就没上面的两个“问题”(确切的说应该是差别),也可以用的更放心。后面会详细介绍 Turian 的工作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值