N_Gram_Graph论文

N_Gram_Graph论文

简要概述:

这篇论文简要叙述了利用自然语言处理中n_gram的方法对分子进行特征提取和表示。文章指出,自然语言可以看作是一维的图,而分子可扩展到二维。以一个分子作为输入,最终输出分子的特征向量,利用该特征向量可以对分子进行回归和分类。

具体过程:

​ 在对数据集预处理中整理出分子的邻接矩阵 A A A,以及分子中每个原子的性质one-hot编码 h h h

​ n_gram_graph对分子的embedding过程分为两个阶段:node_embedding和graph_embedding

  • node_embedding:

    对分子的原子性质 X X X,利用CBoW神经网络求出一个权重矩阵 W W W,使得用 f i = W h i f_i=Wh_i fi=Whi来代表一个原子的特征矩阵,关于该神经网络 g ( h j , j ∈ C i ) = h i ^ , ( C i 为 原 子 i 的 邻 居 ) g(h_j,j\in C_i)=\hat{h_i},(C_i为原子i的邻居) g(hj,jCi)=hi^,(Cii),简单来说是利用分子中某个原子的邻居原子的特征矩阵来预测该原子的性质 X X X,神经网络损失函数为 c r o s s − e n t r o p y ( h i , h i ^ ) cross-entropy(h_i,\hat{h_i}) crossentropy(hi,hi^)
    在这里插入图片描述
    ​ 图中步骤1是将邻居原子的特征矩阵聚合,步骤2是一个全连接神经网络预测原子的性质。

​ node_embedding的关键是要取出权重矩阵 W W W,后续则用 f i = W h i f_i=Wh_i fi=Whi来代表一个原子。

  • graph_embedding:

    这里是整片论文的关键,也是运用到n_gram的地方。这里涉及到一个n_gram_graph的算法。在这里插入图片描述
    p是n_gram的一次取值的集合,例如n=3,原子{1,2,3}是关联的,也就是{1,2,3}形成连通分支,则{1,2,3}形成一次n_gram取值。

    f p = f 1 ∗ f 2 ∗ f 3 f_p=f1*f2*f3 fp=f1f2f3,这里的乘法是元素之间相乘,最终将整个分子中所有n=3的n_gram取值得到的 f p f_p fp求和,从而形成最终 f G f_G fG的一个维度。

    算法等价于:在这里插入图片描述
    F ( i ) A F_{(i)}A F(i)A其实是这样的,由于 A A A是邻接矩阵,有0和1构成,若 F = [ f 1 , f 2 , ⋯   , f m ] F=[f_1,f_2,\cdots ,f_m] F=[f1,f2,,fm],则 F A FA FA等于
    [ ∑ j ∈ C 1 f j , ∑ j ∈ C 2 f j , ⋯   , ∑ j ∈ C m f j ] , 其 中 C i 为 原 子 i 的 邻 居 原 子 的 编 号 集 合 [\sum_{j\in C_1}f_j,\sum_{j\in C_2}f_j,\cdots,\sum_{j\in C_m}f_j],\\其中C_i为原子i的邻居原子的编号集合 [jC1fj,jC2fj,,jCmfj],Cii
    此处对于的代码为:

    tilde_node_attribute_matrix = model.embeddings(node_attribute_matrix)
    #求出f_i=Wh_i
    
    walk = tilde_node_attribute_matrix
    v1 = torch.sum(walk, dim=1)
    
    walk = torch.bmm(adjacent_matrix, walk) * tilde_node_attribute_matrix
    v2 = torch.sum(walk, dim=1)
    
    walk = torch.bmm(adjacent_matrix, walk) * tilde_node_attribute_matrix
    v3 = torch.sum(walk, dim=1)
    
    walk = torch.bmm(adjacent_matrix, walk) * tilde_node_attribute_matrix
    v4 = torch.sum(walk, dim=1)
    
    walk = torch.bmm(adjacent_matrix, walk) * tilde_node_attribute_matrix
    v5 = torch.sum(walk, dim=1)
    
    walk = torch.bmm(adjacent_matrix, walk) * tilde_node_attribute_matrix
    v6 = torch.sum(walk, dim=1)
    
    embedded_graph_matrix = torch.stack([v1, v2, v3, v4, v5, v6], dim=1)
    

    最终利用embedded_graph_matrix来进行学习,文章中运用了rf和xgb两种模型对数十个数据集进行回归和分类,取得不错的效果。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值