更新 spaCy 词汇表

Update spaCy Vocabulary

我想知道是否可以更新 spacys 的默认词汇表。我正在尝试做的是:

但是由于我语料库中的很多词不在 spacy 的默认词汇表中,所以我无法使用导入的向量。有没有一种(简单的)方法来添加那些缺失的类型?

编辑:
我意识到混合向量可能会有问题。所以我的问题是:
如何将自定义词汇导入 spacy?

这在下一个版本中要容易得多,应该会在本周发布 --- 我刚刚完成测试。目前:

默认情况下,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)