ow*_*ise 7 python nlp spacy bert-language-model
我正在尝试使用 BERT 来获取句子嵌入。我是这样做的:
import spacy
nlp = spacy.load("en_core_web_trf")
nlp("The quick brown fox jumps over the lazy dog").vector
Run Code Online (Sandbox Code Playgroud)
这输出一个空向量!
array([], dtype=float32)
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
Transformers 与其他 spacy 模型有点不同,但您可以使用\n doc._.trf_data.tensors[1]。
各个 BPE(字节对编码)令牌片段的向量位于 中doc._.trf_data.tensors[0]。请注意,我使用术语token-pieces 而不是tokens,以防止 Spacy token 和 BPE tokenizer 生成的 token 之间发生混淆。
例如,在我们的例子中,spacy-tokens 是:
\nfor i, spacy_tok in enumerate(doc):\n print(f"spacy-token {i + 1}: {spacy_tok.text}")\nRun Code Online (Sandbox Code Playgroud)\nspacy-token 1: The\nspacy-token 2: quick\nspacy-token 3: brown\nspacy-token 4: fox\nspacy-token 5: jumps\nspacy-token 6: over\nspacy-token 7: the\nspacy-token 8: lazy\nspacy-token 9: dog\nRun Code Online (Sandbox Code Playgroud)\n令牌片段是:
\nfor i, tok_piece in enumerate(doc._.trf_data.tokens['input_texts'][0]):\n print(f"token-piece {i + 1}: {tok_piece}")\nRun Code Online (Sandbox Code Playgroud)\ntoken-piece 1: <s>\ntoken-piece 2: The\ntoken-piece 3: \xc4\xa0quick\ntoken-piece 4: \xc4\xa0brown\ntoken-piece 5: \xc4\xa0fox\ntoken-piece 6: \xc4\xa0jumps\ntoken-piece 7: \xc4\xa0over\ntoken-piece 8: \xc4\xa0the\ntoken-piece 9: \xc4\xa0lazy\ntoken-piece 10: \xc4\xa0dog\ntoken-piece 11: </s>\nRun Code Online (Sandbox Code Playgroud)\n