cw2vec解析及代码实现

序言

cw2vec来自于蚂蚁金服的论文:《cw2vec: Learning Chinese Word Embeddings with Stroke n-gram Information》,本文主要对论文中的一些关键点进行解析,并讲解pytorch版本实现。

一、相关知识

词向量算法是自然语言处理领域的基础算法,在序列标注、问答系统和机器翻译等诸多任务中都发挥了重要作用。词向量算法最早由谷歌在2013年提出的word2vec。目前已经存在很多的词向量模型,但是较多的词向量模型都是基于西方语言,如英语,西班牙语,德语等,这些西方语言的内部组成都是拉丁字母,然而,由于中文特殊书写和构词方式,现有的很多模型不能直接在中文上使用或者效果比较差。因此,如何有效利用中文字符内部的语义信息来训练词向量,成为近些年研究的热点。

二、word2vec的原理

在word2vec出现之前,已经有用神经网络DNN来用训练词向量进而处理词与词之间的关系了。采用的方法一般是一个三层的神经网络结构(当然也可以多层),分为输入层,隐藏层和输出层(softmax层)。谷歌基于之前的工作基础提出了两种模型CBOW(Continuous Bag-of-Words) 与Skip-Gram两种模型。

1.CBOW(Continuous Bag-of-Words)

CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。比如下面这段话,我们的上下文大小取值为4,特定的这个词是"Learning",也就是我们需要的输出词向量。上下文对应的词有8个,前后各4个,这8个词是我们模型的输入。由于CBOW使用的是词袋模型,因此这8个词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在我们上下文之内即可。

这样我们这个CBOW的例子里,我们的输入是8个词向量,输出是所有词的softmax概率(训练的目标是期望训练样本特定词对应的softmax概率最大),对应的CBOW神经网络模型输入层有8个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某8个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax激活函数找到概率最大的词对应的神经元即可。

2.Skip-Gram模型

Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。还是上面的例子,我们的上下文大小取值为4, 特定的这个词"Learning"是我们的输入,而这8个上下文词是我们的输出。

skip-gram和CBOW模型对比

3.优化方案 

但是直接基于上述两个模型进行训练速度很慢,计算了很大,因此word2vec作者继续提出了两种优化方案:基于Hierarchical Softmax的模型和基于Negative Sampling的模型。本文不对着两个部分进行展开,有兴趣可以参考该系列http://www.cnblogs.com/pinard/p/7249903.html。cw2vec使用基于negative sampling的skip-gram模型进行构建,接下来将讲述cw2vec的具体内容。

三、cw2vec

通过观察中文字符内部组成,发现中文字符包含偏旁部首、字符组件,笔画信息等语义信息特征(如下图),基于偏旁部首和汉字组件特征的中文词向量模型已经有人提出,并取得了较好的效果。

cw2vec采用笔画信息作为特征,由于每个字符包含很多的笔画,类似于一个英文单词包含很多的拉丁字母,在这个基础之上,提出了笔画的n-gram特征,此思想来源于Facebook,与fasttext异曲同工。

1.词语分割

如:

大人:大  |  人

2.笔画表示

将中文词组拆分成单个中文字,然后使用笔画分别表示每个字,再组成词的笔画表示。

如:大人

大: 一ノ丶
人: ノ丶
大人: 一ノ丶 ノ丶

3.笔画特征数字化

论文中将笔画用对应的编码代替,具体的对应关系如下:

 4.提取n-gram特征

论文中取了3、4、5三个n-gram对应的特征进行组合,如:

大人: 一ノ丶 ノ丶

大人:13432

n-gram特征:134、343、432、1343、3432、13432

5、cw2vec模型

cw2vec在skip-gram基础之上进行改进,把词语的n-gram笔画特征信息代替词语进行训练,cw2vec模型如下图。

短语:治理 雾霾 刻不容缓
中心词:雾霾
上下文词:治理,刻不容缓

 6.pytorch实现

https://github.com/zhang2010hao/cw2vec-pytorch

 

四、参考

1.cw2vec: Learning Chinese Word Embeddings with Stroke n-gram Information

2.http://www.cnblogs.com/pinard/p/7249903.html

3.https://blog.csdn.net/quxing10086/article/details/80332538

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值