机器学习第七课--情感分析系统

分词

分词是最基本的第一步。无论对于英文文本,还是中文文本都离不开分词。英文的分词相对比较简单,因为一般的英文写法里通过空格来隔开不同单词的。但对于中文,我们不得不采用一些算法去做分词。

常用的分词工具

# encoding=utf-8
import jieba
# 基于jieba的分词 参考: https://github.com/fxsjy/jieba
seg_list = jieba.cut("贪心学院是国内最专业的人工智能在线教育品牌", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))
# 在jieba中加入"贪心学院"关键词
jieba.add_word("贪心学院")
seg_list = jieba.cut("贪心学院是国内最专业的人工智能在线教育品牌", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))

 结果:

Default Mode: 贪心/ 学院/ 是/ 国内/ 最/ 专业/ 的/ 人工智能/ 在线教育/ 品牌
Default Mode: 贪心学院/ 是/ 国内/ 最/ 专业/ 的/ 人工智能/ 在线教育/ 品牌

一般情况下,我们还是要定义属于自己的专有名词的。如果我们考虑的是医疗领域,则需要把医疗领域我们比较关注的词先加入到词库里,再通过结巴工具做分词,毕竟很多的专有词汇并不存在于结巴的词库里。大部分情况下只需要使用工具去分词就可以了,没必要自己造轮子。但有一些特殊情况,比如这些开源工具的效果很一般,或者它们缺少某些方面的考虑,则可能需要自己写一个分词工具。实际上,自己写一个分词工具也不难,可以基于HMM, CRF等方法来构造分词器。具体算法细节超出了此课程的范围,感兴趣的可以关注下我们高阶的训练营。

单词的过滤 

接下来,我们一般做单词的过滤或者字符的过滤。比如把一些出现次数特别多的单词过滤掉也叫作停用词的过滤,或者把那些出现次数特别少的单词过滤掉,或者把一些特殊符号比如#@过滤掉。

那什么叫停用词呢? 其实很容易理解:就是那些出现特别频繁,但对于一个句子贡献不是特别大的单词。比如”的“, ”他“可以认为是停用词。去掉停用词的方法也超级简单,就是提前设计好停用词库,然后做文本分析时把这些停用词忽略掉就可以了。 

停用词库的构建可以有三种方法。 第一、手动去设置停用词库,把所有的停用词写入一个文件。这个过程比较耗费时间,但对于非常垂直类的应用还是最有效的。第二、从网上搜索停用词库,一般来讲网络上可以找到大部分语言的停用词库,这些都是别人已经整理好的,所以基本都是通用的。但有些时候确实由于应用本身的特点,这些停用词库可能还满足不了需求。所以,这时候需要适当地加入一些人工方式来整理的单词。第三、从第三方工具中导入停用词库,比如NLTK这些工具已经集成了不同语言的停用词库,所以使用的时候直接调用就可以了。

# 方法1: 自己建立一个停用词词典
stop_words = ["the", "an", "is", "there"]
# 在使用时: 假设 word_list包含了文本里的单词
word_list = ["we", "are", "the", "students"]
filtered_words = [word for word in word_list if word not in stop_words]
print (filtered_words)
# 方法2:直接利用别人已经构建好的停用词库
from nltk.corpus import stopwords
cachedStopWords = stopwords.words("english")
print(cachedStopWords)

除了停用词,我们也通常会去掉出现次数特别少的单词,毕竟这些单词的频次太低,对整个训练来说起到的作用也不大。那如何去制定什么样的单词才叫作出现次数少的呢? 这里其实没有一个标准答案,还是需要去了解一下每个单词出现的次数,从而再去判断这个阈值。一般来讲,比如一个单词出现少于10次或者20次,我们可以归类为是可以去掉的单词。 但这个也取决于手里的语料库大小。如果语料库本身总共只包含了不到一千个单词,那这个阈值显然有点高了。对于特殊符号,我们也需要做一些处理。特殊符号其实就是我们觉得不太有用的符号。比如一个文章里出现的@#&,这些可以认为是特殊符号,进而可以去掉。

 词的标准化操作

对于英文文本,我们通常会做单词标准化的操作,也就是把类似含义的单词统一表示成一种形式。这里有两种常用的方法,分别是stemming和lemmazation。

stemming有可能出的结果不合理  但是lemmazation肯定合理

这些标准化的操作一般应用于英文等语言上,但对于中文用的不多,也是因为中文本身的特点不像英文那样有一种固定的格式比如单数或者复数。做完这些预处理工作之后,我们就可以开始对文本本身做处理了,也就是把文本表示成向量的形式,之后再把它放入模型当中。那如何把文本表示成向量呢? 让我们进入下一节的内容! 

单词的表示了解完了(独热编码),接下来就要考虑如何表示一个句子了。这里有几种常用的方法,分别是boolean表示、count表示以及tf-idf的表示。

所以,这样的表示方法使得向量非常地稀疏,只有一个位置是11,剩下的全是00,而且向量的长度等于词库的长度,也就是我们的词库有多大,每一个单词向量的长度就有多大。这种方式虽然很简单,但明显也有个缺点,就是不考虑一个单词出现的次数。出现次数越多,有可能对句子的贡献也会越大。我们希望把这部分信息也考虑进去。

其实上面的表示法是有些问题的,因为出现次数越多代表不了它就越重要,有可能反倒是更不重要。所以呢,我们希望把一个单词的重要性也考虑进去,而不仅仅考虑单词出现的次数。这个新的方法叫作tf-idf表示法。

文本相似度比较

在文本分析领域,还有一个工作特别重要,就是计算两个文本之间的相似度。计算相似度是理解文本语义来说也是很重要的技术,因为一旦我们理解了某一个单词或者句子,我们可以通过相似度计算方法来寻找跟这个语义类似的单词或者文本。计算文本相似度有很多种方法,这里我们重点来讲解两个方法:计算欧式距离的方法和计算余弦相似度的方法。它们都可以用来评估文本的相似度,但前者是基于距离的计算,后者是基于相似度的计算。需要注意的一点是:距离越大相似度越小。

 

词向量的训练  

 独热编码->分布式表示  可以体现出单词的相似度

具体训练词向量的方法很多,各有各的优缺点。在这里,我们就把它当作是一个黑盒子就可以了。而且网上有大量已经训练好的词向量,我们可以直接把它拿过来用。

 从词向量到句子向量

理解了如何通过词向量来表示一个单词之后,接着我们来看一下如何表示一个句子? 这里我给出最为简单的方法,就是平均法,也叫作average pooling。

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

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

相关文章

自研一个简易版本的OkHTTP

一,背景 为了彻底搞明白okhttp原理,仿照okhttp自研一个 二,思路 业务上没发出一个request,使用AsyncCall包装起来,然后在网络分发器的作用下,执行具体的每一个Call,这些具体的Call会经过层层的拦截器,最终…

【css | linear-gradient】linear-gradient()的用法

linear-gradient() CSS函数创建一个由两种或多种颜色沿一条直线进行线性过渡的图像,其结果是<gradient>数据类型的对象,此对象是一种特殊的<image> 数据类型。 先看一个线上的示例 https://code.juejin.cn/pen/7277486410842996771 语法 /* 渐变轴为 45 度&…

Iterator设计模式

目录 1、示例 1.1 Aggregate接口 1.2 Iterator接口 1.3 Book类 1.4 BookShelf类 1.6 BookShelfIterator 类 1.7 Main类 2、解释Iterator模式中的角色 2.1 Iterator模式的存在意义 2.2 抽象类和接口 2.3 Aggregate 和 Iterator的对应 2.4 容易弄错"下一个"…

day06_Java中的流程控制语句

流程控制 简单来讲所谓流程就是完成一件事情的多个步骤组合起来就叫做一个流程。在一个程序执行的过程中&#xff0c;各条语句的执行顺序对程序的结果是有直接影响的。我们必须清楚每条语句的执行流程。而且&#xff0c;很多时候要通过控制语句的执行顺序来实现我们想要的功能…

OpenCV(三十五):凸包检测

1.凸包检测介绍 凸包检测是计算凸包的一种技术&#xff0c;凸包就是&#xff1a;给定二维平面上的点集&#xff0c;将最外层的点连接起来构成的凸边形&#xff0c;它是包含点集中所有的点。 2.凸包检测函数convexHull() void cv::convexHull ( InputArray points, OutputArra…

Web应用系统的小安全漏洞及相应的攻击方式

写作目的 本文讲述一个简单的利用WebAPI来进行一次基本没有破坏力的“黑客”行为。 主要目的如下&#xff1a; 了解什么叫安全漏洞 知道什么是api 了解一些获取api的工具 通过对API的认识了解白盒接口测试基本概念和技术 免责声明&#xff1a; 本文主要是以学习交流为目的&a…

【业务功能118】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere-OpenELB部署及应用

OpenELB部署及应用 一、OpenELB介绍 网址&#xff1a; openelb.io OpenELB 是一个开源的云原生负载均衡器实现&#xff0c;可以在基于裸金属服务器、边缘以及虚拟化的 Kubernetes 环境中使用 LoadBalancer 类型的 Service 对外暴露服务。OpenELB 项目最初由 KubeSphere 社区发…

【面试题】——Java基础篇(33题)

文章目录 1. 八大基本数据类型分类2. 重写和重载的区别3. int和integer区别4. Java的关键字5. 什么是自动装箱和拆箱&#xff1f;6. 什么是Java的多态性&#xff1f;7. 接口和抽象类的区别&#xff1f;8. Java中如何处理异常&#xff1f;9. Java中的final关键字有什么作用&…

RabbitMQ深入 —— 死信队列

前言 前面荔枝梳理了RabbitMQ中的普通队列、交换机以及相关的知识&#xff0c;在这篇文章中荔枝将会梳理RabbitMQ的一个重要的队列 —— 死信队列&#xff0c;主要了解消息流转到死信队列的三种的方式以及相应的实现demo。希望能帮助到有需要的小伙伴~~~ 文章目录 前言 死信队…

Python统计pdf中英文单词的个数

之前的文章提供了批量识别pdf中英文的方法,详见【python爬虫】批量识别pdf中的英文,自动翻译成中文上。以及自动pdf英文转中文文档,详见【python爬虫】批量识别pdf中的英文,自动翻译成中文下。    本文实现python统计pdf中英文字符的个数。 文章目录 一、要统计字符的pdf…

Pybooks:这十本Python编程语言的入门书籍入门必看!

这个好像没有在微信发过图文版的&#xff0c;补一个。大部分介绍摘自京东等网站。 Python基础教程 评语&#xff1a;Python入门佳作 经典教程的全新修订 10个项目引人入胜 《Python基础教程&#xff08;第2版修订版&#xff09;》是经典的Python入门教程&#xff0c;层次鲜明…

贪心算法的思路和典型例题

一、贪心算法的思想 贪心算法是一种求解问题时&#xff0c;总是做出在当前看来是最好的选择&#xff0c;不从整体最优上加以考虑的算法。 二.用贪心算法的解题策略 其基本思路是从问题的某一个初始解出发一步一步地进行&#xff0c;根据某个优化测度&#xff0c;每一步都要确保…

第21章_瑞萨MCU零基础入门系列教程之事件链接控制器ELC

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

用Python实现链式调用

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 我们在使用Django的models查询数据库时&#xff0c;可以看到有这种写法&#xff1a; form app.models import XXX query XXX.objects.all() query query.filter(name123, age456).filter(salary999)在这种写法里面&#xf…

排序算法-----插入排序

目录 前言&#xff1a; 插入排序 原理图 代码实现 分析总结 二分法插入排序 代码实现 前言&#xff1a; 嗨嗨^_^&#xff0c;米娜桑&#xff0c;今天我们继续学习排序算法中的插入排序&#xff0c;激不激动&#xff0c;兴不兴奋呢&#xff01;好了废话不多说&#xff0c;…

Docker基础学习

Docker 学习目标&#xff1a; 掌握Docker基础知识&#xff0c;能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用应用的安装 掌握docker迁移与备份相关命令 能够运用Dockerfile编写创建容器的脚本 能够…

python抠图(去水印)开源库lama-cleaner入门应用实践

1. 关于 Lama Cleaner Lama Cleaner 是由 SOTA AI 模型提供支持的免费开源图像修复工具。可以从图片中移除任何不需要的物体、缺陷和人&#xff0c;或者擦除并替换&#xff08;powered by stable diffusion&#xff09;图片上的任何东西。 特征&#xff1a; 完全免费开源&am…

qiankun 乾坤主应用访问微应用css静态图片资源报404

发现static前没有加我指定的前缀 只有加了后才会出来 解决方案: env定义前缀 .env.development文件中 # static前缀 VUE_APP_PUBLIC_PREFIX"" .env.production文件中 # static前缀 VUE_APP_PUBLIC_PREFIX"/szgl" settings文件是封了一下src\settings…

Android平台下奔溃Crash和无响应ANR日志抓取分析

一、使用AndroidStudio 在logcat中查看实时日志&#xff0c;需要选择连接的手机和应用包名 AS下载链接 二、使用adb shell dumpsys dropbox命令获取 #!/bin/bash # path"/data/system/dropbox" # 在手机这个目录下存储了崩溃日志 newest_time$(adb shell dumps…

C++day3

1> 自行封装一个栈的类&#xff0c;包含私有成员属性&#xff1a;栈的数组、记录栈顶的变量 成员函数完成&#xff1a;构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小 头文件 #ifndef STACK_H #define STACK_H #include &…