如何用BERT对多列文本做分类?

问题

想请教一下大家,这个场景怎么用BERT对多列文本做分类呀?
文本数据大概类似这样(7分类),3列都是长文本(超过512):

id背景评论理由分类
1………………0
2………………1
3………………0
4………………2
5………………3
6………………4
7………………5
8………………6
………………

PS:本人还只会使用Pytorch对单独一列文本用BERT做分类,但不知道如果有这样3列文本列的话,要怎样搭建深度学习网络。

其他

目前自己想的是把3个文本列都分别使用bert提取Embedding之后再拼在一起做分类,但有2个问题:
① 如果分别做的话是不是需要构建3个DataLoder,那这样的后面该怎么输入网络进行训练呀?
② 还有就是不知道用什么函数将Embedding向量拼在一起,大家有什么好的经验嘛?

另外,自己也有想到把3列合成一列,然后再处理,但也不行。一个是因为3列都是长文本,平均1000+,合成一列之后截断的话丢失太多信息了;另外就是,其实整个数据集不光只有文本,还有一些数值数据,所以最后还是要进行向量拼接的(这也是上面的问题),所以还是得知道在Pytorch里面,怎么在模型中间进行向量拼接。

  • 问题1,你可以使用PyTorch中的DatasetDataLoader来构建一个数据加载器。你可以先将3个文本列分别使用BERT模型提取嵌入向量,然后将这些向量组合成一个包含3个嵌入向量的列表,将其作为一个样本的特征输入到网络中。然后将标签与特征一起组合成一个Dataset对象,并将其传递到一个DataLoader对象中进行训练。这样你只需要构建一个DataLoader对象即可
  • 对于问题2,你可以使用PyTorch中的torch.cat函数将3个嵌入向量拼接起来。假设你已经得到了3个嵌入向量embeddings1embeddings2embeddings3,并且每个嵌入向量的维度为embed_dim,那么你可以使用以下代码将它们拼接成一个维度为3*embed_dim的向量:
import torch

concatenated_embeddings = torch.cat((embeddings1, embeddings2, embeddings3), dim=1)

这将返回一个形状为(batch_size, 3*embed_dim)的张量,其中batch_size表示你一次输入的样本数量。

大哥你会了吗,我也面临同样问题