中文情感分析- BI-LSTM,文本分类 - GitHub

文章推薦指數: 80 %
投票人數:10人

中文情感分析,CNN,BI-LSTM,文本分类. Contribute to linguishi/chinese_sentiment development by creating an account on GitHub. Skiptocontent {{message}} linguishi / chinese_sentiment Public Notifications Fork 79 Star 420 中文情感分析,CNN,BI-LSTM,文本分类 420 stars 79 forks Star Notifications Code Issues 2 Pullrequests 4 Actions Projects 0 Wiki Security Insights More Code Issues Pullrequests Actions Projects Wiki Security Insights linguishi/chinese_sentiment Thiscommitdoesnotbelongtoanybranchonthisrepository,andmaybelongtoaforkoutsideoftherepository. master Branches Tags Couldnotloadbranches Nothingtoshow {{refName}} default Couldnotloadtags Nothingtoshow {{refName}} default 5 branches 0 tags Code Latestcommit linguishi UpdateREADME.md … c65d26e Dec2,2021 UpdateREADME.md c65d26e Gitstats 27 commits Files Permalink Failedtoloadlatestcommitinformation. Type Name Latestcommitmessage Committime data/hotel_comment fixthelstmmodel Aug26,2019 model fixthelstmmodel Aug26,2019 old_impl Bumptensorflowfrom1.12.0to1.12.2in/old_impl Nov2,2019 pic 换图 Dec2,2021 .gitignore tuningtheparameters May5,2019 README.md UpdateREADME.md Dec2,2021 Viewcode 中文情感分析 codeenvironment 语料的准备 词向量的准备 训练数据的格式 模型一:CNN 结构: CNN模型训练时间 CNN模型的训练结果 模型二:BI-LSTM BI-LSTM模型训练时间 BI-LSTM模型的训练结果 模型的导出和serving(BI-LSTM为例) 模型导出 参考 README.md 中文情感分析 中文情感分析的实质是文本分类问题,本项目分别采用CNN和BI-LSTM两种模型解决文本分类任务,并用于情感分析,达到不错的效果。

两种模型在小数据集上训练,在验证集的准确率、号回率及F1因子均接近90% 项目设计的目标可以接受不同语料的多种分类任务,只要语料按照特定格式准备好,就可以开始调参训练、导出、serving。

codeenvironment 在python3.6&Tensorflow1.13下工作正常 其他环境也许也可以,但是没有测试过。

还需要安装scikit-learnpackage来计算指标,包括准确率回召率和F1因子等等。

语料的准备 语料的选择为谭松波老师的评论语料,正负例各2000。

属于较小的数据集,本项目包含了原始语料,位于data/hotel_comment/raw_data/corpus.zip中 解压corpus.zip后运行,并在raw_data运行 pythonfix_corpus.py 将原本gb2312编码文件转换成utf-8编码的文件。

词向量的准备 本实验使用开源词向量chinese-word-vectors 选择知乎语料训练而成的WordVector,本项目选择词向量的下载地址为https://pan.baidu.com/s/1OQ6fQLCgqT43WTwh5fh_lg,需要百度云下载,解压,直接放在工程目录下 训练数据的格式 参考data/hotel_comment/*.txt文件 step1 本项目把数据分成训练集和测试集,比例为4:1,集4000个样本被分开,3200个样本的训练集,800的验证集。

对于训练集和验证集,制作训练数据时遵循如下格式: 在{}.words.txt文件中,每一行为一个样本的输入,其中每段评论一行,并用jieba分词,词与词之间用空格分开。

除了地段可以,其他是一塌糊涂,惨不忍睹。

和招待所差不多。

帮同事订的酒店,他老兄刚从东莞回来,详细地问了一下他对粤海酒店的印象,说是硬件和软件:极好!所以表扬一下 在{}.labels.txt文件中,每一行为一个样本的标记 NEG POS 本项目中,可在data/hotel_comment目录下运行build_data.py得到相应的格式 step2 因为本项目用了index_table_from_file来获取字符对应的id,需要两个文件表示词汇集和标志集,对应于vocab.labels.txt和vocab.words.txt,其中每一行代表一个词或者是一行代表一个标志。

本项目中,可在data/hotel_comment目录下运行build_vocab.py得到相应的文件 step3 由于下载的词向量非常巨大,需要提取训练语料中出现的字符对应的向量,对应本项目中的data/hotel_comment/w2v.npz文件 本项目中,可在data/hotel_comment目录下运行build_embeddings.py得到相应的文件 模型一:CNN 结构: 中文词Embedding 多个不同长度的定宽卷积核 最大池化层,每个滤波器输出仅取一个最大值 全连接 图来源于论文https://arxiv.org/abs/1408.5882,但与论文不同的是,论文中采取了一个pre-train的embeddings和一个没有训练的embeddings组成了类似图像概念的双通道。

本项目中只采用了一个预训练embeddings的单通道。

CNN模型的训练,在cnn目录底下运行 pythonmain.py CNN模型训练时间 在GTX10606G的加持下大概耗时2分钟 CNN模型的训练结果 在model目录底下运行 pythonscore_report.pycnn/results/score/eval.preds.txt 输出: precisionrecallf1-scoresupport POS0.910.870.89400 NEG0.880.910.89400 microavg0.890.890.89800 macroavg0.890.890.89800 weightedavg0.890.890.89800 模型二:BI-LSTM 中文词Embedding bi-lstm 全连接 BI-LSTM模型的训练,在lstm目录底下运行 pythonmain.py BI-LSTM模型训练时间 在GTX10606G的加持下大概耗时5分钟 BI-LSTM模型的训练结果 在model目录底下运行 pythonscore_report.pylstm/results/score/eval.preds.txt 输出: precisionrecallf1-scoresupport POS0.900.870.88400 NEG0.870.910.89400 microavg0.890.890.89800 macroavg0.890.890.89800 weightedavg0.890.890.89800 模型的导出和serving(BI-LSTM为例) 模型导出 在lstm目录底下运行 pythonexport.py 导出estimator推断图,可以用作prediction。

本项目已上传了saved_model,可以不通过训练直接测试。

在model/lstm目录底下运行pythonserve.py可以利用导出的模型进行实体识别。

详情见代码。

测试结果 虽然模型由真实评论数据训练而成,这些数据长短不一(有的分词后长度超过1000),但由上图可得,模型对短评论表现尚可。

参考 [1]http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/ [2]https://arxiv.org/abs/1408.5882 About 中文情感分析,CNN,BI-LSTM,文本分类 Resources Readme Stars 420 stars Watchers 6 watching Forks 79 forks Releases Noreleasespublished Packages0 Nopackagespublished Contributors2 linguishi deeplin dependabot[bot] Languages JupyterNotebook 63.9% Python 36.1% Youcan’tperformthatactionatthistime. Yousignedinwithanothertaborwindow.Reloadtorefreshyoursession. Yousignedoutinanothertaborwindow.Reloadtorefreshyoursession.



請為這篇文章評分?