导读:如果要总结深度学习大获成功的原因,那至少有两样东西必须入选:一样当然是很“深”的神经网络模型,这也是深度学习的“深度”的由来,另一样就是Embedding。

在深度学习中,Embedding是个很重要的概念,甚至可以说,如果要总结深度学习大获成功的原因,那至少有两样东西必须入选:一样当然是很“深”的神经网络模型,这也是深度学习的“深度”的由来,另一样就是这个Embedding。

所以我非常期待,Embedding的专著当然有必要读一读。可是,为什么市面上专门写Embedding的书这么稀缺呢?我想,这是因为要清楚介绍Embedding,刚动笔就会遇到一个很大的问题。

我们说深度学习模型效果拔群,但是缺点和优点同样突出:坏就坏在可解释性差。很多地方光知道用深度学习模型就能效果拔群,但很难解释为什么拔群,这就是深度学习一直深受学术界诟病的黑箱问题。要害部门不敢用深度学习,就是因为在原理上说不清楚。

那Embedding有什么问题呢?Embedding的问题是让黑箱问题雪上加霜。

对深度学习来说,Embedding很像一种催化剂,在两个方面将深度学习推向极致:效果更好,但同时也更为解释不清。我自问没有作者这般的本事,更不可能用一篇小文就说清楚Embedding是什么,不过我想,经验我还是有一些的,可以把来龙去脉给大家捋一捋,也许能有助于理解。

词嵌入

Embedding是英文,这是废话,但它的准确中译应该是什么呢?Embedding直译为“嵌入”,但是它的应用领域很广,直接叫“嵌入”会很拗口,而且意思也不清楚,容易让人摸不着头脑。倒是在Embedding的龙兴之地NLP(自然语言处理),让Embedding经过积年累月,终于固定了一个中译名称,叫词嵌入。

词嵌入也是个非常重要的概念,特别是在NLP领域。了解深度学习的同学应该已经很熟悉:现在用深度学习模型做NLP,肯定离不开这个词嵌入,基本上NLP工作的第一步,就是花式得到词嵌入。

那么,词嵌入是什么意思呢?

早些的时候,也就是词嵌入还没成为标配的时候,NLP就已经是深度学习甚至更广一点的用机器学习最重要的问题领域之一。但是大家也都知道:甭管深度学习还是机器学习,模型本身是不认字的,也就是不能把字符直接输入进去。模型只认数字。甭管是中文汉字还是英文字符,你都得想办法先转成数字才能输进模型里面去,这叫“向量化”。

那具体怎么办呢?方法不是唯一的,在深度学习这边用的比较多的叫One-Hot编码,有人翻译为“独热编码”,具体实现也简单,假设语料里面有n个词,那么就搞个n维的向量,每一个词都用单独的一维来表示,有这个词对应的维度就置1,否则为0。

譬如说我们的语料就是“Hello World”,这里有“Hello”和“World”两个词,那么要输入“Hello”就可以用[1,0]来表示,而输入“World”则可以用[0,1]来表示。那要输入的就是“Hello World”呢?既然两个词都有,都置为1就行了,也就是[1,1]。

有一点要注意的是:英文本身就是一个词一个词地组成句子和文章,词与词之间天然有空格等分割符分开,所以直接就可以进行One-Hot编码。但是中文不行,中文虽然也有“词”,但是并没有天然的分隔符,所以中文做NLP多了一个“分词”阶段,也分成一个个带空格的词,然后才能进行One-Hot编码。

One-Hot编码方法简单,而且文本经过编码处理后,就能毫无障碍地输进模型,是一种很常用的文本向量化方法。但缺点也很明显,那就是太稀疏了。

“稀疏”和“稠密”是深度学习经常使用的两个术语,什么叫“稀疏”呢?说人话就是有非常多的0,譬如说上千维的向量,只有十来个是1,其它都是0。

这一点很好理解,汉语和英语的常用词大概都在2000到3000这个范围之内,一般规模大点的语料集都会包含大部分的常用词,按照One-Hot编码一个词一个维度的办法,那向量肯定就得有两、三千个维度,但是一条句子了不起也就二十来个词,就算都没有重复,那能置位为1的也就二十来个,剩下的全都是0,当然就稀疏了。

稀疏坏处很多,占空间大不说,处理难度还高,更重要的是,大部分的内容纯粹就是有了没用但没了又不行,没啥实际信息量,很多有用的信息反而又没包含进去。所以,大家肯定就想把这些稀疏的词向量变得更加稠密,那么词嵌入就是其中取得成功的一条路子。

表示学习

词嵌入同样也是向量,不过和One-Hot编码不同的是,One-Hot编码得到诸如[0,0,0,1,0,1,1,00,0,00,0,0]这样的向量,而词嵌入更为“稠密”,也就是相比之下维度更低,同时每个维度基本都是非0取值,譬如[-0.517,2.1869,1.0442]。

得到词嵌入的方法有很多,但是核心目标可以归结为两个字:表示。

什么叫“表示”呢?前面我们说,文本是没法直接输进模型的,首先得向量化,把文本变成数字。不过,这只是起步,最终的目标是向量化后得到的数字,能够完好地保持了文本所包含的信息。用我们的话说,也就是希望得到的文本特征向量,能够表示文本的“意思”。

“你懂我意思吧?”对,就是那个说不清道不明,但是又能让人秒懂的那个“意思”。我们就是希望得到的词嵌入能表示这个意思,表示就是这么来的。这个过程被称为表示学习。

表示的英文是representation,也有译作“表征”,如果你在文献里看到表示学习或者表征学习, 不要疑惑,这俩就是一回事。具体是怎么回事呢?简单来说就是通过表示学习,得到上面所说的,能够表示文本“语义”的词嵌入。

可是,语义到底是什么?

譬如说上面写了这么多字,“语义”到底是什么?有标准答案吗?关键是,能量化成向量吗?现在大家应该都懂为什么前面说Embedding这个话题不好写,就是因为意思就是那个意思,但究竟是什么意思呢?不好意思,不知道是什么意思。

所以理所当然,词嵌入绝不是一条未敢设想的道路,相反,学界早有无数的人在脑海里闪现过类似的火花,可是这条路注定铺满荆棘,就连人类智能在考试都尚且要分客观题和主观题,更何况人工智能呢?在我们普通人的认知里,语义和可量化应该是这个世界上距离最远的两个词,直到Word2Vec横空出世。

Word2Vec

谈Embedding,谈词嵌入,就不可能不谈Word2Vec,Word2Vec是词嵌入的一块当之无愧的里程碑。Word2Vec不仅仅只是提出一种技术,而是开创了一种全新的可能,令深度学习模型在NLP上面有了无限的遐想空间,一切都要从下面这条不可能的等式说起:皇帝-男人=皇后-女人

这条等式太不可思议了,我用文字读一次:皇帝减去男人等于皇后减去女人。

毫无疑问,从数学的角度看,这是一段极为简单的四则运算式,但是含义一点也不简单。皇帝减去男人是什么意思?不知道,说不清楚。那皇后减去女人又是什么意思?不知道,也说不清楚。但是你说皇帝减去男人等于皇后减去女人,一想好像也确实符合常识。

Word2Vec还更进了一步,提出了语义空间的概念。在语义空间里面,皇帝和男人的距离,应该就等于皇后和女人的距离。把抽象的语义,变成了可以度量的具体空间。

这样处理有很多好处。不但把抽象的概念具象化了,更重要的是,许多现成的数学工具就能马上派上用场,估计发明这些数学工具的作者,无论如何也想不到能在语义上派上用场。

Word2Vec对机器学习也带来许多好处。许多传统的机器学习模型,譬如说聚类模型,本来很难蹭进NLP的圈子里的,One-Hot编码出来的结果虽然也叫“向量化”了,但特别不适合做聚类,不过现在有了Word2Vec,马上枯木逢春,也能有了用武之地。

前面说Word2Vec是一块里程碑,我感觉更像一扇门,或者叫“脑洞”也不无不可,一旦打开了,后面玩法就喷涌而出。这倒不是之前的人们缺乏想象力,而是缺乏好用的文本向量化工具,最后没法得到有意义的效果。而现在有了Word2Vec,就等于有了效果倍增器,很多模型做出了可用的结果,深度学习做NLP真的就是如虎添翼。

Word2Vec效果很好,学术界当然也得包装一下,至少得建立一个符合人们日常直觉的概念解释这件事。既然我们假设语义是有个“语义空间”这么个玩意,而最终得到的结果又是条向量,那么我们是不是可以这样理解:这条Word2Vec用来表示某个词的向量,实际上是这个词的意思,“嵌入”进了语义空间。嵌入英文就是Embedding,这就是Embedding的由来,而得到的向量也称作Word Embedding,也就是我们一直在说的词嵌入。

好了,以下是真心话大冒险的时间。如果你读完上面这段话觉得完全不知所云,不要怀疑自己,错的一定不是你。学术界对于Embedding确实就是上面这段话,也读过很多版本的解释,但始终有种挥之不去的“你懂我意思吧”的感觉。

我觉得Embedding针对的就是那种解释不清的、很抽象的“感觉”的问题,原理自然没法清楚解释,虽然学界给出了一个“你懂我意思吧”的解释,但我是真的没懂,也许学界也是似懂非懂,只不过看在Embedding效果确实不错的份上,大家也都默认罢了。

Embedding

Word2Vec疗效显著,也让Embedding这个概念大放异彩,很多领域其实都存在“你懂我意思吧”的需求,譬如说推荐算法。以前我介绍推荐算法,说推荐算的核心就是“以此类推”四个字,你喜欢物品A,那你大概率也会喜欢和物品A很类似的物品B,所以推荐算法有个很重要的环节,叫相似度计算。

但是有一个问题,怎么知道物品A和物品B很类似呢?这个问题这个简单,物品A和物品B是同一类东西,所以说类似。但是,这里的“东西”究竟是个什么东西?和前面的意思一样,都很抽象,或者干脆只能说是一种很微妙的感觉。但是要进行计算,就必须量化。

是不是觉得这个需求似曾相识?没错,这正是表示学习研究的领域,不过已经不是NLP领域了,叫Word Embedding肯定不合适,那好,干脆直接就叫Embedding。

不过还有个问题。这里还是Embedding,解释逻辑也还是前面的“嵌入空间”,可是“语义空间”可没法照搬?怎么办呢?学界这里发挥了极强的创造力:前面我们不是说Word2Vec还有个语义空间的概念吗?空间是好东西,可是继续叫“语义”不合适,那我们就换个一劳永逸的名字,叫“隐空间”(Latent Space)。

别小看隐空间,这可是个伟大的发明,现在深度学习凡是解释不通的东西,统统都丢进隐空间里面去了,连看似八竿子打不着的GAN都用了这个概念。至此,Embedding也完成了概念的抽象化,彻底摆脱了NLP的背景,从一项技术,变成了一条道路,Embedding和表示学习,或者叫表征学习,成为了深度学习的主线剧情。

Embedding的内容还有很多,得到Embedding的方法也一直在没有止息地演进,当初的Word2Vec已经成了明日黄花,3年前演化出来的Transformer已经成为NLP领域无可撼动的霸主,最近正展现出一统江湖的野心。想了解这些内容,推荐阅读《深入浅出Embedding》。

关于作者

莫凡,网名木羊同学。娱乐向机器学习解说选手,《机器学习算法的数学解析与Python实现》作者,前沿技术发展观潮者,擅长高冷技术的“白菜化”解说,微信公众号“睡前机器学习”,个人知乎号“木羊”。

《Python深度学习:基于PyTorch》

推荐理由:业内公认的深度学习入门实战好书!资深AI专家20余年工作经验总结,从工具、技术、算法、实战4个维度全面讲解深度学习,重点突出、循序渐进、用图说话,配全套代码、数据和学习PPT、作者答疑群!

声明:本文转自“华章计算机”公众号

每日一书丨终于有人把Embedding讲明白了相关推荐

  1. 终于有人把Embedding讲明白了

    导读:如果要总结深度学习大获成功的原因,那至少有两样东西必须入选:一样当然是很"深"的神经网络模型,这也是深度学习的"深度"的由来,另一样就是Embedding ...

  2. 终于有人把“人工智能”讲明白是怎么回事了!

    我们正站在变革的边缘,而这次变革将和人类的出现一般意义重大 – Vernor Vinge.如果你站在这里,你会是什么感觉? 看上去非常刺激吧?但是你要记住,当你真的站在时间的图表中的时候,你是看不到曲 ...

  3. 终于有人把赌徒谬误讲明白了

    导读:有个 倒霉孩子 打工人叫小明,去年的五一.端午.十一和今年的清明假期,小明都被老板叫去加班了.如今,老板还是那个老板,小明还是那个小明.小明却想,我都中枪那么多次了,今年五一总该轮不到我了吧? ...

  4. 终于有人把数据仓库讲明白了

    作者:彭锋 宋文欣 孙浩峰 来源:大数据DT(ID:hzdashuju) 数据仓库是一个面向主题的.集成的.随时间变化但信息本身相对稳定的数据集合,用于支持管理决策过程.数据仓库的主要功能如下: 建立 ...

  5. 终于有人把SaaS讲明白了

    导读:本文通过回顾SaaS的演进过程,帮助读者了解SaaS如何从一种服务托管技术和按需使用模式,发展成为今天企业服务的主流形式. 作者:代珂 来源:大数据DT(ID:hzdashuju) 01 Saa ...

  6. 终于有人把大数定律讲明白了

    导读:在一些情况下,概率是由频率推导而来的,要得到可信的概率,就要大量重复地试验.而且,重复试验的次数越多,结论就越让人信服.那么,为何人们直觉上更愿意相信从大数据中得到的统计结果,而不是从小数据中得 ...

  7. 终于有人把线性回归讲明白了

    来源:大数据DT本文约1900字,建议阅读5分钟 本文将介绍什么是回归问题.解决回归问题的基本思路步骤和用机器学习模型解决回归问题的基本原理,以及如何用线性模型解决回归问题. 00 线性回归:&quo ...

  8. 终于有人把数据挖掘讲明白了

    01 什么是数据挖掘 数据挖掘(Data Mining)应该是一门大家都听说过,但又不太容易说清楚的课程.在数据科学领域,乃至在更大的计算机科学领域,数据挖掘就好比山东蓝翔,大家不一定都知道挖掘机要怎 ...

  9. 终于有人把线性回归讲明白了!

    我是小z 这篇文章将介绍什么是回归问题.解决回归问题的基本思路步骤和用机器学习模型解决回归问题的基本原理,以及如何用线性模型解决回归问题. 00 线性回归:"钢铁直男"解决回归问题 ...

最新文章

  1. 烟雾检测电路c语言程序,烟雾报警器电路图大全(六款模拟电路设计原理图详解)...
  2. idea中使用docker插件部署项目
  3. Mysql使用trigger触发器说明
  4. EOS账户系统(2)账户和钱包
  5. [Hadoop in China 2011] 邵铮:揭秘FaceBook Puma演变及发展
  6. matlab 1 3倍频分析,[转载]1/3倍频程及Matlab程序实现
  7. 红橙Darren视频笔记 利用阿里巴巴AndFix进行热修复
  8. RabbitMQ学习之队列监控
  9. Ranorex中Global变量的使用
  10. zabbix通过skype发送报警消息之切换平台
  11. 物资仓库管理软件分析
  12. 【CPM同步】连续相位调制(CPM)通信调制方法的载波同步和定时同步研究和matlab仿真
  13. android集成sdk 马甲包,Android配置马甲包
  14. 重走民宿发展路:民宿十年 大浪淘沙始见金
  15. ISO8583报文工具类(组装和解析报文)
  16. 记录一次C语言调用go生成的动态库的踩坑过程
  17. 用谷歌浏览器检查功能实现精灵图
  18. 分享Python采集99个VB源码,总有一款适合您
  19. 服务器连接硬盘出错,IBM服务器硬盘常见问题与故障诊断
  20. 转发:IT行业中的甲方乙方关系

热门文章

  1. Unity 让物体同时播放两种动画
  2. Jupyter Notebook使用-如何设置代码单元启用自动换行
  3. Linux下查看某一个程序运行所占用的内存
  4. 调用API让声卡发出声音
  5. parameterdirection和direction的问题
  6. 端口被占用的原因及解决办法
  7. FPGA作业_阶段一(六进制计数器仿真6-9进制循环计数器)
  8. 内存模块与计算机兼容,Win10 2004与 Intel Optane内存模块不兼容 附解决方法
  9. java计算机毕业设计流浪狗领养系统MyBatis+系统+LW文档+源码+调试部署
  10. Mybatis 注解开发 + 动态SQL