本系统主要采用了文本分类的方法,项目主要由CNN、RNN等和基于Bert预训练模型的方法构成。
采用学校老师发放的微博数据集,为json格式,训练集的大小为8000,验证集的大小为2000,测试集大小为3000,格式如下:
[
{
"id": 22,
"content": "武汉挺[抱抱]",
"label": "positive"
},
{
"id": 23,
"content": "[doge][doge][doge][爱你][爱你][爱你]",
"label": "positive"
},
{
"id": 24,
"content": "会好起来的???还想去武汉旅游呢!",
"label": "positive"
}
]
需要数据集请私信[email protected]。
使用基于字向量的随机映射和基于SGNS的词向量映射。
基于字向量的映射:以字为分词单位,将其编码后,使用Embedding层将每个字映射为一个向量。
基于词向量的映射:基于预训练的SGNS模型,使用jieba分词工具分词后,读取预训练模型作为Embedding层。
基于Bert预训练模型的映射:使用Bert的tokenizer进行分词并标注,将句子映射为向量或将词映射为向量。
模型 | Accuracy | F1-Score | 说明 |
---|---|---|---|
CNN | 76.25% | 0.7412 | SGNS+CNN |
RNN | 72.95% | 0.7073 | SGNS+BiRNN |
LSTM | 73.3% | 0.6826 | SGNS+BiLSTM |
Bert | 81.5% | 0.7941 | Bert |
DeBerta | 83.1% | 0.802 | DeBerta |
CNN文本分类的实验部分主要参考Kim在2014年的Convolutional Neural Networks for Sentence Classification 论文,
模型结构如Figure 1所示。
CNN的模型主要由四层组成:
- 第一层:Embedding层,将每个字或词映射为一个词向量。
- 第二层:卷积层,使用256个卷积核,识别不同的模式。
- 第三层:池化层。
- 第四层:全连接层,将结果映射到分类。
本部分基于词的粒度、字的粒度进行词嵌入。
使用基于字的粒度时,CNN的精度为70%左右;
使用基于SGNS预训练的embedding模型时,以词为粒度,精度为75.45%左右,相较于字粒度随机化embedding的方式, 提升了大约5%左右的精度。
模型 | Accuracy | F1-Score |
---|---|---|
CNN | 72.3% | 0.6988 |
SGNS+CNN | 76.25% | 0.7412 |
训练时长:4.923min
本部分基于词的粒度、字的粒度进行词嵌入。
使用基于字的粒度时,BiRNN的精度为%,f1-score为。
使用基于词的粒度时,BiRNN的精度为72.95%,f1-score为0.7073。
模型 | Accuracy | F1-Score |
---|---|---|
BiRNN | 61.3% | 0.5390 |
SGNS+BiRNN | 72.95% | 0.7073 |
训练时长:5.405min
本部分基于词的粒度、字的粒度进行词嵌入。
使用基于字的粒度时,BiLSTM的精度为71.55%,f1-score为0.6826。
使用基于词的粒度时,BiLSTM的精度为73.30%,f1-score为0.7116。
模型 | Accuracy | F1-Score |
---|---|---|
BiLSTM | 71.15% | 0.6826 |
SGNS+BiLSTM | 73.05% | 0.7116 |
模型 | Accuracy | F1-Score |
---|---|---|
Bert | 81.5% | 0.7941 |
BertCNN | 79.95% | 0.7822 |
DeBerta | 83.1% | 0.802 |
DeBerta使用K折交叉验证,K=5.
部分内容参考
Chinese-Text-Classification-Pytorch
Bert-Chinese-Text-Classification-Pytorch
Chinese-Word-Vectors
[1] Convolutional Neural Networks for Sentence Classification
[2] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding