中文情感分析- BI-LSTM,文本分类 - GitHub
文章推薦指數: 80 %
中文情感分析,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.
延伸文章資訊
- 1hiDaDeng/cnsenti: 中文情感分析库(Chinese Sentiment))可对 ...
... the number of different emotional words in the text - GitHub - hiDaDeng/cnsenti: 中文情感分析库(Chin...
- 2中文情感分析- BI-LSTM,文本分类 - GitHub
中文情感分析,CNN,BI-LSTM,文本分类. Contribute to linguishi/chinese_sentiment development by creating an acc...
- 3chinese-sentiment-analysis · GitHub Topics
基于字符级卷积神经网络的细粒度的中文情感分析以及具体的应用,将顾客打分和评论情感进行两极映射,使用数据自动 ... 基于RoBERTa-wwm-ext 模型的微博中文情绪识别.
- 4sweslo17/chinese_sentiment: 中文情緒分析 - GitHub
中文情緒分析. Contribute to sweslo17/chinese_sentiment development by creating an account on GitHub.
- 5Droidtown/KeyMojiAPI: KeyMoji (關鍵情緒偵測引擎) 是個具有 ...
GitHub - Droidtown/KeyMojiAPI: KeyMoji (關鍵情緒偵測引擎) 是個具有模型解釋性且禁得住科學驗證的中文文本情緒分析系統。利用將語言學Rule-based 和...