问题描述
诸如word2vec和glove之类的分布式语义模型通过相互捕获单词的上下文出现来生成单词向量。然后,如果一个单词比焦点单词旁边的单词出现得更多,则它的矢量比焦点单词更近,并且主导了焦点单词矢量的方向。例如:
将美丽作为重点词,其顺序如下:
您是一位美丽的女士。 (此序列出现100次)
你是一个漂亮的男孩。 (此序列出现10次)
结果,美丽比男孩离女人更近。
如果在整个数据集中两个上下文词(与焦点词同时出现)的分布相同,则焦点词的向量可能与这两个上下文词的向量具有相同的相似度。
考虑上一个示例:
您是一位美丽的女士。 (此序列出现10次)
你是一个漂亮的男孩。 (此序列出现10次)
因此,美丽与男孩和女孩有着相同的亲密感。
我的问题与此有关,为了得到第二个示例情况(一个与其他两个向量具有相同相似度的向量),单词分布应该有多近?是否有文献研究涵盖了向量生成过程中单词分布的控制?
更新:想象美丽在整个数据集中只有两个上下文,女士和男孩。
解决方法
实际数据集将有'beautiful'
,'boy'
和'lady'
的许多上下文用法的 other 个示例,每个示例都有所不同。
实际上,为了使数据集训练有用的高维向量,它们必须具有多种用途-并且比您的合成示例要多样化得多。结果,您不能简单地查看真实的数据集,请检查'lady'
和'beautiful'
彼此之间的距离是否比'boy'
和'beautiful'
多5倍,并且确保'lady'
和'beautful'
将具有更相似的单词向量。它们的实际位置将取决于这些词的所有 other 用法,以及语料库中的所有 other 词,这可能会覆盖您观察到的简单关系。>
字向量的价值仅在于它们在下游任务上的表现如何,而没有一组字向量对所有任务都是最佳的。也就是说,没有一种“正确”的方式来创建它们-只是一堆不同的算法,每个算法都可以进行参数化,对于特定的目的,矢量的生成可能会更好或更坏。
如果您出于某种原因决定或作为外部约束,则无论训练数据如何说明,'beautiful'
必须与'lady'
和'boy'
等距用法,您可以尝试很多事情。
有些是粗糙的,就像只是在最后修补载体。其他人可能会在训练中增加额外的步骤来维持所需的关系,或者至少使它具有每次更新时数据和其他参数仍然会减弱的优势。
由于您似乎对均衡不同性别单词之间的关系感兴趣,因此您可能会对一篇论文着重关注,该论文着重强调了单词向量中的性别偏见,并提出了相应的修改单词向量的方法:>
"Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings"
不过,请注意,本文以及其他许多注意到相同效果的工作,都忽略了解决类比的典型例程倾向于排除出现的任何单词,从而夸大了这种偏见的强度。作为提示。
例如,考虑该论文的标题声明,即Google所发布的GoogleNews
向量和原始word2vec论文将回答类比...
man : computer_programmer :: woman : ___?___
带有homemaker
。
使用类似Google word-analogy
版本中的原始word2vec
工具或Gensim Python库的.most_similar()
方法的类似功能来处理词向量,您可以天真地重现该声明:
from gensim.models import KeyedVectors
gkv = KeyedVectors.load_word2vec_format(
'/home/gojomo/Downloads/GoogleNews-vectors-negative300.bin',binary=True
)
gkv.most_similar(
positive=['computer_programmer','woman'],negative=['man']
)
[('homemaker',0.5627118945121765),('housewife',0.5105046629905701),('graphic_designer',0.505180299282074),('schoolteacher',0.497949481010437),('businesswoman',0.493489146232605),('paralegal',0.49255111813545227),('registered_nurse',0.4907974600791931),('saleswoman',0.48816272616386414),('electrical_engineer',0.4797726571559906),('mechanical_engineer',0.4755399227142334)]
(要使用A : B :: C : _?_
来解决.most_similar()
形式的类比,B
和C
应该成为positive
的示例,而A
negative
示例。)
但是,这些类比求解例程中的每一个都已编码为假设,询问者从不希望看到提示词的任何。因此,即使computer_programmer
仍然是最热门的答案,也会从结果中过滤出来。
使用gensim,我们可以通过将提示作为原始向量而不是查找键来覆盖该行为,然后得到不同的结果:
gkv.most_similar(
positive=[gkv.get_vector('computer_programmer',norm=True),negative=['man']
)
[('computer_programmer',0.8276970982551575),('homemaker',0.4797726571559906)]
现在,该模型将computer_programmer
视为最匹配项,不受限制的类比答案并未因性别影响而发生很大变化。结果保留了性别特征,表明类推计算得出的“目标点”在'computer_programmer'
的一旁,朝向刻板的女性角色。
还需要注意的是:如果您在'computer_programmer'
向量中检查与GoogleNews
相似的前10个最相似的词,'homemaker'
就是其中的一位,也是一位女性作家/程序员的名字。因此,由该特定向量集捕获的这些角色和单词之间的性别差异可能比某些强调偏见的论文的标题更为微妙。