机器学习实战(第二版)读书笔记(5)——Embedding

一、使用范围(作者经验):

  • 类别 < 10 通常采用独热编码方式。
  • 类别 > 50( 通常这种情况需要使用哈希桶),通常最好使用嵌入。
  • 10 - 50 可以尝试两种方式,选择最优。

目的:同义词具有非常接近的嵌入(将嵌入向量当作嵌入空间中的坐标,则同义词在嵌入空间中对应的点挨得近,差别越大的词对应的点挨得越远)

二、举例:

如果计算King-Man+Woman(添加和减去这些单词的嵌入向量),则结果非 常接近Queen单词的嵌入(见图1)。换句话说,词嵌入编码了性别的概念!同样,可以计算Madrid-Spain+France,其结果接近Paris(巴黎),这似乎表明首都的概念也在嵌入中进行了编码。也就是说embeding向量可以唯一表示为嵌入空间中的一个点,它是有意义的。

图1:相似词的词嵌入趋于接近,且似乎编码了有意义的概念

补充:

表征学习:对输入数据表征越好,神经网络就越容易做出准确的预测,因此训练使嵌入成为类别的有用表征。

三、代码

Keras提供了一个keras.layers.Embedding层来处理嵌入矩阵(默认情况下是可训练 的)。创建层时,它将随机初始化嵌入矩阵,然后使用某些类别索引进行调用时,它将返回相应的行。下面是一个简单的应用——将数据用一个1*3的向量表示。

tf.keras.layers.Embedding()使用:tf.keras.layers.Embedding() 详解

代码:
vocab = tf.constant([1,1,2])
embedding = tf.keras.layers.Embedding(max(vocab)+1, 3)
embed = embedding(vocab)
print(embed)

输出:
tf.Tensor(
[[ 0.03242571  0.03685233  0.0223361 ]
 [ 0.03242571  0.03685233  0.0223361 ]
 [ 0.01391158  0.00046493 -0.00371295]], shape=(3, 3), dtype=float32)

猜你喜欢

转载自blog.csdn.net/qq_42018521/article/details/128849741