【问题标题】:Is it possible to fine-tune BERT to do retweet prediction?是否可以微调 BERT 以进行转推预测?
【发布时间】:2020-04-21 18:38:58
【问题描述】:

我想构建一个分类器来预测用户i 是否会转发推文j

数据集非常庞大,包含 1.6 亿条推文。每条推文都附带一些元数据(例如,转发者是否关注推文的用户)。

单个推文的文本标记是 BERT id 的有序列表。要获得推文的嵌入,您只需使用 ids(所以它不是文本)

是否可以微调 BERT 来进行预测?如果是,您推荐哪些课程/资源来学习如何微调? (我是初学者)

我应该补充一点,预测应该是概率。

如果不可能,我正在考虑将嵌入转换回文本,然后使用我将要训练的任意分类器。

【问题讨论】:

  • 我是否正确理解您想要基于两个特征进行二进制分类,用户i 和推文j,以确定i 是否会转发j?或者您是否正在对推文 j 进行二元分类,以便(任何用户)转发推文?
  • @stackoverflowuser2010 不,不仅基于两个功能,我还没有真正弄清楚要使用哪些功能......虽然预测应该是个性化的,所以对于每个用户,我必须创建一个用户和推文配置文件,描述通过执行 NLP 引起的兴趣,然后从中提取特征值。是清楚还是我让它变得更糟了哈哈?
  • 让我在不使用“功能”一词的情况下重新表述这个问题。你的分类算法的输入是什么?具体来说,我知道您要创建一个确定y=f(x) 的模型。我知道y 将是二元决策retweet / not retweet。这里的输入x 是什么?只是推文j的正文吗?
  • @stackoverflowuser2010,老实说,我还不太确定,但从高层次的角度来看,它应该是描述我试图预测的特定推文和用户的特征。特征的一个例子是用户个人资料和推文内容之间的相似度。用户简档可以包含用户感兴趣的主题(例如,足球等)。感谢您抽出宝贵时间帮助我!
  • @Calvin 赏金怎么了?

标签: machine-learning nlp bert-language-model


【解决方案1】:

你可以微调 BERT,你可以使用 BERT 来做转推预测,但是你需要更多的架构来预测用户 i 是否会转推推文 j .

这是我想不到的架构。

在高层次上:

  1. 创建用户 i 的密集向量表示(嵌入)(可能包含有关用户兴趣的内容,例如运动)。
  2. 创建推文嵌入j
  3. 创建将前两个嵌入组合在一起的嵌入,例如使用串联或 hadamard 积。
  4. 通过执行二进制分类以预测转发或不转发的 NN 提供此嵌入。

让我们逐项分解这个架构。

要创建用户 i 的嵌入,您需要创建某种神经网络,该网络接受您拥有的有关用户的任何特征并生成密集向量。这部分是架构中最困难的部分。这个领域不在我的驾驶室里,但是在谷歌上快速搜索“用户兴趣嵌入”会弹出这篇关于算法的研究论文StarSpace。它表明它可以“根据用户行为获得信息量很大的用户嵌入”,这正是您想要的。

要创建推文 j 的嵌入,您可以使用任何类型的神经网络来获取标记并生成向量。 2018 年之前的研究建议使用 LSTM 或 CNN 来生成向量。但是,BERT(正如您在帖子中提到的)是当前最先进的。它接收文本(或文本索引)并为每个标记生成一个向量;其中一个标记应该是前置的[CLS] 标记,它通常被认为是整个句子的表示。 This article 提供了该过程的概念性概述。正是在这部分架构中,您可以微调 BERT。 This webpage 提供了使用 PyTorch 和 BERT 的 Huggingface 实现来执行此步骤的具体代码(我已经完成了这些步骤并且可以保证它)。将来,您会想在 Google 上搜索“BERT 单句分类”。

要创建表示用户 i 和推文 j 组合的嵌入,您可以做很多事情之一。您可以简单地将它们连接到一个向量中;因此,如果用户 i 是一个 M 维向量,而 tweet j 是一个 N 维向量,那么连接会产生一个 (M+N) 维向量。另一种方法是计算 hadamard 乘积(逐元素乘法);在这种情况下,两个向量必须具有相同的维度。

要对转推或不转推进行最终分类,请构建一个简单的 NN,它采用组合向量并产生单个值。在这里,由于您正在进行二进制分类,因此具有逻辑(sigmoid)函数的 NN 将是合适的。您可以将输出解释为转发的概率,因此高于 0.5 的值将被转发。请参阅this webpage,了解有关构建用于二元分类的 NN 的基本细节。

为了让整个系统正常工作,您需要一起训练它end-to-end。也就是说,您必须先将所有部分连接起来并对其进行训练,而不是单独训练组件。

您的输入数据集如下所示:

user                          tweet                  retweet?
----                          -----                  --------
20 years old, likes sports    Great game             Y
30 years old, photographer    Teen movie was good    N 

如果您想要一条没有用户个性化的更简单的路线,那么只需省略创建用户嵌入的组件i。您可以使用 BERT 构建模型来确定推文是否被转发,而不考虑用户。您可以再次访问我上面提到的链接。

【讨论】:

  • 明确地说,您使用 BERT 仅用于创建嵌入,并尝试使用 some NN 作为做出这些决策的真实模型。为什么 OP 不能简单地使用 Embedding 层来代替笨重的大型模型??
  • 正如你自己所说的BERT is indeed a classification model 那么为什么不使用它呢? OP 是初学者,所以他想要简单的架构......
  • @neelg:您可以在我帖子的第一句话中找到问题的答案。
  • 我没有看到显示 BERT 做出预测的图表。我们所有人可能都不清楚,但看到上面的标签似乎它被用作Embedding 层而不是分类模型......
  • 你的问题的答案可以在我的帖子最后一句找到。
【解决方案2】:

Data Science SE 中已经有一个答案,这解释了为什么 BERT 不能用于预测。这是要点:

BERT 不能用于下一个词的预测,至少在掩蔽语言建模研究的当前状态下是这样。

BERT 接受过ma​​sked 语言建模任务的训练,因此您无法“预测下一个单词”。您只能屏蔽一个单词并要求 BERT 在给定句子的其余部分(被屏蔽单词的左侧和右侧)的情况下对其进行预测。

但正如我从您的案例中了解到的那样,您想要进行“分类”,那么 BERT 完全有能力做到这一点。请参考我在下面发布的link。这将帮助您根据主题对推文进行分类,以便您可以在空闲时间查看它们。

【讨论】:

  • 感谢您抽出宝贵时间回答!但我不明白转推预测与下一个单词生产有何相同之处。我知道 BERT 不是一种语言模型,因此它不能用于预测下一个单词。但我觉得这是完全不同的两件事
  • 我不明白你的意思,但是如果你想训练一个分类器,你为什么要尝试使用 BERT?相反,您可以使用其他一些定制模型作为数据的分类器。哪一部分让你感到困惑?
  • 我想使用 BERT,因为我需要做一些 NLP 任务来从推文中提取特征。问题如下:给定用户 i 和推文 j,预测我转发 j 的概率。我从未对模型进行过微调,这就是为什么我要问它是否可能
  • @neelg:如果发生转发,下一个词预测与分类有什么关系?另外,我不明白你的陈述if you want to train a classifier why are you trying to use BERT。 BERT 确实是一个分类模型。
  • @stackoverflowuser2010 我认为他误解了我的问题,仅此而已。
猜你喜欢
  • 2021-02-16
  • 2020-09-25
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 2014-05-04
  • 2021-09-30
  • 2020-06-10
相关资源
最近更新 更多