Nlp 如何找到spaCy模型的词汇量?

Nlp 如何找到spaCy模型的词汇量?,nlp,documentation,spacy,vocabulary,Nlp,Documentation,Spacy,Vocabulary,我试图找到大型英语模型的词汇量,即en_core\u web\u lg,我找到了三种不同的信息来源: spaCy文档:685k密钥,685k唯一向量 nlp.vocab._len__():1340242(词素数量) len(vocab.strings):1476045 三者之间的区别是什么?我无法在文档中找到答案。最有用的数字是与词向量相关的数字nlp.vocab.vectors.n_键告诉您有多少标记有单词向量,len(nlp.vocab.vectors)告诉您有多少唯一的单词向量(

我试图找到大型英语模型的词汇量,即
en_core\u web\u lg
,我找到了三种不同的信息来源:

  • spaCy文档:685k密钥,685k唯一向量

  • nlp.vocab._len__()
    :1340242(词素数量)

  • len(vocab.strings)
    :1476045


三者之间的区别是什么?我无法在文档中找到答案。

最有用的数字是与词向量相关的数字
nlp.vocab.vectors.n_键
告诉您有多少标记有单词向量,
len(nlp.vocab.vectors)
告诉您有多少唯一的单词向量(多个标记可以在
md
模型中引用同一单词向量)

len(vocab)
是缓存词素的数量。在
md
lg
模型中,大多数
1340242
词素都有一些预先计算的功能(如
Token.prob
),但由于在处理文本时可以添加更多条目,因此该缓存中可能会有其他词素,而没有预先计算的功能


len(vocab.strings)
是与标记和注释相关的字符串数(如
nsubj
名词
),因此它不是一个特别有用的数字。训练或处理过程中使用的所有字符串都存储在此处,以便在需要时将内部整数散列转换回字符串。

由于spaCy 2.3+,根据,词素不会加载到
nlp.vocab
;因此使用
len(nlp.vocab)
是无效的。相反,使用
nlp.meta['vectors']
查找唯一向量和单词的数量。以下是发行说明中的相关部分:

为了缩短初始加载时间,
nlp.vocab
中的词素没有 对于带有向量的模型,初始化时加载的时间更长。像你一样 处理文本时,词汇将自动添加到词汇表中, 就像在没有向量的小模型中一样

要查看唯一向量的数量和带向量的单词的数量, 参见
nlp.meta['vectors']
,例如
en\u core\u web\u md
有 20000个唯一向量和684830个带向量的单词:

{
    'width': 300,
    'vectors': 20000,
    'keys': 684830,
    'name': 'en_core_web_md.vectors'
}

非常感谢您的回复。有没有办法确定哪些字符串具有不同的词向量,哪些映射到同一向量?所有词汇表外单词映射到的默认字符串/单词向量是什么?请查看
Vectors.data
Vectors.key2row
:。默认的OOV都是0。