想请教一下大家,这个场景怎么用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里面,怎么在模型中间进行向量拼接。
Dataset
和DataLoader
来构建一个数据加载器。你可以先将3个文本列分别使用BERT模型提取嵌入向量,然后将这些向量组合成一个包含3个嵌入向量的列表,将其作为一个样本的特征输入到网络中。然后将标签与特征一起组合成一个Dataset
对象,并将其传递到一个DataLoader
对象中进行训练。这样你只需要构建一个DataLoader
对象即可torch.cat
函数将3个嵌入向量拼接起来。假设你已经得到了3个嵌入向量embeddings1
、embeddings2
和embeddings3
,并且每个嵌入向量的维度为embed_dim
,那么你可以使用以下代码将它们拼接成一个维度为3*embed_dim
的向量:import torch
concatenated_embeddings = torch.cat((embeddings1, embeddings2, embeddings3), dim=1)
这将返回一个形状为(batch_size, 3*embed_dim)
的张量,其中batch_size
表示你一次输入的样本数量。
大哥你会了吗,我也面临同样问题