问题标签 [bert-language-model]
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.
python - 输出对带有拥抱脸/变形金刚(火炬)的 bert-base-uncased 的关注
我正在关注一篇关于基于 BERT 的词法替换的论文(特别是尝试实现等式(2)——如果有人已经实现了整篇论文,那也很棒)。因此,我想同时获得最后的隐藏层(我唯一不确定的是输出中层的顺序:最后一个还是第一个?)以及来自基本 BERT 模型(bert-base-uncased)的注意力。
但是,我有点不确定huggingface/transformers 库是否真的为 bert-base-uncased 输出了注意力(我使用的是 Torch,但我愿意使用 TF 代替)?
从我读过的内容来看,我应该得到一个 (logits, hidden_states, attentions) 的元组,但是在下面的示例中(例如在 Google Colab 中运行),我得到的长度为 2。
我是否误解了我所得到的或以错误的方式解决这个问题?我做了明显的测试并使用output_attention=False
而不是output_attention=True
(虽然output_hidden_states=True
确实似乎添加了隐藏状态,正如预期的那样)并且我得到的输出没有任何变化。这显然是我对图书馆理解的一个不好的迹象,或者表明存在问题。
解释最终受接受答案启发的工作
question-answering - BERT 在 SQuAD 的 QA 答案中出现的特殊字符是什么意思?
我正在运行一个微调的 BERT 和 ALBERT 模型来进行问答。而且,我正在评估这些模型在SQuAD v2.0的一部分问题上的表现。我使用SQuAD 的官方评估脚本进行评估。
我使用 Huggingface transformers
,在下面您可以找到我正在运行的实际代码和示例(可能对一些尝试在 SQuAD v2.0 上运行 ALBERT 微调模型的人也有帮助):
输出如下:
如您所见,答案中有 BERT 的特殊标记,包括[CLS]
和[SEP]
。
我知道在答案只是[CLS]
(有两个tensor(0)
forstart_scores
和end_scores
)的情况下,这基本上意味着模型认为在上下文中没有对问题的答案是有意义的。在这些情况下,我只是在运行评估脚本时将该问题的答案设置为空字符串。
但我想知道在上面的例子中,我是否应该再次假设模型找不到答案并将答案设置为空字符串?或者我应该在评估模型性能时留下这样的答案?
我问这个问题是因为据我了解,如果我有这样的案例作为答案,使用评估脚本计算的性能可能会发生变化(如果我错了,请纠正我)并且我可能无法真正了解这些模型。
language-model - 使用领域文本预训练 BERT/RoBERTa 语言模型,估计需要多长时间?哪个更快?
我想使用域语料库(与情感相关的文本)对 BERT 和 RoBERTa MLM 进行预训练。使用 50k~100k 个单词需要多长时间。由于 RoBERTa 没有接受过预测下一个句子目标的训练,比 BERT 少一个训练目标,并且具有更大的小批量和学习率,我认为 RoBERTa 会快得多?
docker - 多个 GPU 是否可以作为一个具有更多内存的 GPU 工作?
我有一个深度学习工作站,其中有 4 个 GPU,每个具有 6 GB 内存。是否有可能让 docker 容器将 4 个 GPU 视为一个但 24 GB?
谢谢你。
named-entity-recognition - 如何使用经过训练的 BERT NER(命名实体识别)模型来预测新示例?
我在这篇 Medium 帖子之后训练了自己的 BERT NER:https://medium.com/@yingbiao/ner-with-bert-in-action-936ff275bc73
我将模型保存到光盘并成功加载。
model.eval() 有效:
我是 BERT 和变压器库的新手。我希望有类似的东西
会向我展示公认的实体。
我也试过:
其中输出给了我一个很大的张量,我不知道如何处理它。
我现在如何使用模型来预测例句中的实体?我应该如何处理输出?
谢谢!
python-3.x - 获取 BERT 中 '[UNK]' 的值
我设计了一个基于 BERT 的模型来解决 NER 任务。我正在使用transformers
带有"dccuchile/bert-base-spanish-wwm-cased"
预训练模型的库。当我的模型检测到一个实体但令牌是'[UNK]'
. 我怎么知道那个标记后面的字符串是什么?
我知道未知令牌无法恢复为原始令牌,但我想至少在将输入传递给模型之前捕获该值。
代码非常简单:
如您所见,非常简单,只需标记化、填充或截断、创建 attentionMask 并调用模型。
我尝试过使用regex
,试图找到它周围的两个令牌以及类似的东西,但我无法正确解决它。
python - BERT 中 NER 的正确格式化数据应该是什么样子?
我正在使用 Huggingface 的transformers
库并想使用 BERT 执行 NER。我试图找到一个明确的示例,说明如何使用 BERT 正确格式化 NER 的数据。从论文和我发现的评论中,我并不完全清楚。
假设我们有以下句子和标签:
我们输入到模型的数据会是这样的:
?
谢谢!
machine-learning - 如何在做自己的训练任务时更新预训练的bert模型的词汇?
我现在正在研究使用 BERT 模型预测掩码单词的任务。与其他人不同,需要从特定选项中选择答案。
例如:
我使用拥抱脸的 BertForMaskedLM 来完成这项任务。这个模型会给我一个概率矩阵,它代表每个单词出现在 [MASK] 中的概率,我只需要比较选项中单词的概率来选择答案。
但问题是:如果选项不在“bert-vocabulary.txt”中,上述方法将不起作用,因为输出矩阵没有给出它们的概率。如果选项不是一个单词,也会出现同样的问题。
我应该更新词汇表吗?如何更新?或者如何在预训练的基础上训练模型添加新词?
tensorflow - BERT 模型中的 input_ids、input_mask 和 segment_ids 变量来自哪里?
我正在尝试完成Google Colab中的 Google BERT 教程,并且很难遵循其中的一些步骤。
具体来说,有一个名为的函数create_model
,其内容如下:
这很好,但是当我create_model
在笔记本中查找函数的调用位置时input_ids
,我并不清楚 input_mask
和参数的来源。segment_ids
这是稍后在笔记本中引用该函数的地方:
这里的问题是该features
参数没有在父函数中作为参数列出,也没有在笔记本的其他任何地方定义。所以我不确定它为什么会起作用,更重要的是,我不确定类似features['input_ids']
的东西应该代表什么。如果我不清楚这一点,就很难理解 BERT 的实际作用。
谢谢您的帮助。
pytorch - BERT 错误:无法压缩值不是 1 的维度
我有一个基于 pytorch-pretrained-BERT 的 mlmodel,通过 ONNX 导出到 CoreML。这个过程非常顺利,所以现在我正在尝试做一些(非常)基本的测试——即,只是为了做出某种预测,并大致了解我们可能遇到的性能问题。
但是,当我尝试运行预测时,出现以下错误:
此错误是否表明模型本身存在问题(即,来自模型转换),还是在 Swift/CoreML 中我做错了什么?我的预测函数如下所示:
在这个阶段,我不想做任何有意义的事情,只是为了让它运行。
我使用了 pytorch-pretrained-BERT 存储库,因为我能够找到一个基础的预训练示例。从那以后我注意到 HuggingFace 已经发布了一个“从头开始”的培训选项,但是教程中仍有一些问题正在整理中。所以我想至少了解我当前的模型/方法可能出了什么问题。但是,如果问题肯定出在 PyTorch->ONNX->CoreML 转换中,那么我真的不想打这场仗,只会深入研究 HuggingFace 提供的东西。
任何想法表示赞赏。
更新:根据 Matthijs 的建议,我试图从 python 中的模型进行预测:
我承认我之前没有从 python 运行过 mlmodel,但我认为输入是正确的。规范表明:
对于我的投入。
对于这种情况,我没有收到cannot squeeze
消息或错误代码 (-5),但它确实以Error computing NN outputs
. 所以肯定有问题。我只是完全不确定如何调试它。
J。
更新:为了比较,我已经训练/转换了 HuggingFace BERT 模型(实际上是 DistilBert——我已经相应地更新了上面的代码)并且有同样的错误。查看来自 onnx 的日志,我看到Squeeze
添加了一个(当然,从 onnx-coreml 日志中也很清楚),但squeeze
PyTorch 代码中唯一的一个是 in BertForQuestionAnswering
,而不是BertForMaskedLM
. 也许 onnx 正在构建问答模型,而不是 mlm 模型(或者问答模型被保存在检查点中)?
查看 swift-coreml-transformers 示例代码,我可以看到 distilBert 的输入只是let input_ids = MLMultiArray.from(allTokens, dims: 2)
,这正是我定义它的方式。所以我想,我处于死胡同。有没有人设法在 CoreML 中使用 Bert/DistilBert 运行 MLM(通过 onnx)?如果是这样,一个例子将非常有帮助。
顺便说一句,我正在使用run_language_modeling.py
HuggingFace 的最新版本进行训练。
查看 Netron 中的 mlmodel,我可以看到有问题的squeeze
. 我承认我不知道输入的那个分支是做什么用的,但我猜它是一个掩码(进一步的猜测可能是它与问答有关)。我可以以某种方式删除它吗?