热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NLP中的词向量

以下内容来自https:www.cnblogs.compinardp7160330.htmlhttps:blog.csdn.netfuermoleiarticledetails81

以下内容来自https://www.cnblogs.com/pinard/p/7160330.html 

                      https://blog.csdn.net/fuermolei/article/details/81302921 

词向量:可以简单的描述为,用一定维度的矩阵来表示词语,用于计算机的运算,现在一般用于NLP领域。

               最早期的词向量维度的大小取决于词汇表的大小。

                          词汇表:我 你 她 他 是 学生 大学 作业                   则词汇表的大小为:8  词向量的维度大小为:8


1、one-hot:

        利用的是数学中的离散学的方法进行表示的。

                 例如:我是大学学生。 one-hot表示   我:(1 0 0 0 0 0 0 0)       是:(0 0 0 0 1 0 0 0)       大学:(0 0 0 0 0 1 0 0)     

                            学生:(0 0 0 0 0 1 0 0 )

                            即通过确定每个具体的词对应于词汇表中的位置置为:1 ,其余的位置置为:0   将文本词汇向量化表示。

one-hot缺点:1、将词语向量化表述虽然简单,但是当词汇表很大时比如百万级的词汇表,那么对于每一个词语的向量表述维度都是百万级别的,而在这些向量中只有只有一个位置为1,其余位置为0的表述方式效率非常低下,而且对于计算机的内存也是一个噩梦。2、由于one-hot编码比较简单,因此无法从这些简单的向量编码中获得词语与词语之间的关系,因为每个词语的编码含有的信息太少了。因此需要一种能够以较少的维度向量来充分表述词汇信息的方法。


2、Distributed representation(分布式):

       可以解决One hot 的问题,它的思路是通过训练,将每个词都映射到一个较短的词向量上来。所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。这个较短的词向量维度是多大呢?这个一般需要我们在训练时自己来指定。该方法最早由Hinton在1986年提出的一种低纬度实数向量,它的样子为:[0.792, −0.177, −0.107, 0.109, −0.542, …] ,不但解决了one-hot的维度灾难问题,还提高了词语之间的关联属性。

关于Distributed representation 是如何挖掘词语之间的联系关系的呢?可以从下面的示例图中简单了解

在word2vec之前,大多用DNN网络来训练词向量,挖掘词语与词语之间的联系。这个方法的最基本结构是:利用三层神经网络,输入层、隐藏层、输出层。当然隐藏层可以是一层也可以是多层。

这个模型一般分为CBOW(Continuous Bag-of-Words)与Skip-Gram两种模型。

不哆嗦,先上两个模型的结构图


2.1、CBOW模型(连续词袋模型  continuous bag of words)

       中心思想是:根据中心词上下文中相关的词语词向量推测中心词的向量,即模型的输入是:中心词X的上下文相关的词语向量,模型的输出是:改中心词X的向量。

        例如:Efficient methods and focused attention are the best learning methods.

       我们设定上下文词语取值为4,假设我们需要得到的词语,即我们需要模型输出的词向量为“attention”。那么模型的输入应该为8个词语,在中心词“attention”前后各四个词语。 前四个:"Efficient methods and focused"          后四个“are the best learning”       中心词“attention”。由于CBOW使用的是词袋模型,因此这8个词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在我们上下文之内即可。

       这个CBOW的例子里,输入是8个词向量,输出是所有词的softmax 概率(训练的目标是期望训练样本特定词对应的 softmax 概率最大),对应的CBOW神经网络模型输入层有8个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数可以自己指定。通过DNN的反向传播算法,可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某8个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax激活函数找到概率最大的词对应的神经元即可


2.2、Skip-Gram模型(跳字模型)

     中心思想与CBOW模型的思想正好相反:根据中心词的词向量推测中心词上下文中词语的词向量,即模型的输入是:中心词X,模型的输出是:X(i-1)、X(i-2)、X(i-3)、X(i-4)、X(i+1)、X(i+2)、X(i+3)、X(i+4)的词向量。

还是上述的例子,我们的输入是特定词“attention”, 输出是softmax概率排前8的8个词,对应的Skip-Gram神经网络模型输入层有1个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某1个词对应的最可能的8个上下文词时,我们可以通过一次DNN前向传播算法得到概率大小排前8的softmax概率对应的神经元所对应的词即可。

总结:以上就是基于神经语言模型的CBOW和skip-gram训练模型得到词向量的大致过程,但是这和在word2vec中使用CBOW和skip-gram训练模型得到词向量的过程还是有很多不同的。word2vec为什么不用现成的DNN模型,要继续优化出新方法呢?最主要的问题是DNN模型的这个处理过程非常耗时。词表一般都是百万级别的,这意味着DNN的输出层需要进行softmax计算各个词的输出概率的的计算量很大。


3、word2vec基础之霍夫曼树

待续


推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 3年半巨亏242亿!商汤高估了深度学习,下错了棋?
    转自:新智元三年半研发开支近70亿,累计亏损242亿。AI这门生意好像越来越不好做了。近日,商汤科技已向港交所递交IPO申请。招股书显示& ... [详细]
  • Problemexplanation: ... [详细]
  • TerraformVersionTerraformv0.9.11AffectedResource(s)Pleas ... [详细]
  • Thisissuewasoriginallyopenedbyashashicorp/terraform#5664.Itwasmigratedhe ... [详细]
author-avatar
dachuanghu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有