【问题标题】:Using glove.6B.100d.txt embedding in spacy getting zero lex.rank在 spacy 中使用 glove.6B.100d.txt 嵌入得到零 lex.rank
【发布时间】:2020-06-17 17:34:30
【问题描述】:

我正在尝试在 spacy nlp 管道中加载 glove 100d embddings。

我以 spacy 格式创建词汇表,如下所示:

python -m spacy init-model en spacy.glove.model --vectors-loc glove.6B.100d.txt

glove.6B.100d.txt 通过在第一行添加“400000 100”转换为 word2vec 格式。

现在

spacy.glove.model/vocab has following files: 
5468549  key2row
38430528  lexemes.bin
5485216  strings.json
160000128  vectors

在代码中:

import spacy 
nlp = spacy.load("en_core_web_md")

from spacy.vocab import Vocab
vocab = Vocab().from_disk('./spacy.glove.model/vocab')

nlp.vocab = vocab

print(len(nlp.vocab.strings)) 
print(nlp.vocab.vectors.shape) gives 

给予 407174 (400000, 100)

但问题是:

V=nlp.vocab
max_rank = max(lex.rank for lex in V if lex.has_vector)
print(max_rank) 

给 0

我只想将 spacy 中的 100d 手套嵌入与 en_core_web_md 中的“tagger”、“parser”、“ner”模型结合使用。

有谁知道如何正确执行此操作(这可能吗)?

【问题讨论】:

    标签: nlp spacy glove


    【解决方案1】:

    标注器/解析器/ner 模型使用包含的词向量作为特征进行训练,因此如果您将它们替换为不同的向量,您将破坏所有这些组件。

    您可以使用新向量来训练新模型,但用经过训练的组件替换模型中的向量效果不佳。标记器/解析器/ner 组件很可能会提供无意义的结果。

    如果您想要 100d 向量而不是 300d 向量来节省空间,您可以调整向量的大小,这会将每个条目截断为前 100 个维度。结果性能会下降一点。

    import spacy
    nlp = spacy.load("en_core_web_md")
    assert nlp.vocab.vectors.shape == (20000, 300)
    nlp.vocab.vectors.resize((20000, 100))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-20
      • 2020-02-27
      • 2016-06-11
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      相关资源
      最近更新 更多