如何在Tensorflow 2中使用CRF层(使用tfa.text)?

时间:2019-12-09 21:17:11

标签: python tensorflow deep-learning ner crf

model= Sequential()
model.add(keras.layers.Embedding(vocab_size,output_dim=100,input_length=input_len,weights=[embedding_matrix],trainable=False))
model.add(keras.layers.Bidirectional(keras.layers.LSTM(512, return_sequences=True,recurrent_dropout=0.2, dropout=0.2)))
model.add(keras.layers.Bidirectional(keras.layers.LSTM(512, return_sequences=True,recurrent_dropout=0.2, dropout=0.2)))

model.add(keras.layers.Dense(128, activation="relu"))

model.add(keras.layers.TimeDistributed(keras.layers.Dense(vocab_size_label, activation="softmax")))
model.compile(optimizer=optim,loss='sparse_categorical_crossentropy',metrics=["accuracy"])
model.summary()

我为NER标记建立了Bi-lstm模型,现在我想在其中引入CRF层。我很困惑如何使用Tensorflow插入CRF层

tfa.text.crf_log_likelihood(
    inputs,
    tag_indices,
    sequence_lengths,
    transition_params=None
)

我在tfa.txt中找到了这个,并对此函数有3个查询: 1.如何传递这些论点? 2.我是否必须使用此输出作为编译器中的损失(log_likelihood负数)。 有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

我也在寻找这个解决方案,我猜您应该创建一个自定义类来包装 tfa.text.crf_log_likelihood 方法,然后将其集成到 keras.Sequence 中。

也许像https://github.com/tensorflow/addons/issues/723#issuecomment-559636561

或者更多pytorch风格,像这样https://github.com/saiwaiyanyu/bi-lstm-crf-ner-tf2.0/blob/master/model.py