列出预训练模型中 spaCy 中最相似的单词

2024-02-16

有了 Gensim,在我训练了自己的模型之后,我可以使用model.wv.most_similar('cat', topn=5)并获取最接近的 5 个单词的列表cat在向量空间中。例如:

from gensim.models import Word2Vec
model = Word2Vec.load('mymodel.model')

In: model.wv.most_similar('cat', topn=5)
Out: ('kitten', .99)
     ('dog', .98)
     ...

使用 spaCy,根据文档 https://spacy.io/usage/vectors-similarity, 我可以:

import spacy

nlp = spacy.load('en_core_web_md')
tokens = nlp(u'dog cat banana')

for token1 in tokens:
    for token2 in tokens:
        print(token1.text, token2.text, token1.similarity(token2))

它给出了指定字符串中标记的相似性。但梳理文档和搜索,我无法弄清楚是否有一种 gensim 类型的方法可以列出预加载模型的所有相似单词nlp = spacy.load('en_core_web_lg') or nlp = spacy.load('en_vectors_web_lg')。有没有办法做到这一点?


我使用了安迪的回应,它工作正常但缓慢。为了解决这个问题,我采取了以下方法。

SpaCy 在后端使用余弦相似度来计算.similarity。因此,我决定更换word.similarity(w)及其优化的对应物。我使用的优化方法是cosine_similarity_numba(w.vector, word.vector)如下所示,它使用 Numba 库来加速计算。您应该将most_similar 方法中的第12 行替换为以下行。

by_similarity = sorted(queries, key=lambda w: cosine_similarity_numba(w.vector, word.vector), reverse=True)

该方法速度提高了 2-3 倍这对我来说至关重要。

from numba import jit

@jit(nopython=True)
def cosine_similarity_numba(u:np.ndarray, v:np.ndarray):
    assert(u.shape[0] == v.shape[0])
    uv = 0
    uu = 0
    vv = 0
    for i in range(u.shape[0]):
        uv += u[i]*v[i]
        uu += u[i]*u[i]
        vv += v[i]*v[i]
    cos_theta = 1
    if uu != 0 and vv != 0:
        cos_theta = uv/np.sqrt(uu*vv)
    return cos_theta

我在这篇文章中更详细地解释了它:如何在 SpaCy 中构建快速“最相似词”方法 https://towardsdatascience.com/how-to-build-a-fast-most-similar-words-method-in-spacy-32ed104fe498

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列出预训练模型中 spaCy 中最相似的单词 的相关文章

随机推荐

  • 迭代 Numpy 矩阵行以每行应用一个函数?

    我希望能够迭代矩阵以将函数应用于每一行 我该如何为 Numpy 矩阵做到这一点 您可以使用numpy apply along axis 假设你的数组是二维的 你可以像下面这样使用它 import numpy as np myarray np
  • 零长度数组

    我正在重构一些旧代码 并发现一些包含零长度数组的结构 如下 当然 警告被 pragma 抑制 但我无法通过包含此类结构的 新 结构创建 错误 2233 数组 byData 用作指针 但为什么不使用指针呢 或者长度为1的数组 当然 没有添加任
  • Ruby class_eval 方法

    我想弄清楚如何动态创建方法 class MyClass def initialize dynamic methods arr Array new dynamic methods arr each m self class class eva
  • Kotlin 中的普通类和数据类有什么区别?

    我尝试解决任务 6 DataClass 科特林公案 https github com vicboma1 Kotlin Koans named arguments 当我在代码中使用普通类时 测试用例失败 这是我的数据类代码 data clas
  • CMakeExternalProject_Add() 和 FindPackage()

    是否有正确的方法来查找图书馆 通过FindPackage 是用ExternalProject Add 问题是 CMake 无法在 CMake 时找到该库 因为外部库是在编译时构建的 我知道在超级构建中构建库和项目时可以组合这两个 CMake
  • 为什么投票机不开源? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 嗯 这只是与编程相关 但我想今天是选举日 对吧 是否有一个很好的理由说明为什么它们不开源 不一定是开源的 因为任何人都可以做出贡献 但开源是因为
  • 我可以在 Javascript 中识别(图形输入板)笔压吗?

    有没有办法使用 javascript 来识别笔压 最好我不想使用 Flash 并尝试将其作为纯 JS 完成 编辑 好吧 我意识到 Wacom 平板电脑有可能实现这一点 因为它们附带的软件可以与其 javascript api 配合使用 从而
  • 使用 pandas 忽略来自 openpyxl 的 UserWarning

    我有大量必须加载的 xlsm 文件 每个 Excel 文件有 6 个工作表 因此 我使用 pandas 打开每个 Excel 文件 for excel file in files list with pd ExcelFile excel f
  • .Net 中字符串(或任何其他对象)的内存使用情况

    我写了这个小测试程序 using System namespace GCMemTest class Program static void Main string args System GC Collect System Diagnost
  • WordPress 预览_帖子_链接

    我试图在 WordPress 上发布时更改默认的 预览帖子 按钮 因为该网站安装了被黑客入侵的 WordPress 并且帖子预览不在应有的位置 我找到了钩子preview post link现在我只是想弄清楚如何制作一个小插件来解决这个问题
  • 更改构造函数原型时出现的问题

    我目前正在阅读 Stoyan Stefanov 的书 面向对象的 JavaScript 我偶然发现了一个有趣的问题 这是代码 var shape type shape getType function return this type fu
  • Python 中的解释与动态调度惩罚

    我观看了 Brandon Rhodes 关于 Cython 的演讲 EXE 的日子即将到来 Brandon 在 09 30 提到 对于特定的一小段代码 跳过解释可以带来 40 的加速 而跳过分配和调度则可以带来 574 的加速 10 10
  • 使用 Spring Cloud 连接器访问 CloudFoundry 用户提供的服务

    我正在尝试使用 Spring Cloud 来使用 Cloud Foundry 应用程序中的通用 REST 服务 该服务是使用Spring Boot创建的 如下 package com something RestController pub
  • 在 WPF 中使用命令绑定时处理异常的最佳实践是什么?

    我正在 WPF 应用程序中使用 MVVM 模式 在几个地方 我将命令绑定到视图中的输入元素 如以下 XAML 所示
  • 如何从 mongo 管道中检索每个数组元素?

    我们假设这就是 mongo db 中示例文档的样子 id 1 attrib 1 value 1 attrib 2 value 2 months 2 month 2 year 2008 transactions field 1 val 1 f
  • 如何定义使用先前值来确定 Knockout 中的类的自定义绑定?

    我需要使用淘汰赛绑定表格 并且如果新值高于或低于前一个值 我希望表格单元格获得不同的 css 类 我想到了不同的可能性 例如将先前的值存储在绑定上下文中并具有返回正确类的函数 但是是否可以添加一个接收先前值和新值的自定义绑定处理程序 虽然J
  • 无法使用 ld 链接目标文件 - Mac OS X

    exit asm SECTION text global start start xor eax eax xor ebx ebx mov al 1 int 0x80 首先 我使用 nasm f elf exit asm 生成目标文件 然后我
  • 禁用派生类上的继承方法

    在 Java 派生类中 有什么方法可以 禁用 从基类继承的方法和 或字段吗 例如 假设您有一个Shape基类有一个rotate 方法 您还可以从以下类型派生出各种类型Shape class Square Circle UpwardArrow
  • Heroku Push 拒绝了对我没有的一些 Heroku 应用程序的引用

    当我尝试在 Heroku 上进行暂存时 出现以下错误 我不明白为什么 git push staging heroku staging master Counting objects 72 done Compressing objects 1
  • 列出预训练模型中 spaCy 中最相似的单词

    有了 Gensim 在我训练了自己的模型之后 我可以使用model wv most similar cat topn 5 并获取最接近的 5 个单词的列表cat在向量空间中 例如 from gensim models import Word