假设我们正在训练一个神经网络模型来学习从以下输入到输出的映射,其中输出为 Name Entity (东北)。
输入:欧盟拒绝德国抵制英国羔羊的呼吁。
输出:ORG O MISC O O O MISC O O
创建滑动窗口来捕获上下文信息,并将其结果作为 model_input 输入到训练模型中。滑动窗口生成结果如下:
[['<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>
代表句子标记的开头和 </s>
代表句子结束标记,每个滑动窗口对应输出中的一个NE。
为了处理这些标记,使用预训练的嵌入模型将单词转换为向量(例如 Glove),但这些预训练的模型不包括诸如 <s>
之类的标记。和</s>
。我认为 <s>
的随机初始化和</s>
在这里不是一个好主意,因为这种随机结果的规模可能与其他 Glove 嵌入不一致。
问题:
为<s>
设置嵌入有什么建议和</s>
为什么?
最佳答案
一般来说,答案取决于您打算如何在任务中使用嵌入。
我怀疑使用<s>
和</s>
token 由 LSTM 或其他循环神经网络决定,位于嵌入层之后。如果您要自己训练词嵌入,我建议您简单地删除这些标记,因为它们不会增加任何值(value)。开始和停止标记在 LSTM 中确实很重要(尽管并不总是如此),但它们的词嵌入可以是任意的,小的随机数就可以了,因为这个向量与所有“正常”向量的距离相同。
如果您不想弄乱预先训练的 GloVe 向量,我建议您卡住嵌入层。例如,在 tensorflow 中,这可以通过 tf.stop_gradient
来实现嵌入查找之后立即操作。这样网络就不会学习 <s>
之间的任何关系。换句话说,但这完全没问题,任何现有关系都不会改变。
关于machine-learning - NLP - 句子标记的 `start` 和 `end` 的嵌入选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47148247/