当嵌入层的词汇量大于训练中使用的文本语料库时会发生什么?

数据挖掘 神经网络 喀拉斯 nlp 张量流 词嵌入
2022-01-26 11:02:57

完全披露此问题基于以下本教程:https ://tinyurl.com/vmyj8rf8

我试图完全理解 Keras 中的嵌入层。想象一下,有一个网络可以尝试将基本情绪分析理解为二元分类器(1 个正面情绪和 0 个负面情绪)。玩具数据集如下:

# Define 10 restaurant reviews
reviews =[
          'Never coming back!',
          'horrible service',
          'rude waitress',
          'cold food',
          'horrible food!',
          'awesome',
          'awesome services!',
          'rocks',
          'poor work',
          'couldn\'t have done better'
]#Define labels
labels = array([1,1,1,1,1,0,0,0,0,0])

该数据可用于训练一个非常简单的网络,如下所示:

Vocab_size = 50
model = Sequential()
embedding_layer = Embedding(input_dim=Vocab_size,output_dim=8,input_length=max_length)
model.add(embedding_layer)
model.add(Flatten())
model.add(Dense(1,activation='sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['acc'])
print(model.summary())

为了将此数据输入网络,我们可以使用 Keras one_hot 对其进行热编码,如下所示:

encoded_reviews = [one_hot(d,Vocab_size) for d in reviews]
print(f'encoded reviews: {encoded_reviews}')

我们得到以下输出:

encoded reviews: [[14, 45, 43], [8, 2], [6, 43], [24, 1], [8, 1], [11], [11, 21], [16], [34, 40], [2, 25, 36, 15]]

我知道设置 Vocab_size = 50 的目的,即使语料库中只有大约 20 个唯一单词,也是为 one_hot 后面的哈希算法提供足够大的哈希空间,以避免文本编码时发生冲突。

如果我在这些词上训练模型(假设固定长度输入和填充),然后得到嵌入层的权重:

print(embedding_layer.get_weights()[0].shape)

(50, 8)

我们可以看到这是一个由 50 个向量组成的数组,如下所示:

[ 0.17051394 0.13659576 -0.05245572 -0.12567708 0.06743167 0.05893507 -0.14506021 0.06448647]

我的理解是,这些向量中的每一个都对应于语料库中每个词的词嵌入。但是,如果语料库中只有 20 个唯一词,并且 Vocab_size 设置得比这个大,那这不完全正确吗?如果 Vocab_size > corpus_vocab_size,那么这些嵌入代表什么?任何帮助,将不胜感激。

1个回答

tf.keras.layers.Embedding(..., embeddings_initializer="uniform" *,..., * kwargs)

  • 所有权重都使用 init 策略初始化
  • 所有人都使用反向传播学习最佳值
  • 没有输入的权重每次都会有零输出,因此没有学习。
  • 因此,这些额外的权重将保持在它们的初始值


您可以在之前和之后检查这些额外的重量。

weight = model.layers[0].get_weights() # Save before training
history = model.fit(x, y)

# These two should be same
weight[0][-1]  # Last weight - Before
model.layers[0].get_weights()[0][-1] # Last weight - After