如何找到 spaCy 模型的词汇量?
Posted
技术标签:
【中文标题】如何找到 spaCy 模型的词汇量?【英文标题】:How to find the vocabulary size of a spaCy model? 【发布时间】:2020-04-18 07:24:42 【问题描述】:我正在尝试查找大型英语模型的词汇量,即en_core_web_lg
,我找到了三种不同的信息来源:
spaCy 的文档:685k 键,685k 唯一向量
nlp.vocab.__len__()
: 1340242 #(词位数)
len(vocab.strings)
: 1476045
这三者有什么区别?我无法在文档中找到答案。
【问题讨论】:
【参考方案1】:最有用的数字是与词向量相关的数字。 nlp.vocab.vectors.n_keys
告诉你有多少个词向量有词向量,len(nlp.vocab.vectors)
告诉你有多少个唯一词向量(在md
模型中,多个词可以引用同一个词向量)。
len(vocab)
是缓存词位的数量。在md
和lg
模型中,大多数1340242
词位具有一些预先计算的特征(如Token.prob
),但是在没有预先计算的特征的缓存中可以有额外的词位,因为在处理文本时可以添加更多条目。
len(vocab.strings)
是与标记和注释相关的字符串的数量(如nsubj
或NOUN
),因此它不是一个特别有用的数字。训练或处理中任何地方使用的所有字符串都存储在这里,以便在需要时可以将内部整数哈希转换回字符串。
【讨论】:
非常感谢您的回复。有没有办法确定哪些字符串具有不同的词向量,哪些映射到同一个向量?所有词汇表外的单词映射到的默认字符串/单词向量是什么? 查看Vectors.data
和Vectors.key2row
:spacy.io/api/vectors#attributes。默认 OOV 为全 0。【参考方案2】:
从spaCy 2.3+开始,根据release notes,nlp.vocab
中没有加载词位;所以使用len(nlp.vocab)
是无效的。相反,使用nlp.meta['vectors']
来查找唯一向量和单词的数量。以下是发行说明中的相关部分:
为了减少初始加载时间,
nlp.vocab
中的词位是 no 带有向量的模型在初始化时加载的时间更长。正如你 处理文本,词位将自动添加到词汇表中, 就像在没有向量的小型模型中一样。要查看唯一向量的数量和带有向量的单词数量, 见
nlp.meta['vectors']
,例如en_core_web_md
有 20000 个唯一向量和 684830 个带向量的单词:'width': 300, 'vectors': 20000, 'keys': 684830, 'name': 'en_core_web_md.vectors'
【讨论】:
以上是关于如何找到 spaCy 模型的词汇量?的主要内容,如果未能解决你的问题,请参考以下文章