我想构建一个分类器,以预测用户[('My PhD Mol', 61, 73, 'PERSON'), ('4', 151, 152, 'CARDINAL'), ('100%', 194, 198, 'PERCENT')]
是否会转发推文i
。
数据集非常庞大,包含1.6亿条推文。每条推文都带有一些元数据(例如,转发者是否跟随该推文的用户)。
单个推文的文本标记是BERT ID的有序列表。要嵌入推文,您只需使用id(因此不是文本)
是否可以对BERT进行微调以进行预测?如果是,您推荐什么课程/资源来学习如何进行微调? (我是初学者)
我还要补充一点,即预测应该是概率。
如果不可能的话,我正在考虑将嵌入转换回文本,然后使用一些我要训练的任意分类器。
答案 0 :(得分:2)
您可以微调BERT,并且可以使用BERT进行转推预测,但是您需要更多架构才能预测用户 i 是否会转推推文 j
这是我头上的架构。
高层次:
让我们逐项分解这种架构。
要创建用户 i 的嵌入,您将需要创建某种神经网络,以接受用户具有的所有功能并生成密集向量。这部分是体系结构中最困难的部分。这个区域不在我的操盘手,而是Google快速搜索“用户兴趣嵌入”,使本研究论文提出了一种名为StarSpace的算法。它建议它可以“根据用户行为获得高度有用的用户嵌入”,这就是您想要的。
要创建tweet j 的嵌入,可以使用采用令牌并生成矢量的任何类型的神经网络。 2018年之前的研究建议使用LSTM或CNN产生载体。但是,BERT(如您在文章中所提到的)是当前的最新技术。它接受文本(或文本索引)并为每个标记生成一个向量;这些标记之一应该是前置[CLS]
标记,通常将其视为整个句子的表示形式。 This article提供了该过程的概念概述。您可以在体系结构的这一部分中微调BERT。 This webpage使用PyTorch和BERT的Huggingface实现提供了具体的代码来完成此步骤(我已经完成了这些步骤并且可以证明这一点)。将来,您将需要在Google上搜索“ BERT单句分类”。
要创建表示用户 i 和tweet j 组合的嵌入,您可以做很多事情之一。您可以简单地将它们连接在一起成为一个向量。因此,如果用户 i 是M维向量,而tweet j 是N维向量,则串联将生成(M + N)维向量。另一种方法是计算hadamard乘积(按元素相乘)。在这种情况下,两个向量的维数必须相同。
要对转推或不转推进行最终分类,请构建一个简单的NN,该NN采用组合矢量并产生单个值。在这里,由于您正在执行二进制分类,因此具有逻辑(S型)函数的NN是合适的。您可以将输出解释为转发的可能性,因此大于0.5的值将转发。有关构建用于二进制分类的NN的基本详细信息,请参见this webpage。
为了使整个系统正常工作,您需要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建立模型来确定是否转发了该推文,而无需考虑用户。您可以再次点击我上面提到的链接。
答案 1 :(得分:-2)
Data Science SE中已经有一个答案,它解释了为什么BERT 不能用于预测。要点如下:
BERT不能用于下一个单词的预测,至少在当前关于屏蔽语言建模的研究状态下不能如此。
BERT受过隐藏的语言建模任务的培训,因此您不能“预测下一个单词”。您只能屏蔽一个单词,并要求BERT根据给定的句子其余部分(在屏蔽单词的左侧和右侧)进行预测。
但是据我从您的案例中了解到,您想进行“分类”,所以BERT完全有能力做到这一点。请参阅我在下面发布的link。这将有助于您根据推文的主题对推文进行分类,以便随后在闲暇时查看它们。