存储和加载包含词向量的 spaCy 文档

Posted

技术标签:

【中文标题】存储和加载包含词向量的 spaCy 文档【英文标题】:Storing and Loading spaCy Documents Containing Word Vectors 【发布时间】:2020-10-30 09:05:49 【问题描述】:

我有一堆想要用 spaCy 处理的文档。当我在 lg 模型中加载时,将为每个处理的文档生成词向量。我想将所有这些信息存储到磁盘上,以便以后检索。原因是我正在执行成对相似性。

这就是我正在做的事情来拯救他们

import spacy
nlp = spacy.load('en_core_web_lg')
doc = nlp(my_text)
doc.to_disk(my_file)

这就是我正在做的恢复

import spacy
nlp = spacy.load('en_core_web_lg')
idoc = Doc(Vocab()).from_disk(os.path.join(saved_docs, all_docs[i]))
jdoc = Doc(Vocab()).from_disk(os.path.join(saved_docs, all_docs[j]))
print(idoc.similarity(jdoc))

这会产生:

ModelsWarning:[W007] 您使用的模型没有词向量 加载,因此 Doc.similarity 方法的结果将基于 标注器、解析器和 NER,它们可能不会提供有用的相似性 判断。如果您使用其中一种小型模型,则可能会发生这种情况, 例如en_core_web_sm,不附带词向量,仅使用 上下文敏感的张量。您可以随时添加自己的词向量, 或使用其中一种较大的型号(如果有)。

好像词向量没有在 to_disk/from_disk 过程中存活。

保存这些信息的正确方法是什么?

【问题讨论】:

【参考方案1】:

我找到了一个方法,不知道是不是最有效。但显然to_disk() 函数并没有按照我想要的方式工作。

import spacy
nlp = spacy.load('en_core_web_lg')
doc = nlp(my_text)
doc.to_disk(my_doc_file)
doc.vocab.to_disk(my_doc_dir)

import spacy
nlp = spacy.load('en_core_web_lg')
idoc = Doc(Vocab()).from_disk(my_doc_i_file)
idoc.vocab.from_disk(my_doc_i_dir)
jdoc = Doc(Vocab()).from_disk(my_doc_j_file)
jdoc.vocab.from_disk(my_doc_j_dir)
print(idoc.similarity(jdoc))

词向量(如果存在)存储在单个标记对象中,例如 doc[0].vector 将给出第一个标记的词向量。仅在 Doc 对象上调用 to_disk 不会填充这些词向量。

【讨论】:

以上是关于存储和加载包含词向量的 spaCy 文档的主要内容,如果未能解决你的问题,请参考以下文章

NLPgensim保存存储和加载fasttext词向量模型

NLPgensim保存存储和加载fasttext词向量模型

词向量

使用 Spacy、Bert 时是不是需要对文本分类进行停用词去除、词干/词形还原?

字向量和词向量区别

gensim加载词向量文件