【Python机器学习】NLP词中的数学——词袋

我们已经收集了一些词/词条,对这些词进行计数,并将它们归并成词干或者词元,接下来就可以做更多的事情。分析词对一些简单的任务有用,例如得到词用法的一些统计信息,或者进行关键词检索。但如果我们想知道哪些词对于某篇文档和整个语料库更重要。于是,我们可以利用这个“重要度”值,基于文档内的关键词重要度在语料库中寻找相关文档。

这样做的话,会使我们的应用更不可能受限于单个或少数几个特殊的词。也因为有较大范围的词都带有不同程度的得分或变迁,因为我们可以度量一条文档的某个类别的程度。如果知道一些词在某个文档相对于剩余文档的频率,就可以利用这个信息来进一步修正文档的正向程度。

当我们构建了文本的向量空间模型。我们使用了每个词的独热向量,然后将所有这些向量用二进制OR运算(或者截断和)组合以创建文本的向量表示。如果被加载到一个诸如Pandas DataFrame的数据结构中,这种二值的词袋向量也可以为文档检索提供一个很棒的索引。

加下来考虑一个更有用的向量表示方法,它计算词在给定文本中的出现次数和频率。这里引入第一个近似假设,假设一个词在文档中出现的次数越多,那么该词对文档的意义的贡献就越大。相比于多次提到“cats”和“gravity”的文档,一篇多次提到“wings”和“rudder”的文档可能会与涉及喷气式飞机或者航空旅行的主题更相关。或者我们给出了很多表达正向情感的词,比如good、best、joy等,一篇文档包含的这类词越多,就认为它越可能包含了正向情感。但是可以想象,一个只依赖这些简单规则的算法可能会出错或者误导用户。

下面给出了一个统计次出现次数很有用的例子:

from nltk.tokenize import TreebankWordTokenizer
from collections import Countersentence="""
The faster Harry got to the store, the faster Harry, the faster, would get home.
"""
tokenizer=TreebankWordTokenizer()
tokens=tokenizer.tokenize(sentence.lower())
print(tokens)
bag_of_words=Counter(tokens)
print(bag_of_words)

上述代码中,通过引入list,将文档中得到独立的词及其出现的次数。Python的字典可以很好的实现这一目标,由于同时要对词计数,因此可以使用Counter。

使用Python中任意一种较好的字典实现,键的词序都会发生变换。新的词序针对存储、更新和检索做了优化,而不是为了保持显示的一致性,包含在原始语句词序中的信息内容被忽略。

像上面这样的短文档,无需的词袋仍然包含了句子的原本意图中的很多信息。这些词袋中的信息对于有些任务已经足够强大,这些任务包括垃圾邮件检测、情感(倾向性、满意度等)计算甚至一些微妙意图(如讽刺检测)的检测。虽然只是一个词袋,但是它装满了意义和信息。因此,下面我们将这些词按照某种方式进行排序,以便能够对此有所了解。

Counter对象有一个很方便的方法,可以实现上述目标:

print(bag_of_words.most_common(4))

这里给出了从高到低频率的前4个词条。

具体来说,某个词在给定文档中出现的次数称为词项频率(简写为TF)。在某些例子中,可以将某个词的出现频率除以文档中的词项总数从而得到归一化的词项频率结果。

在上面的例子中,排名最靠前的4个词/词条分别是“the”、“,”、“harry”、“faster”,但是“the”、“,”这两个对于文档的意图而言信息量不大,并且这些信息量不大的词条可能会在我们的快速探索之旅中多次出现。我们要在排名靠前的词项频率向量(词袋)中留下“harry”和“faster”这两个词条。

下面是在Counter对象中计算“harry”的词频:

times_harry_appears=bag_of_words['harry']
num_unique_words=len(bag_of_words)
tf=times_harry_appears/num_unique_words
print(round(tf,4))

归一化词项频率是经过文档长度“调和”后的词频,比如在两篇文档中cat出现的频率:

  • TF("cat",dac_a)=3/30=0.1
  • TF("cat",dac_b)=100/20000=0.005

可以看到,虽然文档B中“cat”出现次数多,但文档更长,所以频率低,相比来说,“cat”对于文档A更重要。

因此,我们不使用原始的词频来描述语料库中的文档,而使用归一化词项频率。类似地,我们可以计算每个词对文档的相对重要程度。我们已经做了很多工作奖文本转换成数值,而且超越了仅表示特特定词出现与否的范围。

下面考虑一个更长的文本片段:

from collections import Counter
from nltk.tokenize import TreebankWordTokenizer
tokenizer=TreebankWordTokenizer()
kite_txt="""
A kite is traditionally a tethered heavier-than-air craft with wing surfaces that react against the air to create lift and drag. A kite consists of wings, tethers, and anchors. Kites often have a bridle to guide the face of the kite at the correct angle so the wind can lift it. A kite’s wing also may be so designed so a bridle is not needed; when kiting a sailplane for launch, the tether meets the wing at a single point. A kite may have fixed or moving anchors. Untraditionally in technical kiting, a kite consists of tether-set-coupled wing sets; even in technical kiting, though, a wing in the system is still often called the kite.
The lift that sustains the kite in flight is generated when air flows around the kite’s surface, producing low pressure above and high pressure below the wings. The interaction with the wind also generates horizontal drag along the direction of the wind. The resultant force vector from the lift and drag force components is opposed by the tension of one or more of the lines or tethers to which the kite is attached. The anchor point of the kite line may be static or moving (such as the towing of a kite by a running person, boat, free-falling anchors as in paragliders and fugitive parakites or vehicle).
The same principles of fluid flow apply in liquids and kites are also used under water. A hybrid tethered craft comprising both a lighter-than-air balloon as well as a kite lifting surface is called a kytoon.
Kites have a long and varied history and many different types are flown individually and at festivals worldwide. Kites may be flown for recreation, art or other practical uses. Sport kites can be flown in aerial ballet, sometimes as part of a competition. Power kites are multi-line steerable kites designed to generate large forces which can be used to power activities such as kite surfing, kite landboarding, kite fishing, kite buggying and a new trend snow kiting. Even Man-lifting kites have been made.
"""
tokens=tokenizer.tokenize(kite_txt.lower())
token_counts=Counter(tokens)
print(token_counts)

上述例子里,里面有很多停用词,这篇文章不太可能会与“the”、“a”等词相关。下面把这些词去掉:

import nltk
nltk.download('stopwords',quiet=True)
stop_words=nltk.corpus.stopwords.words('english')
tokens=[x for x in tokens if x not in stop_words]
kite_counts=Counter(tokens)
print(kite_counts)

单纯凭借浏览词在文档中出现的次数,我们就可以学到一些东西。比如词项kite、wing、lift都很重要。

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

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

相关文章

oracle备份策略

一、RMAN热备份 1、查看是否开启归档 archive log list;归档未开启 归档开启方法 – 关闭数据库,重启至mount模式 shutdown immediate startup mount– 开启归档模式 alter database archivelog;– 打开数据库 alter database open;– 检查归档模式是否打开 a…

微信小程序for循环怎么用

微信for简单使用&#xff1a; <view> <ul> <li wx:for"{{xiaoke}}" wx:key"index"> <a href"{{item.path}}">{{item.name}}</a> </li> </ul> </view> 其中" xiaoke " 是数组名称&am…

利用深度学习技术来实现街景图像的语义分割(街景图像语义分割)

本项目致力于利用深度学习技术来实现街景图像的语义分割。通过精确地识别和分类图像中的每个像素&#xff0c;该技术能够自动划分出街道、人行道、车辆、行人等各种不同的物体类别。这在智能交通系统、自动驾驶、城市规划等领域有着广泛的应用前景。 技术实现 深度学习模型&am…

zsh: command not found: brew(M系列芯片)

利用官网的命令安装完brew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"查看版本&#xff0c;提示找不到命令 % brew -v zsh: command not found: brew解决方法&#xff0c;在终端中执行以下命令&#xff0c…

git仓库删除某个历史提交

目录 问题情况1情况2 问题 如果我们在开发过程中&#xff0c;存在一些验证性的提交或者失误性的提交&#xff0c;那么这些提交我们不想要了&#xff0c;怎么办&#xff1f; 情况1 如果是想要删除某个commitid之后的所有提交 那么git reset 可以满足你 git reset --hard 你要…

Keilv5 逻辑分析仪的使用

声明&#xff1a;基于视频【事件驱动型编程和 QP/C 框架】所做的笔记 Keilv5逻辑分析仪是Keil MDK集成开发环境&#xff08;IDE&#xff09;中的一个工具&#xff0c;用于帮助开发人员进行嵌入式系统的调试和分析。 它的作用主要有&#xff1a; 监测信号&#xff1a;Keilv5逻…

【Qt | 音视频学习路线(高薪路线 AI)】

Answer 学习Qt音视频开发的学习路线可以分为以下几个阶段: 1. 基础知识准备 C++编程基础:Qt主要使用C++,因此需要有扎实的C++编程基础。计算机图形学基础:了解基本的图形学概念,如图像处理、渲染等。音视频基础:了解音视频的基本概念,如编码、解码、格式等。2. 学习Qt…

QGIS制图流程

在之前我们推送了QGIS的软件安装、插件安装、数据导入等基础操作&#xff0c;今天我们介绍一下QGIS的制图功能。QGIS的制图与ArcGIS Pro存在一定的区别&#xff0c;但是思路上相似。我们教程内容主要是参考QGIS官方文档&#xff1a; https://docs.qgis.org/3.34/en/docs/user_…

JUC并发编程-volatile

目录 1. volatile的两大特性 可见性&#xff08;Visibility&#xff09; 有序性&#xff08;Ordering&#xff09; 2. 四大屏障 3. 读写屏障插入策略 happens-before与volatile变量规则&#xff1a; 注意事项 4. 原子性 5. 禁重排 6.使用场景 传统的单例模式实现如下…

Apache Doris 使用 CBO 和 RBO 结合的优化策略

Apache Doris 在查询优化方面通过结合 RBO 和 CBO,实现了对简单和复杂查询的高效优化。RBO 负责处理常量折叠、子查询改写和谓词下推等基础优化操作,而 CBO 则在 Join Reorder 等复杂场景中发挥作用。这种结合策略使得 Apache Doris 能够在面对各种查询场景时,既能保证优化过…

大数据技术之 Flume概述、安装(1)

目录 Flume 概述 Flume 定义 为什么选用 Flume Flume 基础架构 Agent Source Sink Channel Event Flume 安装 Flume 安装部署 安装地址 安装部署 Flume 概述 Flume 定义 Flume 是 Cloudera 提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。Flume…

Clickhouse集群化(六)clickhosue-operator学习

1. Custom Resource元素 apiVersion: "clickhouse.altinity.com/v1" kind: "ClickHouseInstallation" metadata:name: "clickhouse-installation-test" 这是clickhouse operator自定义的资源ClickHouseInstallation 1.1. .spec.defaults spe…

Webbench1.5安装使用Ubuntu

1、安装依赖包 sudo apt-get update sudo apt-get install libtirpc-dev2、安装Webbench1.5 参考https://github.com/baiguo/webbench-1.5 # 可能需要root权限&#xff0c;我是切换到root用户才安装成功 wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.…

安卓系统 XBL阶段详解

在安卓系统的启动流程中&#xff0c;XBL&#xff08;eXtensible Boot Loader 或 Secondary Bootloader&#xff09;是一个关键阶段&#xff0c;特别是在使用QualComm&#xff08;高通&#xff09;等SOC&#xff08;System on Chip&#xff09;的设备上。以下是对XBL阶段的详细解…

小程序全局本地存储和读取数据

globalData&#xff1a;全局存储信息 定义全局数据&#xff08;在 app.js 中&#xff09;&#xff1a; 在 app.js 中&#xff0c;你可以通过 globalData 属性定义全局数据 // app.js App({globalData: {userInfo: null,systemInfo: null,theme: light},onLaunch() {console.…

怎么把两个pdf合并成一个pdf?学会这7招,1分钟轻松搞定!

新手小白如何将pdf合并成一个文件&#xff1f;pdf是目前较为主流的一种传输格式&#xff0c;内容包含了丰富的多媒体数据&#xff0c;包括文本、图像、表格等多种元素&#xff0c;很多企业和教育工作者都喜欢使用pdf格式。 pdf文件体积较小&#xff0c;兼容性高&#xff0c;平时…

大数据学习路线基础指南‌

随着信息技术的迅猛发展&#xff0c;‌大数据已成为当今社会的热门话题。‌无论是企业决策、‌市场分析还是科学研究&#xff0c;‌大数据都扮演着举足轻重的角色。‌对于想要投身这一领域的学习者来说&#xff0c;‌制定一份清晰、‌系统的大数据学习路线是至关重要的。‌提供…

Jmeter性能关注指标详解

进行性能测试时&#xff0c;有几个关键的性能指标需要关注&#xff0c;以评估系统的性能和稳定性 一、性能关注指标包含&#xff1a; 响应时间、吞吐量、错误率、资源利用率/使用率(CPU占用率、内存使用率、磁盘I/O等待率、网络I/O) Tips&#xff1a;初步查看数据结果–响应时…

海睿思通过华东江苏大数据交易中心数商认证,提供高质量数据治理服务!

近日&#xff0c;中新赛克海睿思成功通过华东江苏大数据交易中心的数商认证&#xff0c;获得华东江苏大数据交易中心颁发的“数据治理服务商”证书。 华东数交是在实施“国家大数据战略”大背景下&#xff0c;经国家批准的华东地区首个省级特色数据要素交易平台&#xff0c;致力…

学习前端面试知识(14)

2024-8-21 打卡第十四天 js的数据类型 基本类型&#xff1a;String&#xff0c;Number&#xff0c;Object&#xff0c;Null&#xff0c;undefined&#xff0c;Boolean es6之后引入&#xff1a;Symbol&#xff0c;BigInt 判断方式&#xff1a;typeof&#xff0c;instanceof…