- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 longformer API 返回有限数量层的正确方法是什么?
与基本情况不同BERT ,我不清楚返回类型如何只获取最后 N 层。
所以,我运行这个:
from transformers import LongformerTokenizer, LongformerModel
text = "word " * 4096 # long document!
tokenizer = LongformerTokenizer.from_pretrained('allenai/longformer-base-4096')
model = LongformerModel.from_pretrained("allenai/longformer-base-4096")
encoded_input = tokenizer(text, return_tensors="pt", max_length=4096, truncation=True)
output = model(**encoded_input)
我从我的返回中得到这样的尺寸:
>>> output[0].shape
torch.Size([1, 4096, 768])
>>> output[1].shape
torch.Size([1, 768])
你可以看到 [0] 的形状与我的标记数量非常相似。我相信切片只会给我更少的标记,而不仅仅是最后 N 层。
即使要求 output_hidden_states
,尺寸仍然看起来不对,我不清楚如何将这些减少为矢量大小的一维嵌入。这就是我的意思:
encoded_input = tokenizer(text, return_tensors="pt", max_length=4096, truncation=True)
output = model(**encoded_input, output_hidden_states=True)
好的,现在让我们看看输出[2],元组的第三项:
>>> len(output[2])
13
假设我们想要查看 13 层中的最后 3 层:
>>> [pair[0].shape for pair in output[2][-3:]]
[torch.Size([4096, 768]), torch.Size([4096, 768]), torch.Size([4096, 768])]
所以我们看到 13 层中的每一层都是形状 (4096 x 768),它们看起来像:
>>> [pair[0] for pair in output[2][-3:]]
[tensor([[-0.1494, 0.0190, 0.0389, ..., -0.0470, 0.0259, 0.0609],
我们的大小仍然是 4096,因为它对应于我的 token 数:
>>> np.mean(np.stack([pair[0].detach().numpy() for pair in output[2][-3:]]), axis=0).shape
(4096, 768)
将它们平均在一起似乎不会给出有效的嵌入(对于余弦相似度之类的比较)。
最佳答案
output
是一个由两个元素组成的元组:
为了获得所有隐藏层,需要将参数output_hidden_states
设置为true:
output = model(**encoded_input, output_hidden_states=True)
输出现在有 3 个元素,第三个元素包含嵌入层和每个编码层的输出。
关于word-embedding - longformer 的最后一层用于文档嵌入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64217601/
使用 longformer API 返回有限数量层的正确方法是什么? 与基本情况不同BERT ,我不清楚返回类型如何只获取最后 N 层。 所以,我运行这个: from transformers imp
我正在尝试使更长的标签显示与文本框内联。我希望标签位于一行并与文本框内联显示。我正在使用 Bootstrap 3,但我似乎无法弄清楚如何实现这一点。下面是一些示例代码: Two line lab
当我尝试运行此 page 中的代码时,我收到以下警告. /usr/local/lib/python3.7/dist-packages/transformers/optimization.py:309:
想做类似的事情 tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertModel.from_pretra
我是一名优秀的程序员,十分优秀!