文章目录

  • 词嵌入简介
  • 学习算法
    • 朴素算法
    • Word2vec skip-gram模型
    • 负采样法
  • 应用
    • 情感分类

词嵌入简介

在RNN中,我们了解到一种用向量表示单词方法——独热表示法。用一个与词典等长的列向量,只有与该单词在字典中的索引位置对应的地方值为1,其余值皆为0.这样的作法带来了一个弊端,那就是所有词的向量都是相互正交的,网络没有近义词或者同义词的概念。而如果我们能用更高维的特征来描述这些词汇,如形容词、颜色、动物……或者更抽象的属性作为特征值,使得我们对单词的表示更本质,网络就可以建立同义词、反义词这样的概念,实现一个更智能的网络。

利用词嵌入,我们可以更好地迁移NLP的学习问题,用海量数据训练词嵌入得到嵌入向量,然后用这些向量进行数据量更小的NLP学习问题。

同时,因为嵌入向量能更本质的描述一个单词的属性,它能够进行类比推理,比如我们发现单词man和woman的嵌入向量之差跟king和queen之间的向量之差是非常相近的。同理它也可以类比一些别的关系,比如国家与首都,原型与比较级等。

在词嵌入的训练中,我们要学习的是一个嵌入矩阵EEE,这是一个嵌入向量与词典结合的矩阵,行坐标为嵌入向量的不同特征,而列坐标为单词在词典中的索引。将嵌入矩阵与独热向量ooo相乘,就可以得到单词的嵌入向量eee。

学习算法

朴素算法

最直观的思路是,将矩阵EEE当作神经网络的参数进行学习。对于每个单词,我们用它的独热向量与EEE相乘,得到一系列嵌入向量eee,将这些嵌入向量输入到一个全连通层,再接入一个softmax层,以此来预测下一个单词的概率。更一般的,为了固定输入个数,我们可以约定只考虑该单词前k个位置(也可以包含后k个位置)。

Word2vec skip-gram模型

在朴素模型中,我们固定地选取某个范围的上下文来学习嵌入矩阵EEE,skip-gram模型中,我们的选择会更加随机。我们随机选择一个单词作为语境ccc,再从ccc的附近随机选择一个要预测的目标ttt。虽然这个预测本身看起来很不靠谱,毕竟已知信息太少了,但是它在学习嵌入矩阵方面出人意料地有效。


具体地讲,我们从oco_coc​出发,与EEE相乘得到ece_cec​,将其传入softmax层(注意该层的参数θt\theta_tθt​是与预测目标ttt绑定的),得到关于目标单词的预测y^\hat{y}y^​,计算其损失函数并反向传播修正参数。

这个模型每次只输入一个单词,并预测一个单词,但是通过softmax函数的损失函数优化出来的嵌入矩阵EEE非常不错。不过skip-gram的主要瓶颈在于计算softmax函数是分母要遍历整个字典,计算量非常大。一种解决方法是使用分层softmax函数,用类似二叉树的方法通过多个二元分类器达成多元分类的效果,这样时间复杂度就是log级别的,而且启发式构造的二元分类器(将高频单词放在深度较浅的叶子)效率会更高。

还有要注意的一点就是,如果完全从文段中随机采样,像a,the,of这样的单词出现的频率会远高于其他实意单词,可能需要一些启发式方法来平衡训练中不同词汇的占比。

负采样法

从文段中选取一对比较靠近的词汇作为正样本,然后从词典中随机挑选kkk个词汇构成负样本(即使随机到的词汇可以作为上下文的合理选项时也无妨)。对于小样本,负样本的个数在5-20之间,大样本情况下负样本只需要2-5个。

将这些样本用于训练时,我们同样从oco_coc​出发,与EEE相乘得到ece_cec​,但我们不再将其传入softmax层,而是只训练被挑选进样本的k+1k+1k+1个词的二元分类器,如juice的分类器就只输出预测单词为juice的概率。这样我们就从每次遍历整个词典简化到了每次只训练k+1k+1k+1个二元分类器。


还有一个需要注意的点是,负样本应该如何选取,很多研究者运用的方法是按照词汇出现频率的34\frac{3}{4}43​次方的占比来采样。

应用

情感分类

通过一段文字来评估作者的情感是积极或消极的,比如把社交媒体上用户的每条评论转换成一个具体的分数:

情感分类问题的一个难点是,训练集的规模可能比较小,但是通过词嵌入可以在小数据情形下完成该任务。

一种比较简单的实现是,求出所有单词的嵌入向量,然后对这些嵌入向量求平均,输入到一个softmax分类器中,得到一个评分。

但是这样的算法无法联系上下文,对于一些表达比较委婉或者阴阳怪气的评论,就无法正常识别。所以我们可以把RNN添加进来,用多对一模型来综合考虑整个句子。

深度学习:NLP之词嵌入(Word Embedding)相关推荐

  1. 什么是词嵌入| Word Embedding

    本文参考:词嵌入 维基百科解释 In natural language processing (NLP), word embedding is a term used for the represen ...

  2. [DeeplearningAI笔记]序列模型2.1-2.2词嵌入word embedding

    5.2自然语言处理 觉得有用的话,欢迎一起讨论相互学习~ 吴恩达老师课程原地址 2.1词汇表征 Word representation 原先都是使用词汇表来表示词汇,并且使用1-hot编码的方式来表示 ...

  3. 词嵌入 word embedding

    原文链接:https://blog.csdn.net/ch1209498273/article/details/78323478 词嵌入(word embedding)是一种词的类型表示,具有相似意义 ...

  4. 自然语言处理之词嵌入(Word Embedding)

    关于词嵌入    对于计算机来说,要想理解自然语言,需要把自然语言以一定的形式转化为数值,这一步解决的是"将现实问题转化为数学问题",是人工智能非常关键的一步.词嵌入就是将自然语言 ...

  5. 《动手学深度学习》task7_3 词嵌入进阶

    系统学习<动手学深度学习>点击下面这个链接,有全目录哦~ https://blog.csdn.net/Shine_rise/article/details/104754764 本篇目录 词 ...

  6. 用深度学习实现自然语言处理:word embedding,单词向量化

    前几年,腾讯新闻曾发出一片具有爆炸性的文章.并不是文章的内容有什么新奇之处,而是文章的作者与众不同,写文章的不是人,而是网络机器人,或者说是人工智能,是算法通过分析大量财经文章后,学会了人如何编写财经 ...

  7. 深度学习实战讲词嵌入 很好的 NLP电子书

    http://yuedu.163.com/source/8ea77c19c3994b7f93b272dfb6017b69_4

  8. 词嵌入(Word Embedding)

    目录 为什么需要词向量嵌入? 表征的对象是什么? 如何表征? 词向量嵌入矩阵 Skip-Gram CBoW 负采样 结语 Reference 为什么需要词向量嵌入? 在自然语言相关的任务中,我们将句子 ...

  9. 一文概述2017年深度学习NLP重大进展与趋势

    本文,我将概述 2017 年深度学习技术在 NLP 领域带来的进步.可能会有遗漏,毕竟涵盖所有论文.框架和工具难度太大.我想和大家分享这一年我最喜欢的一些研究.我认为 2017 年是 NLP 领域的重 ...

  10. 手把手教你数据不足时如何做深度学习NLP

    作为数据科学家,你最重要的技能之一应该是为你的问题选择正确的建模技术和算法.几个月前,我试图解决文本分类问题,即分类哪些新闻文章与我的客户相关. 我只有几千个标记的例子,所以我开始使用简单的经典机器学 ...

最新文章

  1. Nagios+Cacti+Nconf配置
  2. myeclipse导出doc
  3. 学而思的python课怎么样_有在用学而思网校的同学觉得孙墨漪老师怎么样?报她的课值得吗?...
  4. UITableView UITableDataSource UITableViewDelegate的基本方法和属性
  5. 统计信息自动收集任务失效原因排查
  6. Selenium爬虫
  7. 三角学——极坐标_1
  8. 记录一次阻塞引发的系统超时
  9. 【Oracle AWR详解分析-02】
  10. NiosII软处理器快速入门- 10分钟学会NiosII(3)
  11. 用SyncToy进行两台服务器之间文件同步
  12. 混沌:Logistic模型
  13. 计算机量子化学计算实验报告物化实验,化学反应焓变的量子化学理论计算实验报告.doc...
  14. 联通光纤猫hg8240路由功能开启
  15. 苹果战世界:苹果史上27大口水战
  16. re.sub()用法的详细介绍
  17. btrfs和ntfs linux5,如何选择文件系统EXT4、Btrfs 和 XFS
  18. 单系统 台电x80pro_台电X80plus双系统刷单系统
  19. 其他,HC6800-EM3 V30原理图
  20. IMCO正品行货机使用问题汇总与解答

热门文章

  1. Pronunciation Difference between /ʌ/ and /ɑ/
  2. Raki的读paper小记:Simplify the Usage of Lexicon in Chinese NER
  3. 能力提升综合题单 Part 8.8 二分图
  4. 复数加减结构体 c语言,C++定义描述复数的结构体类型变量,是想复数的输入输出。设计三个函数实现复数的加法,减法和乘法运算。...
  5. php对字符串简单加密解密,PHP字符串加密解密
  6. Docker在centos下安装以及常见错误解决
  7. jenkins--master/slave模式---master是容器版---slave是非容器版
  8. 【Spring-AOP】自动代理类AnnotationAwareAspectJAutoProxyCreator
  9. Springmvc源码分析之dispatcherServlet
  10. spring源码-第四个后置处理器