实训项目:基于TextCNN汽车行业评论文本的情感分析

基于TextCNN汽车行业评论文本的情感分析

    使用卷积神经网络对汽车行业评论文本进行情感分析。

  数据集

    

    爬取汽车之家车主口碑评论文本,抽取口碑中最满意以及最不满意评论文本,分别作为正向情感语料库和负向情感语料库。

    语料库基本信息如下:

    训练集(data/ch_auto_train.txt): 40000 = 20000(pos) + 20000(neg)
      验证集(data/ch_auto_dev.txt): 10000 = 5000(pos) + 5000(neg)
      测试集(data/ch_auto_test.txt): 20000 = 10000(pos) + 10000(neg)

  预处理

    utils.py为数据的预处理代码。

    cat_to_id(): 分类类别以及id对应词典{pos:0, neg:1};
    build_word2id(): 构建词汇表并存储,形如{word: id};
    load_word2id(): 加载上述构建的词汇表;
    build_word2vec(): 基于预训练好的word2vec构建训练语料中所含词语的word2vec;
    load_corpus_word2vec(): 加载上述构建的word2ve;
    load_corpus(): 加载语料库:train/dev/test;
    batch_index(): 生成批处理id序列。

    经过数据预处理,数据的格式如下:

    x: [1434, 5454, 2323, ..., 0, 0, 0]
    y: [0, 1]

    x为构成一条语句的单词所对应的id。 y为onehot编码: pos-[1, 0], neg-[0, 1]。

  CNN卷积神经网络

    配置项

      CNN可配置的参数如下所示,在cnn_model.py中。

class CONFIG():
    update_w2v = True           # 是否在训练中更新w2v
    vocab_size = 37814          # 词汇量,与word2id中的词汇量一致
    n_class = 2                 # 分类数:分别为pos和neg
    max_sen_len = 75            # 句子最大长度
    embedding_dim = 50          # 词向量维度
    batch_size = 100            # 批处理尺寸
    n_hidden = 256              # 隐藏层节点数
    n_epoch = 10                # 训练迭代周期,即遍历整个训练样本的次数
    opt = ‘adam‘                # 训练优化器:adam或者adadelta
    learning_rate = 0.001       # 学习率;若opt=‘adadelta‘,则不需要定义学习率
    drop_keep_prob = 0.5        # dropout层,参数keep的比例
    num_filters = 256           # 卷积层filter的数量
    kernel_size = 3             # 卷积核的尺寸;nlp任务中通常选择2,3,4,5
    print_per_batch = 100       # 训练过程中,每100词batch迭代,打印训练信息
    save_dir = ‘./checkpoints/‘ # 训练模型保存的地址
    ...

    训练与验证

      train_and_eva.py中的train()进行训练。

加载word2vec==========================
加载train语料库========================
总样本数为:40000
各个类别样本数如下:
pos 20000
neg 20000
加载dev语料库==========================
总样本数为:10000
各个类别样本数如下:
pos 5000
neg 5000
加载test语料库=========================
总样本数为:20000
各个类别样本数如下:
pos 10000
neg 10000
Training and evaluating...
Epoch: 1
Iter:      0, Train Loss:   0.71, Train Acc:  51.00%, Val Loss:   0.86, Val Acc:  49.96%, Time: 0:00:04 *
Iter:    100, Train Loss:   0.29, Train Acc:  89.00%, Val Loss:   0.26, Val Acc:  89.16%, Time: 0:04:37 *
Iter:    200, Train Loss:   0.22, Train Acc:  93.00%, Val Loss:    0.2, Val Acc:  91.85%, Time: 0:09:05 *
Iter:    300, Train Loss:  0.082, Train Acc:  96.00%, Val Loss:   0.17, Val Acc:  93.26%, Time: 0:13:26 *
Epoch: 2
Iter:    400, Train Loss:   0.16, Train Acc:  96.00%, Val Loss:   0.17, Val Acc:  93.19%, Time: 0:17:52
Iter:    500, Train Loss:   0.11, Train Acc:  97.00%, Val Loss:   0.17, Val Acc:  93.51%, Time: 0:22:11 *
Iter:    600, Train Loss:   0.16, Train Acc:  97.00%, Val Loss:   0.15, Val Acc:  94.22%, Time: 0:26:36 *
Iter:    700, Train Loss:   0.15, Train Acc:  91.00%, Val Loss:   0.15, Val Acc:  94.05%, Time: 0:30:54
Epoch: 3
Iter:    800, Train Loss:   0.11, Train Acc:  95.00%, Val Loss:   0.15, Val Acc:  94.13%, Time: 0:35:13
Iter:    900, Train Loss:  0.058, Train Acc:  97.00%, Val Loss:   0.16, Val Acc:  94.33%, Time: 0:39:37 *
Iter:   1000, Train Loss:  0.048, Train Acc:  98.00%, Val Loss:   0.15, Val Acc:  94.33%, Time: 0:43:53
Iter:   1100, Train Loss:  0.054, Train Acc:  97.00%, Val Loss:   0.16, Val Acc:  94.10%, Time: 0:48:21
Epoch: 4
Iter:   1200, Train Loss:  0.065, Train Acc:  96.00%, Val Loss:   0.16, Val Acc:  94.52%, Time: 0:52:43 *
Iter:   1300, Train Loss:  0.056, Train Acc:  97.00%, Val Loss:   0.17, Val Acc:  94.55%, Time: 0:57:09 *
Iter:   1400, Train Loss:  0.016, Train Acc: 100.00%, Val Loss:   0.17, Val Acc:  94.40%, Time: 1:01:30
Iter:   1500, Train Loss:    0.1, Train Acc:  97.00%, Val Loss:   0.16, Val Acc:  94.90%, Time: 1:05:49 *
Epoch: 5
Iter:   1600, Train Loss:  0.021, Train Acc:  99.00%, Val Loss:   0.16, Val Acc:  94.28%, Time: 1:10:00
Iter:   1700, Train Loss:  0.045, Train Acc:  99.00%, Val Loss:   0.18, Val Acc:  94.40%, Time: 1:14:16
Iter:   1800, Train Loss:  0.036, Train Acc:  98.00%, Val Loss:   0.21, Val Acc:  94.10%, Time: 1:18:36
Iter:   1900, Train Loss:  0.014, Train Acc: 100.00%, Val Loss:    0.2, Val Acc:  94.18%, Time: 1:22:59

在验证集上的最佳效果为94.90%。

    测试

      train_and_eva.py中的test()进行测试。

INFO:tensorflow:Restoring parameters from ./checkpoints/sa-model
Precision, Recall and F1-Score...
             precision    recall  f1-score   support
        pos       0.96      0.96      0.96     10000
        neg       0.96      0.96      0.96     10000
avg / total       0.96      0.96      0.96     20000

Confusion Matrix...
[[9597  403]
 [ 449 9551]]

在测试集上的准确率达到了95.74%,且各类的precision, recall和f1-score都超过了95%。

  预测

    predict.py中的predict()进行预测

>> test = [‘噪音大、车漆很薄‘, ‘性价比很高,价位不高,又皮实耐用。‘]
 >> print(predict(test, label=True))
INFO:tensorflow:Restoring parameters from ./checkpoints/sa-model
[‘neg‘, ‘pos‘]

原文地址:https://www.cnblogs.com/darwinli/p/10011378.html

时间: 2024-11-05 14:36:50

实训项目:基于TextCNN汽车行业评论文本的情感分析的相关文章

山西高平地域文化导入美术设计实训项目的实践

地域文化,是指某个地域的人们在特定的范围内,在自然环境的基础上,在长期的生产生活中创造的.人类活动的产物.山西高平是神农炎帝的故里,长平之战的发生地,是一个有着很深文化积淀的新兴城市,行政区域是国土面积的万分之一,却浓缩了中国五千年文化的精髓.本文通过对山西高平丰富的历史文化资源的调查研究,探讨如何将地域文化元素导入中职美术设计专业的实训项目教学过程,论证典型地域文化元素在中职美术设计教育中的独特作用,并以此作为教学实训素材,依托带有典型地域文化特征的企业真实案例,结合教育教学实践,探索中职美术

自然语言交流系统 phxnet团队 创新实训 项目博客 (十二)

关于情感词典的学习总结: 情感倾向可认为是主体对某一客体主观存在的内心喜恶,内在评价的一种倾向.它由两个方面来衡量:一个情感倾向方向,一个是情感倾向度. 情感倾向方向也称为情感极性.在微博中,可以理解为用户对某客体表达自身观点所持的态度是支持.反对.中立,即通常所指的正面情感.负面情感.中性情感.例如"赞美"与"表扬"同为褒义词,表达正面情感,而"龌龊"与"丑陋"就是贬义词,表达负面情感. 情感倾向度是指主体对客体表达正面情感

(5)【整合】基于机器学习的酒店评论文本倾向性分析

酒店评论情感分析系统(五)—— [整合]基于机器学习的酒店评论文本倾向性分析 本文主要是对之前的第三.四节所介绍的各分块进行整合. 流程: 对GUI界面输入的评论文本,先进行中文分词和去停用词,然后再按“环境,价格,卫生,服务”四个方面分类:同时通过调用LingPipe中的DynamicLMClassifier,对已标注的“中文情感挖掘酒店评论语料”库的学习,构造一个基本极性分析的分类器.最后用此分类器分别对整个评论文本给出总体评价和对四个方面分别给出相应的情感评价. 环境: 1. 操作系统:w

HTML+CSS网站实训项目总结

  学完HTML+CSS,迎来的最重要的是网站实训和答辩的准备.          第一次的项目分配,因剪刀石头布的手气,得到第二名的机会,却实在不怎么了解各个网站,(当然除了最熟悉的淘宝),选择了组员的要求——国美在线.          国美在线,是国美电器唯一官方商城,中国领先的专业家电网购平台.          这是第一次做的团队小项目,也是第一次以组长的身份和组员进行磨合和合作.          于组长的身份,这是最大的感受除了开始拿到项目的时候的小小激动,就是怕分工不恰当和组织不

【中软实习】之实习实训项目日志

应学校的要求,我们利用暑假及9月份在中软完成为期2个月的实习实训,特将每天的项目情况记录如下,用以备忘之需. [Day0728]:用Java完成一个猜拳小游戏 [Day0729]:用Swing技术完成一个登录模块

家乡の战队实训项目博客二

家乡の战队:黄金点项目博客二 1.团队风采 组长:唐宇      16012020 队员:王松鹤  16012016 刘计     16012024 庞啸天 16012011 2.码云地址 https://gitee.com/wcnma/home_troops/tree/master 3. 团队分工 唐宇:团队组长,灵魂核心,领导组员完成java任务,是组员的导向标 评分:9 王松鹤:团队技术担当,高端技术人才,完成主要的java项目 评分:10 刘计:掌握了java的基础知识,擅长与客户交谈,

自然语言交流系统 phxnet团队 创新实训 项目博客 (十三)

对我们项目中的关键技术实现进行总结: 一.3DMax关键技术实现 1.一下的关于3DMax中对于人物的设计和操作均需要在对3DMax基础知识熟练掌握的情况下进行的. 2. 骨骼架设:首先对导入到3DMax中的人物模型进行架设骨骼,首先,先加载一个人,锁定住,别让他乱动.用biped工具建立一个基本骨骼--可以从脚部位置往上拖拽鼠标来建立.在运动命令面板,点biped卷展栏的 figure mode在各视图中,使用旋转缩放位移的方式,调整骨骼的位置与模型的位置,让二者对齐. PS: 1双击骨骼,可

java实训项目-模拟自动挡汽车

Java程序设计课程设计项目名称 ? 项目名称:自动挡汽车操作模拟系统的设计与实现 英文名称:Design and Implementation of Operation Simulation System aboutAutomatic Vehicle 1.功能描述: 1)汽车的操作正常为启动(或熄火).挂档.制动.油门控制等操作: 2)挂档实现自动挡的4档操作,既驻车档.倒车档.空档.行车档: 3)使用图形界面进行操作,汽车的状态在图形界面上显示出来: 4)操作流程不合理,要有相应的控制: 5

自然语言交流系统 phxnet团队 创新实训 项目博客 (十)

关于本项目中使用到的庖丁分词的总结: Paoding 详细介绍 庖丁中文分词库是一个使用Java开发的,可结合到Lucene应用中的,为互联网.企业内部网使用的中文搜索引擎分词组件.Paoding填补了国内中文分词方面开源组件的空白,致力于此并希翼成为互联网网站首选的中文分词开源组件. Paoding中文分词追求分词的高效率和用户良好体验. Paoding's Knives 中文分词具有极 高效率 和 高扩展性 .引入隐喻,采用完全的面向对象设计,构思先进. 高效率:在PIII 1G内存个人机器