训练 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 嵌入的主要内容,如果未能解决你的问题,请参考以下文章