【问题标题】:How to find the vocabulary size of a spaCy model?如何找到 spaCy 模型的词汇量?
【发布时间】:2020-04-18 07:24:42
【问题描述】:

我正在尝试查找大型英语模型的词汇量,即en_core_web_lg,我找到了三种不同的信息来源:

  • spaCy 的文档:685k 键,685k 唯一向量

  • nlp.vocab.__len__(): 1340242 #(词位数)

  • len(vocab.strings): 1476045

这三者有什么区别?我无法在文档中找到答案。

【问题讨论】:

    标签: nlp documentation spacy vocabulary


    【解决方案1】:

    最有用的数字是与词向量相关的数字。 nlp.vocab.vectors.n_keys 告诉你有多少个词向量有词向量,len(nlp.vocab.vectors) 告诉你有多少个唯一词向量(在md 模型中,多个词可以引用同一个词向量)。

    len(vocab) 是缓存词位的数量。在mdlg 模型中,大多数1340242 词位具有一些预先计算的特征(如Token.prob),但是在没有预先计算的特征的缓存中可以有额外的词位,因为在处理文本时可以添加更多条目。

    len(vocab.strings) 是与标记和注释相关的字符串的数量(如nsubjNOUN),因此它不是一个特别有用的数字。训练或处理中任何地方使用的所有字符串都存储在这里,以便在需要时可以将内部整数哈希转换回字符串。

    【讨论】:

    • 非常感谢您的回复。有没有办法确定哪些字符串具有不同的词向量,哪些映射到同一个向量?所有词汇表外的单词映射到的默认字符串/单词向量是什么?
    • 查看Vectors.dataVectors.key2rowspacy.io/api/vectors#attributes。默认 OOV 为全 0。
    【解决方案2】:

    从spaCy 2.3+开始,根据release notesnlp.vocab中没有加载词位;所以使用len(nlp.vocab) 是无效的。相反,使用nlp.meta['vectors'] 来查找唯一向量和单词的数量。以下是发行说明中的​​相关部分:

    为了减少初始加载时间,nlp.vocab 中的词位是 no 带有向量的模型在初始化时加载的时间更长。正如你 处理文本,词位将自动添加到词汇表中, 就像在没有向量的小型模型中一样。

    要查看唯一向量的数量和带有向量的单词数量, 见nlp.meta['vectors'],例如en_core_web_md有 20000 个唯一向量和 684830 个带向量的单词:

    {
        'width': 300,
        'vectors': 20000,
        'keys': 684830,
        'name': 'en_core_web_md.vectors'
    }
    

    【讨论】:

      猜你喜欢
      • 2020-03-02
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多