【发布时间】:2020-12-07 04:54:04
【问题描述】:
我正在尝试从 BERT 模型中的隐藏状态获取句子向量。看着拥抱脸的 BertModel 指令here,上面写着:
from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-multilingual-cased')
model = BertModel.from_pretrained("bert-base-multilingual-cased")
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)
所以首先要注意,就像在网站上一样,它不会/不/运行。你得到:
>>> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'BertTokenizer' object is not callable
但它看起来像一个小的更改修复它,因为您不直接调用标记器,而是要求它对输入进行编码:
encoded_input = tokenizer.encode(text, return_tensors="pt")
output = model(encoded_input)
好吧,除此之外,我得到的张量的形状与我预期的不同:
>>> output[0].shape
torch.Size([1,11,768])
这是很多层。哪个是用于句子嵌入的正确层? [0]? [-1]?平均几个?我的目标是能够与这些进行余弦相似性,因此我需要一个适当的 1xN 向量而不是 NxK 张量。
我看到流行的bert-as-a-service project 似乎使用[0]
这是正确的吗?是否有关于每一层是什么的文档?
【问题讨论】:
-
关于
TypeError: 'BertTokenizer' object is not callable,您可能安装了旧版本的变压器。
标签: bert-language-model huggingface-transformers