当前位置: 首页 > news >正文

我理解的文本表示模型

词袋模型与N-grams模型

  • 1 词袋模型 (Bag of Words)
  • N-Gram

  • 最简单的文本建模场景:垃圾短信分类

表1 样本示例

短信内容短信类别
样本1:“欢迎来到某某新葡京,点击就送一百万!”标签1:垃圾短信
样本2:“您好,请您于晚上8点前至某某小区东门取件,取件码为xxxxxx”标签2:非垃圾短信
样本3:…标签2:…

想要对短信进行分类,首先明确,在这次建模中,X是什么,Y是什么。
很明显第一列短信内容为X,而短信的类别为Y。
我们可能有30000个这样的样本。
我们期望达到的效果是,当手机收到一条短信时,模型能够自发的判断出这条短信属于哪一类。然而计算机是无法直接读懂中文的,我们首先第一步需要做的便是,将这些汉字转换为计算机能够读懂的语言。而这一步我们将它称为 文本表示模型。

下文中的一部分参考了 百面机器学习,并介绍了两种常见的文本表示模型。
按照我的理解来看,我经常搞不清很多教材中写的document的到底是什么。我认为文本表示模型的一个document应该就是表1中的样本1,即一条短信。30000条短信也即代表着30000个documents。

1 词袋模型 (Bag of Words)

  • 模型的一个输入示例:欢迎来到澳门新葡京,点击就送一百万!
  • 模型的一个输出示例:[0,0,1,0,0,0,1,1,0,1,0,…]
    对于词袋模型来说,最终的目的是将每个样本都转换成一个向量。
    向量的维数(长度) 代表着所有样本中不重复的单词数。在我们的例子里,这个向量的长度是所有的 30000 条短信里面出现的汉字(不重复)的数量。如“澳”,“门”,“新”,“葡”,“京”,…, 即便同一条短信出现过多次,每个字也只能在向量维数中占据一个位置。
    向量每一个维度的取值 可以有很多种方法决定。大体上这个值代表该维度对应的这个独特的字/单词 对这条样本的意义。所以目前对我们来说,Bag-of-Words 给我们提供了一个向量的框子,我们只需要看一下怎么把“某个单词对该样本的意义”这个东西量化出来,并一个一个填进框子里,就可以了。
    主要存在以下几种量化方法:

1.1 one-hot 取值 (Binary)

最简单的方法:某个单词出现在该document中,那么该维度对应的数值取1,否则取0.
可以参考:词袋模型
在这里插入图片描述

1.2 Term Frequency 取值 (TF)

可以用很多种方法来使用词频。

普通频数 r a w t f raw_{tf} rawtf

比如使用普通频数,直接用每个document 中每个单词出现的次数做为向量的取值。但是越长的document一定会有更多的词,导致其向量各个维度整体取值都更大。因此需要一定的标准化。

频率

使用 document 的单词数量进行标准化 (即普通频数除以document的长度)
t f = t e r m f r e q u e n c y t o t a l n u m b e r o f w o r d s tf = \frac{term frequency}{total number of words} tf=totalnumberofwordstermfrequency

范数归一化

使用 r a w t f raw_{tf} rawtf的范数归一化 (普通频数除以普通频数向量的模)
t f = r a w t f ∣ ∣ r a w t f v e c t o r ∣ ∣ p tf = \frac{raw_{tf}}{||raw_{tf} vector||_p} tf=∣∣rawtfvectorprawtf

对数频数

t f = log ⁡ ( 1 + r a w t f ) tf = \log(1+raw_{tf}) tf=log(1+rawtf)

以上为几种根据词频对向量进行取值的方法。但是完全根据词频进行计算会面临一个问题:
越常见的词越容易获得更大的值。而常见词未必是对于区分短信有意义的特征。
因此我们引入了IDF:

1.3 Inverse document frequency (IDF)

IDF值主要用于衡量向量某维度代表的词,在整个样本中的稀有程度。越稀有,IDF数值越大。越不稀有,IDF数值越接近于1.
在这里插入图片描述
这个式子意味着,如果某个词在所有文档都出现,那么他可能是冠词或者介词。比如英文中的a,of,on等。这种词对于区分短信来说其实不是很好的特征,不具备区分性。所以这样的词的IDF值会很接近于1.
当然IDF的取值也可以有多种表达式,但核心宗旨大概率都是类似的。

1.4 TF-IDF scores 取值

TF-IDF 意味着将两种取值方式结合起来。即某个词对某个样本的TF-IDF分数(也即这个样本在这个词代表的特征上的取值)大,意味着这个词不仅仅在这个样本中比较常见,同时在其他文档中又相对的不那么常见。也即这个词很有可能是”新葡京“这样的,让人一看就知道这是垃圾短信的标志性词汇。
而这种结合方式即为将TF分数和IDF分数相乘。
在这里插入图片描述
在这里插入图片描述
TF-IDF本质是在衡量,某个单词(term)在一个文档(document)中的意义。比如“葡京”在“欢迎光临澳门新葡京,100万大奖等你拿!某某新葡京,美女荷官,在线发牌,***blah blah, 某某.com" 这个短信中的意义。而这个意义的数值大小,会作为这条短信样本的某个维度的特征,放进Bag-of-Words搭好的向量框中,将来参与到短信分类的模型中。(比如logit模型等等)

词袋模型(Bag-o-fWords)的宗旨即为将document中的每个单词都视为一个独立的特征。特征值可以为one-hot编码、TF、TFIDF等。
词袋模型具有表示直接、生成简单、效果好等特点。但是由于其过于简单,难以捕捉文本的结构。例如词序、语序等,无法在文本表示向量中体现。

N-Gram

N-gram 与词袋模型相比,旨在保留更多的语序信息,因此会将 n个相邻的单词/汉字 也加入在特征的维度中。这就是 n-gram。在Bag of Words的基础上又大幅的拓展了文本表示向量的维度。
如果只考虑两个相邻的单词,那么可以称为 bi-grams。
在这里插入图片描述
再比如:
在这里插入图片描述
与词袋模型相同,在通过加入相邻词组成的词组后,向量的维度增加。但向量的取值依然可以考虑 one-hot编码、TF编码、TF-IDF编码等方式。

相关文章:

  • 【SpringBoot3.x】自定义开发通用SDK
  • [FlareOn5]Ultimate Minesweeper
  • 教程:LVM操作讲解
  • 【Android】记录在自己的AMD处理器无法使用Android studio 虚拟机处理过程
  • CBA认证-业务架构师认证的尚方宝剑
  • 【Android面试八股文】你能说一说View绘制流程与自定义View注意点吗?
  • 【python】OpenCV——Color Correction
  • 处理导入Excel文件过大导致Zip bomb detected的问题
  • HTML 事件
  • 【八股系列】说一下mobx和redux有什么区别?(React)
  • Python 设计模式(第2版) -- 第四部分(其他设计模式)
  • 路由器的Wi-Fi性能是否限制了你的网速?这里有你想要的答案
  • 动手学深度学习(Pytorch版)代码实践 -深度学习基础-13Kaggle竞赛:2020加州房价预测
  • jnp.linalg.norm
  • 1. C++面向过程
  • 【知识碎片】第三方登录弹窗效果
  • echarts花样作死的坑
  • ES6语法详解(一)
  • ES学习笔记(12)--Symbol
  • Java 多线程编程之:notify 和 wait 用法
  • LeetCode18.四数之和 JavaScript
  • MySQL几个简单SQL的优化
  • passportjs 源码分析
  • Promise面试题2实现异步串行执行
  • Python_网络编程
  • Redux系列x:源码分析
  • socket.io+express实现聊天室的思考(三)
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 搭建gitbook 和 访问权限认证
  • 搞机器学习要哪些技能
  • 构建二叉树进行数值数组的去重及优化
  • 前端技术周刊 2019-01-14:客户端存储
  • 鱼骨图 - 如何绘制?
  • ​iOS安全加固方法及实现
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #### golang中【堆】的使用及底层 ####
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (7)摄像机和云台
  • (LeetCode) T14. Longest Common Prefix
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (二十四)Flask之flask-session组件
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)UDP基本编程步骤
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • .net专家(高海东的专栏)
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @JsonFormat 和 @DateTimeFormat 的区别
  • @private @protected @public