NLP之多循环神经网络情感分析

文章目录

    • 代码展示
    • 代码意图
    • 代码解读
    • 知识点介绍

代码展示

import pandas as pd
import tensorflow as tf# 构建RNN神经网络
tf.random.set_seed(1)
df = pd.read_csv("../data/Clothing Reviews.csv")
print(df.info())df['Review Text'] = df['Review Text'].astype(str)
x_train = df['Review Text']
y_train = df['Rating']from tensorflow.keras.preprocessing.text import Tokenizer# 创建词典的索引,默认词典大小20000
dict_size = 14848
tokenizer = Tokenizer(num_words=dict_size)
# jieba: 停用词,标点符号,词性.....
tokenizer.fit_on_texts(x_train)
print(len(tokenizer.word_index), tokenizer.index_word)# # 把评论的文本转化序列编码
x_train_tokenized = tokenizer.texts_to_sequences(x_train)# # 通过指定长度,把不等长list转化为等长
from tensorflow.keras.preprocessing.sequence import pad_sequencesmax_comment_length = 120
x_train = pad_sequences(x_train_tokenized, maxlen=max_comment_length)for v in x_train[:10]:print(v, len(v))# 构建RNN神经网络
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, SimpleRNN, Embedding
import tensorflow as tfrnn = Sequential()
# 对于rnn来说首先进行词向量的操作
rnn.add(Embedding(input_dim=dict_size, output_dim=60, input_length=max_comment_length))rnn.add(SimpleRNN(units=100))  # 第二层构建了100个RNN神经元rnn.add(Dense(units=10, activation=tf.nn.relu))rnn.add(Dense(units=6, activation=tf.nn.softmax))  # 输出分类的结果
rnn.compile(loss='sparse_categorical_crossentropy', optimizer="adam", metrics=['accuracy'])
print(rnn.summary())
result = rnn.fit(x_train, y_train, batch_size=64, validation_split=0.3, epochs=1)
print(result)
print(result.history)

代码意图

代码的意图:
该代码的主要目的是构建一个简单的RNN(循环神经网络)来对"Clothing Reviews.csv"中的评论进行分类。评论文本被转换为数值序列,然后使用这些序列来训练RNN模型,以预测评论的评分。

流程描述:

  1. 设置随机种子:确保结果的可重复性。

    tf.random.set_seed(1)
    
  2. 读取数据:使用pandas读取"Clothing Reviews.csv"文件,并打印数据信息。

    df = pd.read_csv("../data/Clothing Reviews.csv")
    print(df.info())
    
  3. 数据预处理

    • 将’Review Text’列转换为字符串类型。
    • 从数据框中提取训练数据x_train和标签y_train
      df['Review Text'] = df['Review Text'].astype(str)
      x_train = df['Review Text']
      y_train = df['Rating']
      
  4. 文本标记化

    • 使用Tokenizer进行文本标记,创建一个字典来将每个词映射到一个整数值。

    • 通过调用fit_on_texts方法对评论文本进行学习。

      dict_size = 14848
      tokenizer = Tokenizer(num_words=dict_size)
      tokenizer.fit_on_texts(x_train)
      
    • 将评论文本转换为整数序列。

      x_train_tokenized = tokenizer.texts_to_sequences(x_train)
      
  5. 序列填充:为了确保所有序列长度相同,使用pad_sequences对序列进行填充或截断。

    max_comment_length = 120
    x_train = pad_sequences(x_train_tokenized, maxlen=max_comment_length)
    
  6. 构建RNN模型

    • 初始化一个序贯模型Sequential
    • 添加一个Embedding层,将词汇转换为固定大小的向量。
    • 添加一个SimpleRNN层,含有100个神经元。
    • 添加两个全连接层Dense,用于分类任务。
    • 编译模型,设置损失函数、优化器和评估标准。
      rnn = Sequential()
      rnn.add(Embedding(input_dim=dict_size, output_dim=60, input_length=max_comment_length))
      rnn.add(SimpleRNN(units=100))
      rnn.add(Dense(units=10, activation=tf.nn.relu))
      rnn.add(Dense(units=6, activation=tf.nn.softmax))
      rnn.compile(loss='sparse_categorical_crossentropy', optimizer="adam", metrics=['accuracy'])
      

    模型结构

    Model: "sequential"
    _________________________________________________________________Layer (type)                Output Shape              Param #   
    =================================================================embedding (Embedding)       (None, 120, 60)           890880    simple_rnn (SimpleRNN)      (None, 100)               16100     dense (Dense)               (None, 10)                1010      dense_1 (Dense)             (None, 6)                 66   
    
  7. 模型摘要:打印模型的摘要,显示各层的细节。

    print(rnn.summary())
    
  8. 训练模型:使用提取的数据训练RNN模型,并将30%的数据用作验证集。训练1个epoch。

    result = rnn.fit(x_train, y_train, batch_size=64, validation_split=0.3, epochs=1)
    
  9. 打印结果:显示模型的训练历史。

    print(result)
    print(result.history)
    

总之,这段代码首先进行数据预处理,然后构建和训练一个RNN模型来对评论进行分类。

代码解读

当然可以!下面是逐行解读的代码:

  1. tf.random.set_seed(1):

    • 设置全局随机种子为1,确保随机过程的可重复性。
  2. df = pd.read_csv(“…/data/Clothing Reviews.csv”):

    • 使用pandas读取CSV文件,并将其内容赋值给df
  3. print(df.info()):

    • 打印df的简要摘要,包括每列的非空值数量、数据类型等信息。
  4. df[‘Review Text’] = df[‘Review Text’].astype(str):

    • 将DataFrame中的’Review Text’列转换为字符串类型。
  5. x_train = df[‘Review Text’]:

    • df中提取’Review Text’列的内容,并将其赋值给x_train
  6. y_train = df[‘Rating’]:

    • df中提取’Rating’列的内容,并将其赋值给y_train
  7. from tensorflow.keras.preprocessing.text import Tokenizer:

    • 从TensorFlow库中导入文本标记化工具。
  8. dict_size = 14848:

    • 设置词汇表的大小为14848。
  9. tokenizer = Tokenizer(num_words=dict_size):

    • 初始化一个Tokenizer对象,其最大词汇数为dict_size
  10. tokenizer.fit_on_texts(x_train):

  • 根据x_train中的文本内容为tokenizer对象构建词汇表。
  1. print(len(tokenizer.word_index), tokenizer.index_word):
  • 打印词汇表的大小和具体的词-索引映射。
  1. x_train_tokenized = tokenizer.texts_to_sequences(x_train):
  • x_train中的文本转换为整数序列,并赋值给x_train_tokenized
  1. from tensorflow.keras.preprocessing.sequence import pad_sequences:
  • 从TensorFlow库中导入序列填充工具。
  1. max_comment_length = 120:
  • 设置评论的最大长度为120。
  1. x_train = pad_sequences(x_train_tokenized, maxlen=max_comment_length):
  • x_train_tokenized中的序列填充或截断为统一的长度(120)。
  1. for v in x_train[:10]: print(v, len(v)):
  • 打印x_train中前10个序列及其长度。
  1. from tensorflow.keras.models import Sequential 和其他导入语句:
  • 从TensorFlow库中导入所需的模型和层。
  1. rnn = Sequential():
  • 初始化一个Sequential模型对象,并赋值给rnn
  1. rnn.add(Embedding(…)):
  • 向模型中添加一个Embedding层。
  1. rnn.add(SimpleRNN(units=100)):
  • 添加一个包含100个神经元的SimpleRNN层。
  1. rnn.add(Dense(units=10, activation=tf.nn.relu)):
  • 添加一个全连接层,包含10个神经元并使用ReLU激活函数。
  1. rnn.add(Dense(units=6, activation=tf.nn.softmax)):
  • 添加输出层,包含6个神经元,并使用Softmax激活函数。
  1. rnn.compile(…):
  • 编译模型,指定损失函数、优化器和评估标准。
  1. print(rnn.summary()):
  • 打印模型的摘要,展示每层的参数数量。
  1. result = rnn.fit(…):
  • 使用指定的训练数据和验证数据集进行模型训练,并将训练结果赋值给result
  1. print(result):
  • 打印训练过程的结果。
  1. print(result.history):
  • 打印训练过程中的历史数据,如每个周期的损失和准确率。

该代码的主要目的是使用Recurrent Neural Network (RNN)来对"Clothing Reviews.csv"中的评论进行分类。

知识点介绍

当然可以!以下是对每个重要函数的详细介绍:

  1. tf.random.set_seed(1)

    • 功能:设置全局随机种子,确保随机过程的可重复性。
  2. pd.read_csv(“…/data/Clothing Reviews.csv”)

    • 功能:使用pandas库读取CSV文件,并返回一个DataFrame对象。
  3. df[‘Review Text’].astype(str)

    • 功能:将DataFrame中的’Review Text’列转换为字符串类型。
  4. Tokenizer(num_words=dict_size)

    • 功能:初始化一个Tokenizer对象,该对象可以将文本转换为整数序列。
    • 参数:num_words表示Tokenizer对象将使用的最大单词数。这意味着只有出现频率最高的dict_size个词将被考虑。
  5. tokenizer.fit_on_texts(x_train)

    • 功能:根据提供的文本数据,为Tokenizer对象构建词汇表。
  6. tokenizer.texts_to_sequences(x_train)

    • 功能:将文本列表转换为整数序列列表,其中整数是词汇表中词的索引。
  7. pad_sequences(x_train_tokenized, maxlen=max_comment_length)

    • 功能:将整数序列列表转换为2D Numpy数组,长度不足的序列将被填充,长度超出的序列将被截断。
    • 参数:maxlen定义了序列的最大长度。
  8. Sequential()

    • 功能:初始化一个线性堆叠模型,允许按顺序添加层。
  9. Embedding(input_dim=dict_size, output_dim=60, input_length=max_comment_length)

    • 功能:将整数标记转换为密集向量。
    • 参数:input_dim是词汇表的大小,output_dim是嵌入向量的维度,input_length是输入序列的长度。
  10. SimpleRNN(units=100)

  • 功能:添加一个SimpleRNN层,它是RNN的一个简化版本。
  • 参数:units定义了RNN单元的数量。
  1. Dense(units=10, activation=tf.nn.relu)Dense(units=6, activation=tf.nn.softmax)
  • 功能:添加一个全连接层。
  • 参数:units定义了层中神经元的数量,activation是激活函数。
  1. rnn.compile(…)
  • 功能:编译模型,准备进行训练。
  • 参数:loss定义了损失函数,optimizer定义了优化算法,metrics定义了模型评估的标准。
  1. rnn.fit(x_train, y_train, batch_size=64, validation_split=0.3, epochs=1)
  • 功能:训练模型。
  • 参数:batch_size定义了每次梯度更新使用的样本数量,validation_split定义了用于验证的数据的比例,epochs定义了训练周期的数量。

这些函数共同完成了数据处理、模型构建和训练的过程。希望这些详细的介绍能够帮助您更好地理解代码!

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

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

相关文章

iPhone没有信号无法付钱?这样的损友要远离

近段时间以来,网络频传iPhone的信号差,导致朋友外出吃饭,用iPhone的朋友无法付钱,而只好拿国产手机的自己付钱,如果遇上这样的朋友只能说你被骗了,那是朋友在坑你,这样的朋友绝对是损友&#xf…

796. 子矩阵的和(二维前缀和)

题目: 796. 子矩阵的和 - AcWing题库 思路: 1.暴力搜索(搜索时间复杂度为O(n2),很多时候会超时) 2. 前缀和(左上角(二维)前缀和):本题特殊在不是直接求前…

systrace/perfetto如何看surfaceflinger的vsync信号方法-android framework实战车载手机系统开发

背景: hi,粉丝朋友们: 大家好!近期分享了surfaceflinger相关的一些blog,有同学就对相关的一些内容产生了一些疑问。 比如:vsync查看问题,即怎么才可以说是vsync到来了。 比如perfetto中surfac…

Flutter——最详细(Map)使用教程

Map简介 键值对的集合,您可以使用其关联的键从中检索值。 普通的 HashMap是无序的(不保证顺序),LinkedHashMap 按键插入顺序迭代,而像 SplayTreeMap 这样的排序映射按排序顺序迭代键。 1,添加元素 addEntri…

【MySql】10- 实践篇(八)

文章目录 1. 用动态的观点看加锁1.1 不等号条件里的等值查询1.2 等值查询的过程1.3 怎么看死锁?1.4 怎么看锁等待?1.5 update 的例子 2. 误删数据后怎么办?2.1 删除行2.2 误删库/表2.3 延迟复制备库2.4 预防误删库 / 表的方法2.4.1 账号分离2.4.2 制定操…

R -- match,pmatch,charmatch

文章目录 matchpmatchcharmatch match ?matchDescription match returns a vector of the positions of (first) matches of its first argument in its second. 第一个向量中的元素在第二个向量中的位置,如果第二个向量中有多个仅返回第一个match 元素的位置&…

vscode代码格式

touch .clang-format#加入以下内容 BasedOnStyle: Google BreakBeforeBraces: Custom BraceWrapping:AfterClass: falseAfterControlStatement: falseAfterEnum: falseAfterFunction: trueAfterNamespace: falseAfterObjCDeclaration: falseAfterStruct: falseAfterUnion: fals…

coturn服务器的搭建

Window下搭建coturn服务器: 准备材料: 1、安装Cygwin,地址:https://cygwin.com/install.html 由于Window无法直接部署coturn,因此需要下载安装Cygwin在Window上部署Linux虚拟环境。 在安装的时候需要安装几下packe…

springboot循环依赖问题解决

修改application.properties 添加 spring.main.allow-circular-referencestrue spring.cloud.refresh.refreshablenone #(应该是这行生效)

顺序表练习

顺序表练习 图解插入与删除,详见相关内容:顺序存储结构的插入与删除 //顺序表的定义、创建、插入、删除、查找 //定义:结构体中数组、表长 //创建:输入元素,表长 //插入:判断表是否已满、判断位序合法性 //插入位序k…

【Amazon】跨AWS账号资源授权存取访问

文章目录 一、实验框架图二、实验过程说明三、实验演示过程1、在A账号中创建S3存储桶2、在A账号创建S3存储桶访问策略3、在A账号创建信任开发账号的角色4、在B账号为用户添加内联策略5、在B账号中切换角色,以访问A账号中的S3资源 四、实验总结 一、实验框架图 本次…

Python通过pyecharts对爬虫房地产数据进行数据可视化分析(一)

一、背景 对Python通过代理使用多线程爬取安居客二手房数据(二)中爬取的房地产数据进行数据分析与可视化展示 我们爬取到的房产数据,主要是武汉二手房的房源信息,主要包括了待售房源的户型、面积、朝向、楼层、建筑年份、小区名称…

华为数通方向HCIP-DataCom H12-831题库(多选题:101-120)

第101题 LSR对收到的标签进行保留,且保留方式有多种,那么以下关于LDP标签保留一自由方式的说法 A、保留邻居发送来的所有标签 B、需要更多的内存和标签空间 C、只保留来自下一跳邻居的标签,丢弃所有非下一跳铃邻居发来的标签 D、节省内存和标签空间 E、当IP路由收敛、下一跳…

客户端性能测试基础知识

目录 1、客户端性能 1.1、客户端性能基础知识 2、客户端性能工具介绍与环境搭建 2.1.1、perfdog的使用 2.1.2、renderdoc的使用 1、客户端性能 1.1、客户端性能基础知识 客户端性能知识这里对2D和3D类游戏进行展开进行,讲述的有内存、CPU、GPU、帧率这几个模块…

【计算机网络】分层模型和应用协议

网络分层模型和应用协议 1. 分层模型 1.1 五层网络模型 网络要解决的问题是:两个程序之间如何交换数据。 四层?五层?七层? 2. 应用层协议 2.1 URL URL(uniform resource locator,统一资源定位符&#…

深入vue2.0源码系列:生命周期的实现

前言 在Vue.js 2.0中,组件的生命周期函数分为8个阶段,分别是: beforeCreate:组件实例刚被创建,但是数据和事件监听还未被初始化。created:组件实例已经被创建,并且数据和事件监听已经初始化完…

Android 13.0 rom定制专栏系列解读

一.前言 在从事android系统rom定制化的这几年里,经历了坎坎坷坷,开发过好几种类型的产品,也随着google对android系统的更新加快,也需要跟随上时代的进步,所以需要把平时工作中遇到的问题总结出来,及时做好…

leetCode 136.只出现一次的数字 + 位运算

136. 只出现一次的数字 - 力扣(LeetCode) 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算…

保护生产中 Node.js 应用程序安全的 15 项最佳实践

在后端开发方面,Node.js 是开发人员最喜欢的技术之一。它的受欢迎程度不断上升,现已成为在线攻击的主要目标之一。这就是为什么保护 Node.js 免受漏洞和威胁至关重要。 在本指南中,您将看到为生产设计安全 Node.js 应用程序架构的 15 种最佳…

Three.js 开发引擎的特点

Three.js 是一个流行的开源 3D 游戏和图形引擎,用于在 Web 浏览器中创建高质量的三维图形和互动内容。以下是 Three.js 的主要特点和适用场合,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作…