NLP - 句子标记的“开始”和“结束”的嵌入选择

NLP - Embeddings selection of `start` and `end` of sentence tokens

假设我们正在训练一个神经网络模型来学习从以下输入到输出的映射,其中输出是 Name Entity (NE)。

输入: 欧盟拒绝德国抵制英国羊肉的呼吁。

输出:ORG O MISC O O O MISC O O

创建滑动 window 以捕获上下文信息,并将其结果作为 model_input 输入到训练模型中。滑动window生成结果如下:

 [['<s>', '<s>', 'EU', 'rejects', 'German'],\
 ['<s>', 'EU', 'rejects', 'German', 'call'],\
 ['EU', 'rejects', 'German', 'call', 'to'],\
 ['rejects', 'German', 'call', 'to', 'boycott'],\
 ['German', 'call', 'to', 'boycott', 'British'],\
 ['call', 'to', 'boycott', 'British', 'lamb'],\
 ['to', 'boycott', 'British', 'lamb', '.'],\
 ['boycott', 'British', 'lamb', '.', '</s>'],\
 ['British', 'lamb', '.', '</s>', '</s>']]

<s>表示句首token,</s>表示句尾token,每滑动一次window对应输出一个NE。

为了处理这些标记,使用预训练的嵌入模型将单词转换为向量(例如 Glove),但这些预训练模型不包括 <s> 和 [=12= 等标记].我认为 <s></s> 的随机初始化在这里不是一个好主意,因为这种随机结果的规模可能与其他 Glove 嵌入不一致。

问题: 为 <s></s> 设置嵌入的建议是什么?为什么?

一般来说,答案取决于您打算如何在任务中使用嵌入。

我怀疑 <s></s> 标记的使用是由嵌入层之后的 LSTM 或其他递归神经网络决定的。如果你要自己训练词嵌入,我建议你简单地去掉这些标记,因为它们不会增加任何价值。开始和停止标记在 LSTM 中很重要(尽管并非总是如此),但它们的词嵌入可以是任意的,小的随机数就可以了,因为这个向量与所有 "normal" 个向量的距离相同。

如果您不想弄乱预训练的 GloVe 向量,我建议您冻结嵌入层。例如,在 tensorflow 中,这可以通过 tf.stop_gradient op 在嵌入查找之后立即实现。这样网络就不会学习 <s> 和其他词之间的任何关系,但它完全没问题,任何现有关系都不会改变。