Bootstrap

终于有人把Embedding讲明白了

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

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

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

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

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

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

01

词嵌入

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编码方法简单,而且文本经过编码处理后&#

;