我正在学习自然语言处理,我想看看我用空格下载的词汇总量。
import spacy
nlp = spacy.load('en_core_web_trf')
nlp2 = spacy.load('en_core_web_sm')
在导入space并加载较大和较小的包之后,我检查了这些:
len(nlp.vocab)
给了770,
len(nlp2.vocab)
给了761,
len(nlp.vocab.strings)
给了83934,
len(nlp2.vocab.strings)
给了83914。
它们如何以及为什么不同?我如何查看每个包裹的总词汇数?
没有真正的"词汇";在spaCy v2.3或v3中。您应该主要将nlp.vocab
和nlp.vocab.strings
视为总数不是有意义的值的缓存。nlp.vocab
Vocab
不是静态的,并且随着您使用管道处理文本而增长。
vocab是Lexeme
对象的缓存,nlp.vocab.strings
StringStore
是字符串哈希的缓存。词汇表包含以前在管道处理过的某些文本中见过的标记的词素,字符串存储库包含以前见过的字符串,可以作为标记或作为注释(POS标签、引理、依赖项标签)。
字符串存储不是100%的缓存,可能包含在训练期间添加的字符串,这些字符串在当前加载的管道中之前没有使用过,但是字符串存储的大小并不能告诉你任何关于管道性能的信息。
len(nlp.vocab)
是缓存的词汇的数量,因此当您在某些单词上使用模型时,它可能会发生变化。
len(nlp.vocab.strings)
将字符串映射到哈希值,反之亦然。它可以给你不同字符串的数量。例如,对于模型en_core_web_md
,这将给出701800
。
如果您想访问单词,请尝试:
words=[]
for x in nlp.vocab.strings:
words.append(x)