这里是利用python3.6进行“特征提取+分类器”来实现美团评论的文本二分类问题。在特征提取部分提取了6种特征,分类器选择了python里面的包xgboost和lightGBM分别实现提升树和GBDT(梯度提升决策树)。现在,最终的结果(准确率和AUC)不是特别好,希望通过调节分类器模型和参数最终可以有一个比较好的结果。
其中:
- (1)-(5):数据预处理
- (6)-(12):一层、两层以及双向lstm模型
- (13):分类器
- (14):feature文件夹下的数据文件介绍
- (15):lib文件夹下的数据文件介绍
- (16):model文件夹下的数据文件介绍
- (17):sentiment_dic文件夹下的数据文件介绍
- (18):tool文件夹下的数据文件介绍
Author | manderous |
---|---|
manderous@foxmail.com |
- 数据预处理
- (1)pretreatment.py
- (2)bi_tri_gram.py
- (3)word2vec_test.py
- (4)zhwiki_2017_03.sg_50d.word2vec
- (5)PrefixSpan.py
- 特征提取
- (6)feature_pos.py
- (7)feature_fresq.py
- (8)feature_sentiment.py
- (9)feature_slen.py
- (10)feature_senti_num.py
- (11)feature_enti_num.py
- (12)import_csv.py
- 分类器
- (13)boost_tree.py
- (14)feature文件夹下的数据文件介绍
- (15)lib文件夹下的数据文件介绍
- (16)model文件夹下的数据文件介绍
- (17)sentiment_dic文件夹下的数据文件介绍
- (18)tool文件夹下的数据文件介绍
输入:
./lib/train.txt:训练集<br>
./lib/test.txt:测试集<br>
输出:
./lib/train_positive_cut.txt:训练集,正标签,的分词结果<br>
./lib/train_positive_pos.txt:训练集,正标签,的词性标注结果<br>
./lib/train_positive_Wpos.txt:训练集,正标签,的分词和词性标注结果<br>
<br>
./lib/train_negative_cut.txt:训练集,负标签,的分词结果<br>
./lib/train_negative_pos.txt:训练集,负标签,的词性标注结果<br>
./lib/train_negative_Wpos.txt:训练集,负标签,的分词和词性标注结果<br>
<br>
./lib/train_cut.txt:训练集,的分词结果<br>
./lib/train_pos.txt':训练集,的词性标注结果<br>
./lib/train_Wpos.txt:训练集,的分词和词性标注结果<br>
输入:
./lib/train_positive_cut.txt:训练集,正标签,的分词结果<br>
./lib/train_negative_cut.txt:训练集,负标签,的分词结果<br>
输出:
./lib/train_positive_trigram.txt:训练集,正标签,的tri-gram结果<br>
./lib/train_negative_trigram.txt:训练集,负标签,的tri-gram结果<br>
输入:
./lib/train_positive_cut.txt:训练集,正标签,的分词结果<br>
./lib/train_negative_cut.txt:训练集,负标签,的分词结果<br>
输出:
./lib/wordsList.npy:数字索引词语变量<br>
./lib/wordIndexVector.npy:数字索引词向量变量<br>
百度云资源:https://pan.baidu.com/s/1C94HXCCWOmX-W4IbajXFyA
输入:
./lib/train_positive_trigram.txt:训练集,正标签,的tri-gram结果<br>
./lib/train_negative_trigram.txt:训练集,负标签,的tri-gram结果<br>
输出:
./lib/train_positive_prefixPattern.txt:训练集,正标签,的所以频繁项(支持度50)<br>
./lib/train_positive_prefixFrequentSub_sup50.txt:训练集,正标签,的所以频繁项(做了一些处理,比如删除中括号,只保留在train_positive_prefixPattern.txt中第一个中括号里面的频繁词序列)(支持度50)<br>
./lib/train_positive_prefixFrequentSub_sup25.txt:训练集,正标签,的所以频繁项(做了一些处理,比如删除中括号,只保留在train_positive_prefixPattern.txt中第一个中括号里面的频繁词序列)(支持度25)<br>
<br>
./lib/train_negative_prefixPattern.txt:训练集,负标签,的所以频繁项(支持度100)<br>
./lib/train_negative_prefixFrequentSub_sup100.txt:训练集,负标签,的所以频繁项(做了一些处理,比如删除中括号,只保留在train_positive_prefixPattern.txt中第一个中括号里面的频繁词序列)(支持度100)<br>
./lib/train_negative_prefixFrequentSub_sup50.txt:训练集,负标签,的所以频繁项(做了一些处理,比如删除中括号,只保留在train_positive_prefixPattern.txt中第一个中括号里面的频繁词序列)(支持度50)<br>
<br>
./lib/train_squence_dict.txt:最终得到的训练集的频繁词序列!!!以及对应的区分度dist(这里最终选出的频繁词序列要求支持度dist>=0.85)<br>
jieba词性对照表: 参考网址:
- 1 jieba分词中所有词性对应字母(词性列表及符号表示) https://blog.csdn.net/a2099948768/article/details/82216906
- 2 jieba中文分词词性/解释对照表 http://www.niumou.com.cn/183
- 3 重要词性对照:
n/n开头的:名词 ng nl nr ns nt nz
v/v开头的:动词 vd vf vg vi vl vn vs vx vy
a/a开头的:形容词 ad ag al an
zg(部分是副词)/d:副词
uj:助词“的” - 4 根据佳峰师兄的论文中的词性组合
a + a:1
a + n:2
a + uj + n:3
d/zg + a:4
d/zg + v:5
d + d/zg + a:6
n + a:7
其它:0
输入:
./lib/train_pos.txt:训练集,的词性标注结果<br>
输出:
./lib/train_feature_pos.txt:训练集,词性组合模式的特征<br>
根据PrefixSpan.py文件提取出来的,输出字典变量:squence_support_dist_dict_filter,或者输出文件:train_data_squence_dict.txt
一如既往 的 好:1
不错:2
不错 的:3
古色古香:4
味道 不错:5
很 不错:6
很 好:7
很 新鲜:8
得 恰到好处:9
恰到好处:10
新鲜:11
最:12
服务:13
服务态度:14
烤:15
的 恰到好处:16
还:17
还不错:18
其它:0
输入:
./lib/train_cut.txt:训练集,的分词结果<br>
输出:
./lib/train_feature_fresq.txt:训练集,频繁词序列模式的特征<br>
情感得分
积极:2
消极:1
中性:0
输入:
./lib/train_cut.txt:训练集,的分词结果<br>
./sentiment_dic/deny.txt:否定词典<br>
./sentiment_dic/positive_sentiment.txt:正面情感词语<br>
./sentiment_dic/positive_comment.txt:正面评价词语<br>
./sentiment_dic/negative_sentiment.txt:负面情感词语<br>
./sentiment_dic/negative_comment.txt:负面评价词语<br>
./sentiment_dic/degree.txt:程度级别词语(有extreme、very、more、ish、insufficiently、over六个程度等级)<br>
输出:
./lib/train_feature_sentiment.txt:训练集,情感模式的特征<br>
输入:
./lib/train_cut.txt:训练集,的分词结果<br>
输出:
./lib/train_feature_slen.txt:训练集,句子长度的特征<br>
输入:
./lib/train_cut.txt:训练集,的分词结果<br>
./sentiment_dic/positive_sentiment.txt:正面情感词语<br>
./sentiment_dic/positive_comment.txt:正面评价词语<br>
./sentiment_dic/negative_sentiment.txt:负面情感词语<br>
./sentiment_dic/negative_comment.txt:负面评价词语<br>
输出:
./lib/train_feature_senti_num.txt:训练集,情感次个数的特征<br>
在这里,我认为所有的名词都是实体,也就是在jieba词性标注中,被标注为n, ng, nl, nr, ns, nt, nz的词语。
输入:
./lib/train_pos.txt':训练集,的词性标注结果<br>
输出:
./lib/train_feature_enti_num.txt:训练集,情感次个数的特征<br>
输入:
./lib/train.txt:训练集<br>
./lib/train_feature_pos.txt:训练集,词性组合模式的特征<br>
./lib/train_feature_fresq.txt:训练集,频繁词序列模式的特征<br>
./lib/train_feature_sentiment.txt:训练集,情感模式的特征<br>
./lib/train_feature_slen.txt:训练集,句子长度的特征<br>
输出:
./feature/train.csv:训练集,所有的特征(特征空间)<br>
最后还会显示出XGBoost和LightGBM的损失值。
输入:
./feature/train.csv:训练集,所有的特征(特征空间)<br>
输出:
./feature/train.svm:训练集(原训练集的80%),表示成稀疏矩阵的形式<br>
./feature/valid.svm:验证集(原训练集的20%),表示成稀疏矩阵的形式<br>
./model/model.txt:XGBoost训练出来的模型的可视化<br>
./model/xgb.dump.raw.txt:LightGBM训练出来的模型的可视化<br>
- 1 train.csv:训练集,所有的特征(特征空间)(import_csv.py生成的 csv文件)
- 2 train.svm:训练集(原训练集的80%),表示成稀疏矩阵的形式(boost_tree.py生成的 svm文件)
- 3 valid.svm:验证集(原训练集的20%),表示成稀疏矩阵的形式(boost_tree.py生成的 svm文件)
-
1 train_positive_cut.txt:训练集,正标签,的分词结果(pretreatment.py生成的 txt文件)
-
2 train_positive_pos.txt:训练集,正标签,的词性标注结果(pretreatment.py生成的 txt文件)
-
3 train_positive_Wpos.txt:训练集,正标签,的分词和词性标注结果(pretreatment.py生成的 txt文件)
-
4 train_negative_cut.txt:训练集,负标签,的分词结果(pretreatment.py生成的 txt文件)
-
5 train_negative_pos.txt:训练集,负标签,的词性标注结果(pretreatment.py生成的 txt文件)
-
6 train_negative_Wpos.txt:训练集,负标签,的分词和词性标注结果(pretreatment.py生成的 txt文件)
-
7 train_cut.txt:训练集,的分词结果(pretreatment.py生成的 txt文件)
-
8 train_pos.txt':训练集,的词性标注结果(pretreatment.py生成的 txt文件)
-
9 train_Wpos.txt:训练集,的分词和词性标注结果(pretreatment.py生成的 txt文件)
-
10 train_positive_trigram.txt:训练集,正标签,的tri-gram结果(bi_tri_gram.py生成的 txt文件)
-
11 train_negative_trigram.txt:训练集,负标签,的tri-gram结果(bi_tri_gram.py生成的 txt文件)
-
12 wordsList.npy:数字索引词语变量(word2vec_test.py生成的 npy文件)
-
13 wordIndexVector.npy:数字索引词向量变量(word2vec_test.py生成的 npy文件)
-
14 train_positive_prefixPattern.txt:训练集,正标签,的所以频繁项(支持度50)(PrefixSpan.py生成的 txt文件)
-
15 train_positive_prefixFrequentSub_sup50.txt:训练集,正标签,的所以频繁项(做了一些处理,比如删除中括号,只保留在train_positive_prefixPattern.txt中第一个中括号里面的频繁词序列)(支持度50)(PrefixSpan.py生成的 txt文件)
-
16 train_positive_prefixFrequentSub_sup25.txt:训练集,正标签,的所以频繁项(做了一些处理,比如删除中括号,只保留在train_positive_prefixPattern.txt中第一个中括号里面的频繁词序列)(支持度25)(PrefixSpan.py生成的 txt文件)
-
17 train_negative_prefixPattern.txt:训练集,负标签,的所以频繁项(支持度100)(PrefixSpan.py生成的 txt文件)
-
18 train_negative_prefixFrequentSub_sup100.txt:训练集,负标签,的所以频繁项(做了一些处理,比如删除中括号,只保留在train_positive_prefixPattern.txt中第一个中括号里面的频繁词序列)(支持度100)(PrefixSpan.py生成的 txt文件)
-
19 train_negative_prefixFrequentSub_sup50.txt:训练集,负标签,的所以频繁项(做了一些处理,比如删除中括号,只保留在train_positive_prefixPattern.txt中第一个中括号里面的频繁词序列)(支持度50)(PrefixSpan.py生成的 txt文件)
-
20 train_squence_dict.txt:最终得到的训练集的频繁词序列!!!以及对应的区分度dist(这里最终选出的频繁词序列要求支持度dist>=0.85)(PrefixSpan.py生成的 txt文件)
- 1 model.txt:XGBoost训练出来的模型的可视化(boost_tree.py生成的 txt文件)
- 2 xgb.dump.raw.txt:LightGBM训练出来的模型的可视化(boost_tree.py生成的 txt文件)
- 1 degree.txt:程度级别词语(中文)(txt文件)
- 2 deny.txt:自己上网搜集的否定词典(txt文件)
- 3 negative_comment.txt:负面评价词语(中文)(txt文件)
- 4 negative_sentiment.txt:负面情感词语(中文)(txt文件)
- 5 positive_comment.txt:正面评价词语(中文)(txt文件)
- 6 positive_sentiment.txt:正面情感词语(中文)(txt文件)
因为tool文件夹中的这个文件需要在百度云中下载,所以在我的github项目里面没有这个文件夹。
- 1 zhwiki_2017_03.sg_50d.word2vec:搜狗词向量语料(word2vec文件)