- 定义样本的处理操作。—> torchtext.data.Field
- 加载 corpus (都是 string)—> torchtext.data.Datasets
- 在Datasets 中,torchtext 将 corpus 处理成一个个的 torchtext.data.Example 实例
- 创建 torchtext.data.Example 的时候,会调用 field.preprocess 方法
- 创建词汇表, 用来将 string token 转成 index —> field.build_vocab()
- 词汇表负责:string token ---> index, index ---> string token ,string token ---> word vector
- 将处理后的数据 进行 batch 操作。—> torchtext.data.Iterator
- 将 Datasets 中的数据 batch 化
- 其中会包含一些 pad 操作,保证一个 batch 中的 example 长度一致
- 在这里将 string token 转化成index。
全局配置文件由三部分组成;
- 数据集及数据预处理的配置
- 模型的配置
- 训练的配置
-
toutiao_cat_data.txt 新闻短文本分类数据集,38万条数据,15个分类,详见这里
-
weibo_senti_100k.csv 带情感标注新浪微博,10万条数据,2个分类,正向负向约各5万,详见这里
-
ChnSentiCorp_htl_all.csv 酒店评论数据,7000条数据,2个分类,正向5000多,负向2000多,详见这里 (以上数据集来自ChineseNLPCorpus)
-
cnews 新闻数据,使用THUCNews的一个子集。训练使用了其中的10个分类,每个分类6500条数据。类别:体育, 财经, 房产, 家居, 教育, 科技, 时尚, 时政, 游戏, 娱乐
- 中文词向量:有各种预训练的中文词向量
优化器:adam or sgd 学习率:1e-3 结果: Epoch: 10 | Epoch Time: 0m 9s Train Loss: 0.697 | Train Acc: 50.18% Val. Loss: 0.697 | Val. Acc: 49.14% Test Loss: 0.693 | Test Acc: 50.03%
注意:batch_first = False
因为rnn存在梯度弥散的问题,LSTM通过增加一个循环状态memery,使用门来控制memery的进出,可以克服这个问题
对于cnews十分类的数据测试结果:
Epoch: 05 | Epoch Time: 10m 55s
Train Loss: 0.026 | Train Acc: 99.24%
Val. Loss: 0.204 | Val. Acc: 95.49%
Test Loss: 0.096 | Test Acc: 97.26%
bert + LSTM Epoch: 05 | Epoch Time: 21m 20s Train Loss: 0.033 | Train Acc: 98.94% Val. Loss: 0.198 | Val. Acc: 94.32% Test Loss: 0.133 | Test Acc: 95.99%
与LSTM相比模型参数相差不大,但是fastText速度更快,是LSTM的1/6。效果略低于lstm
Epoch: 05 | Epoch Time: 0m 10s
Train Loss: 0.082 | Train Acc: 97.83%
Val. Loss: 0.170 | Val. Acc: 95.21%
Test Loss: 0.171 | Test Acc: 95.49%