更新spaCy词汇表

3
我想知道是否可以更新Spacy的默认词汇。我正在尝试以下操作:
  • 使用Gensim在我的语料库上运行Word2vec
  • 使用nlp.vocab.load_vectors_from_bin_loc(\path)将向量加载到我的模型中
然而,由于我的语料库中有很多单词不在Spacy的默认词汇中,因此我无法使用已导入的向量。有没有办法(容易)添加这些缺失类型? 编辑:
我意识到混用向量可能会有问题。因此我的问题是:
如何将自定义词汇表导入Spacy?
1个回答

3
在下一个版本中,这将变得更加容易,该版本应该会在本周发布 --- 我正在测试它。目前为止:
默认情况下,spaCy加载data/vocab/vec.bin文件,其中"data"目录位于spacy.en模块目录内 使用spacy.vocab.write_binary_vectors从bz2文件创建vec.bin文件 要么替换spaCy的vec.bin文件,要么在运行时调用nlp.vocab.load_rep_vectors并提供二进制文件路径。 起初以上操作有点麻烦,但二进制文件格式更小且更快速,向量文件相当大。请注意,GloVe以gzip格式发布,而不是bzip。
顺便问一句:您是在使用GloVe向量还是使用自己的数据进行训练?如果是使用自己的数据,是否使用了Gensim?我想使这个过程更容易,所以欢迎您提出建议。
在运行时加载新向量,可选择转换。
    import spacy.vocab

    def set_spacy_vectors(nlp, binary_loc, bz2_loc=None):
        if bz2_loc is not None:
            spacy.vocab.write_binary_vectors(bz2_loc, binary_loc)
        write_binary_vectors(bz2_input_loc, binary_loc)

        nlp.vocab.load_rep_vectors(binary_loc)

替换vec.bin,这样您的向量将默认加载

from spacy.vocab import write_binary_vectors
    import spacy.en

    from os import path

    def main(bz2_loc):
        bin_loc = path.join(path.dirname(spacy.en.__file__), 'data', 'vocab', 'vec.bin')
        write_binary_vectors(bz2_loc, bin_loc)

if __name__ == '__main__':
    plac.call(main)

能够轻松地将Spacy.vocab向量以gensim可用的格式导出,然后在新语料库上使用gensim进行重新训练,并重新加载到Spacy中,这将是非常棒的。目前是否已经很简单实现了呢? - Geoffrey Negiar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接