当前位置: 首页 > article >正文

自然语言情感分析

文章目录

  • 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])])+1

model = 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.kler.cn/a/153563.html

相关文章:

  • unicloud云函数url化后,客户端通过url地址向云函数发送数据流并传递到云存储中
  • windows ssh时出现Bad local forwarding specification的解决方案
  • 一进三出宿舍限电模块的改造升级
  • Tomcat目录介绍
  • 在 Linux 中使用 udev 规则固定摄像头节点
  • 哪一款台灯适合学生考研用?热门学生护眼台灯推荐
  • 类 —— 友元、常/静态成员函数
  • Ubuntu 20.0 + mysql 8.0 用户和密码修改
  • Leetcode—2661.找出叠涂元素【中等】
  • Unity 与 虚拟机ROS连接
  • 人工智能|机器学习——感知器算法原理与python实现
  • LeetCode417. Pacific Atlantic Water Flow
  • Java面试准备
  • 简单测试大语言模型 Yi-34B 的中日英能力
  • matlab操作方法(一)——向量及其操作
  • Vue2学习笔记(计算属性)
  • 蓝桥杯每日一题2023.12.1
  • C#基础与进阶扩展合集-进阶篇(持续更新)
  • C语言练习记录(蓝桥杯练习)(小蓝数点)
  • Layui xmSelect使用:如何动态获取数据并设置默认值