可以微调BERT来预测转发吗?

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

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

单条推文的文本标记是一个BERT id的有序列表。要获取推文的嵌入,只需使用这些id(所以它不是文本)。

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

我应该补充的是,预测应该是一个概率值。

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


回答:

您可以微调BERT,并且可以使用BERT来进行转发预测,但您需要更多的架构才能预测用户i是否会转发推文j

以下是我随手想出的一个架构。

enter image description here

从高层次来看:

  1. 创建用户i的密集向量表示(嵌入)(可能包含关于用户兴趣的信息,如运动)。
  2. 创建推文j的嵌入。
  3. 创建第一个和第二个嵌入结合的嵌入,例如通过连接或哈达玛积。
  4. 将此嵌入输入到一个进行二元分类的NN中,以预测转发或不转发。

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

要创建用户i的嵌入,您需要创建某种接受用户特征并生成密集向量的神经网络。这是架构中最困难的部分。这不是我的专长领域,但快速搜索“用户兴趣嵌入”会找到一篇关于名为StarSpace的算法的研究论文。它建议可以“根据用户行为获得高度信息化的用户嵌入”,这正是您想要的。

要创建推文j的嵌入,您可以使用任何类型的接受标记并生成向量的神经网络。2018年之前的研究会建议使用LSTM或CNN来生成向量。然而,BERT(如您在帖子中提到的)是当前的技术前沿。它接受文本(或文本索引)并为每个标记生成一个向量;其中一个标记应该是前置的[CLS]标记,通常被认为是整个句子的表示。这篇文章提供了过程的概念概述。您可以在架构的这一部分微调BERT。这个网页提供了使用PyTorch和Huggingface实现BERT来完成这一步骤的具体代码(我已经按照步骤操作过,可以保证其有效)。将来,您可以搜索“BERT单句分类”。

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

为了进行最终的转发或不转发的分类,构建一个简单的NN,它接受组合向量并生成一个值。在这里,由于您在进行二元分类,带有逻辑(sigmoid)函数的NN是合适的。您可以将输出解释为转发的概率,因此高于0.5的值将被视为转发。请参见这个网页,了解构建用于二元分类的NN的基本细节。

为了使整个系统工作,您需要端到端地训练它。也就是说,您必须先将所有部分连接起来,然后进行训练,而不是单独训练各个组件。

您的输入数据集看起来像这样:

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

如果您想要一个没有用户个性化的更简单的路径,那么只需省略创建用户i嵌入的组件。您可以使用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中创建了一个多类分类项目。该项目可以对…

发表回复

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