/pytorch_chinese_text_classification

基于pytorch的中文文本分类,包含fasttext、textcnn、textrnn、textrnn_att、textrnn_bc、transformer、dpcnn

Primary LanguagePython

pytorch_chinese_classification

基于pytorch的中文文本分类,包含fasttext、textcnn、textrnn、textrnn_att、textrnn_bc、transformer、dpcnn

准备

首先去Chinese-Word-Vectors下载好预训练的词向量,这里使用的"Wikipedia_zh 中文维基百科"中的word,下载好之后放在data/pretrained下面
在data/pretrained下面有process_pretrained_word.py,用于将词向量转换为我们所需要的格式,运行完之后会在data/cnews/final_data/wiki_word下面生成vocab.txt以及wiki.word.embedding.pkl

相关说明

--checkponits:保存训练好的模型
--configs:各模型的配置
--data:数据文件位置
--|--cnew:数据集位置
--|--|--raw_data:数据位置
--|--|--final_data/wiki_word/:标签、词汇表、转换后的词嵌入
--|--pretrained:原始预训练词向量保存位置
--dataset:转换成DataSet
--example:各模型运行的相关示例
--logs:数据处理及运行时的日志
--models:模型
--preprocess:处理数据
--utils:辅助的一些函数

流程

整个流程的顺序是:
1、preprocess
2、dataset
3、example
首先在preprocess中会对数据进行处理(对句子进行分词,将分词后的单词利用词汇表映射成数字,将标签映射成数字),然后在dataset中将处理后的数据转换成输入给DataLoader所需的格式,最后在example文件夹下加载数据进行训练、验证、测试和预测
特别说明:对于变长lstm,我们需要额外传入每条句子的长度,因此有额外的dataset_bc_word.py和processor_bc_word.py
在example中,每一个文件对应一个模型的示例,在main.sh中是运行的语句,比如:

python textcnn_main.py --pretrained_dir="../data/cnews/final_data/wiki_word/" --pretrained_name="wiki.word.embedding.pkl" --data_dir="../data/cnews/final_data/wiki_word/" --log_dir="../logs/" --output_dir="../checkpoints/" --num_tags=10 --seed=123 --gpu_ids="0" --max_seq_len=32 --lr=3e-5 --train_batch_size=128 --train_epochs=10 --eval_batch_size=128 --dropout=0.3 --use_pretrained --vocab_size=352217 --embedding_size=300 --num_filters=256 --filter_sizes="2,3,4"

在每一个xxx_main.py中,都包含了训练、验证、测试以及预测功能,可根据相应情况进行注释。

运行结果

在测试集上的表现:所有的实验都是在相同的基础设置下完成的,可能并不是最优的参数。

模型 loss micro_f1
textcnn 26.163740 0.8955
textrnn 33.899487 0.8675
textrnn_bc 25.980649 0.8975
textrnn_att 27.346857 0.8865
dpcnn 25.749150 0.8959
transformer 29.856594 0.8861
fasttext 31.577982 0.8709
textrcnn - -

最后一个忘记测试了,=,=!
模型参考了以下,十分感谢:

https://github.com/649453932/Chinese-Text-Classification-Pytorch