目录

  • 1.离散表示
    • 1.1 One-hot表示
    • 1.2 词袋模型
    • 1.3 TF-IDF
    • 1.4 n-gram模型
    • 1.5 离散表示存在的问题
  • 2. 分布式表示
    • 2.1 共现矩阵
  • 3.神经网络表示
    • 3.1 NNLM
    • 3.2 Word2Vec
    • 3.3 sense2vec
  • 4.代码实现

在NLP(自然语言处理)领域,文本表示是第一步,也是很重要的一步,通俗来说就是把人类的语言符号转化为机器能够进行计算的数字,因为普通的文本语言机器是看不懂的,必须通过转化来表征对应文本。早期是基于规则的方法进行转化,而现代的方法是基于统计机器学习的方法。

数据决定了机器学习的上限,而算法只是尽可能逼近这个上限,在本文中数据指的就是文本表示,所以,弄懂文本表示的发展历程,对于NLP学习者来说是必不可少的。接下来开始我们的发展历程。文本表示分为离散表示分布式表示

1.离散表示

1.1 One-hot表示

One-hot简称读热向量编码,也是特征工程中最常用的方法。其步骤如下:

  1. 构造文本分词后的字典,每个分词是一个比特值,比特值为0或者1。
  2. 每个分词的文本表示为该分词的比特位为1,其余位为0的矩阵表示。

例如:John likes to watch movies. Mary likes too

John also likes to watch football games.

以上两句可以构造一个词典,**{“John”: 1, “likes”: 2, “to”: 3, “watch”: 4, “movies”: 5, “also”: 6, “football”: 7, “games”: 8, “Mary”: 9, “too”: 10} **

每个词典索引对应着比特位。那么利用One-hot表示为:

**John: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0] **

likes: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0] …等等,以此类推。

One-hot表示文本信息的缺点

  • 随着语料库的增加,数据特征的维度会越来越大,产生一个维度很高,又很稀疏的矩阵。
  • 这种表示方法的分词顺序和在句子中的顺序是无关的,不能保留词与词之间的关系信息。

1.2 词袋模型

词袋模型(Bag-of-words model),像是句子或是文件这样的文字可以用一个袋子装着这些词的方式表现,这种表现方式不考虑文法以及词的顺序。

文档的向量表示可以直接将各词的词向量表示加和。例如:

John likes to watch movies. Mary likes too

John also likes to watch football games.

以上两句可以构造一个词典,**{“John”: 1, “likes”: 2, “to”: 3, “watch”: 4, “movies”: 5, “also”: 6, “football”: 7, “games”: 8, “Mary”: 9, “too”: 10} **

那么第一句的向量表示为:[1,2,1,1,1,0,0,0,1,1],其中的2表示likes在该句中出现了2次,依次类推。

词袋模型同样有一下缺点

  • 词向量化后,词与词之间是有大小关系的,不一定词出现的越多,权重越大。
  • 词与词之间是没有顺序关系的。

1.3 TF-IDF

TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF意思是词频(Term Frequency),IDF意思是逆文本频率指数(Inverse Document Frequency)。

字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。一个词语在一篇文章中出现次数越多, 同时在所有文档中出现次数越少, 越能够代表该文章。

TFw=在某一类中词条w出现的次数该类中所有的词条数目TF_w=\frac{在某一类中词条w出现的次数}{该类中所有的词条数目}TFw​=该类中所有的词条数目在某一类中词条w出现的次数​

IDF=log(语料库的文档总数包含词条w的文档总数+1)IDF=log(\frac{语料库的文档总数}{包含词条w的文档总数+1})IDF=log(包含词条w的文档总数+1语料库的文档总数​),分母之所以加1,是为了避免分母为0。

那么,TF−IDF=TF∗IDFTF-IDF=TF*IDFTF−IDF=TF∗IDF,从这个公式可以看出,当w在文档中出现的次数增大时,而TF-IDF的值是减小的,所以也就体现了以上所说的了。

**缺点:**还是没有把词与词之间的关系顺序表达出来。

1.4 n-gram模型

n-gram模型为了保持词的顺序,做了一个滑窗的操作,这里的n表示的就是滑窗的大小,例如2-gram模型,也就是把2个词当做一组来处理,然后向后移动一个词的长度,再次组成另一组词,把这些生成一个字典,按照词袋模型的方式进行编码得到结果。改模型考虑了词的顺序。

例如:

John likes to watch movies. Mary likes too

John also likes to watch football games.

以上两句可以构造一个词典,{"John likes”: 1, "likes to”: 2, "to watch”: 3, "watch movies”: 4, "Mary likes”: 5, "likes too”: 6, "John also”: 7, "also likes”: 8, “watch football”: 9, “football games”: 10}

那么第一句的向量表示为:[1, 1, 1, 1, 1, 1, 0, 0, 0, 0],其中第一个1表示John likes在该句中出现了1次,依次类推。

**缺点:**随着n的大小增加,词表会成指数型膨胀,会越来越大。

1.5 离散表示存在的问题

由于存在以下的问题,对于一般的NLP问题,是可以使用离散表示文本信息来解决问题的,但对于要求精度较高的场景就不适合了。

  • 无法衡量词向量之间的关系。
  • 词表的维度随着语料库的增长而膨胀。
  • n-gram词序列随语料库增长呈指数型膨胀,更加快。
  • 离散数据来表示文本会带来数据稀疏问题,导致丢失了信息,与我们生活中理解的信息是不一样的。

2. 分布式表示

科学家们为了提高模型的精度,又发明出了分布式的表示文本信息的方法,这就是这一节需要介绍的。

**用一个词附近的其它词来表示该词,这是现代统计自然语言处理中最有创见的想法之一。**当初科学家发明这种方法是基于人的语言表达,认为一个词是由这个词的周边词汇一起来构成精确的语义信息。就好比,物以类聚人以群分,如果你想了解一个人,可以通过他周围的人进行了解,因为周围人都有一些共同点才能聚集起来。

2.1 共现矩阵

共现矩阵顾名思义就是共同出现的意思,词文档的共现矩阵主要用于发现主题(topic),用于主题模型,如LSA。

局域窗中的word-word共现矩阵可以挖掘语法和语义信息,例如:

  • I like deep learning.
  • I like NLP.
  • I enjoy flying

有以上三句话,设置滑窗为2,可以得到一个词典:{“I like”,“like deep”,“deep learning”,“like NLP”,“I enjoy”,“enjoy flying”,“I like”}

我们可以得到一个共现矩阵(对称矩阵):

中间的每个格子表示的是行和列组成的词组在词典中共同出现的次数,也就体现了共现的特性。

存在的问题:

  • 向量维数随着词典大小线性增长。
  • 存储整个词典的空间消耗非常大。
  • 一些模型如文本分类模型会面临稀疏性问题。
  • 模型会欠稳定,每新增一份语料进来,稳定性就会变化。

3.神经网络表示

3.1 NNLM

NNLM (Neural Network Language model),神经网络语言模型是03年提出来的,通过训练得到中间产物–词向量矩阵,这就是我们要得到的文本表示向量矩阵。

NNLM说的是定义一个前向窗口大小,其实和上面提到的窗口是一个意思。把这个窗口中最后一个词当做y,把之前的词当做输入x,通俗来说就是预测这个窗口中最后一个词出现概率的模型。

以下是NNLM的网络结构图:

  • input层是一个前向词的输入,是经过one-hot编码的词向量表示形式,具有V*1的矩阵。

  • C矩阵是投影矩阵,也就是稠密词向量表示,在神经网络中是w参数矩阵,该矩阵的大小为D*V,正好与input层进行全连接(相乘)得到D*1的矩阵,采用线性映射将one-hot表 示投影到稠密D维表示。

  • output层(softmax)自然是前向窗中需要预测的词。

  • 通过BP+SGD得到最优的C投影矩阵,这就是NNLM的中间产物,也是我们所求的文本表示矩阵,通过NNLM将稀疏矩阵投影到稠密向量矩阵中。

3.2 Word2Vec

谷歌2013年提出的Word2Vec是目前最常用的词嵌入模型之一。Word2Vec实际 是一种浅层的神经网络模型,它有两种网络结构,**分别是CBOW(Continues Bag of Words)连续词袋和Skip-gram。**Word2Vec和上面的NNLM很类似,但比NNLM简单。

CBOW

CBOW获得中间词两边的的上下文,然后用周围的词去预测中间的词,把中间词当做y,把窗口中的其它词当做x输入,x输入是经过one-hot编码过的,然后通过一个隐层进行求和操作,最后通过激活函数softmax,可以计算出每个单词的生成概率,接下来的任务就是训练神经网络的权重,使得语料库中所有单词的整体生成概率最大化,而求得的权重矩阵就是文本表示词向量的结果。

Skip-gram

Skip-gram是通过当前词来预测窗口中上下文词出现的概率模型,把当前词当做x,把窗口中其它词当做y,依然是通过一个隐层接一个Softmax激活函数来预测其它词的概率。如下图所示:

优化方法

  • 层次Softmax:至此还没有结束,因为如果单单只是接一个softmax激活函数,计算量还是很大的,有多少词就会有多少维的权重矩阵,所以这里就提出层次Softmax(Hierarchical Softmax),使用Huffman Tree来编码输出层的词典,相当于平铺到各个叶子节点上,瞬间把维度降低到了树的深度,可以看如下图所示。这课Tree把出现频率高的词放到靠近根节点的叶子节点处,每一次只要做二分类计算,计算路径上所有非叶子节点词向量的贡献即可。

  • **负例采样(Negative Sampling):**这种优化方式做的事情是,在正确单词以外的负样本中进行采样,最终目的是为了减少负样本的数量,达到减少计算量效果。将词典中的每一个词对应一条线段,所有词组成了[0,1]间的剖分,如下图所示,然后每次随机生成一个[1, M-1]间的整数,看落在哪个词对应的剖分上就选择哪个词,最后会得到一个负样本集合。

Word2Vec存在的问题

  • 对每个local context window单独训练,没有利用包 含在global co-currence矩阵中的统计信息。
  • 对多义词无法很好的表示和处理,因为使用了唯一 的词向量

3.3 sense2vec

word2vec模型的问题在于词语的多义性。比如duck这个单词常见的含义有 水禽或者下蹲,但对于 word2vec 模型来说,它倾向于将所有概念做归一化 平滑处理,得到一个最终的表现形式。

4.代码实现

github Word2Vec训练维基百科文章

欢迎添加微信交流!请备注“机器学习”。

NLP从词袋到Word2Vec的文本表示相关推荐

  1. 毕业设计 - NLP:词向量Skip-gram word2vec

    文章目录 简介 0 前言 1 项目介绍 2 数据集介绍 3 项目实现 3.1 数据预处理 3.2 配置网络 3.3 网络训练 3.4 模型评估 4 最后-毕设帮助 简介 今天学长向大家介绍NLP基础 ...

  2. 8.词袋和词向量模型

    1.非结构化数据转换为词袋和词向量模型 文本数据(非结构化数据)转换成计算机能够计算的数据.有两种常用的模型:词袋和词向量模型. 2.词袋模型(Bag of Words Model) 词袋模型看起来好 ...

  3. 特征缩放的效果:从词袋到 TF-IDF

    特征缩放的效果:从词袋到 TF-IDF 转载:github 译者:@gin 校对者:@HeYun 字袋易于生成,但远非完美.假设我们平等的统计所有单词,有些不需要的词也会被强调.在第三章提过一个例子, ...

  4. NLP之词向量:利用word2vec对20类新闻文本数据集进行词向量训练、测试(某个单词的相关词汇)

    NLP之词向量:利用word2vec对20类新闻文本数据集进行词向量训练.测试(某个单词的相关词汇) 目录 输出结果 设计思路 核心代码 输出结果 寻找训练文本中与morning最相关的10个词汇: ...

  5. 从词袋到Transfomer,NLP十年突破史

    作者 | Zelros AI 译者 | 夕颜 出品 | AI科技大本营(ID:rgznai100) [导读]通过 Kaggle 竞赛视角,观察 NLP 十年发展简史. 根据上下文(这里指句子的最后一个 ...

  6. 【NLP】词嵌入基础和Word2vec

    0.导语 词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称.概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量. ...

  7. 从词袋到 Transfomer,NLP 十年突破史

    作者 | Zelros AI,译者 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 自 2010 年创立以来,著名的数据科学竞赛平台 Kaggle 一直是机器学习趋势演变的绝佳观察场. ...

  8. [NLP]高级词向量表达之Word2vec详解(知识点全覆盖)

    1.词表征(Word Representation) 首先明确句子是 序列化 ,里面携带了大量大信息.在NLP发展的进程里面, 采用了one-hot vector的形式来表示一个句子里面的词是一种方式 ...

  9. 【NLP】图解词嵌入和Word2vec

    0.导语 词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称.概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量. ...

最新文章

  1. ios snapkit m_如何使用自动布局和SnapKit在iOS上创建漂亮的拉伸布局
  2. Linux C编程--线程操作3--线程属性解析
  3. 漫游Kafka设计篇之消息传输的事务定义
  4. 51NOD 1125(交换机器最小代价) (贪心) 思想 !思想!
  5. 回文自动机:从入门到只会打板
  6. 【转】Power Platform(简介)
  7. length函数的头文件_Framebuffer 应用编程中涉及的 API 函数
  8. Codeforces Round #380~#400 div2 总结 - updating
  9. 打造自己的Android源码学习环境之二:在虚拟机中安装Ubuntu(上)
  10. 静态库、动态库及导入库
  11. tablayou设置固定下划线和根据文字显示长短显示下划线
  12. VisualNet地税管道资源管理系统
  13. 文件包含漏洞及漏洞利用
  14. 读书笔记 《一生的计划》
  15. qt,QGraphicsView实现鼠标中键拖动图片,鼠标滚轮缩放、两个窗口联动左键选点等功能(c++pyqt两个版本)
  16. 小米2023届秋招校招内推
  17. selenium自动化爬取京东电脑商品信息用于数据分析
  18. 知识分享,海外推广的渠道有哪些,如何正确的选择
  19. python爬虫实战:爬取王者荣耀英雄背景故事
  20. windows下apache简单配置php解释器

热门文章

  1. 怎样批量查询中通快运物流并分析出提前签收的单号
  2. 对“英语趣配音”学习软件的教学设计分析
  3. vue watch监听数据解决新旧值一样的问题(newValue, oldValue)
  4. 什么是 NFT 洗盘交易:洗盘交易背后的原理
  5. 远程视频监控之构思篇
  6. 《惢客创业日记》2019.04.29(周一)与幽门螺旋杆菌的博弈
  7. 整理了近期所有的python资料,收藏了慢慢来
  8. 1985—1990年《ISTP》收录的世界主要国家(地区)科技会议论文情况
  9. mybatis-plus存数组对象,并从数据库查出这个数组
  10. xctf攻防世界 MISC高手进阶区 黄金六年