【问题标题】:Using Pretrained BERT model to add additional words that are not recognized by the model使用 Pretrained BERT 模型添加模型无法识别的额外单词
【发布时间】:2021-02-25 05:03:40
【问题描述】:

我需要一些关于在现有 BERT 模型中添加额外单词的帮助。我有两个问题请指导我:

我正在为一个域处理 NER 任务:

BERT 识别为 [UNK] 的单词很少(不确定确切的数字),但模型需要这些实体才能识别。预训练模型在“bert-base-cases”上学习得很好(高达 80%)准确率,同时提供标记数据和微调模型,但直观地说,如果模型识别所有实体,它会学习得更好。

  1. 是否需要在 vocabs.txt 中添加那些未知实体并再次训练模型?

  2. 我需要使用 Scratch 中的数据训练 BERT 模型吗?

谢谢...

【问题讨论】:

  • 请问您找到解决这个问题的方法了吗
  • @user5520049 是的,我通过在我的域数据集上预训练 BERT 模型并为下游 NER 任务训练域采用的 BERT 模型解决了这个问题。这是github链接:github.com/geo47/MenuNER

标签: bert-language-model named-entity-recognition pre-trained-model


【解决方案1】:

BERT 运行良好,因为它是在包含 33 亿个单词的超大型文本数据集上进行预训练的。从 skratch 训练 BERT 需要大量资源,并且在大多数合理的用例中没有回报。

BERT 使用 wordpiece 算法进行输入分割。从理论上讲,这应该确保不存在以[UNK] 结尾的词汇表外标记。分割中最坏的情况是输入标记最终被分割成单个字符。如果分割正确,[UNK] 只有在标记器遇到不在训练数据中的 UTF-8 时才会出现。

您的问题最可能的根源:

  1. 标记化中有一个错误,因此它会生成单词片段词汇表中没有的标记。 (也许是单词标记化而不是 WordPiece 标记化?)

  2. 这是一个编码问题,会生成无效或奇怪的 UTF-8 字符。

【讨论】:

  • 感谢您的回答!引用这个“分割中最坏的情况是输入标记最终被分割成单个字符。”它不会影响预测实体的最终结果吗?是否可以使用预训练的 BERT 并在特定领域的原始文本数据上进一步训练模型?您如何看待在 vocab.txt 文件中添加新单词?谢谢
  • 过度分割的实体不应该成为模型的问题。继续对特定领域数据进行预训练会有所帮助。向 vocab.txt 添加单词不是一种选择,这意味着为新符号添加嵌入并使用新参数重新训练模型。
  • 再次感谢 :-) 您能否解释一下“继续对特定领域数据进行预训练会有所帮助”的想法。你指的是带注释的数据吗?
猜你喜欢
  • 1970-01-01
  • 2023-02-23
  • 2021-08-25
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多