2021-12-24

 2021SC@SDUSC

在前面的train.py的evaluate_model模块中,引用了Reasoning_AMR_CN_DUAL

模块:

eval_model = Reasoning_AMR_CN_DUAL

下面分析一下models/reasoningCT.PY这个程序中的Reasoning_AMR_CN_DUAL

模块。Reasoning_AMR_CN_DUAL是reasoningCT.PY程序中定义的一个类。

它是基于ACP图的一个描述。

其中定义了一个函数encoder_attn,注意力编码模块。用于计算关联关系的注意力值。

def encoder_attn(self, inp):

        with torch.no_grad():

            concept_repr = self.embed_scale * self.concept_encoder(inp['concept'],

                                                                   inp['concept_char'] + self.concept_depth(

                                                                       inp['concept_depth']))

            concept_repr = self.concept_embed_layer_norm(concept_repr)

            concept_mask = torch.eq(inp['concept'], self.vocabs['concept'].padding_idx)

            relation = self.relation_encoder(inp['relation_bank'], inp['relation_length'])

            relation[0, :] = 0.

            relation = relation[inp['relation']]

            sum_relation = relation.sum(dim=3)

            num_valid_paths = inp['relation'].ne(0).sum(dim=3).clamp_(min=1)

            divisor = (num_valid_paths).unsqueeze(-1).type_as(sum_relation)

            relation = sum_relation / divisor

            attn, attn_weights = self.graph_encoder.get_attn_weights(concept_repr, relation, self_padding_mask=concept_mask)

        return attn

这里调用了graph_transformer.py程序的GraphTransformer类的get_attn_weights方法。下面分析一下。

它通过nn.Module类来定义模型,并计算注意力权值。

      总结一下:到这篇,ACP_CSQA这个项目的学习就告一个段落了,这个学习过程自己接触了很多没有学过的领域,也清楚地知道还有很多东西要学,要深入了解和掌握一个领域的技术不是一件容易的事情,希望自己在今后加油努力。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值