问题标签 [spacy-transformers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
29 浏览

python - 在 Python 中快速提取大空间向量

我正在尝试从基于转换器的模型中提取一些词向量。步骤是:

  1. 使用 . 通过管道运行文本nlp()
  2. 将文本分解成句子(分别分类为二进制类别)。
  3. 将句子向量保存到列表中(一旦发生分类,将被腌制并用作模型输入)。

实际模型运行得足够快,但是(与 skipgram 向量不同),从spacy.tokens.span.Span对象中提取向量并将它们保存到列表或数组对象的简单操作非常慢。

这是一个可重现的示例:

运行实际nlp()命令只需要很少的时间:

但是,如果我想将第一句(36 个单词)中的向量保存到一个列表中,它会非常慢:

显然,这不能很好地扩展。

我不明白为什么它这么慢,好像你运行type(example_sent[0].vector)它,它返回numpy.ndarray,即不是生成器,所以向量已经被计算出来了。

为什么将它从跨度移动到列表需要这么长时间?数组是(1024,)每个单词的维度,而不是(300,)几乎立即复制的 skip-gram 向量。据我所知,这是唯一的区别。

我还创建了一个所需维度的空数组(而不是列表),但这没有区别。

有任何想法吗?