# TextClassification-MeiTuan-FeatureExtraction-Classifier **Repository Path**: haohan1997/TextClassification-MeiTuan-FeatureExtraction-Classifier ## Basic Information - **Project Name**: TextClassification-MeiTuan-FeatureExtraction-Classifier - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-23 - **Last Updated**: 2021-11-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TextClassification-MeiTuan-FeatureExtraction-Classifier 这里是利用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| |---|---| |E-mail|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文件夹下的数据文件介绍](#feature文件夹下的数据文件介绍) * [(15)lib文件夹下的数据文件介绍](#lib文件夹下的数据文件介绍) * [(16)model文件夹下的数据文件介绍](#model文件夹下的数据文件介绍) * [(17)sentiment_dic文件夹下的数据文件介绍](#sentiment_dic文件夹下的数据文件介绍) * [(18)tool文件夹下的数据文件介绍](#tool文件夹下的数据文件介绍) **** ## 数据预处理 ### pretreatment.py #### 分词、词性标注、正负文本的划分、训练集测试集的划分(python文件) 输入:
``` ./lib/train.txt:训练集
./lib/test.txt:测试集
``` 输出:
``` ./lib/train_positive_cut.txt:训练集,正标签,的分词结果
./lib/train_positive_pos.txt:训练集,正标签,的词性标注结果
./lib/train_positive_Wpos.txt:训练集,正标签,的分词和词性标注结果

./lib/train_negative_cut.txt:训练集,负标签,的分词结果
./lib/train_negative_pos.txt:训练集,负标签,的词性标注结果
./lib/train_negative_Wpos.txt:训练集,负标签,的分词和词性标注结果

./lib/train_cut.txt:训练集,的分词结果
./lib/train_pos.txt':训练集,的词性标注结果
./lib/train_Wpos.txt:训练集,的分词和词性标注结果
``` ### (2)bi_tri_gram.py #### 生成bi-gram、tri-gram(python文件) 输入:
``` ./lib/train_positive_cut.txt:训练集,正标签,的分词结果
./lib/train_negative_cut.txt:训练集,负标签,的分词结果
``` 输出:
``` ./lib/train_positive_trigram.txt:训练集,正标签,的tri-gram结果
./lib/train_negative_trigram.txt:训练集,负标签,的tri-gram结果
``` ### (3)word2vec_test.py #### 导入搜狗词向量语料加载,将积极文本和消极文本的词语生成词向量,保存至文本文件中(python文件) 输入:
``` ./lib/train_positive_cut.txt:训练集,正标签,的分词结果
./lib/train_negative_cut.txt:训练集,负标签,的分词结果
``` 输出:
``` ./lib/wordsList.npy:数字索引词语变量
./lib/wordIndexVector.npy:数字索引词向量变量
``` ### (4)./tool/zhwiki_2017_03.sg_50d.word2vec #### 搜狗词向量语料(word2vec文件) 百度云资源:https://pan.baidu.com/s/1C94HXCCWOmX-W4IbajXFyA ### (5)PrefixSpan.py #### 导入搜狗词向量语料加载,将积极文本和消极文本的词语生成词向量,保存至文本文件中(python文件) 输入:
``` ./lib/train_positive_trigram.txt:训练集,正标签,的tri-gram结果
./lib/train_negative_trigram.txt:训练集,负标签,的tri-gram结果
``` 输出:
``` ./lib/train_positive_prefixPattern.txt:训练集,正标签,的所以频繁项(支持度50)
./lib/train_positive_prefixFrequentSub_sup50.txt:训练集,正标签,的所以频繁项(做了一些处理,比如删除中括号,只保留在train_positive_prefixPattern.txt中第一个中括号里面的频繁词序列)(支持度50)
./lib/train_positive_prefixFrequentSub_sup25.txt:训练集,正标签,的所以频繁项(做了一些处理,比如删除中括号,只保留在train_positive_prefixPattern.txt中第一个中括号里面的频繁词序列)(支持度25)

./lib/train_negative_prefixPattern.txt:训练集,负标签,的所以频繁项(支持度100)
./lib/train_negative_prefixFrequentSub_sup100.txt:训练集,负标签,的所以频繁项(做了一些处理,比如删除中括号,只保留在train_positive_prefixPattern.txt中第一个中括号里面的频繁词序列)(支持度100)
./lib/train_negative_prefixFrequentSub_sup50.txt:训练集,负标签,的所以频繁项(做了一些处理,比如删除中括号,只保留在train_positive_prefixPattern.txt中第一个中括号里面的频繁词序列)(支持度50)

./lib/train_squence_dict.txt:最终得到的训练集的频繁词序列!!!以及对应的区分度dist(这里最终选出的频繁词序列要求支持度dist>=0.85)
``` **** ## 特征提取 ### (6)feature_pos.py #### 词性组合模式的特征(python文件) 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:训练集,的词性标注结果
``` 输出:
``` ./lib/train_feature_pos.txt:训练集,词性组合模式的特征
``` ### (7)feature_fresq.py #### 频繁词序列模式的特征(python文件) 根据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:训练集,的分词结果
``` 输出:
``` ./lib/train_feature_fresq.txt:训练集,频繁词序列模式的特征
``` ### (8)feature_sentiment.py #### 情感的特征(基于情感词典的情感分类)(python文件) 情感得分
积极:2
消极:1
中性:0
输入:
``` ./lib/train_cut.txt:训练集,的分词结果
./sentiment_dic/deny.txt:否定词典
./sentiment_dic/positive_sentiment.txt:正面情感词语
./sentiment_dic/positive_comment.txt:正面评价词语
./sentiment_dic/negative_sentiment.txt:负面情感词语
./sentiment_dic/negative_comment.txt:负面评价词语
./sentiment_dic/degree.txt:程度级别词语(有extreme、very、more、ish、insufficiently、over六个程度等级)
``` 输出:
``` ./lib/train_feature_sentiment.txt:训练集,情感模式的特征
``` ### (9)feature_slen.py #### 句子长度的特征(python文件) 输入:
``` ./lib/train_cut.txt:训练集,的分词结果
``` 输出:
``` ./lib/train_feature_slen.txt:训练集,句子长度的特征
``` ### (10)feature_senti_num.py #### 情感词的个数(python文件) 输入:
``` ./lib/train_cut.txt:训练集,的分词结果
./sentiment_dic/positive_sentiment.txt:正面情感词语
./sentiment_dic/positive_comment.txt:正面评价词语
./sentiment_dic/negative_sentiment.txt:负面情感词语
./sentiment_dic/negative_comment.txt:负面评价词语
``` 输出:
``` ./lib/train_feature_senti_num.txt:训练集,情感次个数的特征
``` ### (11)feature_enti_num.py #### 实体的个数(python文件) 在这里,我认为所有的名词都是实体,也就是在jieba词性标注中,被标注为n, ng, nl, nr, ns, nt, nz的词语。 输入:
``` ./lib/train_pos.txt':训练集,的词性标注结果
``` 输出:
``` ./lib/train_feature_enti_num.txt:训练集,情感次个数的特征
``` ### (12)import_csv.py #### 将文本所有的特征导出在一个csv文件中(python文件) 输入:
``` ./lib/train.txt:训练集
./lib/train_feature_pos.txt:训练集,词性组合模式的特征
./lib/train_feature_fresq.txt:训练集,频繁词序列模式的特征
./lib/train_feature_sentiment.txt:训练集,情感模式的特征
./lib/train_feature_slen.txt:训练集,句子长度的特征
``` 输出:
``` ./feature/train.csv:训练集,所有的特征(特征空间)
``` **** ## 分类器 ### (13)boost_tree.py #### 利用XGBoost和LightGBM对评论进行分类(python文件) 最后还会显示出XGBoost和LightGBM的损失值。
输入:
``` ./feature/train.csv:训练集,所有的特征(特征空间)
``` 输出:
``` ./feature/train.svm:训练集(原训练集的80%),表示成稀疏矩阵的形式
./feature/valid.svm:验证集(原训练集的20%),表示成稀疏矩阵的形式
./model/model.txt:XGBoost训练出来的模型的可视化
./model/xgb.dump.raw.txt:LightGBM训练出来的模型的可视化
``` **** ### feature文件夹下的数据文件介绍 * 1 train.csv:训练集,所有的特征(特征空间)(import_csv.py生成的 csv文件) * 2 train.svm:训练集(原训练集的80%),表示成稀疏矩阵的形式(boost_tree.py生成的 svm文件) * 3 valid.svm:验证集(原训练集的20%),表示成稀疏矩阵的形式(boost_tree.py生成的 svm文件) **** ### lib文件夹下的数据文件介绍 * 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文件) **** ### model文件夹下的数据文件介绍 * 1 model.txt:XGBoost训练出来的模型的可视化(boost_tree.py生成的 txt文件) * 2 xgb.dump.raw.txt:LightGBM训练出来的模型的可视化(boost_tree.py生成的 txt文件) **** ### sentiment_dic文件夹下的数据文件介绍 * 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文件夹下的数据文件介绍 因为tool文件夹中的这个文件需要在百度云中下载,所以在我的github项目里面没有这个文件夹。 * 1 zhwiki_2017_03.sg_50d.word2vec:搜狗词向量语料(word2vec文件) ### (end)