词汇表特征
有一个词典,里面有10000个单词。使用one-hot的表示方法,每个单词的表示向量有10000个元素,单词对应的位置为1,其他位置为0。比如,单词”Man”在词典的5391位,那么”Man”的表示向量为 ⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢0⋮1⋮0⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥ [ 0 ⋮ 1 ⋮ 0 ] ,”1”在第5391位。
这样表示单词有一个缺点,就是去掉了单词之间的相关性。假设模型学会了”I want a glass of orange (juice)”,但是却不会填”I want a glass of apple (?)”,因为模型不知道”orange”和”apple”是同一类的单词。
词嵌入法使用特征化表示向量,称为嵌入向量,比如
- | Man | Woman | King | Queen | Apple | Orange |
---|---|---|---|---|---|---|
Gender | -1 | 1 | -0.95 | 0.97 | 0.00 | 0.01 |
Royal | 0.01 | 0.02 | 0.93 | 0.95 | -0.01 | 0.00 |
Age | 0.03 | 0.02 | 0.7 | 0.69 | 0.03 | -0.02 |
Food | 0.04 | 0.01 | 0.02 | 0.01 | 0.95 | 0.97 |
纵轴表示单词的某种特征性质。比如”Man”和”Woman”有性别特征,第一栏的数值的绝对值比较大。”King”和”Queen”有性别与高贵的特征和年龄,对应的数值的绝对值接近1。”Apple”和”Orange”是食物,食物一栏的数值绝对值接近1。其他与单词不相关的特征对应的数值都比较小,接近0。通过特征化,每个单词都使用特征向量来表示。
假设单词的特征向量高达3000维,使用映射算法把3000维的向量映射为2D的向量,把单词的特征向量可视化,如下图:
可以看到,词性相近的单词都靠得比较近,比如”man”和”woman”靠在一起,水果”apple”,”grape”和”orange”靠得比较近。
这种方法叫做词嵌入法,因为相当于把单词嵌入到n维的坐标系中(n是特征向量的长度)。
使用词嵌入
使用词嵌入模型需要非常大的数据集(1B-100B个单词)。可以使用迁移学习来训练得到词嵌入模型。第一步,从一个非常大的语料库中学习词嵌入模型,可以从网上找已经训练好的词嵌入模型,或者从网上下载免费的语料库,自己训练词嵌入模型。第二步,把词嵌入模型迁移到自己的任务中,比如词嵌入模型使用的特征向量长10000个单词,自己的训练数据使用的特征向量长300个单词,需要做一些转换。第三步,根据自己的训练集的大小决定是否对词嵌入模型进行微调。
词嵌入特性
Man | Woman | King | Queen | Apple | Orange |
---|---|---|---|---|---|
Gender | -1 | 1 | -0.95 | 0.97 | 0.00 |
Royal | 0.01 | 0.02 | 0.93 | 0.95 | -0.01 |
Age | 0.03 | 0.02 | 0.7 | 0.69 | 0.03 |
Food | 0.04 | 0.01 | 0.02 | 0.01 | 0.95 |
观察上面的单词特征,使用 eman e man 表示”Man”的特征向量,使用 ewoman e woman 表示”Woman”的特征向量,使用 eking e king 表示”King”的特征向量,使用 equeen e queen 表示”Queen”的特征向量。如果”Man”对应”Woman”,那么”King”对应什么呢?即 eman−ewoman≈eking−e? e man − e woman ≈ e king − e ? ?
eman−ewoman≈⎡⎣⎢⎢⎢−2000⎤⎦⎥⎥⎥ e man − e woman ≈ [ − 2 0 0 0 ] 。 eking−equeen≈⎡⎣⎢⎢⎢−2000⎤⎦⎥⎥⎥