我正在尝试使用 TensorFlow 中的 LSTM 层改进 NER Bert 序列标记器。我对接口以及如何设置 LSTM 层有点不清楚。
目前,我正在输入 3-5 个句子并输出一个 shape 层
(?, 5, max_token_length,token_vector_output)。我想考虑我要标记的下一个序列的前一句输出。
将上面(?, 5, max_token_length*token_vector_output)的内容重新整形,然后我们可以应用一个 tf.keras.layers.LSTM 层,但这会产生一个形状张量(?, unit_size)这似乎会杀死所有序列数据。这是将我的数据提供给 LSTM 层的正确方法吗?
作为更新,我想我找到了解决方案 - 如果这不是构建网络的正确方法,请告诉我。
LSTM 会(?, unit_size)定期输出一个张量——但这是 LSTM 层的当前状态。使用该return_sequences=True参数,它将改为返回一个 shape 的张量(?,sequence_length, unit_size),这是内部状态的历史。
在我的例子中,我将构建(?, 5 * max_token_length, token_vector_output)LSTM 层的输入,返回一个(?, 5 * max_token_length, unit_size)张量。取max_token_length轴 1 上的最后一个,我将在我标记的句子中得到状态。我的 logits 将是这个状态张量和该句子的常规顺序 Bert 输出的加权和,并且应用 softmax 将给出最终标签!