使用 Bert 预测多个 token

Posted

技术标签:

【中文标题】使用 Bert 预测多个 token【英文标题】:Use Bert to predict multiple tokens 【发布时间】:2020-08-08 15:49:22 【问题描述】:

我正在寻找有关使用 Bert 和 Bert 的掩码语言模型来预测多个标记的建议。

我的数据如下:

上下文:some very long context paragraph

问题:rainy days lead to @placeholder 而这个@placeholder 的答案是wet weather。在模型中,wet environment 是预测的答案。

那么在预处理阶段,我应该将文本更改为rainy days lead to [MASK] 还是rainy days lead to [MASK] [MASK] 之类的东西?我知道masked LM在单token预测上效果很好,你认为masked LM在多token预测上效果很好吗?如果没有,您对如何预处理和训练这类数据有什么建议吗?

非常感谢!

【问题讨论】:

【参考方案1】:

所以有3个问题:

首先,

那么在预处理阶段,我是不是应该把文字改成rainy 天导致 [MASK] 或类似下雨天导致 [MASK] [面具]?

从字的角度来看,你应该设置[MASK] [MASK]。但请记住,在 BERT 中,掩码是从令牌的角度设置的。事实上,“潮湿天气”可能被标记为:[wet] [weath] [##er],在这种情况下,你应该有 [MASK] [MASK] [MASK]。所以每个令牌一个 [MASK]。

第二,

我知道蒙面 LM 在单标记预测上效果很好, 你认为蒙面的 LM 可以在多个令牌上很好地工作吗 预测?

正如您在the original paper 中看到的那样,他们说:

训练数据生成器选择 15% 的标记位置 随机预测。如果选择了第 i 个令牌,我们替换 第 i 个令牌与 (1) [MASK] 令牌 80% 的时间 (2) 随机 10% 的时间标记 (3) 10% 的时间不变的第 i 个标记。

他们注意到每个句子的 MASKED 令牌数量没有限制,您在预训练 BERT 期间有多个 MASKED 令牌。 根据我自己的经验,我对 BERT 进行了多次预训练,我注意到如果我的输入中只有一个或多个 MASKED 令牌,则对 MASKED 令牌所做的预测几乎没有差异。

第三,

如果没有,您对如何预处理和训练有什么建议吗? 这种数据?

所以答案是肯定的,但是如果你真的想对你选择的元素进行 MASK(而不是像论文中那样随机),你应该在数据被标记时调整 MASK,因为 MASKED 标记的数量会更大(或等于)您设置的单词空间中的 MASK 数量(就像我给您的示例:1 个单词不等于 1 个标记,所以基本上,1 个 MASKED 单词将是 1 个或多个 MASK 标记)。但老实说,标签化的过程会非常巨大,我建议你增加 MASK tokien 的 15% 概率,或者为每个 MASKED 令牌(或类似的东西)制作一个 MASK 1 或 2 下一个令牌的过程..

【讨论】:

谢谢!它有很大帮助

以上是关于使用 Bert 预测多个 token的主要内容,如果未能解决你的问题,请参考以下文章

使用BERT模型生成句子序列向量

BERT-wwmBERT-wwm-extRoBERTaSpanBERTERNIE2

BERT - 从多个输出与单个输出中提取 CLS 嵌入

如何使用训练有素的 BERT 模型检查点进行预测?

带有填充和掩码令牌预测的 Bert

由于代理问题,Huggingface Bert Tokenizer 从源代码构建