问题标签 [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.

0 投票
1 回答
3893 浏览

python - 在 Google Colab 中运行 python 参数

我在 Google Colab 中运行 python 文件并收到错误。我正在关注此链接中的一个 BERT 文本分类示例;

我按照所描述的教程进行操作,并且在最后一步在 colab 中运行下面的代码片段,

我知道在 Colab 中我必须像这样运行 python 文件;

但是我如何设置脚本中的其他参数。它通过错误。感谢您的帮助。

0 投票
1 回答
1951 浏览

python - 我可以使用标记化的输入文件和高棉语的自定义词汇文件从头开始预训练 BERT 模型吗

我想知道我是否可以使用自己的标记化/分段文档(以及我自己的词汇文件)作为create_pretraining_data.py脚本的输入文件(git 源:https ://github.com/google-research/伯特)。

这个问题的主要原因是高棉语的分割/标记化与英语不同。

我自己尝试了一些东西,并在运行create_pretraining_data.pyandrun_pretraining.py脚本后设法得到了一些结果。但是,我不确定我所做的是否可以被认为是正确的。

我也想知道我应该用来验证我的模型的方法。

非常感谢任何帮助!

脚本修改

我所做的修改是:

1. 将输入文件制作成列表格式

我的输入文件不是普通的纯文本,而是来自我的自定义高棉标记化输出,然后我将其制成列表格式,模仿运行示例英文文本时得到的输出。

* 外括号表示源文件,第一个嵌套括号表示文档,第二个嵌套括号表示句子。与函数all_documents内部的变量完全相同的结构create_training_instances()

2. 来自独特分词的词汇文件

这是我真的很怀疑的部分。为了创建我的词汇文件,我所做的只是从整个文档中找到唯一的标记。然后我添加核心令牌要求[CLS], [SEP], [UNK] and [MASK]。我不确定这是否是正确的方法。

非常感谢您对此部分的反馈!

3. 在 create_training_instances() 函数中跳过标记化步骤

由于我的输入文件已经与变量匹配all_documents,我跳过第 183 行到第 207 行。我将其替换为按原样读取输入:

结果/输出

原始输入文件(在自定义标记化之前)来自随机网络抓取。

有关原始和词汇文件的一些信息:

下面是运行后的输出(它的尾端) create_pretraining_data.py

create_pretraining_data_khmer_output

这就是我运行后得到的run_pretraining.py

20191119_sample_4

如上图所示,我从中得到的准确度非常低,因此我担心我是否做得正确。

0 投票
0 回答
988 浏览

python - 如何使用 BERT 使用 Hugging Face 转换器进行多类分类

我从一个示例中看到,您可以通过调整 label_list 参数来使用 Hugging Face 转换器库创建一个多类分类器。

以上似乎在 2 个 epoch 后以大约 70% 的准确度工作,所以我假设代码正在工作。然后我尝试使用亚马逊产品评论数据集,其中“reviewText”字段在“整体”字段中被分类为 1-5 之间的数字。模型仍在训练,但准确度非常低(.000ish)所以我不确定是否代码实际上是正确的。

我知道我将“可乐”作为任务参数留下了,这是一个潜在的问题,但我还有什么遗漏的吗?

0 投票
2 回答
3310 浏览

python - 获取 MASK 位置的多标记词的概率

根据语言模型获得令牌的概率相对容易,如下面的片段所示。您可以获取模型的输出,将自己限制在掩码标记的输出中,然后在输出向量中找到您请求的标记的概率。然而,这只适用于单标记词,例如,它们本身就在标记器的词汇表中。当词汇表中不存在一个词时,分词器会将其分块成它确实知道的部分(参见示例的底部)。但是由于输入句子只包含一个被掩蔽的位置,而请求的 token 有更多的 token,我们如何才能得到它的概率呢?最终,我正在寻找一种不管单词有多少子词单元都可以工作的解决方案。

在下面的代码中,我添加了许多注释来解释发生了什么,以及打印出打印语句的给定输出。您会看到预测诸如“爱”和“恨”之类的标记很简单,因为它们在标记器的词汇表中。但是,'reprimand' 不是,所以它不能在单个掩码位置被预测——它由三个子词单元组成。那么我们如何预测蒙面位置的“谴责”呢?

0 投票
2 回答
1458 浏览

transformer - Huggingface 变形金刚 - AttributeError:“MrpcProcessor”对象没有属性“tfds_map”

在 GLUE 任务上使用 Hugginface Transformers 时,出现错误AttributeError: 'MrpcProcessor' object has no attribute 'tfds_map'

我怀疑兼容性问题。

0 投票
1 回答
564 浏览

python-3.x - BERT 二进制文本分类每次运行都会得到不同的结果

我使用Simpletransformer中的 BERT 进行二进制文本分类。

我在 Colab 中使用 GPU 运行时类型工作。

我已经使用 sklearn StratifiedKFold 方法生成了训练和测试集。我有两个文件,其中包含我的折叠字典。

我在以下 while 循环中运行我的分类:

我得到不同的结果运行此代码相同的折叠:

这里以两次运行的 F1 分数为例:

对于相同的褶皱,它们怎么会如此不同?

我已经尝试过的是在循环开始之前给出一个固定的随机种子:

我想出了在循环中初始化模型的方法,因为当它在循环之外时,它会以某种方式记住它所学到的东西——这意味着在第二次折叠之后我的 f1 分数几乎是 1——尽管我删除了缓存..

0 投票
2 回答
575 浏览

python - keras LSTM 获得隐藏状态(将句子序列转换为文档上下文向量)

我正在尝试使用 keras 通过 LSTM 从句子向量创建文档上下文向量(因此每个文档都由一系列句子向量组成)。

我的目标是使用 keras 复制以下博客文章:https ://andriymulyar.com/blog/bert-document-classification

我有一个(玩具)张量,看起来像这样:X = np.array(features).reshape(5, 200, 768)所以 5 个文档,每个文档有 200 个句子向量序列 - 每个句子向量有 768 个特征。

因此,为了从我的句子向量中获得嵌入,我将我的文档编码为 one-hot-vectors 来学习 LSTM:

到目前为止,我的代码看起来像这样

当我打印时,states_h我得到一个 shape=(?,5) 的张量,我真的不知道如何访问张量内的向量,它应该代表我的文档。

还是我做错了什么?据我了解,应该有 5 个文档向量,例如doc1=[...] ; ...; doc5=[...],以便我可以将文档向量重用于分类任务。

0 投票
1 回答
807 浏览

tensorflow - estimator.train 抛出 ValueError:model_fn 应该返回一个 EstimatorSpec

这是我正在使用的代码...

我在适合我的第 304 行安装了一个断点...

estimator.train(input_fn=train_input_fn, max_steps=num_train_steps)

有人见过这个吗?我确定我安装了正确版本的 TensorFlow 和 BERT。

完整的堆栈跟踪如下......

这段代码是我尝试从这里运行一些 Google colab 代码 -

https://colab.research.google.com/github/google-research/bert/blob/master/predicting_movie_reviews_with_bert_on_tf_hub.ipynb#scrollTo=t6Nukby2EB6-

0 投票
1 回答
795 浏览

python - 如何从 BertForSequenceClassification 获取 hidden_​​states?

我阅读了官方教程(https://huggingface.co/transformers/model_doc/bert.html)并尝试设置配置,但它不起作用。

0 投票
1 回答
307 浏览

nlp - 预测文本中的缺失词

当您掩盖一些单词并尝试预测它们时,我知道 BERT 和其他解决方案。但是假设我有一个文本:

Transformer 席卷了自然加工领域,突飞猛进地改变了这个领域。新的、更大的和更好的模型几乎可以在各种任务中出现性能基准。

而且我不能提前告诉 BERT 掩蔽在哪里。我正在寻找一种算法,它可以理解缺失的单词在哪里,然后预测它们。