【问题标题】:Use BERT under spaCy to get sentence embeddingsspaCy下使用BERT获取句子嵌入
【发布时间】:2021-06-14 20:42:37
【问题描述】:

我正在尝试使用 BERT 来获取句子嵌入。这是我的做法:

import spacy
nlp = spacy.load("en_core_web_trf")
nlp("The quick brown fox jumps over the lazy dog").vector 

这会输出一个空向量!!

array([], dtype=float32)

我错过了什么吗?

【问题讨论】:

  • spaCy 2、3 还是两者都有?哪个确切版本?

标签: python nlp spacy bert-language-model


【解决方案1】:

变形金刚与其他 spacy 模型有点不同,但你可以使用 doc._.trf_data.tensors[1].

各个 BPE(字节对编码)令牌片段的向量位于 doc._.trf_data.tensors[0] 中。请注意,我使用术语 token-pieces 而不是 tokens,以防止 spacy 令牌和 BPE 令牌生成器生成的令牌之间的混淆。

例如,在我们的例子中,spacy-token 是:

for i, spacy_tok in enumerate(doc):
  print(f"spacy-token {i + 1}: {spacy_tok.text}")
spacy-token 1: The
spacy-token 2: quick
spacy-token 3: brown
spacy-token 4: fox
spacy-token 5: jumps
spacy-token 6: over
spacy-token 7: the
spacy-token 8: lazy
spacy-token 9: dog

令牌片段是:

for i, tok_piece in enumerate(doc._.trf_data.tokens['input_texts'][0]):
  print(f"token-piece {i + 1}: {tok_piece}")
token-piece 1: <s>
token-piece 2: The
token-piece 3: Ġquick
token-piece 4: Ġbrown
token-piece 5: Ġfox
token-piece 6: Ġjumps
token-piece 7: Ġover
token-piece 8: Ġthe
token-piece 9: Ġlazy
token-piece 10: Ġdog
token-piece 11: </s>

【讨论】:

  • 我试试这个,但余弦相似度非常不同的句子给了我 0.90+ 相似度,这似乎很奇怪。
猜你喜欢
  • 2021-11-29
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多