我试图在TensorFlow顺序模型中实现一个CRF层,以解决NER问题。我不知道该怎么做。以前,当我实现CRF时,我使用以tensorflow为后端的keras中的CRF,即我在keras中创建了整个模型,而不是tensorflow,然后通过CRF传递整个模型。啊,真灵。
但是现在我想在Tensorflow中开发模型,因为Tensorflow 2.0.0 beta已经内置了keras,我正在尝试构建一个顺序层,并在双向lstm层之后添加CRF层。虽然我不知道该怎么做。我已经看过tensorflow加载项中的CRF文档,它包含不同的功能,如前向CRF等,但不确定如何将它们作为一个层来实现?我想知道在顺序的tensorflow模型中是否有可能实现CRF层,还是需要从头开始构建模型图,然后使用CRF函数?有人能帮我一下吗。提前感谢
发布于 2020-04-18 05:16:13

在培训过程中:
您可以参考这个API:
tfa.text.crf_log_likelihood(
inputs,
tag_indices,
sequence_lengths,
transition_params=None
)输入是一元势(就像logistic回归中的那样,您可以参考这个答案),在这里,它们是逻辑(通常不是softmax激活函数之后的分布)或编码器中每个字符(上图中的P1、P2、P3、P4 )的状态;
tag_indices是目标标记索引,sequence_lengths表示批处理中的序列长度。
transition_params是二进制势(也是标记从一个时间步骤转换到另一个时间步骤的方式),您可以自己创建矩阵,也可以让API为您创建矩阵。
在推理过程中的
你只要利用这个API
tfa.text.viterbi_decode(
score,
transition_params
) 分数代表着与训练相同的输入( P1,P2,P3,P4状态),transition_params也是在训练过程中训练的。
https://stackoverflow.com/questions/59019290
复制相似问题