Character and Word Embedding读书报告

本文总结了论文CWE:Joint Learning of Character and Word Embeddings中的核心思想。

导语

论文《Joint Learning of Character and Word Embeddings》是刘知远老师团队2015年在顶会Ijcai上发表的,在词向量生成部分进行了改进,引入了单个汉字的信息(论文主要针对的是中文),提升了词向量生成的质量。因为模型名称叫做“character-enhanced word embeddding model”,故模型简称为CWE。
从论文的题目可以看出,这篇paper在进行词向量训练的时候,把组成词语的汉字单独抽取出来,和词语一起进行训练。这样就使那些共享汉字的词语之间产生了联系,因为paper的假设是“semantically compositional”的词语中的汉字对词语的意思具有一定的表征作用,比方说词语“智能”。但是在汉语中并不是所有的词语都是semantically compositional,比方说一些音译词“巧克力”,“沙发”,再比方说一些实体的名称,比方说一些人名、地名和国家名。在这些词语中,单个汉字的意思可能和本来这个词语要表达的意思是完全没有关系的。在本篇paper中,作者做了大量的工作去把这些没有semantically compositional性质的词语全部人工的挑选出来,对于这些词语不去进行单个字的拆分处理。

模型

此处输入图片的描述
这篇文章提出的模型是在word2vec的CBOW模型基础上改进而来,模型的优化函数:

其中,

在CBOW模型中,context的表示是$w_i$前后窗口内的词向量的相加求均值。

而在CWE模型中,对于context中的词语的表征,一方面来自于词向量,还有一部分在自于这些词语中的字的向量,具体的计算方式如下:

其中,其中,$N_j$是单词$w_j$中的汉字个数,$c_k$是字向量。$\oplus$对应的操作有拼接和相加两种方式,paper里说拼接方式虽然增加了模型的复杂度,但是对于效果的提升并不明显,因此后面的模型中直接就采用了相加的方式,公式如下所示:

注意上述公式中的$\frac{1}{2}$非常重要,它保证了具有semantically compositional的词语和不具有semantically compositional词语在计算距离时的一致性。同时paper指出,为了简化起见只对context的生成考虑字向量信息,target部分不予考虑。其中对于$\sum_{k=1}^{N_j}c_k$计算部分只是把一个词语中的汉字向量进行等权相加,如果利用attention机制,可能效果更好。

单字不同语义的解决办法

同一个汉字,在不同的词语中可能具有完全不同的语义,如果使用一个向量来表征一个字,那么很可能会无法标识出这些差异性,故使用多个向量来表征同一个汉字,有下面几种方式:

Position-based Character Embedding

从名字可以看出,在该模型中同一个汉字根据其在词语中出现的位置不同,对应不同位置的向量表示形式。分析可知,汉字在词语中出现的位置有:Begin,Middle,End这三种情况,故每一个汉字都有三种向量表示形式,在进行$xj=\frac{1}{2}(w_j+\frac{1}{N_j}\sum{k=1}^{N_j}c_k)$ 生成向量操作的时候,对于$c_k$按照其在词语中出现的位置进行合理的筛选。这种方式比较简单,但是缺点也是比较明显的,它假设的前提是同一个汉字只要位于不同单词的同一个位置就具有相同的语义,这显然在一些情况下是不成立的。

Cluster_based Character Embedding

这种方法看的不是很懂,简单来讲就是:对于每一个汉字提前分配x个字向量,称之为模式向量。利用该词对应的词语的context信息,从一个汉字的所有模式向量中选择一个和context语义计算上最相似的作为该汉字对应的向量。

Nonparametric Cluster-based Character Embeddings

该模型和Cluster_based Character Embedding模型是很相似的,唯一不同的是,Cluster_based Character Embedding中的每一个汉字对应的模型向量的数量是一个预先设定的固定值,也就是作为模型的超参数。而在Nonparametric Cluster-based Character Embeddings模型中,该值是一个模型自动学习的值。

收获

1 本文提出的汉字和词语结合的方式就是简单的向量相加操作,也许应用复杂一点的操作(比如矩阵变换)等方式可以把二者更加合理地结合在一起;
2 在相加的时候,需要给以每一个汉字不同权重,这也和我之前说的一致,可以利用attention机制,只不过在2015年的时候还没有attention的概念。