原创:王稳钺
资料来源:张春阳

词向量被应用在非常非常多的场景中,甚至可以说跟文字相关的互联网应用基本上都会跟词向量有关系。本文主要从应用、发展以及实战代码来介绍词向量。

1. 词向量的应用

搜索引擎是人们每天都在使用的产品,搜索引擎其实就是利用词向量技术来进行搜索的。搜索引擎是如何工作的呢?其实主要分为三步。第一步,搜索引擎需要爬取互联网上所有的文章,把这些文章全部都转化成词向量。第二步是要将搜索词也转化为词向量。最后一步就是用搜索词的词向量与文章转变成的词向量进行相似度的比较,再把与搜索词相似的文章返回给用户。

第二个应用也非常常见——头条新闻。今日头条之所以能做得像现在这么好,它背后最主要的商业逻辑就是它使用了推荐引擎,给不同的用户分发不同的内容。它是如何实现的呢?首先第一步就是把很多的新闻转换成向量。第二步就是根据用户的行为,比如点击、点赞、评论某个新闻,将用户也转化为向量。第三步与搜索引擎类似,就是将与用户向量相似的文章返回给用户。其实还有很多类似的应用,比如淘宝等电商平台。

2. 从文字到词向量

如何生成词向量呢?词向量是如何发展到现在的呢? 1946计算机诞生了。自从有了计算机之后,其实有很多伟大的先贤们一直在想着一个问题,就是怎么能够让计算机也能像人一样帮助人们去做一些事情,比如识别图像,比如”理解“文字。这里面最伟大的人物就是阿兰图灵,阿兰图灵发表了《计算机器与智能》这篇论文。这篇论文可能很多人都没听说过,但是图灵测试一定不陌生。图灵测试其实就是人工智能的最早的雏形,它的思想就是制作一个机器,让其他人分辨不出来这个机器人是一个真的机器还是一个人。阿兰图灵的很多理论成为了人工智能最早期的思想萌芽。

1950 年,在有了人工智能的想法之后,人们就在思考,人主要有几个功能——文字语言、视觉、思考与决策。这就诞生了所谓的人工智能的三大方向——自然语言处理(NLP)、机器视觉(CV)、商业分析(BI)。 自然语言处理其实就是把人类说的文字表示成计算机也可以理解。但计算机只能处理1、0这些数字信号,所以计算机看不懂人们所写的这些奇奇怪怪的文字,不管是英文、中文或其他文字的。那最早人类是怎么去表示文字的呢?其实人类就用了一种其实到今天为止依然很常用的一种方法——WordNet。这个词可能很多人没听说过,但是它的应用却非常实用——词典。WordNet的想法说能不能使用同义词或者反义词来去解释原单词。其实这个过程会非常的复杂,而且同时也存在一些问题。例如解释丈夫这个词,就需要用很多周边的词来解释,比如先生、老公、英语的话husband等等。但第一个问题是,人类的语言是在不断进化的,经常会出现新的词汇,比如网络上的一些新鲜词汇。那这些新鲜词汇怎么给它放到这个同义词的解释当中呢?这就需要人去做,就需要耗费很大的劳动力。因为并不知道新的网络文化或者网络用语,它会产生在哪里,那做起来就会无从下手。并且还有非常高的延迟性,因为可能需要很长时间理解新的词汇的意思,之后才能将它整理进词表中。另一个问题是这种方式其实就没有办法比较相似的程度是多少,但其实人们想要知道的其实不仅仅是相似不相似,而是到底有多相似或不相似。所以WordNet方法,它天生就有这样的局限性。

后来人们又想到Onehot方法。Onehot方法其实是非常常用的一种方法,就是在今天,深度学习横行,机器学习非常普及的情况下,其实Onehot方法也是依然在用的一种方法。Onehot方法其实就是假设有一个词典,词典里面包含了很多个单词,为了解释起来比较方便,下图中假设词典中只有5个词——小学、中学、大学、硕士和博士。如何去表示这五个单词呢?其实就用一种很简单的方式,小学给它编码为1000,中学为0100,大学0010……五个不同编码码,分别来代表不同的含义。Onehot的本质思想就是用不同的符号去表示不同的词,这种方法其实被称为离散型方法。其实Onehot也有它的问题。首先它无法表示相似词,比如之前提到的老公、丈夫其实都是一个意思,但是Onehot会将它编成两个不同的编码,其实也无法计算相似度。另一个问题是维度爆炸。如果词典中有1万个词,那么表示某一个词就要用长度1万的向量来表示,这对于计算机来说非常浪费存储空间。

为了解决问题,人们又探索了别的方法。首先人们提出了分布式假设,即如果两个词的上下文是相似的,那么这两个词也是相似的。

利用这种想法,表示方法又发生了改变——把一个单词划到一个向量的空间中,就是将它变成一个向量。词义是比较相似的词,就在向量空间中表示到很相近的位置上。下图分别表示了二维和三维空间的表达示例。这种表达方式叫做分布式表达。

那么如何将词投射到向量空间中呢?并且空间可以是任意维度的。第一种方法是NNLM,其实是利用一个神经网络。这个网络很简单,只有三层,输入层、隐藏层和输出层。输入层就是把文本用Onehot表示出来,然后给它塞到Embedding层里面去。第二层就是tanh函数,第三层是softmax层。其实这个网络的目的就是通过上文来预测下文。下面展示一下每一层的细节。

首先输入层就是全链接层,来实现降维的目的。后面会展示代码,只需一行就能实现这样的功能。

隐藏层就只是tanh函数,具体的函数公式以及图像可以见上图。这一层的目的在于增加非线性关系,让模型拥有更强的学习能力。

输出层也非常简单,就是softmax函数。softmax函数能把一个值转化成一个概率的分布,这样就可以得到下文可能出现的词的概率。下面用代码来具体实现。

3. 词向量实战

下图用代码展示了NNLM的实现。

下图的部分展示了如何把一些单词转化为Onehot形式。

词表是一个动态大小的词表,不同的数据就有不同的词表大小。窗口大小是指到底用多少上文去预测一个下文,窗口大小是可以自己决定的,所以这是一个动态的参数。图中就是用了第一个句子的长度减1。特征大小就是想得到的向量是多长的,可以是两维的、三维的、1000维的都是可以的。

这两部分展示了模型的训练和模型的预测。

欢迎大家通过复现代码实现具体的应用,来帮助理解词向量。

Embedding原理到实战相关推荐

  1. 深度学习Anchor Boxes原理与实战技术

    深度学习Anchor Boxes原理与实战技术 目标检测算法通常对输入图像中的大量区域进行采样,判断这些区域是否包含感兴趣的目标,并调整这些区域的边缘,以便更准确地预测目标的地面真实边界框.不同的模型 ...

  2. Java并发编程原理与实战六:主线程等待子线程解决方案

    Java并发编程原理与实战六:主线程等待子线程解决方案 参考文章: (1)Java并发编程原理与实战六:主线程等待子线程解决方案 (2)https://www.cnblogs.com/pony1223 ...

  3. DNS tunnel的原理及实战

    DNS tunnel的原理及实战 摘自:http://netsec.ccert.edu.cn/zhengming/2011/11/01/%E8%BD%AC%E8%BD%BD%EF%BC%9Adns-t ...

  4. 【赠书】五一假期福利,OpenCV4最新原理与实战书籍

    五一假期快要到了,本次给大家赠送3本本月新书,这次赠送的书籍是<OpenCV 4机器学习算法原理与编程实战>. 这是一本什么样的书 OpenCV(Open Source Computer ...

  5. Zookeeper原理和实战开发经典视频教程 百度云网盘下载

    Zookeeper原理和实战开发 经典视频教程 百度云网盘下载 资源下载地址:http://pan.baidu.com/s/1o7ZjPeM   密码:r5yf    转载于:https://www. ...

  6. 深度学习attention原理_深度学习Anchor Boxes原理与实战技术

    深度学习Anchor Boxes原理与实战技术 目标检测算法通常对输入图像中的大量区域进行采样,判断这些区域是否包含感兴趣的目标,并调整这些区域的边缘,以便更准确地预测目标的地面真实边界框.不同的模型 ...

  7. Oracle特殊恢复原理与实战(DSI系列)

    1.深入浅出Oracle(DSI系列Ⅰ) 2.Oracle特殊恢复原理与实战(DSI系列Ⅱ) 3.Oracle SQL Tuning(DSI系列Ⅲ)即将开设 4.Oracle DB Performan ...

  8. spark任务shell运行_Spark原理与实战(七)部署模式与运行机制

    导读:Spark的运行模式指的是Spark应用程序以怎样的方式运行,单节本地点运行还是多节点集群运行,自己进行资源调度管理还是依靠别人进行调度管理.Spark提供了多种多样,灵活多变的部署模式. 作者 ...

  9. MySQL闪回原理与实战

    文章来源 https://github.com/danfengcao/binlog2sql https://github.com/danfengcao/binlog2sql/blob/master/e ...

最新文章

  1. wan886网址导航 Bo9bo高清电影 两个图标 怎么都删不掉
  2. 32位的cpu不能安装linux_Python3.5.2 安装教程【64位/32位】
  3. git设置mergetool可视化工具
  4. 【Flink】Flink RecordWriterOutput pushToRecordWriter InterruptedException
  5. 为什么redux要返回一个新的state引发的血案
  6. 快捷软件启动工具 Rolan2(转载)
  7. 还记得爆火的图解算法吗?现在图解机器学习算法书来了!送书10本!
  8. quartz 定时任务不运行问题
  9. mybatis与spring集成
  10. 云计算的三种服务模式:IaaS、PaaS、SaaS
  11. android手机访问网站时 出现您未被授权查看该页 您试图访问的 Web 服务器上有一个不被允许访问该网站的 IP 地
  12. 5.3 - 抽屉新热榜
  13. 《STL源码分析》学习笔记 — STL概论与版本简介
  14. 四足机器人|机器狗|仿生机器人|多足机器人|Adams仿真|Simulink仿真|基于CPG的四足机器人Simulink与Adams虚拟样机|源码可直接执行|绝对干货!需要资料及指导的可以联系我!
  15. 戴尔服务器的作用是什么,戴尔 PowerEdge M910 管理功能强大
  16. 百度成小满运维面试题
  17. Android8.0多窗口调研
  18. 工作第七周:提升版权意识,共塑良好共享氛围
  19. 2020 届,互联网校招的薪资情况如何?
  20. 机器学习基础--梯度下降(Gradient Descent)

热门文章

  1. MySQL - 04.数据控制语言(Data Control Language,DCL)
  2. 我的星座图 php,星座图映射
  3. CSS写的青色漂亮导航菜单代码
  4. Go-数字签名详解与Rsa数字签名代码
  5. 嵌入式课程---嵌入式Linux的直流电机驱动开发
  6. IntelliJ IDEA Ultimate 安装激活
  7. Day 1.《鸟哥的linux私房菜》
  8. 奇点临近-人工智能的时代已经来了
  9. 罗振宇 知识就是力量之 怎样重新获得别人的信任
  10. 网络通是免费的内网端口映射软件