我试图在SpaCy小型模型中查看词汇量:
model_name="en_core_web_sm"
nlpp=spacy.load(model_name)
len(list(nlpp.vocab.strings))
只给了我1185个单词。我还尝试了同事的机器,并给了我不同的结果(1198和1183)。
是否应该只有这么少的词汇来训练词性标注?当我在数据集中使用它时,我会丢失很多单词。为什么单词数在不同的机器上会有所不同?
谢谢!
答案 0 :(得分:1)
词汇表是动态加载的,因此在您第一次加载词汇时,StringStore中没有所有单词。如果尝试以下操作,您会看到此信息...
>>> import spacy
>>> nlp = spacy.load('en_core_web_sm')
>>> len(nlp.vocab.strings)
1180
>>> 'lawyer' in nlp.vocab.strings
False
>> doc = nlp('I am a lawyer')
>>> 'lawyer' in nlp.vocab.strings
True
>>> 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,则会有一个相似的文件,但位置不同。