machine-learning - NLP - 句子标记的 `start` 和 `end` 的嵌入选择

标签 machine-learning nlp deep-learning word2vec word-embedding

假设我们正在训练一个神经网络模型来学习从以下输入到输出的映射,其中输出为 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/

相关文章:

azure - 如何在 Azure 机器学习上运行 EAST/自定义 pytorch 代码?

azure - 如何在 Azure ML Studio Notebook 中访问自定义 Azure 注册的 ML 模型

python - 使用机器学习对大文本进行分类

python - 具有两个特征的梯度下降计算特征空间

nlp - 获取不正确的 POS 标签

deep-learning - Transformer - 注意力就是你所需要的 - 编码器解码器交叉注意力

python - 绘制带有 NP block 的扁平 NLTK 解析树

machine-learning - 层归一化层中的 beta 和 gamma 参数的形状是什么?

neural-network - 用于时间序列预测的深度学习神经网络

python - 如何在 Pytorch 中实现 dropout,以及应用在哪里