问题标签 [huggingface-transformers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
852 浏览

python - 从 `pytorch-pretrained-bert` 迁移到 `pytorch-transformers` 关于模型()输出的问题

我无法将我的代码pytorch_pretrained_bertpytorch_transformers. 我正在尝试进行余弦相似度练习。我想提取 12 个隐藏嵌入层中倒数第二个的文本嵌入值。

使用 pytorch_pretrained_bert 与上述代码完美配合。我的encoded_layers对象是 12 个隐藏层张量的列表,允许我通过取平均值来选择和减少第 11 层,从而得到sentence_embedding可以运行余弦相似度的对象。

但是,当我将代码迁移到pytorch_transformers库时,生成的encoded_layers对象不再是 12 个隐藏层的完整列表,而是一个 shape 的火炬张量对象torch.Size([1, 7, 768]),这在我尝试创建sentence_embedding对象时导致以下错误:

迁移文档 ( https://huggingface.co/transformers/migration.html ) 指出我应该将encoded_layers对象的第一个元素作为替换,但这并不能让我访问嵌入的倒数第二个隐藏层。

我怎样才能访问它?

谢谢!

0 投票
0 回答
2311 浏览

keras - 从 BERT 分类器中删除最后 2 层会导致“'tuple' object has no attribute 'dim'”错误。为什么?

我使用 Keras(使用 ktrain)微调了一个拥抱脸转换器,然后在 Pytorch 中重新加载了模型。

我想访问倒数第三层(pre_classifier),所以我删除了最后两层:

通过它运行一个编码的句子会产生以下错误消息:

同时完全删除分类器(所有三层)

产生具有预期形状 ( ) 的预期张量(在大小 1 元组内[sentence_num,token_num,768])。

为什么移除两层(而不是三层)会破坏模型?以及如何访问pre_classifier结果?

无法通过设置访问它configoutput_hidden_states=True因为此标志返回 BERT 转换器堆栈的隐藏值,而不是其下游分类器层的隐藏值。

--

附言

用于初始化 BERT 模型的代码:

0 投票
1 回答
817 浏览

transformer - 如果 BERT 的 [CLS] 可以针对各种句子分类目标进行再训练,那么 [SEP] 呢?

在 BERT 预训练中,[CLS] 标记嵌入到分类器的输入中,该分类器的任务是下一个句子预测任务(或者,在某些 BERT 变体中,还有其他任务,例如 ALBERT 的句子顺序预测);这有助于对整个转换器进行预训练,并且还有助于使 [CLS] 位置随时可用于对其他“句子量表”任务进行再训练。

我想知道 [SEP] 是否也可以以同样的方式进行再培训。虽然 [CLS] 可能更容易重新训练,因为 Transformer 已经被训练为在整个句子中赋予其嵌入意义,而 [SEP] 没有这些“连接”(人们会假设),这可能仍然适用于足够的微调。

有了这个,可以为两种不同的分类任务重新训练相同的模型,一种使用 [CLS],另一种使用 [SEP]。

我错过了什么吗?有没有理由为什么这不起作用?

0 投票
1 回答
3098 浏览

python - BERT 中的变压器编码器和解码器的输入是什么?

我正在阅读BERT 论文,并不清楚变压器编码器和解码器的输入。

对于学习掩码语言模型(完形填空任务),论文说 15% 的标记被掩码,并且网络被训练来预测被掩码的标记。既然是这种情况,那么变压器编码器和解码器的输入是什么?

BERT 输入表示(来自论文)

变压器编码器的输入是这个输入表示吗(见上图)。如果是这样,解码器输入是什么?

此外,如何计算输出损失?它是否仅适用于蒙面位置的 softmax?为此,所有掩码标记都使用相同的线性层?

0 投票
1 回答
3441 浏览

huggingface-transformers - 在 lm 微调中前向传递期间使用 attention_mask

我对 Hugging Face 存储库上的语言模型微调代码有疑问。BERT 模型的 forward 方法似乎将一个名为attention_mask的参数作为输入。

文档说注意掩码是在将序列批处理在一起时使用的可选参数。该参数向模型指示应该注意哪些标记,哪些不应该注意。例如,tokenizer 编码方法返回这个注意掩码,一个二进制张量,指示填充索引的位置,以便模型不注意它们,这是有道理的。

但是,如果我没记错的话,我在语言模型微调的代码中看不到这个注意掩码的用法。实际上,在前向传递期间,只有输入 id 作为输入给出,参见此代码

我的问题是:这是否意味着我们不会在训练期间消除对填充标记的关注?将它们考虑在内是否有意义?或者也许我错过了代码中的某些内容?

非常感谢您的回答 :)

编辑

我注意到 Hugging Face 构建数据集的方式根本不需要填充(请参阅此代码

0 投票
1 回答
457 浏览

python - 对 gpt2 同时使用 past 和 attention_mask

我正在处理一批不同长度的句子,因此我计划利用 gpt2 中的 padding + attention_mask 功能来实现这一点。

同时,对于每个句子我需要添加一个后缀短语并运行 N 个不同的推理。例如,给定句子“我喜欢喝可乐”,我可能需要运行两个不同的推论:“我喜欢喝可乐。可乐很好”和“我喜欢喝可乐。喝很好”。因此,我试图通过使用“过去”功能来改善推理时间:https ://huggingface.co/transformers/quickstart.html#using-the-past所以我只处理原始句子(例如“我like to drink coke") 一次,然后我以某种方式扩展结果以便能够与另外两个句子一起使用:“Coke is good”和“Drink is good”。

下面你会找到一个简单的代码,它试图代表我是如何尝试这样做的。为简单起见,我只是为每个句子添加一个后缀短语(......但我仍然希望我最初的想法是可能的):

我得到的错误如下:

最初我认为这与https://github.com/huggingface/transformers/issues/3031有关- 所以我重新构建了最新的 master 来尝试修复,但我仍然遇到这个问题。

0 投票
4 回答
2377 浏览

nlp - 使用自定义 X 和 Y 数据训练 TFBertForSequenceClassification

我正在研究一个 TextClassification 问题,为此我正在尝试在 Huggingface-transformers 库中给出的 TFBertForSequenceClassification 上训练我的模型。

我按照他们的github页面上给出的示例进行操作,我可以使用给定的示例数据运行示例代码tensorflow_datasets.load('glue/mrpc')。但是,我找不到有关如何加载我自己的自定义数据并将其传入的示例 model.fit(train_dataset, epochs=2, steps_per_epoch=115, validation_data=valid_dataset, validation_steps=7)

如何定义我自己的 X,对我的 X 进行标记化并使用我的 X 和 Y 准备 train_dataset。其中 X 代表我的输入文本,Y 代表给定 X 的分类类别。

样本训练数据框:

0 投票
3 回答
11412 浏览

python - 如何使用来自 BERT 的嵌入来比较句子相似度

我正在使用 HuggingFace Transformers 包来访问预训练模型。由于我的用例需要英语和阿拉伯语的功能,我使用的是bert-base-multilingual- cased 预训练模型。我需要能够使用诸如余弦相似度之类的东西来比较句子的相似度。要使用它,我首先需要为每个句子获取一个嵌入向量,然后可以计算余弦相似度。

首先,从 BERT 模型中提取语义嵌入的最佳方法是什么?在输入句子后获取模型的最后一个隐藏状态就足够了吗?

其次,如果这是从我的句子中获取嵌入的充分方法,那么我现在遇到另一个问题,即嵌入向量的长度取决于原始句子的长度。输出的形状是[1, n, vocab_size],其中n可以有任何值。

为了计算两个向量的余弦相似度,它们需要具有相同的长度。我怎么能在这里做到这一点?像第一次求和这样幼稚的事情axis=1还能奏效吗?我还有什么其他选择?

0 投票
2 回答
3485 浏览

python-3.x - 如何使用Huggingface T5模型测试翻译任务?

我看到存在 T5model 的两个配置 - T5ModelTFT5WithLMHeadModel。我想测试这个翻译任务(例如en-de),因为它们在谷歌的原始仓库中显示。有没有办法可以使用这个模型从拥抱脸来测试翻译任务。我在文档方面没有看到任何与此相关的示例,并且想知道如何提供输入并获得结果。

任何帮助表示赞赏

0 投票
0 回答
350 浏览

python - RoBERTa 的 GilBERTo(意大利语版)

我尝试使用 GilBERTo(tokenizer 和模型)和 RoBERTa 的意大利语版本(来自 CamemBert)训练 NER 模型,但我有以下错误,有人可以帮助我理解它,也许是一个可能的解决方案?

该解决方案复制了:GitHub:R-BERT 实体关系 (我只是将 utils.py 更改为:

) 然后我在 main.py 中使用模型“roberta”,只需将 Tokenizer 更改为 GilBERTo。我使用了与原始项目相同格式的不同数据集。注意:由于缓存上传的大小问题,我禁用了 GPU,并且我使用了变形金刚 2.4.1,非常感谢!