作者:时尚淘宝交__流站 | 来源:互联网 | 2023-08-25 15:44
我正在尝试在TensorFlow顺序模型中实现NER问题的CRF层。我不确定该怎么做。之前,当我实现CRF时,我使用了来自tensorflow作为后端的keras的CRF,即我在keras中创建了整个模型而不是tensorflow,然后将整个模型传递给了CRF。有效。
但是现在我想在Tensorflow中开发模型,因为tensorflow2.0.0 beta已经内置了keras,因此我试图构建一个顺序层,并在双向lstm层之后添加CRF层。尽管我不确定该怎么做。我在tensorflow-addons中浏览了CRF文档,它包含不同的功能,例如正向CRF等,但不确定如何将它们实现为一层吗?我想知道是否可以在顺序张量流模型中实现CRF层,还是我需要从头开始构建模型图然后使用CRF函数?任何人都可以帮我。预先感谢
在培训过程中:
您可以参考this API:
tfa.text.crf_log_likelihood(
inputs,tag_indices,sequence_lengths,transition_params=None
)
输入是一元电势(就像在逻辑回归中一样,您可以参考this answer),在这种情况下,它们是对数(通常不是softmax激活后的分布)功能)或BiLSTM编码器中每个字符的状态(上图中的P1,P2,P3,P4;)。
tag_indices是目标标签索引,而sequence_lengths代表批次中的序列长度。
transition_params是二进制电位(也是标记如何从一个时间步转换到下一个时间步),您可以自己创建矩阵,也可以让API为您完成。
在推理过程中:
您只需利用this API:
tfa.text.viterbi_decode(
score,transition_params
)
分数代表与训练中相同的输入(P1,P2,P3,P4状态),并且transition_params也在训练过程中进行训练。