自然语言情感分析

文章目录

  • 1 自然语言情感分析简介
  • 2 实际操作
  • 3 文字情感分析建模
    • 3.1 多层全连接神经网络训练情感分析

1 自然语言情感分析简介

  • 深度学习可以模拟词与词之间的联系,有局部特征抽象化和记忆功能
  • 推特已经公开了他们的情感分析API(http://help.sentiment140.com/api),大家可以把其整合到自己的应用程序中,也可以试着开发一套自己的API
  • 下面通过一个电影评论的例子详细讲解深度学习在情感分析中的关键技术

2 实际操作

  • 第一步:文字分词,英文分词可以按照空格分词,中文分词可以参考jieba
  • 第二步:建立字典,给每个词标号
  • 第三步:把段落按字典翻译成数字,变成一个array
  • 先安装必要的软件包
pip install numpy scipy
pip install scikit-learn
pip install pillow
pip install h5py
  • 从 Keras 库中导入 IMDb 数据集。IMDb(Internet Movie Database)是一个在线电影数据库,而在机器学习领域,IMDb 数据集通常指的是包含电影评论的数据集
  • 对于 x_train[0],它返回训练集中的第一个评论样本。这个评论样本是一个整数序列,其中每个整数代表字典中的一个单词。IMDb 数据集中的每个单词都被映射到一个整数,其中整数值表示该单词在整个数据集中的频率排名
  • 通过 print(x_train[0]) 打印出训练集中第一个评论的整数序列
  • 这里的每个数字代表 IMDb 数据集中的一个单词,但是为了方便存储和处理,这些单词已经被映射成整数。在这个序列中,每个整数对应于评论中的一个单词。实际的整数值不重要,因为它们只是一个索引,而不是真正的单词。你可以使用 IMDb 数据集提供的字典来将这些整数还原为对应的单词。
import keras
import numpy as np
from keras.datasets import imdb
(x_train,x_test),(y_train,y_test) = imdb.load_data()x_train[0]
  • avg_len = list(map(len, x_train)): 这一行代码使用 map 函数将 len 函数应用于 x_train 中的每个评论序列。len 函数用于获取列表、字符串或其他可迭代对象的长度。map(len, x_train) 返回一个迭代器,其中包含了每个评论序列的长度。然后,通过 list() 将这个迭代器转换为列表,得到 avg_len。
  • print(np.mean(avg_len)): 这一行代码使用 NumPy 库中的 np.mean 函数计算 avg_len 列表中所有元素的平均值,即评论序列的平均长度。np.mean 接受一个数组作为输入,并返回数组中所有元素的平均值。
print(x_train.shape)
print(y_train.shape)avg_len = list(map(len,x_train))
print(np.mean(avg_len))
  • 为了直观的显示,可以画一个分布图
import matplotlib.pyplot as plt
plt.hist(avg_len,bins=range(min(avg_len),max(avg_len)+50,50))
plt.show()

3 文字情感分析建模

  • 为了克服文字长短不均和将词与词之间的联系纳入模型中的困难,人们使用了一种技术“ 词嵌入技术”
  • 通俗来讲就是给每个词都赋一个向量,向量代表空间里面的点,含义接近的词,其向量也接近,这样词的操作就转化成向量之间的操作了
  • 在深度学习中,这被叫做张量(Tensor)
  • 第一,可以克服文字长短不均的问题,第二,词本身无法形成特征,第三,文本是由词组成的
  • 词嵌入的最经典作品是Word2Vec,通过对具有数十亿词的新闻文章进行训练,其主要思想依然是把词表示成向量的形式,而不是One Hot编码

3.1 多层全连接神经网络训练情感分析

  • Keras提供了嵌入层(Embedding Layer)的模版,还有sequence.pad_sequences函数帮我们做了文本的处理和填充工作
  • 完整代码如下
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers.embeddings import Embedding
from keras.preprocessing import sequence
import keras
import numpy as np
from keras.datasets import imdb
(x_train,y_train),(x_test,y_test) = imdb.load_data()m = max(list(map(len,x_train)),list(map(len,x_test)))
# print(m)maxword = 400
x_train = sequence.pad_sequences(x_train,maxlen=maxword)
x_test = sequence.pad_sequences(x_test,maxlen=maxword)
vocab_size = np.max([np.max(x_train[i]) for i in range(x_train.shape[0])])+1model = Sequential()
model.add(Embedding(vocab_size,64,input_length=maxword))model.add(Flatten())model.add(Dense(2000,activation='relu'))
model.add(Dense(500,activation='relu'))
model.add(Dense(200,activation='relu'))
model.add(Dense(50,activation='relu'))
model.add(Dense(1,activation='sigmoid'))model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
print(model.summary())model.fit(x_train,y_train,validation_data=(x_test,y_test),epochs=20,batch_size=100,verbose=1)score = model.evaluate((x_test,y_test))
  • 代码解释:
  • 使用Keras加载IMDB电影评论数据集。该数据集包含带有情感标签(正面或负面)的电影评论。这部分对电影评论序列进行填充,确保它们具有相同的长度。maxlen参数指定了填充后的最大长度,vocab_size表示词汇表的大小。这部分定义了一个简单的神经网络模型,包括嵌入层、展平层和几个全连接层。模型的最终输出层使用sigmoid激活函数,适用于二元分类问题。这部分编译了模型,指定了损失函数、优化器和评估指标。然后,通过fit方法训练模型,使用训练数据和验证数据,进行20个时期的训练,每批次大小为100。最后,通过使用测试数据评估模型的性能,并将结果存储在score变量中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat 漏洞修复

1、去掉请求响应中Server信息 修复方法: 在Tomcat的配置文件的Connector中增加 server" " ,server 的值可以改成你任意想返回的值。

过滤器中捕获报错 Broken pipe

问题场景 在公司项目中做配置迁移的时候,上线后突然出现线上问题,查日志发现报错Broken pipe,翻译成中文就是管道损坏,还是在过滤器中被捕获的异常,看的我一头雾水 问题分析 发现 Broken pipe"错误通常表示在写…

Elasticsearch:什么是自然语言处理(NLP)?

自然语言处理定义 自然语言处理 (natural language processing - NLP) 是人工智能 (AI) 的一种形式,专注于计算机和人们使用人类语言进行交互的方式。 NLP 技术帮助计算机使用我们的自然交流模式(语音和书面文本)来分析、理解和响应我们。 自…

一进三出宿舍限电模块的改造升级

一进三出宿舍限电模块改造升级石家庄光大远通电气有限公司智能模块功能特点: 电能控制功能:可实施剩余电量管理,电量用完时将自动断电; 剩余电量可视报警提示功能:剩余电量可视,并当电量剩余5度时&#xff…

R语言中的机器学习

转载自 R中文论坛(http://rbbs.biosino.org/Rbbs/posts/list/192.page) Machine Learning & Statistical Learning (机器学习 & 统计学习) 网址:http://cran.r-project.org/web/views/MachineLearning.html维护人员:To…

C#和MySQL技巧分享:日期的模糊查询

文章目录 前言一、EF Core 模糊查询二、MySql 日期模糊查询分析和优化2.1 测试环境准备2.1.1 创建数据库2.1.2 查看测试数据 2.2 查询日期的运行效率对比2.3 运行效率优化 三、EF Core 模糊查询优化3.1 字符串转日期3.2 使用日期格式查询 四、优化建议总结 前言 在处理数据库查…

新手必读!网上买的手机卡和实体店一样吗?对比一下你就知道了!

当我们在刷短视频时,总会看到很多关于流量卡的广告,其中各种优惠套餐真的让人“难以置信”,看到这里,很多朋友就会有疑问了,网上购买的流量卡是真是假呢?和线下营业厅的一样吗,接下来&#xff0…

go开发之个人微信号机器人开发

简要描述: 下载消息中的文件 请求URL: http://域名地址/getMsgFile 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型…

Re56:读论文 A Brief History of the Changing Roles of Case Prediction in AI and Law

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称:A Brief History of the Changing Roles of Case Prediction in AI and Law 论文下载地址:https://journals.latrobe.edu.au/index.php/law-in-context/article/view/88 本…

Linux Spug自动化运维平台本地部署与公网远程访问

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件…

版本控制系统Git学习笔记-Git分支操作

文章目录 概述一、Git分支简介1.1 基本概念1.2 创建分支1.3 分支切换1.4 删除分支 二、新建和合并分支2.1 工作流程示意图2.2 新建分支2.3 合并分支2.4 分支示例2.4.1 当前除了主分支,再次创建了两个分支2.4.2 先合并test1分支2.4.3 合并testbranch分支 2.5 解决合并…

算法基础三

电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits "…

4.10 文件的读写(C语言实现)

【题目描述】创建一个后缀名为txt的文件&#xff0c;并向该文件中写入一个字符串&#xff0c;保存起来。再打开该文件&#xff0c;读出文件中的内容。 【代码实现】 // 文件的读写 # include <stdio.h> # include <stdlib.h> # include <time.h> int main()…

PG时间计算

PG数据库&#xff0c;时间计算使用场景总结 日期之差 --**获取秒差** SELECT round(date_part(epoch, TIMESTAMP 2019-05-05 12:11:20 - TIMESTAMP 2019-05-05 10:10:10)); --**获取分钟差** SELECT round(date_part(epoch, TIMESTAMP 2019-05-05 12:11:20 - TIMESTAMP 20…

识别当前是浏览器还是微信浏览器的问题

/mozilla|chrome|safari|firefox/.test(navigator.userAgent) /mozilla|chrome|safari|firefox/.test(navigator.userAgent.toLowerCase() 这两个的值是相反的, console.log(/mozilla|chrome|safari|firefox/.test(navigator.userAgent),/mozilla|chrome|safari|firefox/.test…

【集合篇】Java集合概述

Java 集合概述 集合与容器 容器&#xff08;Container&#xff09;是一个更广泛的术语&#xff0c;用于表示可以容纳、组织和管理其他对象的对象。它是一个更高层次的概念&#xff0c;包括集合&#xff08;Collection&#xff09;在内。集合&#xff08;Collection&#xff0…

C++的std命名空间

总以为自己懂了&#xff0c;可是仔细想想&#xff0c;多问自己几个问题&#xff0c;发现好像又不是很清楚 命名空间&#xff08;Namespace&#xff09;是C中一种用于解决命名冲突问题的机制&#xff0c;它能够将全局作用域划分为若干个不同的区域&#xff0c;每个区域内可以有…

【使用`model.status`来获取gurobi求解过程中的模型状态】

在Gurobi中&#xff0c;你可以使用model.status来获取求解过程中的模型状态。可以使用了model.status来检查模型是否找到最优解。模型状态是一个Gurobi的常量&#xff0c;表示了求解过程中的不同状态。 以下是一些常见的模型状态&#xff1a; GRB.OPTIMAL: 最优解被找到。GRB…

深入理解Servlet(中)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 上篇有一张图&#xff…

TypeScript与JavaScript封装事件的防抖与节流

防抖和节流都是可以限制短时间内事件的频繁触发导致前端资源开销过大或者对后端服务器造成压力的问题。 1. 防抖 防抖是当事件被频繁触发时&#xff0c;只有最后一次事件会成功执行&#xff0c;一般的实现方式是&#xff0c;每次触发先检查是否有定时器存在&#xff0c;有的话…