BERT中的TokenEmbeddings是如何创建的?

描述BERT的论文中,有一段关于WordPiece嵌入的段落。

我们使用WordPiece嵌入(Wu等人,2016年),词汇量为30,000个标记。每条序列的第一个标记始终是一个特殊的分类标记([CLS])。对应于此标记的最终隐藏状态被用作分类任务的聚合序列表示。句子对被打包成单一序列。我们通过两种方式区分这些句子。首先,我们用一个特殊标记([SEP])将它们分开。其次,我们为每个标记添加一个学习到的嵌入,以指示它属于句子A还是句子B。如图1所示,我们将输入嵌入表示为E,将特殊[CLS]标记的最终隐藏向量表示为C 2 RH,并将第i个输入标记的最终隐藏向量表示为Ti 2 RH。对于给定的标记,其输入表示是由相应的标记、段和位置嵌入的总和构建的。这种构建的可视化可以在图2中看到。论文中的图2

据我所知,WordPiece将单词分割成像#I #like #swim #ing这样的词片,但它并不生成嵌入。然而,我在论文和其他来源中都没有找到关于这些Token Embeddings是如何生成的信息。它们是在实际预训练之前预训练的吗?如何做的?还是它们是随机初始化的?


回答:

词片是单独训练的,最常见的词会保持在一起,而不太常见的词最终会被分割成字符。

嵌入是与BERT的其余部分一起训练的。反向传播通过所有层一直到嵌入,这些嵌入就像网络中的其他参数一样被更新。

请注意,只有在训练批次中实际存在的标记的嵌入会被更新,其余的保持不变。这也是为什么你需要一个相对较小的词片词汇量的原因,这样所有嵌入在训练过程中都能频繁更新。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注