27、深度学习-自学之路-NLP自然语言处理-做一个简单的项目识别一组电影评论,来判断电影评论是积极的,还是消极的。

一、如果我们要做这个项目,第一步我们要做的就是需要有对应的训练数据集。

这里提供两个数据集,一个是原始评论数据集《reviews.txt》,以及对应的评论是消极还是积极的数据集《labels.txt》,下面的程序就是找到这两个数据集,并把对应的数据集的内容分别赋值给reviews和labels

def pretty_print_review_and_label(i):print(labels[i] + "\t:\t" + reviews[i][:80] + "...")g = open('reviews.txt','r') # What we know!
reviews = list(map(lambda x:x[:-1],g.readlines()))
g.close()
print(reviews[0])
g = open('labels.txt','r') # What we WANT to know!
labels = list(map(lambda x:x[:-1].upper(),g.readlines()))
g.close()
print(labels[0])

运行结果为:

这个是评论:
bromwell high is a cartoon comedy . it ran at the same time as some other programs about school life  such as  teachers  . my   years in the teaching profession lead me to believe that bromwell high  s satire is much closer to reality than is  teachers  . the scramble to survive financially  the insightful students who can see right through their pathetic teachers  pomp  the pettiness of the whole situation  all remind me of the schools i knew and their students . when i saw the episode in which a student repeatedly tried to burn down the school  i immediately recalled . . . . . . . . . at . . . . . . . . . . high . a classic line inspector i  m here to sack one of your teachers . student welcome to bromwell high . i expect that many adults of my age think that bromwell high is far fetched . what a pity that it isn  t   

这个是消极或者积极的评判:
POSITIVE

二、这一步我们要做连个事情,

第1个是把评论的所有的单词进行链表处理。

比如说:reviews的文件有25000条评论数据,那么着25000条评论数据对应会有很多个单词,我们要把这些单词做成一个词典一样的链表。比如:1对应的是 is 2对应的是it 类似于这种。

第2个是把做好这个词典以后,我们把每天评论语中的单词不重复的形式去词典里面查找对应的数字号码。并把新的数字号码作为神经元的输入。给训练使用。

第3个是把所有的评论评判的结果用 1 和 0 来表示。积极的用 1 消极的用 0

第4把整个整理好的输入和真实数据集放入神经网络中进行训练,然后再用训练好的权重对前1000条评论进行回测。

程序如下:

import sysf = open('reviews.txt')
raw_reviews = f.readlines()
f.close()f = open('labels.txt')
raw_labels = f.readlines()
f.close()tokens = list(map(lambda x:set(x.split(" ")),raw_reviews))vocab = set()
for sent in tokens:for word in sent:if(len(word)>0):vocab.add(word)
vocab = list(vocab)word2index = {}
for i,word in enumerate(vocab):word2index[word]=iinput_dataset = list()
for sent in tokens:sent_indices = list()for word in sent:try:sent_indices.append(word2index[word])except:""input_dataset.append(list(set(sent_indices)))target_dataset = list()
for label in raw_labels:if label == 'positive\n':target_dataset.append(1)else:target_dataset.append(0)import numpy as npnp.random.seed(1)def sigmoid(x):return 1/(1 + np.exp(-x))alpha, iterations = (0.01, 2)
hidden_size = 100weights_0_1 = 0.2 * np.random.random((len(vocab),hidden_size)) - 0.1
#weights_0_1 = 2 *   np.random.random((3,hidden_size)) - 1
weights_1_2 = 0.2 * np.random.random((hidden_size,1)) - 0.1correct,total =  (0,0)for iter in range(iterations):for i in range(len(input_dataset)-1000):x,y = (input_dataset[i],target_dataset[i])#这行代码的主要目的是计算神经网络中某一层(这里是 layer_1)的输出。具体来说,# 它先从权重矩阵 weights_0_1 中选取特定的行(由索引 x 确定),然后对这些行沿着 axis=0 方向求和,# 最后将求和结果通过 sigmoid 激活函数进行处理,得到 layer_1 的输出值。layer_1 = sigmoid(np.sum(weights_0_1[x],axis=0))layer_2 = sigmoid(np.dot(layer_1,weights_1_2))layer_2_delta = layer_2 - ylayer_1_delta = layer_2_delta.dot(weights_1_2.T)weights_0_1[x] -= layer_1_delta * alphaweights_1_2 -= np.outer(layer_1,layer_2_delta) * alpha#如果得到的误差值绝对值小于0.5,那么说明layer_2和真实结果值最接近。if(np.abs(layer_2_delta)<0.5):correct += 1total += 1if(i % 10 == 9):progress = str(i/float(len(input_dataset)))sys.stdout.write('\rIter:'+str(iter)\+ 'Progress:'+progress[2:4]\+ '.' + progress[4:6]\+ '% Training Accureacy:'\+ str(correct/float(total))+ '%')print()
correct, total = (0, 0)
for i in range(len(input_dataset)-1000,len(input_dataset)):x = input_dataset[i]y = target_dataset[i]layer_1 = sigmoid(np.sum(weights_0_1[x], axis=0))layer_2 = sigmoid(np.dot(layer_1, weights_1_2))if (np.abs(layer_2 - y) < 0.5):correct += 1total += 1
print("Test Accuracy:"+ str(correct/float(total)))#运行结果:
'''
Iter:0Progress:95.99% Training Accureacy:0.83275%
Iter:1Progress:95.99% Training Accureacy:0.8662291666666667%
Test Accuracy:0.846
'''

从运行结果上看,以及识别率已经达到了0.846,属于NLP的基本的的识别成功率范围。

如果大家想下载数据集的话,希望大家花点币,因为最近在学习,我自己也需要下载很多其他学习资料在CSDN上,所有有点币下东西比较方便。

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

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

相关文章

PyTorch 混合精度训练中的警告处理与代码适配指南

在最近的 PyTorch 项目开发中&#xff0c;遇到了两个与混合精度训练相关的警告信息。这些警告主要涉及 torch.cuda.amp 模块的部分 API 已被标记为弃用&#xff08;deprecated&#xff09;。本文将详细介绍这些警告的原因、解决方法以及最佳实践。 警告内容 警告 1: torch.cud…

STM32自学记录(九)

STM32自学记录 文章目录 STM32自学记录前言一、DMA杂记二、实验1.学习视频2.复现代码 总结 前言 DMA 一、DMA杂记 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&…

鸿蒙Harmony-UIAbility内状态-LocalStorage详细介绍

鸿蒙Harmony-UIAbility内状态-LocalStorage详细介绍 1.1 Localstorage的概念 LocalStorage是页面级的UI状态存储&#xff0c;通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例&#xff0c;LocalStorage也可以在UIAbility内&#xff0c;页面间共享状态 1.2 Lo…

SiliconCloud 支持deepseek,送2000w token

SiliconCloud SiliconCloud 邀请奖励持续进行&#xff0c;2000 万 Tokens 送不停&#xff01; 邀请好友赚 2000 万 Tokens&#xff1a;每成功邀请一位新用户通过手机号码注册&#xff0c;您将获得 2000 万 Tokens&#xff1b;注册即送 2000 万 Tokens&#xff1a;受邀好友作为…

ubuntu服务器部署

关闭欢迎消息 服务器安装好 ubuntu 系统后&#xff0c;进行终端登录&#xff0c;会显示出很多的欢迎消息 通过在用户的根目录下执行 touch .hushlogin 命令&#xff0c;再次登录终端就不会出现欢迎消息 修改hostname显示 修改 /etc/hostname 文件内容为主机名&#xff0c;保…

排序算法——人无完人

没有哪一个排序方法是完美的&#xff0c;对于不同的需求&#xff0c;排序算法各有自己的优势。金无足赤&#xff0c;人无完人。 &#xff08;这里不再重复所讲排序算法的实现&#xff0c;网上已有很多好的教学。&#xff09; 排序方法除了依靠时间复杂度和空间复杂度来区分&am…

3D模型可视化引擎HOOPS Visualize在桌面端的支持有哪些特点?

在数字化转型日益加速的今天&#xff0c;工业和工程领域的专业人员面临着越来越复杂的设计和数据分析需求。3D模型可视化技术应运而生&#xff0c;并成为了加速设计和制造流程的关键工具。作为业界领先的3D可视化引擎之一&#xff0c;HOOPS Visualize提供了一系列强大的桌面端支…

傅里叶变换推导

基本模型 假设在二维直角坐标系中&#xff0c;可以用相互垂直的基向量和表示&#xff1a; 假设&#xff1a; 假设在上的投影为&#xff0c;那么&#xff1a; 所以&#xff1a; 用公式表达&#xff1a; 但是在实际中&#xff0c;基向量和不一定长度都是1&#xff0c;重新推导一…

数据科学之数据管理|python for office

现如今&#xff0c;随着计算机的逐渐普及。现代化办公成为每个职场人必备的技能&#xff0c;本文档就来介绍&#xff0c;如何使用pytohn实现自动化办公。然而&#xff0c;自动化办公有时并不能减少工作量。自动化办公更适合批量处理文档。单一的文件&#xff0c;小金不建议使用…

【前端框架】Vue3 中 `setup` 函数的作用和使用方式

在 Vue 3 里&#xff0c;setup 函数是组合式 API 的核心入口&#xff0c;为开发者提供了更灵活、高效的组件逻辑组织方式。以下为你详细介绍其作用和使用方式&#xff1a; 作用 1. 初始化响应式数据 在 setup 函数中&#xff0c;我们能够使用 ref 和 reactive 等函数来创建响…

MySQL无法连接到本地localhost的解决办法2024.11.8

问题描述&#xff1a;我的MySQL可以远程连接服务器&#xff0c;但无法连接自己的localhost。 错误提示&#xff1a; 2003 - Cant connet to MySQL server on localhost(10061 "Unknown error")查找问题原因&#xff1a; 1. 检查环境变量是否正确&#xff1a;发现没…

STM32HAL库快速入门教程——常用外设学习(2)

目录 一、STM32HAL库开发&#xff08;8&#xff09;——CubeMX配置DMA 1.1、什么是DMA&#xff1f; 1.2、内存内存之间的传输&#xff08;单次&#xff09; ​编辑 1.3、内存外设之间的传输&#xff08;ADC&#xff09; 二、STM32HAL库开发&#xff08;9&#xff09;——…

LabVIEW与小众设备集成

在LabVIEW开发中&#xff0c;当面临控制如布鲁克OPUS红外光谱仪这类小众专业设备的需求&#xff0c;而厂家虽然提供了配套软件&#xff0c;但由于系统中还需要控制其他设备且不能使用厂商的软件时&#xff0c;必须依赖特定方法通过LabVIEW实现设备的控制。开发过程中&#xff0…

PyQt组态软件 拖拽设计界面测试

PyQt组态软件测试 最近在研究PyQt,尝试写个拖拽设计界面的组态软件&#xff0c;目前实现的功能如下&#xff1a; 支持拖入控件&#xff0c;鼠标拖动控件位置 拖动控件边缘修改控件大小支持属性编辑器&#xff0c;修改当前选中控件的属性 拖动框选控件&#xff0c;点选控件 控…

AI如何与DevOps集成,提升软件质量效能

随着技术的不断演进&#xff0c;DevOps和AI的融合成为推动软件开发质量提升的重要力量。传统的DevOps已经为软件交付速度和可靠性打下了坚实的基础&#xff0c;而随着AI技术的加入&#xff0c;DevOps流程不仅能提升效率&#xff0c;还能在质量保障、缺陷预测、自动化测试等方面…

Mac配置Flutter开发环境

1、访问 Flutter 官网&#xff0c;下载安装Flutter SDK 2、将 Flutter 添加到 PATH 环境变量 找到用户文件夹中的.zshrc隐藏文件&#xff08;隐藏文件显示方式&#xff1a;shiftcommand.&#xff09;&#xff0c;打开.zshrc文件&#xff0c;添加Flutter SDK路径&#xff0c;注…

Linux系统使用ollama本地安装部署DeepSeekR1 + open-webui

Linux系统使用ollama本地安装部署DeepSeekR1 open-webui 1. 首先&#xff0c;下载安装ollama #下载安装脚本并执行 curl -fsSL https://ollama.com/install.sh | sh #安装完成后查看ollama版本 ollama --version2. 使用ollama下载deepseek #不同的参数规格对硬件有不同的要…

【Kubernetes】常用命令全解析:从入门到实战(中)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是k8s 2、K8s的核心功能 二、资…

[ComfyUI]腾讯开源黑科技Sonic,插件更新,更加可控啦

一、Sonic更新介绍 大家还记得我前分享过腾讯开源的Sonic这个项目吧&#xff0c;通过照片声音就可以生成非常不错的数字人开口说话的视频。 当时我就挺满意的&#xff0c;不过那时候输出还只能输出正方形的视频&#xff0c;这点就让我留有遗憾。 今天我再去翻作者的项目官网…

设计模式Python版 命令模式(上)

文章目录 前言一、命令模式二、命令模式示例 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&#xff1a;关注类和对象之间的组合&…