【class2】人工智能初步(自然语言处理)

要实现从评价中提取高频关键词,并判别其正负面性,其实是通过人工智能领域中的一个分支:自然语言处理。

在了解自然语言处理之前,我们先来说说,什么是自然语言(Natural Language)?
自然语言,即人们日常使用的语言,也就是每天包围着我们的文本信息语音信息

了解自然语言

这样或许还不太能知道到底什么是自然语言处理,我们简单看一些它的应用,来帮助理解为什么要让计算机去处理自然语言吧~

1.邮件过滤
系统会根据电子邮件的内容识别电子邮件是否属于三个类别(重要、社交或广告)之一,或者判断一封邮件是否是垃圾邮件。
此时就是通过NLP来对这些邮件进行一系列的分类。

2. 搜索引擎,如百度、谷歌等。
在我们输入2-3个字后,搜索引擎会显示可能的搜索词。或者如果输入了错别字,搜索引擎会自动进行更正。
这就是通过NLP技术来实现的搜索自动完成和自动更正功能,帮助我们更有效地找到准确的结果。

3. 机器翻译,比如Google、有道翻译。
目前所追求的翻译,不再仅仅是通过计算机直接将一种语言转换为另一种语言,而是需要像人类一样能够理解世界知识和上下文。
要让电脑像人类一样理解自然语言,必然离不开NLP技术。

4. 语音助理,比如Siri、智能音箱等。
现在的语音助理,与人类之间的交流不再是简单的你问我答,不少语音助手甚至能和人类进行深度交谈。
同样在这背后离不开NLP技术,使得语音助理能够将人类语言转换为机器语言,然后执行相应的操作。

通过这些例子大概可以感受到,我们每天都会产出大量的自然语言信息。在面对自然语言时,除了单纯地阅读和倾听外,往往会进行更多复杂的操作和处理。
但人工处理的代价过于高昂,因此会期望训练计算机来代替人类,这就是自然语言处理的意义。

然而,自然语言并没有想象中那么容易处理。
与人工语言(编程语言或数学语言等)相比,自然语言有着多变、非结构化等各种特殊和复杂的特点。

例如:
编程语言中的关键词数量是固定的,而自然语言中能使用的词汇量是无限的,甚至还在不断创造新词;
编程语言具有结构性,如类和对象,但显然自然语言不具有这样的结构。

总结一下,广义上来讲任何处理自然语言的计算机操作都可以被理解为NLP。
它可以实现一些简单的功能,比如短语之间的翻译。
同时,NLP也致力于完成一些具有挑战性的任务,比如完全“理解”人类话语。

了解完自然语言处理(NLP)的基本概念、应用和面临的一些挑战后,我们来思考一下:
在自然语言这个复杂的系统里,是否存在一个基本单位呢?
这样便可以把无规律的文本信息降维处理后,再来完成后续的NLP任务。

拆解文本

1.一篇文本是由无数句话组成,而一句话又是由一个个词语组成,因此可以将词语看作是自然语言的基本单位。
那么在进行NLP时,就需要先将句子中的词语分开。

对于英文,只需要按照空格和标点符号就可以将词语分开。但在中文文本里,所有的字都连在一起,计算机并不知道一个字应该与其前后的字连成词语,还是应该自己形成一个词语。

因此,需要借助额外的工具将中文文本中的词语分隔开。这项技术被称为中文的分词,具体的操作我们会在下节课进行学习。

2.分词完成后,就可以根据这些词语找到属于这个文本的特点,也就是常说的特征(feature)。对于文本而言,词语出现的频率就可以作为一项特征。那么,词频这个特征就能帮我们提取出关键词。在进行NLP时,构造词袋模型(Bag-of-Words Model)是一种常用的用于统计词频的技术。

可以看到,通过词袋模型生成的结果,词的顺序和语法都被忽略了,变成了一些词语间的组合,但又在一定程度上保留了主题信息。

我们根据词袋中“物流”、“屏幕”等词语,仍然可以知道这三条评价与物流和屏幕有关。同时,根据词频,我们也获取了关于这三条评价的关键词:“满意”、“物流”和“屏幕”。

将复杂的词句结构降维成体现主题的词语计数,以便计算机进行后续的处理。这就是词袋模型的基本思想。

分析商品评价:

根据刚才的思路分析,我们就得到了如下解题步骤:
1. 寻找、读取,并处理数据集
2. 统计词频,提取关键词
3. 构造模型,预测评价的正负面性

今天我们会先学习第一个步骤:寻找、读取和处理数据集。

什么是CSV文件呢?

CSV(Comma-Separated Values)(逗号分隔值)文件以纯文本的形式储存数字、文本等表格数据。它的数据格式如图所示,文件中多个数据之间通常用逗号分隔,每一行的数据都是相同的结构。

读取CSV文件

代码的作用

这段代码展示了使用csv模块来读取存储了电视评价的CSV文件。
STEP1. 导入csv模块
STEP2. 打开文件
STEP3. 读取文件

# 导入csv模块

import csv

# 使用open()函数打开数据集,并将返回的文件对象存储在变量file中

file = open("/Users/yequ/TVComments.csv", "r")

# 使用csv.reader()函数读取数据集,并赋值给变量reader

reader = csv.reader(file)

解析代码

1. 导入模块

Python提供了一个用于处理CSV文件的模块:csv 模块。由于是内置模块,所以不需要安装,直接使用import导入即可。

2. 打开文件:open()

在使用csv模块读取文件前,得先通过open()函数打开需要被读取的文件。该函数用于打开一个文件,并返回对应的文件对象。

open()函数:第一个参数

第一个参数是文件路径(path),也是必选参数。本例中,将存储了电视评价的数据集的路径:"/Users/yequ/TVComments.csv",作为必选参数传入到open()函数中。

open()函数:第二个参数

第二个参数代表打开方式,用特定的字符串表示。我们只需要读取该文件,所以使用 r ,表示以只读的方式读取文件。

文本对象

open()函数返回一个文件对象,我们将它存储在变量file中。

3. 读取文件:csv.reader()

打开数据集后,我们就可以使用csv.reader()函数读取CSV文件,只需将文件对象file作为参数传入其中。

reader对象

使用csv.reader()函数时,返回的是一个reader对象,我们将它存储在了变量reader中。

逐步修改

什么是reader对象?

读取文件后,获取到的是一个reader对象。
reader对象存储的是CSV文件里所有行数据,相当于每一行数据都作为字符串列表返回。
我们可以使用for循环遍历它,输出每一次遍历结果进行查看。

查看提取信息

根据输出可以看到,CSV文件里的每一行都被读作成了一个字符串列表。由于CSV文件有两列数据,所以对应的每个列表里都有两个元素:
第一个元素是评价;
第二个元素是该评价对应的正负面性。

这就意味着,CSV文件里有多少行评价数据,reader对象中就有多少个列表。

了方便接下来对所有的评价进行处理,我们可以对reader变量里的数据进行标准化处理

标准化处理

具体的方法是把所有的评价都存储在一个列表中,这样不论是遍历所有评价还是访问单独的某一条评价,都会非常方便。
步骤如下:
1. 先创建一个空列表,用于存储reader对象中的值
2. 使用for循环遍历reader对象
3. 使用append()函数,将reader对象中的每行数据添加到空列表data中
完成后,data列表里存储的就是我们需要的电视评价数据啦~

修改代码如下:

输出结果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

品牌出海新趋势:掌握“微创新”策略,快速适应海外市场

在全球化的今天,品牌出海已成为众多企业拓展业务、实现国际化发展的重要途径。然而,海外市场与本土市场在文化、消费习惯、法律法规等方面均存在显著差异,这要求品牌在海外市场中必须灵活应变,通过微小的、有针对性的创新来快速适…

idea配置MySQL提示

点击sql语句,然后再选择show context actions 然后再选择Inject language or reference 然后再选择MySQL 然后我们会发现sql语句变颜色了 如果表是红色 那么需要我们连接mysql的对于的数据库

478.8-480W 宽电压输入 AC/DC 导轨式开关电源——TPR/SDR-480-XS 系列

TPR/SDR-480-XS 系列导轨式开关电源,额定输出功率为478.8-480W,产品输入范围:85-264VAC。提供24V、36V、48V输出,具有短路保护,过载保护等功能,并具备高效率,高可靠性、高寿命、更安全、更稳定等…

BGP—边界网关协议

BGP 动态路由协议可以按照工作范围分为IGP以及EGP。IGP工作在同一个AS内,主要用来发现和计算路由,为AS内提供路由信息的交换;而EGP工作在AS与AS之间,在AS间提供无环路的路由信息交换,BGP则是EGP的一种。 BGP是一…

前端铺子-NodeJS后端:基于Node.js构建高效后端服务的探索与实践

一、引言 随着前端技术的快速发展,越来越多的开发者开始关注前后端分离的开发模式。前端铺子作为一个旨在服务前端开发者的开源项目,近期推出了基于Node.js的后端系统。该系统通过整合Node.js、Nodemon和MySQL等技术,为前端开发者提供了一个…

Python-VBA函数之旅-tuple函数

目录 一、tuple函数的常见应用场景 二、tuple函数使用注意事项 三、如何用好tuple函数? 1、tuple函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://myelsa1024.blog.csdn.net/ 一、tu…

钡铼技术BL205模块分布式IO集成应用风电场状态监测

在风力发电这一绿色能源领域,高效、精确的状态监测对于提升风电场运维效率、保障设备安全运行至关重要。随着工业4.0和数字化转型浪潮的推进,传统的监测方式已难以满足日益增长的数据处理与分析需求。钡铼技术BL205模块的出现,为风电场状态监…

[图解]实现领域驱动设计译文暴露的问题04

0 00:00:00,960 --> 00:00:03,020 今天我们继续说一下 1 00:00:03,460 --> 00:00:05,350 实现领域驱动设计 2 00:00:05,630 --> 00:00:08,120 译文里面暴露的问题 3 00:00:10,630 --> 00:00:14,740 前面三个视频,我们提到了第①句 4 00:00:15,550 -…

【算法提升之赛事推荐】蓝桥杯没拿奖?你还有这个比赛的羊毛可以薅

目录 蓝桥算法双周赛-赛事介绍([官方连接](https://www.lanqiao.cn/oj-contest/))赛事奖励赛事概览快速上手划重点!1. 赛题解析及答疑2. 排行榜3. 基础体验 注意事项 蓝桥算法双周赛-赛事介绍(官方连接) 为了激励同学们…

Django自定义封装Response

Django自定义封装Response 目录 Django自定义封装Response定义Response类视图层示例 定义Response类 # utils/common_response.py from rest_framework.response import Response# 继承DRF的Response并重写__init__ class APIResponse(Response):def __init__(self, code100, …

排序-计数排序(Counting Sort)

计数排序(Counting Sort)是一种非比较排序算法,特别适用于一定范围内的整数排序。它的核心思想是统计每个值的出现次数,然后根据这些计数将每个元素放到其正确的位置上。计数排序的时间复杂度为O(nk),其中n是数组长度&…

ChatGPT4o免费体验?OpenAI 又在深夜放大招了!

👩🏽‍💻个人主页:阿木木AEcru 🔥 系列专栏:《Docker容器化部署系列》 《Java每日面筋》 💹每一次技术突破,都是对自我能力的挑战和超越。 目录 一、GPT4o是什么?二、官网…

LeetCode2215找出两数组的不同

题目描述 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,请你返回一个长度为 2 的列表 answer ,其中:answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整数组成的列表。answer[1] 是 nums2 中所有 不 存在于 nums1 中的 不同 整数组…

正念冥想训练内容有哪些?流静冥想

正念冥想训练内容有哪些? “我做不到感恩,总觉得满世界都是欠我的。”同学A这样说。看得出来她的无奈、无力以及无头绪感。 “我无法对父母做出感恩的祝福,从他们那里我感受不到爱,感受不到关怀,体验不到感恩。”同学…

【Java】IDEA自动生成类图和时序图

【Java】IDEA自动生成类图和时序图 idea 的强大之处在于此,它包含了很多小插件,我们不需要再次下载相关插件,只需要在idea中小小的设置一下就可以了,下面是设置方法,我用的是idea2020版本 打开设置File -> Settings->Diagr…

vue3 中 使用 antd中的select 组件的带搜索框 展开后可对选项进行筛选搜索功能

鼠标进入以后下拉显示&#xff1a; 输入字符串以后&#xff1a; 可以看出对数据进行了筛选。 具体代码&#xff1a; 结构上&#xff1a;<a-selectv-model:value"formState.formFlow"show-searchallowClearplaceholder"输入选择流程":options"op…

React Native 之 开发环境搭建(一)

1. 安装Node.js&#xff1a; Node.js是React Native开发的基础&#xff0c;因此首先需要安装Node.js。强烈建议始终选择 Node 当前的 LTS &#xff08;长期维护&#xff09;版本&#xff0c;一般是偶数版本&#xff0c;不要选择偏实验性质的奇数版本。 如果你希望更方便地管理…

【数据结构】数组循环队列的实现

队列&#xff08;Queue&#xff09;是一种特殊的线性数据结构&#xff0c;它遵循FIFO&#xff08;First In First Out&#xff0c;先入先出&#xff09;的原则。队列只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在表的后端&#xff08;rear&#…

C++11 线程池:轻量级高并发解决方案

C11 线程池&#xff1a;轻量级高并发解决方案 线程池&#xff08;Thread Pool&#xff09;是一种线程管理的机制&#xff0c;它包含了多个预先创建的线程&#xff0c;用于执行多个任务&#xff0c;这些任务被放入任务队列中等待执行。 满足我们的生产者和消费者模型。 线程…

java面试题:判断字符串包含字母、数字、空格、符号的数量

在Java中&#xff0c;你可以使用正则表达式来检查字符串中包含多少个字母、数字、空格和符号。也可以使用基础api来实现业务逻辑&#xff0c;方法如下&#xff1a; 1 使用Character类的静态方法 以下代码定义了一个countCharacters方法&#xff0c;它遍历字符串中的每个字符&a…