词袋模型(BOW)

词袋模型(BOW)做自然语言处理 第一步肯定是数据的预处理了 对于图像数据 我们可以把图像转化为矩阵 那么对于自然语言 我们又应该进行怎样的转化呢 方法有很多 在网上一搜 会发现 word2vec 分布式表示 wordembeddin 等等一大堆名次 但是可以说 他们都是为了让文本能够以数字的形式呈现 要么是一维向量 要么是矩阵等等 不同的方法模型有不同的优缺点 这里先从比较简单的方法说起 也就是本文的主角词袋

做自然语言处理,第一步肯定是数据的预处理了,对于图像数据,我们可以把图像转化为矩阵,那么对于自然语言,我们又应该进行怎样的转化呢。

方法有很多,在网上一搜,会发现word2vec、分布式表示、word embedding等等一大堆名次,但是可以说,他们都是为了让文本能够以数字的形式呈现,要么是一维向量,要么是矩阵等等,不同的方法模型有不同的优缺点,这里先从比较简单的方法说起,也就是本文的主角词袋模型。词袋模型忽略了文本的语法语序等要素,构建了一个词汇的无序集合,通过这个集合去表达一段文字或一个文档:


词袋模型(BOW)

举一个简单的例子比如现在我们有一句话:today is a good day, tomorrow is a bad day;我们就可以基于这句话构建一个词袋:“today”、“is”、“a”、“good”、“day”、“tomorrow”、“bad”。然后,我们就可以根据词袋中的元素在句子中出现的次数,用矩阵去表示这句话:

1 2 2 1 2 1 1 \begin{matrix} 1 & 2 & 2 & 1 & 2 & 1 & 1 \\ \end{matrix} 1221211

顺带说明一下,统计词频有时候对情感的表达是有用的,比如一个句子里面出现了很多次good,如果我们不考虑它出现次数而只是用1表示它出现过,就无法准确表达句子的情感,对文本分类等问题造成偏差。

另外,这种无序表示方法,我觉得有点像小时候学习语文做的练习题,给出一堆无序的词语,比如”去哪里”、“明天”、“你”,然后做排序,就可以得到”你明天去哪里”,这时候,其实不论是有序还是无序,我们都能猜出句子的意思,所以像这种通过矩阵表示一个句子是可行的。

但是词袋的缺点也很明显,当我们的词汇量增大时,对于每句话用到的词最多还是十来个,于是就导致了每句话的矩阵都是稀疏的,严重影响了内存和计算资源。除此之外,因为词袋是基于一个个独立的单词的,在一个句子中没有考虑到词与词之间的顺序和联系,所以在部分情况下可能会导致句义表达不准确,比如”你打了我”和”我打了你”,虽然意思相反但是通过词袋模型表达都是一样的。

基于词袋模型的这些缺点,我们还能进一步改进,比如采取n元特征(N-gram特征),把句子的顺序也考虑进去,比如原来我们针对”today is a good day”构建的词袋是:(“today”、“is”、“a”、“good”、“day”),如果采取二元特征就可以变成:(“today is”、“is a”、“a good”、“good day”),这里构建的词袋就不再是单一的词,考虑了词与词之间的顺序。

想浏览更多关于数学、机器学习、深度学习的内容,可浏览本人博客

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217306.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午9:52
下一篇 2026年3月18日 上午9:53


相关推荐

  • 国内全网最详细的5分钟快速申请“edu教育邮箱” 的保姆级教程!

    国内全网最详细的5分钟快速申请“edu教育邮箱” 的保姆级教程!

    2026年3月15日
    2
  • YOLO系列算法精讲:从yolov1至yolov5的进阶之路(2万字超全整理)[通俗易懂]

    YOLO系列算法精讲:从yolov1至yolov5的进阶之路(2万字超全整理)[通俗易懂]全网YOLO最详讲解,从v1到v5!从小白到大佬!

    2022年5月7日
    62
  • rcnn fast rcnn faster rcnn_档案整理年终总结

    rcnn fast rcnn faster rcnn_档案整理年终总结行人检测概述:    行人检测有两种方向,传统算法和基于深度学习算法。传统算法的典型代表有Haar特征+Adaboost算法,Hog特征+Svm算法,DPM算法。而基于深度学习的行人检测典型代表有RCNN系列,YOLO系列和SSD系列。其中RCNN系列算法是现在使用的最广泛的基于深度学习的行人检测算法。    在说行人检测之前不得不说一下目标检测。行人检测是目标检测下的一个…

    2022年10月4日
    6
  • vba 数组 数组参数

    vba 数组 数组参数关于赋值我看了很多本书都没有看到这样子的 包括官方文档 所以我就写了下来 suba dima dimc a array 1 2 3 4 这里 a 后面的 可以给也可以不给 c a endsubsuba paramarraya asvariant paramarray 可以用 byref 替代 endsub 灵活性强 各种写法

    2026年3月19日
    2
  • GridLayout网格式布局

    GridLayout网格式布局1.设置网格的列数。gridLayout.numColumns=3;//设置网格的列数为3,默认是1importorg.eclipse.swt.SWT;importorg.eclipse.swt.widgets.*;importorg.eclipse.swt.layout.*;publicclassA{ publicstaticvoidmain(String[]…

    2022年6月10日
    33
  • pycharm Debug调试技巧

    pycharm Debug调试技巧Debug 调试功能 是一项编程人员的重要技能 学会了 Debug 可以知道程序的走向 Debug 的前世在正式讲解之前 先来了解下 debug 这个词的由来 就像我们初学 Python 时 先要了解下它历史的由来 1937 年 美国青年霍华德 艾肯找到 IBM 公司为其投资 200 万美元研制计算机 第一台成品艾肯把它取名为 马克 1 号 mark1 又叫 自动序列受控计算机 从这时起 IBM 公司由生产制表机 肉铺磅秤 咖啡研磨机等乱七八糟玩意儿行业 正式跨进 计算机 领地 为马克 1 号编制程序的是哈佛的一位女

    2025年7月26日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号