python - 计算 SpaCy 上文本的平均向量

标签 python nlp spacy

我正在使用SpaCy计算多个文档之间的距离,我的方法如下:

1) 将文本转换为spacy对象 2)去除停用词 3) 对于剩余的每个单词,获取向量表示并计算平均值。 4) 使用多种方法测量文档之间的距离。

这种方法的问题是对于大文档需要很长时间。

我发现 spacy 有一种称为相似性的方法,可以更快地完成此操作:

nlp_latin = spacy.load("/tmp/la_vectors_wiki_lg")
doc1 = nlp_latin(u"Caecilius est in horto")
doc2 = nlp_latin(u"servus est in atrio")
doc1.similarity(doc2)

但是它只使用余弦距离,有没有一种方法只返回文档的平均向量?

最佳答案

只是为该线程的 future 访问者扩展上面评论中的答案:

根据SpaCy documentation ,SpaCy 中的 Doc 类有一个属性 vector,它返回其标记向量的平均值。

对于您的用例,加载 SpaCy 后,以下代码将为您提供拉丁文本“Caecilius est in horto”的平均向量

doc = nlp_latin(u"Caecilius est in horto")
doc.vector

提高性能的旁注:

  1. 即使您只使用 SpaCy 管道的分词器组件,当您调用 spacy.load< 时,SpaCy 也会加载其他组件(即“parser”、“ner”、“tagger”和“textcat”)/。因此,加载它们会显着降低性能。要解决此问题,您可以通过将 exclude 参数添加到 spacy.load 函数来排除这些附加组件,如下所示(有关更多信息,请查看 Spacy documentation on processing pipelines. ):
   nlp_latin = spacy.load("/tmp/la_vectors_wiki_lg", exclude=["parser", "ner", "tagger", "textcat"])
  • 同样,由于您仅使用 SpaCy 将原始文本转换为标记,因此您可以将 nlp_latin 函数调用替换为 nlp_latin.make_doc。可以像以前一样使用 doc.vector 检索平均标记向量。这可确保 SpaCy 仅在 nlp_latin 调用之后使用分词器,从而使您的代码更快。欲了解更多信息,请查看Scaling and Performance section of this link
  • 关于python - 计算 SpaCy 上文本的平均向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56517313/

    相关文章:

    python - 使用 Python 3 打印不带括号的不同错误消息

    python - 在Python中打开文件时防止应用程序关闭

    python - matplotlib 中子图的轴变换

    python 无法使用 docker 图像在 azure 应用程序服务中加载 en_core_web_lg 模块

    python - 用 spacy 对文档进行词形还原?

    python - 在 python 文件中指定编码时,python 中的 "magic lines(s)"如何工作?

    algorithm - Amazon 的 Statistically Improbable Phrases 如何运作?

    python - 使用 PerceptronTagger 阅读我自己的 NLTK 词性标记数据集

    Python 和 NLTK : Baseline tagger

    python - SpaCy:如何获取 spacy 模型名称?