美文网首页
NLP关系抽取:PCNN(部分代码分析)

NLP关系抽取:PCNN(部分代码分析)

作者: 来到了没有知识的荒原 | 来源:发表于2021-11-26 22:09 被阅读0次

    这个链接中的实现就是PCNN
    https://github.com/zjunlp/DeepKE/blob/main/tutorial-notebooks/re/standard/tutorial.ipynb

    其中对piece wise max pooling这一步的实现(使用broadcast机制)很巧妙。

    out = out.unsqueeze(-1)  # [B, L, Hs, 1]
    pcnn_mask = x['pcnn_mask']
    pcnn_mask = self.pcnn_mask_embedding(pcnn_mask).unsqueeze(-2)  # [B, L, 1, 3]
    out = out + pcnn_mask  # [B, L, Hs, 3]
    out = out.max(dim=1)[0] - 100  # [B, Hs, 3]
    out_pool = out.view(out.size(0), -1)  # [B, 3 * Hs]
    out_pool = F.leaky_relu(self.fc_pcnn(out_pool))  # [B, Hs]
    out_pool = self.dropout(out_pool)
    

    out = out + pcnn_mask就是相当于下面的操作

    再按每个seg维度进行max操作,就只有那个seg维度上的max值被保留了。就相当于论文图中求出了每个seg的maxpooling,而且也自然而然地concat在了一起,然后再减去100,恢复到原来的分布。

    相关文章

      网友评论

          本文标题:NLP关系抽取:PCNN(部分代码分析)

          本文链接:https://www.haomeiwen.com/subject/nunxxrtx.html