数字与图像/自然语言之间的相互映射
数字与图像的相互映射很容易理解。我们可以把一张矩形的图分解为许多正方形,这样一来,每个正方形都只有一种颜色,而不同的颜色可以用不同的数字来表示,于是,一张矩形图片就可以用许多排列整齐的数字来表示。反过来,我们也可以把许多排列整齐的数字转化为肉眼可辨识的图片。而这其中的正方形与正方形里面的数字,就是我们所说的“像素”。
数字与自然语言之间的相互映射则相对抽象。因为文字形式本身的唯一特点就是“差异”,所以要用数字表示文字,最容易想到的就是类比身份证,用一连串长度相同的数组来表示各个文字。比如,“我姓陈,不姓王”这句话中,一共有6个字,但2个“姓”是同一个字,所以有5种字,那么就用长度为5的数组去表示各个文字:
我:[1,0,0,0,0]
姓:[0,1,0,0,0]
陈:[0,0,1,0,0]
不:[0,0,0,1,0]
王:[0,0,0,0,1]
就像人有身份证一样,每个文字也有其对应的数组(或者说,向量)。然后反过来,又可以根据数组来反推出对应的文字。
但这里有一个问题:图像用数字表示不难理解,因为对于一个特定的“小正方形”而言,其颜色强度是确定的,因此,可以把不同强度的颜色用不同的数字来准确表示。
然而,文字呢?文字的含义如何通过数字来表示?
比如,“吃”和“饭”两个字经常搭配使用,那么,按理来说,当我们用数字去表示这两个文字时,数字就应该突显出对应的规律,而不只是许多个毫无规律的数字搭配在一起。
所以,在给文字配备“身份证”时,我们需要额外的设计。
首先,在设计前,我们要接受一个假设:某个字词的含义由它周围的字词决定。
这和我们做英文阅读题时很像。做阅读题时,不是有那种根据上下文猜测对应表粗单词的含义的题型吗?其实就是这个假设的很好的映证。
不妨再具体地举一个例子:有两句话,一句是“我吃饭”,另一句是“我恰饭”。那么,即使我们不知道“吃”和“恰”是什么意思,但根据他们两个上下文都是“我”和“饭”,不难推断出,“吃”和“恰”的含义应该是差不多的。
“某个字词的含义由它周围的字词决定”,我们把这个假设命名为分布式假设(distributional hypothesis)
好,既然接受了分布式假设,我们来看如何根据这个假设为文字配备身份证。
现在,我们选定一篇文章,文章里有许多文字,对吧?我们把这些文字一个一个拎出来,单独观察每个文字左右有些什么文字。
比如,在“别阻拦我吃饭喝汤”这句话中,我们拎出“吃”这个字,发现其左边有“别阻拦我”,右边有“饭喝汤”。然后,为了统一和方便,我们需要决定留下左右多少范围内的文字。简单起见,我们定为1,也就是说,我们只看拎出的文字的左边1个文字和右边1个文字,也就是“我”和“饭”。