难以解释词嵌入向量相似度(spaCy)

数据挖掘 Python nlp 词嵌入 斯派西
2022-02-14 19:03:18

我计算向量相似度是这样的:

nlp = spacy.load('en_trf_xlnetbasecased_lg')
a = nlp("car").vector
b = nlp("plant").vector
dot(a, b)/(norm(a)*norm(b))
0.966813

为什么嵌入的无关词的向量相似度如此之高?这不是他们异常高的唯一一对。我对fastText也有类似的经历,所以我想知道,我是不是误会了什么?

此外,我还可以获得诸如“asdfasfdasfd”或“zzz123Y!/§zzzZz”之类的非单词的向量,它们彼此不同。这怎么可能?

1个回答

为什么嵌入的无关词的向量相似度如此之高?

对于您给出的具体示例,我认为这是有道理的car并且plant 具有很高的相似性。这可能是由于诸如car manufacturing plant

此外,我还可以获得诸如“asdfasfdasfd”或“zzz123Y!/§zzzZz”之类的非单词的向量,它们彼此不同。这怎么可能?

对于您的具体情况,由于您使用en_trf_xlnetbasecased_lg,因此答案很简单。XLNet 提供的嵌入是上下文相关的,这意味着即使这个词本身不是一个词,你也会得到一个给定上下文中的词的嵌入。此外,HuggingFace 的实现很可能使用字节对编码作为标记,使其对词汇表外的情况更加稳健。