nlp.vocab与nlp.vocab.strings有何区别?如何查询spaCy模型总词汇量?
spaCy词汇查询结果差异原因及正确查询方法
1. 两个查询接口的核心区别
你调用的两个长度查询对应完全不同的统计逻辑,数值差异的原因如下:
len(nlp.vocab):统计的是当前已经加载到内存中的词法条目(Lexeme)数量。spaCy采用懒加载机制,刚加载模型未处理任何文本时,只会预加载高频词、特殊标记、停用词、标点等最少必要的词法条目,所以初始值只有几百。en_core_web_trf和en_core_web_sm的预加载基础条目有9个的差异,就出现了你看到的770和761的区别。len(nlp.vocab.strings):统计的是模型内置的全局字符串哈希映射表的总条目数,包含了模型训练阶段用到的所有词汇的字符串对应关系,这个数值才是模型内置的总词汇量。两个模型数值差20,是因为en_core_web_trf比en_core_web_sm多内置了少量和transformer推理相关的特殊标记、补充词汇。
2. 总词汇量的正确查询方式
- 如果你要查模型内置的完整总词汇量,直接使用
len(nlp.vocab.strings)即可,你拿到的83934、83914就是两个模型对应的总词汇量。 - 如果你使用的是带静态词向量的模型(
en_core_web_sm/md/lg系列,trf版本用动态transformer embedding无静态词向量),要查询有对应预训练词向量的词汇量,可以调用len(nlp.vocab.vectors)获取结果。
补充注意:
nlp.vocab的数值是动态增长的,你用模型处理文本时遇到的新词汇会被自动加入到nlp.vocab中,后续再查询长度会持续增加,所以它的数值永远不能代表模型的固定总词汇量。
内容的提问来源于stack exchange,提问作者cagatay.e.sahin
相关产品推荐
相关产品推荐

