本文为笔者学习阿里云大学的基于LSTM的文本情感分析教学视频总结。

一、何为文本情感分析

其实也就是,用户输入了一句话,我们需要靠机器来知道这句话的情感,本文会以开心和不开心为例,来进行情感分析,有点像二分类,但并不是。

二、神经网络模型

这里提出使用的是LSTM,也叫做长短时记忆网络,该网络其实是RNN的衍生,主要是为针对RNN的缺点设计出来的,一个神经单元有遗忘门、输入门、输出门,该网络除了结构有所改变,其训练方法和其它NN一样,也是主要采用反向传播、梯度的方法。下面贴出其单个神经单元的结构图:

该结构继承了RNN的记忆功能,也改善了RNN不能够排除掉很久以前的信息,在文本处理中,可能现阶段的文本与很久之前的文本没有一丁点关系了,但是RNN依然保留了很久之前的信息,不能排除。但LSTM由于有遗忘门,便可以“慢慢遗忘”之前无关的信息。具体是有公式证明,推荐去了解一下。

三、机器如何处理文本?

这个问题应该是自然处理领域最基本也是最重要的问题,众所周知,机器只能够处理数字,那我们便需要了解如何将文字转换成数字呢?
一般,一句话是由很多个单词构成,或者简称词。如果我们知道了如何用数字来表示词,那是不是就可以知道怎么表示一段话了。
当前自然语言处理研究都是先训练出自己所需要的词向量,也就是每一个词对应的向量。比如,“机器”这个词可以用[1,2,3,4,5,6,4,7,8,…],这样的多维向量来表示,那么机器也也就可以处理了,得到词向量也有一个专业名词——word2vec。有兴趣也可以去检索一下,这里就不赘述了。且本文使用的词向量使用的是别人已经训练好的,这样覆盖面也会更广。(等我拿到算力超好的计算机,我也试着训练一个。)

四、机器识别文本情感的训练流程

①首先加载词向量的模型
②加载训练数据
③对吃进的数据进行预处理,装其使用词向量表示,此文由于使用tensorflow,比如“我”这个词,在此模型中找的是词的在词向量模型中的索引。所以假设一句话有20个词,如果一个词向量是50维的向量,那最后处理的是一个20 × 50的词矩阵。最后达到满足网络模型的输入要求。
④构建网络模型,设置网络需要的参数,训练。

五、主要实现过程

5.1 加载词向量模型:

"""首先需要获得词向量,词向量可以通过自己训练,也就是word2vec。这里使用别人已经使用好的词向量模型,英文的
"""
wordsList = np.load('./training_data/wordsList.npy')
print('Loaded the word list!')
wordsList = wordsList.tolist()
wordsList = [word.decode('UTF-8') for word in wordsList]
wordVectors = np.load('./training_data/wordVectors.npy')
print ('Loaded the word vectors!')

5.2 读取数据
由于获取的数据集是一个一个的txt文件,且分别存放于两个文件夹,首先把文件位置都读到放进一个列表,然后在for循环里依次读取各个文件的各行,并统计词数目。

positiveFiles = ['./training_data/positiveReviews/' + f for f in listdir('./training_data/positiveReviews/') if isfile(join('./training_data/positiveReviews/', f))]
negativeFiles = ['./training_data/negativeReviews/' + f for f in listdir('./training_data/negativeReviews/') if isfile(join('./training_data/negativeReviews/', f))]
for pf in positiveFiles:with open(pf, "r", encoding='utf-8') as f:line=f.readline()counter = len(line.split())numWords.append(counter)
print('Positive files finished')
for nf in negativeFiles:with open(nf, "r", encoding='utf-8') as f:line=f.readline()counter = len(line.split())numWords.append(counter)
print('Negative files finished')

5.3 数据预处理
先对数据进行处理:只要字母数字,其它都不要

import re
strip_special_chars = re.compile("[^A-Za-z0-9 ]+")def cleanSentences(string):string = string.lower().replace("<br />", " ")return re.sub(strip_special_chars, "", string.lower())

接着基于此方法,找这句话所有词对应的词向量。我们通过前面对段话大概的单词做出估计,每段话250词左右,那输出的的便是一个250 * 50的词矩阵,因为这个词向量模型是50维度的。

firstFile = np.zeros((maxSeqLength), dtype='int32')
with open(fname) as f:indexCounter = 0line=f.readline()cleanedLine = cleanSentences(line)split = cleanedLine.split()for word in split:try:firstFile[indexCounter] = wordsList.index(word)except ValueError:firstFile[indexCounter] = 399999 #Vector for unknown wordsindexCounter = indexCounter + 1

然后重复此方法便可以完成数据集的处理。

ids = np.zeros((numFiles, maxSeqLength), dtype='int32')
fileCounter = 0
for pf in positiveFiles:with open(pf, "r") as f:indexCounter = 0line=f.readline()cleanedLine = cleanSentences(line)split = cleanedLine.split()for word in split:try:ids[fileCounter][indexCounter] = wordsList.index(word)except ValueError:ids[fileCounter][indexCounter] = 399999 #Vector for unkown wordsindexCounter = indexCounter + 1if indexCounter >= maxSeqLength:breakfileCounter = fileCounter + 1 for nf in negativeFiles:with open(nf, "r") as f:indexCounter = 0line=f.readline()cleanedLine = cleanSentences(line)split = cleanedLine.split()for word in split:try:ids[fileCounter][indexCounter] = wordsList.index(word)except ValueError:ids[fileCounter][indexCounter] = 399999 #Vector for unkown wordsindexCounter = indexCounter + 1if indexCounter >= maxSeqLength:breakfileCounter = fileCounter + 1

5.4 搭建模型,由于使用到了LSTM,则基于tensorflow搭建模型。

"""下面的几个参数为神经网络模型的基本参数batchsize:训练一次网络,给多少样本,这个值可以自己设置,但必须位于1到样本总数之间lstmUnits:LSTM神经单元个数numClasses:有多少个分类iterations:训练次数
"""
batchSize = 24
lstmUnits = 64
numClasses = 2
iterations = 50000

未完待续。。。

自然语言处理-文本情感分析相关推荐

  1. 自然语言处理—文本情感分析

    自然语言处理(NLP)中的文本情感分析是一个重要的应用领域,多用于评价性的用户信息回馈,如电影影评和购物后的评价.而情感分析主要是通过用户的回答文本数据(中文),进行文本情感量化分析,现有的情感分析方 ...

  2. 自然语言处理(NLP)之使用LSTM进行文本情感分析

    情感分析简介 文本情感分析(Sentiment Analysis)是自然语言处理(NLP)方法中常见的应用,也是一个有趣的基本任务,尤其是以提炼文本情绪内容为目的的分类.它是对带有情感色彩的主观性文本 ...

  3. NLP之TEA:自然语言处理之文本情感分析的简介、算法、应用、实现流程方法、案例应用之详细攻略

    NLP之TEA:自然语言处理之文本情感分析的简介.算法.应用.实现流程.实现方法之详细攻略 目录 TEA的简介 TEA的应用 TEA的实现流程 TEA的实现方法 T1.词袋模型 TEA的案例应用 TE ...

  4. 自然语言处理之文本情感分析

    1.导语 深度学习近些年取得突破性的发展,目前深度学习技术在人工智能领域应用最广泛的两方面就是CV(计算机视觉)和NLP(自然语言处理),在本次夏虹老师的<人工智能>课程上,我和我的小组成 ...

  5. 自然语言处理——对电影评论的文本情感分析

    题目(来自阿里云天池):数据主要包括IMDB网站上的电影评论文本数据. 数据分为训练数据和测试数据,分别保存在train.csv和test_noLabel.csv两个文件中. 字段说明如下: (1)I ...

  6. NLP 实战:手把手带你搞定文本情感分析

    随着移动互联网的普及,很多人已经习惯于在网络上表达意见和建议.比如电商网站上对商品的评价.社交媒体中对品牌.产品.政策的评价等等.这些评价中都蕴含着巨大的商业价值.而对这种评价的分析就是情感分析的主要 ...

  7. 深度解读NLP文本情感分析Pipeline

    随着移动互联网的普及,很多人已经习惯于在网络上表达意见和建议.比如电商网站上对商品的评价.社交媒体中对品牌.产品.政策的评价等等.这些评价中都蕴含着巨大的商业价值.而对这种评价的分析就是情感分析的主要 ...

  8. 让机器有温度:带你了解文本情感分析的两种模型

    摘要:本篇博文从模型和算法的视角,分别介绍了基于统计方法的情感分析模型和基于深度学习的情感分析模型. 文本情感分析(Sentiment Analysis)是指利用自然语言处理和文本挖掘技术,对带有情感 ...

  9. Python:snownlp中文文本情感分析

    hello,大家好,我是wangzirui32,今天来教大家如何使用snownlp的中文文本情感分析功能,开始学习吧! 1. pip 安装 命令: pip install snownlp -i htt ...

最新文章

  1. 浅析php curl_multi_*系列函数进行批量http请求
  2. devc 能优化吗_SEO关键词推广要多少钱?关键词优化选择外包靠谱吗?
  3. 解决win10安装MySQL数据库出现服务无法启动的问题
  4. 分组背包基础--1712 ACboy needs your help
  5. 元胞自动机(Cellular Automata)
  6. PHP——获取当前日期时间错误解决方案(PHP当前时区设置)
  7. 窗口分析函数_17_计算百分位数
  8. 一、Web服务器——Tomcat Servlet学习笔记
  9. mysql error 1594_【MySQL】解决mysql的 1594 错误-阿里云开发者社区
  10. js基础知识学习(二)
  11. ffmpeg 转换VC工具 V1.1.1
  12. GPS经纬度的表示方法及换算
  13. linux下好看的中文字体,推荐一款 Linux 上比较漂亮的字体(转)
  14. 计算机二级WPS Office考试大纲2021年
  15. html中怎么写艺术字,用CSS设计艺术字
  16. word@tips官方文档和教程@软件界面介绍@功能区自定义@拼写检查@AI润色改进@ 图片顶部上方插入文字
  17. mint系统用wine打开exe文件
  18. android音频系统(5):AudioService之音频焦点
  19. 如何应用卫星图像到Auto CAD
  20. Linux系统时区时间修改

热门文章

  1. Linux基础(day48)
  2. 讲故事如何能帮助有效学习
  3. 鸿蒙是RISC,华为转投第三大CPU架构RISC-V?首款鸿蒙开发板曝光
  4. Qtl和JS、HTML通信/交互
  5. stm32存储资源详解
  6. 超好用的mac字幕软件:ArcTime Pro for Mac中文免费版
  7. 无尽算法之 唯一的福尔摩斯密码词
  8. 【华秋×萨科微】2023年半导体行业将迎全新发展良机
  9. jsp 按照学号查找学生_JSPServlet牛刀小试:学生信息管理系统
  10. java漫画下载_Java IO流 根据 输入url地址 爬虫下载漫画图片 保存到本地硬盘