训练 BERT 模型并使用 BERT 嵌入

Posted

技术标签:

【中文标题】训练 BERT 模型并使用 BERT 嵌入【英文标题】:Training a BERT model and using the BERT embeddings 【发布时间】:2020-12-08 02:46:28 【问题描述】:

我一直在阅读有关 BERT 的信息,并将 BERT 嵌入用于分类任务。我已经阅读了很多文章,但我对它的理解仍然不是 100%(我自学了 NLP,所以我对资源的访问可能会受到一些限制)。首先,我将描述我的任务。

我计划使用 BERT 嵌入进行分类,因为它封装了含义和语言。不幸的是,我的语言(爱尔兰语)没有 BERT 模型,所以我考虑训练自己的模型。我知道 BERT 基本上是 Transformer Encoder 的“扩展”。

这是我的问题/疑问:

我认为这很明显,但要检查一下,预训练的 BERT 嵌入不能应用于不同的语言(标准嵌入模型是在英语的 wiki 数据集上训练的,我认为它可能不适用于其他语言明显的原因)?

我的数据集包含大约 850k 的爱尔兰语句子(大约 2200 万字)。这足以训练一个像样的 BERT 模型吗?我可以找到更多数据,但要在爱尔兰语中获得更多数据会非常困难。

是否会建议在 PyTorch 或 TensorFlow 中“从头开始”制作 BERT 模型,或者 Fairseq 和 OpenNMT 之类的模型好用吗?

对于这样一个不连贯的问题,我深表歉意,但总而言之,我到处都在试图完全理解 BERT,特别是训练过程和仅针对嵌入进行调整。如果这一切都错了,或者只是有建议,我将不胜感激。

【问题讨论】:

通常不建议从头开始训练 Bert,因为它需要一些相当大的资源,除非你想等待数年才能结束训练。您是否研究过多语言模型? @N.Kiefer 是的,正如我发布的那样,我直接从 BERT github repo 中遇到了这样的模型。我将尝试使用这些并四处寻找其他人。只是问一下,你知道其他多语言模型吗? 鉴于您使用 python,您知道transformers 包吗?它还有社区训练的模型here。 【参考方案1】:

我和你一样,是 NLP 的自知老师。由于您还没有开始(您将拥有如此安静的旅程,不是吗?),我建议您在 tensorflow 库中查看此项目,因为它来自 Google,您将可以更好地访问它的所有内容权力(只是我的看法):

首先,您需要一个词汇文件来进行标记:它是一个文件 (txt),其中包含固定大小的字符串,每行一个。 BERT 使用大约 30.000,因此也要考虑您的数字(数字越大并不意味着精度越高)。 This tutorial of tokenization will help you

如果您对变压器的工作原理有浓厚的兴趣,then check out this one in addition

在从头训练一个新的BERT 模型方面,看看这个问题: Can you train a BERT model from scratch with task specific architecture?

您需要一台功能非常强大的计算机才能执行此操作。如果没有,你会有很多内存问题。另一方面,Tensorflow 允许你训练它的hub 模型(预处理和编码器),所以我认为没有必要重新发明***。为此,请使用tensorflow_hub(也安装tensorflow_text,因为我认为您会遇到依赖错误)。我让你在这里the link for tfdev hub of each preprocessing and encoder models of BERT(如果你下载一个,在资产文件夹中你会找到词汇文件)。

850K 句子和 22M 单词可能比原始 BERT 中使用的数据少。如果您的项目只是出于好奇,那么它就足够大了。

希望我对你有所帮助!祝你好运

PD:我也开始使用BERT。你的问题是从去年八月开始的,所以我认为你已经取得了一些进展。我会很感激并有兴趣阅读它!

【讨论】:

【参考方案2】:

虽然不在问题的标题中,但您的问题似乎是如何获得爱尔兰语的 BERT 模型。现在提供三种单语爱尔兰语 BERT 模型:

自 2020 年 5 月起,wikibert-ga 接受了爱尔兰***的培训(约 70 万句)。 自2020年8月起,有BERTreach。模型卡说它接受了 4700 万个标记(210 万个句子)的训练,包括爱尔兰语的 PARSEME 口头多词表达语料库,大概使用了未注释的原始部分。此外,他们使用Corpus Crawler 和一个小型语料库,大概来自https://wortschatz.uni-leipzig.de/en/download/Irish(模型卡中的链接不起作用)。 自 2021 年 7 月以来,gaBERT 接受了 790 万个句子的训练,包括不可免费获得的语料库。 (数据源之间存在一些重叠。仅计算明显不相交的源,至少有 470 万句。)

此外,您可能会对多语言 LaBSE 模型感兴趣,因为它经过专门训练可以对句子的含义进行编码。

免责声明:我是 gaBERT 论文的合著者。

【讨论】:

以上是关于训练 BERT 模型并使用 BERT 嵌入的主要内容,如果未能解决你的问题,请参考以下文章

如何在 HuggingFace Transformers 库中获取中间层的预训练 BERT 模型输出?

实战篇是时候彻底弄懂BERT模型了(建议收藏)

中文bert wwm 预训练参考笔记

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

BERT:深度双向预训练语言模型

预训练语言模型整理(ELMo/GPT/BERT...)