Как использовать слой CRF в Tensorflow 2 (используя tfa.text)?

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()

Я построил модель Bi-lstm для тегов NER и теперь хочу добавить в нее слой CRF. Я не понимаю, как я могу вставить слой CRF с помощью Tensorflow

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

Я нашел это в tfa.txt и имею 3 запроса относительно этой функции: 1. Как передать эти аргументы? 2. Должен ли я использовать вывод этого как потерю (отрицательное значение log_likelihood) в компиляторе. Может ли кто-нибудь помочь мне в этом?


person Ankush Panwar    schedule 09.12.2019    source источник


Ответы (1)


Я тоже ищу это решение, и я думаю, вам следует создать собственный класс, чтобы обернуть метод 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

person Harbor    schedule 06.01.2021