spaCy如何为短语生成向量?

3

spaCy的中等和大型词汇表可以为单词和短语生成向量。让我们考虑以下示例:

import spacy
    
nlp = spacy.load("en_core_web_md")
tokens = nlp("apple cat sky")
    
print(tokens.text, tokens.vector[:3], tokens.vector_norm) # Only the first three components of the vector 
    
for token in tokens:
    print(token.text, token.vector[:3], token.vector_norm)

输出:

apple cat sky [-0.06734333  0.03672066 -0.13952099] 4.845729844425328
apple [-0.36391  0.43771 -0.20447] 7.1346846
cat [-0.15067  -0.024468 -0.23368 ] 6.6808186
sky [ 0.31255  -0.30308   0.019587] 6.617719

很明显,词汇包含每个单词的向量,但是整个短语的向量是如何生成的?正如大家所见,这不仅仅是向量的简单加和。

2个回答

2

默认情况下,Doc 向量是标记向量的平均值,参见 https://spacy.io/usage/vectors-similarity:

自带词向量模型的模型将其作为 Token.vector 属性提供。 Doc.vector 和 Span.vector 将默认为其令牌向量的平均值。


2
在您的情况下,句子(apple cat sky)的平均值可以计算为:
  • (-0.36391(apple) + (-0.15067(cat)) + 0.31255(sky))/3 = -0.06734333

  • (0.43771(apple) + (-0.024468(cat)) + -0.30308(sky))/3 = 0.03672066

  • (-0.20447(apple) + (-0.23368(cat)) + 0.019587(sky))/3 = -0.13952099

这不是向量的总和,而是向量的平均值。
通过对令牌向量取平均值,您可以找到一个句子的向量。

感谢分享公式。如果我想计算两个句子的相似度,我应该使用向量点运算吗? - Cloud Cho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接