1.模型介绍
a.预训练模型:
Electra-small 在180G中文数据下pre-trainning模型;
使用Transformers加载"hfl/chinese-electra-180g-small-generator"语言模型。
b.模型结构:
- A、B两个句子,分别过同一个Electra-small模型。
- 分别得到句向量表示,Seq_A_vector、Seq_B_vector。
- 两个向量进行拼接,[Seq_A_vector, Seq_B_vector],拼接成一个向量。
- 接一层全链接(hidden_dims = 2048)。
- 接输出层,即sigmoid到一维向量上。
- 使用二元交叉熵求Loss。
模型结构:
2.训练方式
使用Colab+transformers+tf2.0进行训练。
3.数据准备
数据为问句对;标签为相似(1),不想似(0)。
训练集20w条,验证集2w,测试集3w。
4.调参结果
参数详情:
max_seq_length = 32;learning_rate = 3e-5
a.batch_size
epoches = 5
batch_size | 8 | 16 | 32 | 64 | 128 |
loss | 0.2892 | 0.2855 | 0.3350 | 0.3399 | 0.3498 |
accuracy | 0.8797 | 0.8782 | 0.8551 | 0.8544 | 0.8507 |
b.epoch
batch_size = 16
epoch | 5 | 7 | 10 |
loss | 0.2855 | 0.2687 | 0.2700 |
accuracy | 0.8782 | 0.8876 | 0.8863 |
c.模型目标函数
epoch = 5;batch_size = 16
| concat(u,v) | concat(u,v,|u-v|) | concat(u,v,u*v) |
loss | 0.2855 | 0.3320 | 0.3136 |
accuracy | 0.8782 | 0.8605 | 0.8630 |
d.句向量的生成方式
epoch = 5;batch_size = 16;concat(u,v)
| cls | mean | max |
loss | 0.2855 | 0.2792 | 0.3050 |
accuracy | 0.8782 | 0.8837 | 0.8696 |
e.bert层选取
epoch = 5;batch_size = 16;concat(u,v);mean
bert层 | -1 | -2 | -3 | -1,-2 | -1,-2,-3,-4 |
loss | 0.2792 | 0.2587 | 0.2601 | 0.2764 | 0.2535 |
accuracy | 0.8837 | 0.8940 | 0.8924 | 0.8843 | 0.8977 |
2.预训练模型
更改预训练模型:
模型 | 参数量 | 准确率 |
hfl/chinese-electra-180g-small-generator | 4M | 0.8977 |
hfl/chinese-electra-180g-small-discriminator | 16M | 0.9002 |
hfl/chinese-electra-180g-small-ex-generator | 7.8M | 0.8975 |
hfl/chinese-electra-180g-small-ex-discriminator | 28.7M | 0.9061 |
hfl/chinese-electra-180g-base-discriminator | 114M | 0.9059 |
hfl/chinese-electra-180g-base-generator | 25M(565MGPU显存) | 0.9075 |
bert-base-chinese | 110M(1333MGPU显存) | 0.9110 |
模型修改:
使用sentence-transformers库实现。
crossencoder(bert-base) : 0.9306%
biencoder(cosine):效果不佳
crossencoder的训练方式的准确率可以达到93%,优于之前的最优的91%;之前的模型使用损失函数为分类的交叉熵损失函数,而在相同的数据集标注下,使用cosine损失函数训练时相关系数结果为0.57左右,训练结果不佳。而该实现方式使用sentence-transformers库,使用cosine损失的biencoder训练方式与之前自己实现的结果相同。