在spaCy下使用BERT获得句子嵌入

2024-05-12 13:08:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用BERT来嵌入句子。我是这样做的:

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

这将输出一个空向量

array([], dtype=float32)

我错过什么了吗


Tags: thecoreimportwebnlpspacyloadquick
1条回答
网友
1楼 · 发布于 2024-05-12 13:08:35

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

单个BPE(字节对编码)标记块的向量在doc._.trf_data.tensors[0]中。注意,我使用术语令牌片段而不是令牌,以防止spacy令牌和BPE令牌化器生成的令牌之间的混淆

例如,在我们的情况下,spacy代币是:

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>

相关问题 更多 >