目录

词袋模型

one-hot

word-embedding


我们知道,传统的数据挖掘任务面向的是结构化数据。结构化数据很好理解,就是很有结构的数据嘛。

比如下面这张银行客户数据库中的表格:

编号

姓名

年龄

年收入

职业

有无欠贷

01

夕小瑶

16(就好了)

100

学生

02

王大锤

40

1,000,000

副总裁

03

吴名

30

200,000

程序员

而基于上述历史信息来完成某项数据挖掘任务的话,每一维度的特征很明确,表格的每一列,或者说每个属性(attribute)就是一个特征。因此每一个样本,即每一行就可以轻松的表示为一个特征向量。

但是我们知道,自然语言文本是非结构化的。因此基于自然语言文本的数据挖掘任务,也就是文本挖掘任务,该如何下手呢?或者说,如何从文本中抽象出机器学习算法认识的特征向量呢?

词袋模型

一个很容易想到的是,将自然语言文本的每个词作为一个特征。因此对应的特征向量即这些特征的组合。这种思路虽然naïve,但是很有效哦。基于这种思想的模型就是词袋模型(Bag of Words),也叫向量空间模型(Vector Space Model)。

有了词袋模型后,每个特征(即每个词)的值该如何定义呢?或者说每个词该如何编码呢?如何进一步生成我们需要的特征向量呢?

one-hot

同样一个很naive的想法就是:设词典的大小为n(词典中有n个词),假如某个词在词典中的位置为k,则设立一个n维向量,第k维置1,其余维全都置0。这个思想就是one-hot编码,中文叫独热编码(茫茫0海中有一个1,不就是孤独的热点吗)。

比如这里有三句话,即三个样本:

“我喜欢你”;

“你喜欢你的狗狗”;

“你是狗狗”。

假设已经分词完成,那么如果我们要从这三个样本中挖掘信息的话,根据词袋模型的思想:

首先就要将这些句子中出现过的词构建一个词典。这个词典依次包含[我,喜欢,你,的,是,狗狗]这六个词。根据one-hot编码,“我”就会被编码为[1,0,0,0,0,0],而“喜欢”就被编码为[0,1,0,0,0,0],以此类推。

那么如何继续推进,利用one-hot编码来生成特征向量呢?

一个样本的特征向量即该样本中的每个单词的one-hot向量直接相加。这三个样本的特征向量便会表示为:

我喜欢你:[1,1,1,0,0,0]

你喜欢你的狗狗:[0,1,2,1,0,1]

你是狗狗:[0,0,1,0,1,1]

其中,第二个句子中“你”出现了两次,因此第三维的值为2。但是注意一下,在有的机器学习模型,比如贝努利分布的朴素贝叶斯模型中,仅考虑每个词出现与否,此时第二个句子的词袋模型就变成了[0,1,1,1,0,1]。

看,特征向量构建完成啦,剩下的就交给机器学习吧~

但是这样的话,仔细一想,好像麻烦挺大的。比如涉及到的单词很多时,词典会变得超大,动辄几千上万维。因此每个样本的特征向量也会变得极其稀疏(大部分维度的值为0),这么高的维数对于很多机器学习模型比如神经网络,那简直是训练的灾难呐。

再一想,好像更不合理。因为这样编码的话,还忽略了单词的语义!比如明明“喵星人”和“猫”是同一个意思,却被编码成了两个不同的词。

有没有办法同时解决上述这两个问题呢?

word-embedding

解决方案就是word-embedding,中文叫词向量,也叫词嵌入。实质就是将单词编码成低维实数向量。(专业的说法是将单词映射到一个低维空间,就像一个嵌入的过程,因此叫word-embedding)

比如“狗”或许会被编码成[0.192, 0.221, -0.442, ...],一般来说维度会控制在500维以下,几十维也是常有的。但是一般不会上升到千维。

那么怎么表示单词之间的语义关系呢?其实将每个词映射到低维向量空间后就很明朗啦。比如我们的词向量限制为2维。那么词“猫”、“狗”、“开心”、“惊讶”、“手机”映射成词向量后在向量空间中可能是这样子的:

可以看到,“狗”和“猫”都是动物,语义相近,因此具有很小的夹角,同理还有“开心”和“惊讶”。而“狗”和“手机”这两个关系不大的词语便会有很大的夹角。这种度量夹角来计算向量之间距离的专业说法叫计算余弦相似度

合格的词向量除了在语义上相近会被编码到邻近的区域,还应该支持简单的语义运算,将语义运算映射为向量运算。比如:

“中国”+“首都”=“北京”;

“王子”-“公主”=“男”-“女“;

在向量空间看起来是类似这个样子的

看,有了词向量这么智能的编码方法,是不是感觉用它来做文本挖掘的信心强了很多呢?

虽然词向量很智能,然而词向量的生成并不是一件容易的事情。至今如何训练高精度的词向量依然是NLP、IR领域的热门topic,也是深度学习在NLP领域的一个应用重点(小夕悄悄告诉你,其实目前来看,关于词向量的生成,浅层神经网络跟深度神经网络的效果差不多)。如果有喵喵对词向量的生成产生了极大的兴趣,又具备足够的机器学习,尤其是神经网络的基础的话,可以Google一下下面小夕推荐的论文:

1、Yoshua Bengio, Rejean Ducharme, Pascal Vincent, and Christian Jauvin. A neural probabilistic language model. Journal of Machine Learning Research (JMLR),3:1137–1155, 2003

2、Turian Joseph, Lev Ratinov, and Yoshua Bengio. Word representations: a simple and general method for semi-supervised learning. Proceedings of the 48thAnnual Meeting of the Association for Computational Linguistics (ACL). 2010

3、MikolovT, Sutskever I, Chen K, et al. Distributed representations of words and phrases and their compositionality[C]//Advancesin neural information processing systems. 2013: 3111-3119.

4、Mikolov T, Chen K, Corrado G, et al. Efficient estimation of word representations in vector space[J]. arXiv preprintarXiv:1301.3781, 2013.

one-hot(独热)、bag of word(词袋)、word-Embedding(词嵌入)浅析相关推荐

  1. 词袋 图像检索 matlab,词袋模型BoW图像检索Python实战

    前几天把HABI哈希图像检索工具包更新到V2.0版本后,小白菜又重新回头来用Python搞BoW词袋模型,一方面主要是练练Python,另一方面也是为了CBIR群开讲的关于图像检索群活动第二期而准备的 ...

  2. 【图像匹配】【词袋算法】词袋算法应用图像匹配

    词袋算法在图像匹配上的应用记录 词袋算法 实验结果 code 词袋算法 近几日研究GitHub上的简单bag-of-words算法实现(似乎是四年前的版本了),下面是链接 https://github ...

  3. 【Python自然语言处理】文本向量化的六种常见模型讲解(独热编码、词袋模型、词频-逆文档频率模型、N元模型、单词-向量模型、文档-向量模型)

    觉得有帮助请点赞关注收藏~~~ 一.文本向量化 文本向量化:将文本信息表示成能够表达文本语义的向量,是用数值向量来表示文本的语义. 词嵌入(Word Embedding):一种将文本中的词转换成数字向 ...

  4. ORB词袋特征提取和匹配

    一.预备知识点 Bag-of-Words ORB特征提取与匹配 5. Bag of Word 作用: 加速匹配 和 回环 在跟踪线程里面 一进来就要对每帧进行词袋的提取 词袋模型是由Node和Word ...

  5. 用词袋(bag of word)实现场景识别

    前段时间在standford university的计算机视觉:算法与应用这门课上做了一个小作业--利用词袋实现场景识别(Scene recognition with bag of words),下面 ...

  6. Pytorch:jieba分词、hanlp分词、词性标注、命名实体识别、one-hot、Word2vec(CBOW、skipgram)、Word Embedding词嵌入、fasttext

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 文本预处理及其作用: 文本语料在输送给模型前一般需要一系列的预 ...

  7. 深度学习之词向量Word Embedding总结

    目录 一.Word Embedding介绍 二.One-Hot 表示 三.Distributed 表示 四.word2vec表示 五.BERT任务 六.BERT与其他模型的调用 一.Word Embe ...

  8. NLP学习笔记6--Lecture/语言模型/预处理/独热编码/word2vec/文本特征工程

    语言模型用来判断:是否一句话从语法上通顺 先分词  然后算出联合概率 怎么算? chain rule 条件很长的时候 会遇到一个问题 sparsity 数据的稀疏性 用马尔科夫假设  最简单的假设 之 ...

  9. [阅读笔记]Dependency-Based Word Embeddings(基于依存的词向量) _Omer Levy and Yoav Goldberg

    [阅读笔记]Dependency-Based Word Embeddings(基于依存的词向量) _Omer Levy and Yoav Goldberg 文章目录 [阅读笔记]Dependency- ...

最新文章

  1. Confluence 6 使用 WebDAV 客户端来对页面进行操作
  2. Java二手车交易系统
  3. boost::filesystem目录相关的测试程序
  4. 【翻译】WPF应用程序模块化开发快速入门(使用Prism+MEF)
  5. 朱啸虎:几百亿资金今年注入小程序,你能抓住机会吗?
  6. 资源 ACCP-S1 BOOK3开发工具的下载
  7. python文件のpandas操作
  8. java多个文件压缩_java实现多个文件压缩
  9. python漏洞利用脚本_利用Python脚本实现漏洞情报监控与通知的经验分享
  10. 那个分分钟处理 10 亿节点图计算的 Plato,现在怎么样了?
  11. 代码无错是优? 工厂模式
  12. Python+OpenCV:Optical Flow(光流)
  13. 大数据性能调优之HBase的RowKey设计
  14. Android提取分区镜像命令,Android取证:使用ADB和DD对文件系统做镜像
  15. MySQL索引的数据结构及算法原理
  16. 删除之后在计算机操作中快捷键,电脑删除快捷键有哪些|电脑删除快捷键大全...
  17. 接班人不是克隆出来的:华为再显接班难
  18. 搜索功能(二)-搜索页面——搜索栏基本布局
  19. 计算机上可用内存不足无法打开图,Windows照片查看器无法显示此图片因为计算机上的可用内存可能不足解决方法...
  20. android x5全屏白色,x5webview 自定义全屏界面 X5webview完美去掉分享功能和缓存功能(2)...

热门文章

  1. CSS3选择器的研究
  2. 给javascript初学者的24条最佳实践
  3. linux下练习 c++ 容器set、multimset的特性
  4. Windows Internet
  5. 单片机外围模块漫谈之二,如何提高ADC转换精度
  6. Android 异常问题分析
  7. linux Hello World 模块编程
  8. pC机OracLe库磁盘坏如何恢复,电脑硬盘坏了数据能恢复吗(6步教你自己在家轻松恢复数据)...
  9. 会考计算机考试vb知识点,高中会考计算机vb知识点.doc
  10. Linux poll