即使不是单词,spacy 如何生成词向量?

how does spacy generate word vector even that is not a word?

请看我的代码:

import spacy
nlp = spacy.load('en_core_web_sm')
a=nlp('fjoeij foeijfo foejf')
a[0].vector
array([ 4.4017673 ,  2.2732968 ,  1.8201342 ,  0.285315  ,  4.301816  ,
       -1.6101733 , -1.9763635 ,  0.7946968 , -0.49857655,  2.4312825 ,
       -0.5321884 ,  1.8810408 , -2.4434211 , -0.1565853 , -0.3007983 ,
       -0.5251692 , -0.47107434,  2.392819  , -2.1653428 ......

你可以看到它们不是单词,我只是随机输入。但是spacy仍然可以生成向量。所以,我有两个问题:

  1. spacy如何生成向量?
  2. 所有的向量都是96维的。我可以更改维数吗?

sm 模型没有静态词向量,因此 token.vector returns 来自 tok2vec 模型的上下文敏感张量作为退避。 dimensions设置来自tok2vec模型参数,在模型初始化和训练后无法更改。

这些张量对 tagger/parser/etc 很有用。管道中的组件,但在其他方面可能没那么有用,例如对于相似性比较,您最好使用带有静态词向量的 mdlg 模型。

参见:https://spacy.io/usage/linguistic-features#vectors-similarity