Categories
ml 未分类

我对Embedding的理解

Embedding是NLP中,用来表示一个词的常见的方式。不过,他的用途其实不仅仅可以用在NLP中,在简单的线性回归或逻辑回归中 ———— 进而在神经网络中,也可以使用到这个东西。 我当初在学习Embeding这个概念的时候,花了比较长一段时间才算真正理解。我不知道到底是这个概念本身理解起来就比较难,还是容易遗忘的原因。Anyway,因为这一点,我决定写一篇文章,说说我对Embedding的理解。 在回答什么叫Embedding之前,我们先提出一个问题:给定任意的两个东西,怎么样来衡量他们之间的相似性呢? 举个例子,比如说,牛奶、咖啡和苹果。通常意义下,可能大部分人都会认为“牛奶”和“咖啡”更相似,其他两对组合“牛奶”和“苹果”以及“咖啡”和“苹果”没那么相似。 如果要进一步问为什么,大家可能会说,“牛奶”和“咖啡”都是液体,都是可以喝的,都是常见饮料,都是装在杯子或瓶子里面的等等等等。也就是说,我们会想出某一些角度,或者说一些特征,来衡量他们的相似性。这些“角度”或者说“特征”,我们用稍微显得专业一点的词来说,叫做维度。 如果我们把主要考虑的几个维度简单的列一下,可能会得出以下的一些: 是否食物、是否液体、是否需要人为加工、颜色、味道等等。列出这些维度以后,我们可以给这三个考察对象的每一个维度都分别“打个分”,分配一个数值。如下: 是否食物 是否液体 人为加工 颜色 味道 牛奶 1 1 0.8 -1 1 咖啡 1 1 0.9 -16777216 2 苹果 1 0.2 0.1 -16711936 3 你可能会有疑问,是否食物、是否液体、是否人为加工的数值都是小数,可以理解为“在多大程度上是食物/液体/人为加工”,但是颜色和味道的值怎么理解呢? 在上面的表格中,颜色的值我取得是Java中Color类的WHITE、BLACK、GREEN三个常量的数值。味道的三个值是我随便取得,你可以理解为,我们可以把每一种味道都用一个数字来表示,然后1、2、3分别是代表牛奶、咖啡、苹果的味道的数字。不用过分纠结这里的数字具体是什么值,这里只是举例说明一下原理。 好了,现在我们确定好了这些“维度”,并且给我们的考察对象在每一个维度上面都打了分,那么我们就可以用一个向量来代表我们的一个考察对象了。比如: 牛奶:[1, 1, 0.8, -1, 1] 咖啡:[1, 1, 0.9, -16777216 , 2] 苹果:[1, 0.2, 0.1, -16711936, 3] 每个对象对应的向量,就是表格中对应的那一行。这里的向量,其实就叫一个Embedding。如果要用稍微正式的语言来陈述一下,那就是:一个Embedding,就是用于描述某个实体的一个向量,这个向量里面的每一个值代表这个实体在某个维度上面的“打分”。 在实际使用的过程中,Embedding的生成过程可能跟我们上面讲述的过程不大一样。我们先来看一下PyTorch里面,Embedding的使用是怎么样的。 >>> import […]