我试图在SpaCy小型模型中查看词汇中的单词数:

model_name="en_core_web_sm"

nlpp=spacy.load(model_name)

len(list(nlpp.vocab.strings))


只给了我1185个单词我还尝试了同事的机器,并给了我不同的结果(1198和1183)。

训练词性标记只有这么少的词汇应该是这样吗?当我在数据集中使用它时,我会丢失很多单词。为什么单词数在不同的机器上会有所不同?

谢谢!

最佳答案

词汇表是动态加载的,因此当您第一次加载vocab时,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,则会有一个相似的文件,但位置不同。

关于machine-learning - 词汇SpaCy模型'en_core_web_sm'的大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58722405/

10-12 19:27