Dict2vec : Learning Word Embeddings using Lexical Dictionaries
论文:Dict2vec : Learning Word Embeddings using Lexical Dictionaries
作者:Julien Tissier, Christophe Gravier, Amaury Habrard
时间:2017
一、完整代码
# 完整代码在这里
二、论文解读
Dict2vec从字典条目构建新的单词对,使语义相关的单词移动得更近,负采样过滤掉字典中不相关的单词对。
2.1 方法介绍
无监督学习的词向量有一个经典缺陷:在一个单词和那些在相关上下文中出现的单词之间缺乏监督。例如,近义词无法在一句话中同时出现,这里使用dict2vec通过字典中词的定义来优化这一步骤;
单词的定义是一组解释其意义的单词或句子。字典是针对几个单词的一组元组(单词、定义)。例如,你可以在字典中找到:
car: A road vehicle, typically with four wheels, powered by an internal combustion engine and able to carry a small number of people.
从定义中我们可以发现car中有vehicle,road,engine等等词语;通过这样的词的出现,可以说明使用词定义来获得弱监督的相关性,允许我们得到语义上相关的词对是可行的;这里我们定义两个东西,weak pairs和strong pairs;
- weak pairs:如果A和B的定义中,只有一方有对方,那就是weak pairs
- strong pairs:如果A和B的定义中,双方都有对方词语,那就是strong pairs
The word “vehicle” is in the definition of “car” and “car” is in the definition of “vehicle”. Hence, (car–vehicle) is a strong pair. The word “road” is in the definition of “car”, but “car” is not in the definition of “road”. Therefore, (car–road) is a weak pair.
“车辆”一词在“汽车”的定义中,“汽车”一词在“车辆”的定义中。因此,(汽车-汽车)是强有力的一对。“路”一词是在“汽车”的定义中,而“车”则不在“道路”的定义中。因此,(汽车-道路)是一个弱对。
为了把weak pairs和strong pairs与损失函数联系起来,同时为了避免影响运算速度,我们可以通过正采样和负采样结合的方式,首先是正采样,如下所示: J p o s ( w t ) = β s ∑ w i ∈ V s ( w t ) l ( v t ⋅ v i ) + β w ∑ w j ∈ V w ( w t ) l ( v t ⋅ v j ) J_{pos}(w_t)=\beta_s\sum_{w_i \in V_s(w_t)}l(v_t·v_i) +\beta_w\sum_{w_j \in V_w(w_t)}l(v_t·v_j) Jpos(wt)=βswi∈Vs(wt)∑l(vt⋅vi)+βwwj∈Vw(wt)∑l(vt⋅vj)其中 S ( w ) S(w) S(w)表示与 w w w相关的所有strong pairs组成的集合; W ( w ) W(w) W(w)表示与 w w w相关的所有weak pairs组成的集合; V s ( w ) V_s(w) Vs(w)表示从 S ( w ) S(w) S(w)中抽出的pairs组成的集合; V w ( w ) V_w(w) Vw(w)表示从 W ( w ) W(w) W(w)中抽出的pairs组成的集合; β s \beta_s βs和 β w \beta_w βw是两个系数;抽取的个数可以自定义;
接下来是负采样,首先定义随机采样的集合如下: F ( w t ) = { w i } k , w i ∈ V − { w t } F(w_t)=\{w_i\}^k, w_i \in V - \{w_t\} F(wt)={wi}k,wi∈V−{wt}接下来可以得到负采样如下: J n e g ( w t ) = ∑ w i ∈ F ( w t ) w i ∉ S ( w t ) w i ∉ W ( w t ) l ( − v t ⋅ v i ) J_{neg}(w_t)=\sum_{w_i \in F(w_t) \quad wi \notin S(w_t) \quad w_i \notin W(w_t)}l(-v_t·v_i) Jneg(wt)=wi∈F(wt)wi∈/S(wt)wi∈/W(wt)∑l(−vt⋅vi)
负采样用负数是为了尽可能的让他们不在一起,正采样用正数是为了尽可能的让他们在一起;得到最后的损失函数如下: J = ∑ t = 1 C ∑ c = − n n J ( w t , w t + c ) = ∑ t = 1 C ∑ c = − n n [ l ( v t , v c ) + J p o s ( w t ) + J n e g ( w t ) ] J=\sum_{t=1}^{C}\sum_{c=-n}^{n}J(w_t,w_{t+c})=\sum_{t=1}^{C}\sum_{c=-n}^{n}[l(v_t,v_c)+J_{pos}(w_t)+J_{neg}(w_t)] J=t=1∑Cc=−n∑nJ(wt,wt+c)=t=1∑Cc=−n∑n[l(vt,vc)+Jpos(wt)+Jneg(wt)]
模型介绍完毕!
2.2 参数设置事项
对于正抽样,经验网格搜索显示,βs和βw之间的比率为1:2 是调整这些超参数的一个很好的经验法则。我们还注意到,当这些系数过低时(βs≤0.5和βw≤0.2),结果会变得更糟,因为该模型没有考虑到来自强对和弱对的信息。另一方面,当它们过高时(βs≥1.2和βw≥0.6),模型会从上下文中丢弃太多的信息,而支持来自对的信息。当强对和弱对的数量过低或过高(ns,nw≤2或ns,nw≥5)时,这种行为是相似的。对于负抽样,我们注意到,与不受控制的版本相比,由成对带来的控制的平均加权得分增加了0.7%。我们还观察到,增加负样本的数量并没有显著提高结果,除了RW数据集,其中使用25个负样本可以提高10%的性能。实际上,这个数据集主要由罕见的单词组成,所以嵌入必须学会区分不相关的单词,而不是更接近相关的单词。
2.3 模型效果
提升不大,使用于小语料,个人认为小语料特征不明显,需要强化,而dict2vec通过字典定义添加了信息进行强化!
三、过程实现
略
四、整体总结
本文提出了一种利用词汇字典学习单词嵌入的新方法Dict2vec。它基于一个Skip-gram模型,其中目标函数通过利用从定义中提取的词对的强度对进行扩展。在单词相似性任务中,我们的方法比最先进的单词嵌入方法显示了更好的结果,包括基于来自外部来源的修改的嵌入方法。我们还提供了完整的源代码来重现实验。