我尝试查看SpaCy小模型中的词汇量:
model_name="en_core_web_sm"nlpp=spacy.load(model_name)len(list(nlpp.vocab.strings))
结果只显示了1185个单词。我也在同事的机器上尝试过,结果不同(分别是1198和1183)。
词汇量这么小就能用于训练词性标注吗?当我用在我的数据集上时,丢失了很多单词。为什么不同机器上的单词数量会不同?
谢谢!
回答:
词汇是动态加载的,所以当你第一次加载词汇时,StringStore中不会包含所有单词。你可以通过以下尝试来观察这一点…
>>> import spacy>>> nlp = spacy.load('en_core_web_sm')>>> len(nlp.vocab.strings)1180>>> 'lawyer' in nlp.vocab.stringsFalse>> doc = nlp('I am a lawyer')>>> 'lawyer' in nlp.vocab.stringsTrue>>> len(nlp.vocab.strings)1182
最简单的方法可能是直接从原始文件中加载词汇,像这样…
>>> import json>>> fn = '/usr/local/lib/python3.6/dist-packages/spacy/data/en/en_core_web_sm-2.0.0/vocab/strings.json'>>> with open(fn) as f:>>> strings = json.load(f)>>> len(strings)78930
请注意,上述文件路径适用于Ubuntu 18.04。如果你是Windows用户,会有类似的文件但路径不同。