词向量的意思就是通过一个数字组成的向量来表示一个词,这个向量的构成有很多种方法,如one-hot编码、基于共现矩阵的方式、word2vec、动态词向量ELMo等。

一、one-hot向量


优势:简单易懂、稀疏存储

不足:维度灾难词汇鸿沟(向量之间都是孤立的)

二、基于共现矩阵的方式



上述矩阵是一个n*n的对称矩阵X,矩阵维数随着词典数量n的增大而增大,可以使用奇异值分解SVD将矩阵维度降低。但是仍存在问题:

  • 矩阵X的维度经常改变
  • 由于大部分词并不共现而导致的稀疏性
  • 矩阵维度过高带来的高计算复杂度

三、基于神经网络的方式(word embedding):word2vec


Word2Vec通过Embedding层将One-Hot Encoder转化为低维度的连续值(稠密向量),并且其中意思相近的词将被映射到向量空间中相近的位置。 从而解决了One-Hot Encoder词汇鸿沟和维度灾难的问题。

1.Embedding层

Embedding层(输入层到隐藏层)是以one hot为输入、中间层节点数为词向量维数的全连接层,这个全连接层的参数就是我们要获取的词向量表!

2.Word2vec模型概述

word2vec其实就是简化版的NN,它事实上训练了一个语言模型,通过语言模型来获取词向量。所谓语言模型,就是通过前n个字预测下一个字的概率,就是一个多分类器而已,我们输入one hot,然后连接一个全连接层,然后再连接若干个层,最后接一个softmax分类器,就可以得到语言模型了,然后将大批量文本输入训练就行了,最后得到第一个全连接层的参数,就是词向量表。

记词典大小为V
输入层:one-hot vector,V个节点
隐藏层:无激活函数,D个节点(D<V)
模型训练后输入层和隐藏层之间权重即为我们要获取的词向量
输出层:softmax回归输出输入词的邻近词的概率分布,V个节点



对同样一个句子:Hangzhou is a nice city。我们要构造一个语境与目标词汇的映射关系,其实就是input与label的关系。 假设滑窗尺寸为1 ,那么

CBOW的样本形式为:[Hangzhou,a]—>is,[is,nice]—>a,[a,city]—>nice
Skip-Gram的样本形式为:(is,Hangzhou),(is,a),(a,is), (a,nice),(nice,a),(nice,city)

3.模型求解:负采样方法

本文我们只对负采样方法negative sampling展开介绍

3.1 NCE Loss提出背景

Softmax是用来实现多类分类问题常见的损失函数。但如果类别特别多,softmax的效率就是个问题了。比如在word2vec里,每个词都是一个类别,在这种情况下可能有100万类。那么每次都得预测一个样本在100万类上属于每个类的概率,这个效率是非常低的。

3.2 NCE的主要思想

  • 对于每一个样本,除了他自己的label,同时采样出N个其他的label
  • 从而我们只需要计算样本在这N+1个label上的概率,而不用计算样本在所有label上的概率
  • 而样本在每个label上的概率最终用了Logistic的损失函数
  • NCE本质上是把多分类问题转化为2分类问题

3.3 NCE负采样策略

带权采样:高频词选为负样本的概率大,低频词概率小

4.word2vec之连续词袋模型CBOW

根据当前词的上下文环境来预测当前词

5.word2vec之跳字模型skip-gram

根据当前词预测上下文

可以理解为是将CBOW模型中的context(w)拆成一个个来考虑

6.word embedding存在的问题

多义词问题

词向量(从one-hot到word2vec)相关推荐

  1. 深度学习与自然语言处理教程(1) - 词向量、SVD分解与Word2Vec(NLP通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://www.showmeai.tech/article-d ...

  2. 【NLP】CS224N课程笔记|词向量I: 简介, SVD和Word2Vec

    NewBeeNLP原创出品 公众号专栏作者@Ryan 知乎 | 机器学习课程笔记 CS224N课程笔记系列,持续更新中 课程主页:  http://web.stanford.edu/class/cs2 ...

  3. 词向量经典模型:从word2vec、glove、ELMo到BERT

    前言 词向量技术将自然语言中的词转化为稠密的向量,相似的词会有相似的向量表示,这样的转化方便挖掘文字中词语和句子之间的特征.生成词向量的方法从一开始基于统计学的方法(共现矩阵.SVD分解)到基于不同结 ...

  4. 【深度学习】NLP基础--词向量(从One-hot到Word2Vec)

    1.什么是词向量 在自然语言处理中,面临的首要问题是如何让模型认识我们的文本信息,比如向模型中输入'我爱北京天安门',那模型是如何认识文本的?词,是自然语言处理中基本单位,将数据输入到模型中,尽可能的 ...

  5. bert获得词向量_词向量详解:从word2vec、glove、ELMo到BERT

    目前,词向量(又叫词嵌入)已经成为NLP领域各种任务的必备一步,而且随着bert elmo,gpt等预训练模型的发展,词向量演变为知识表示方法,但其本质思想不变.学习各种词向量训练原理可以很好地掌握N ...

  6. 秒懂词向量Word2vec的本质

    [NLP] 秒懂词向量Word2vec的本质 穆文 4 个月前 转自我的公众号: 『数据挖掘机养成记』 1. 引子 大家好 我叫数据挖掘机 皇家布鲁斯特大学肄业 我喝最烈的果粒橙,钻最深的牛角尖 -- ...

  7. word2vec词向量训练及中文文本类似度计算

    本文是讲述怎样使用word2vec的基础教程.文章比較基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python ...

  8. bert获得词向量_NLP中的词向量对比:word2vec/glove/fastText/elmo/GPT/bert

    作者:JayLou,NLP算法工程师 知乎专栏:高能NLP之路 https://zhuanlan.zhihu.com/p/56382372 本文以QA形式对自然语言处理中的词向量进行总结:包含word ...

  9. 词向量与词向量拼接_nlp中的词向量对比:word2vec/glove/fastText/elmo/GPT/bert

    本文以QA形式对自然语言处理中的词向量进行总结:包含word2vec/glove/fastText/elmo/bert. 2020年更新:NLP预训练模型的全面总结JayLou娄杰:史上最全!PTMs ...

  10. [NLP] 秒懂词向量Word2vec的本质+word2vec资源总结

    转自作者的公众号: 『数据挖掘机养成记』 1. 引子 大家好 我叫数据挖掘机 皇家布鲁斯特大学肄业 我喝最烈的果粒橙,钻最深的牛角尖 --执着如我 今天我要揭开Word2vec的神秘面纱 直窥其本质 ...

最新文章

  1. 团体程序设计天梯赛-练习集L1-016. 查验身份证
  2. 数据结构-排序(插入排序)
  3. 科大星云诗社动态20210318
  4. CSDN社区之星专訪:我的蜕变之路
  5. css标签的三种显示模式
  6. css img 适配尺寸_img图片自适应布局_HTML5教程_郭隆邦技术博客
  7. filters.revealTrans.Transition用法
  8. 常用标记语言及其工具
  9. 解决idea谷歌翻译插件不可用
  10. 沃尔玛承压,TJX、唯品会稳健,折扣零售是行业“抗压”能手?
  11. Windows部署静态网站
  12. 四旋翼自主飞行器探测跟踪系统项目的随笔
  13. 辅助驾驶事故频发,背后直指“决策安全模型”和驾驶员行为
  14. excel的筛选功能失效原因
  15. 职责链模式之真假美猴王
  16. 2017年校园招聘ios面试题
  17. 【JavaScript】一个简单的分页,显示页首,中间页,页尾,当前页的前后三页,省略其它页
  18. jenkins日志乱码linux,jenkins中文及符号乱码
  19. 关于Cannot invoke Tomcat mannager错误
  20. µC/OS-II 系统空闲任务,统计任务和应用任务

热门文章

  1. IOS:类方法(静态方法)和实例方法
  2. 千图成像_两分钟教你玩转千图成像Part1~
  3. mysql 类似 oracle connect by_mysql实现层级查询,相似oracle里的connect by prior
  4. 在springcacheinvokecontext中没找到field_CNN中的感受野
  5. 苹果电脑拷贝文件到u盘很慢_小米最硬核U盘!20g,3.1接口,120MB/S读取速度,可连iphone华为...
  6. Scikit-Learn (浅谈PCA降维算法)
  7. python数据库教程_python使用mysql操作教程
  8. java类中静态变量自增_Java中静态变量(类变量)、实例变量、局部变量和成员变量...
  9. c++如何快速写出get set_如何快速写出产品文案?(4大核心方法)
  10. dio设置自定义post请求_Flutter用dio封装http网络请求,设置统一的请求地址、headers及处理返回内容...