Graph Convolutional Networks for Text Classification原码解读[pytorch]

前言

啊,之前看锅tensorflow的原码,也记了点Graph Convolutional Networks for Text Classification原码解读[tensorflow]

项目地址

https://github.com/iworldtong/text_gcn.pytorch

环境配置

就在tensorflow那个版本的环境下,补装了1.7.1+cu101的pytorch

代码解析

remove_words.py

就是原版的代码

build_graph.py

也是原版的代码
好奇:看到也用了scipy的csr_matrix函数,难道pytorch也有类似的矩阵运算?

train.py

一些维度&一些输出

adj (61603, 61603)
features (61603, 300)
y_train (61603, 20)
y_val (61603, 20)
y_test (61603, 20)
train_mask (61603,)
val_mask (61603,)
test_mask (61603,)
train_size 11314
test_size 7532
tm_train_mask torch.Size([61603, 20])
t_support[0] torch.Size([61603, 61603])
pre_sup torch.Size([61603, 200])
support0 torch.Size([61603, 61603])
out torch.Size([61603, 200])
logits * tm_train_mask[0] : tensor([ 0.0521, -0.0080,  0.2177, -0.1337,  0.1672, -0.0428,  0.0664, -0.1221,
         0.0376,  0.0709, -0.3589,  0.2038,  0.0118, -0.1365, -0.2384, -0.1432,
         0.0838,  0.1781,  0.2771,  0.1930], grad_fn=<SelectBackward>)
t_y_train[0]:tensor([0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
        0., 0.], dtype=torch.float64)
torch.max(t_y_train, 1)[0]:tensor(8)

features = preprocess_features(features)

# return sparse_to_tuple(features)
return features.A

删除了sparse_to_tuple函数

def sparse_to_tuple(sparse_mx):
    """Convert sparse matrix to tuple representation."""
    def to_tuple(mx):
        if not sp.isspmatrix_coo(mx):
            mx = mx.tocoo()
        coords = np.vstack((mx.row, mx.col)).transpose()
        values = mx.data
        shape = mx.shape
        return coords, values, shape

    if isinstance(sparse_mx, list):
        for i in range(len(sparse_mx)):
            sparse_mx[i] = to_tuple(sparse_mx[i])
    else:
        sparse_mx = to_tuple(sparse_mx)

    return sparse_mx

preprocess_adj(adj)

同样是这样

# return sparse_to_tuple(adj_normalized)
return adj_normalized.A

tm_train_mask = torch.transpose(torch.unsqueeze(t_train_mask, 0), 1, 0).repeat(1, y_train.shape[1])

把原来是(real_train_size+valid_size+vocab_size+test_size,)的向量转成了一个(real_train_size+valid_size+vocab_size+test_size, 标签个数)的tensor

训练

啊,略了。

评估

from sklearn import metrics
print_log("Test Precision, Recall and F1-Score...")
print_log(metrics.classification_report(test_labels, test_pred, digits=4))
print_log("Macro average Test Precision, Recall and F1-Score...")
print_log(metrics.precision_recall_fscore_support(test_labels, test_pred, average='macro'))
print_log("Micro average Test Precision, Recall and F1-Score...")
print_log(metrics.precision_recall_fscore_support(test_labels, test_pred, average='micro'))

构建自己的数据集-wiki80

选择了80/10/10的wiki_727K玩玩:
在这里插入图片描述

adj (7002, 7002)
features (7002, 300)
y_train (7002, 2)
y_val (7002, 2)
y_test (7002, 2)
train_mask (7002,)
val_mask (7002,)
test_mask (7002,)
train_size 3927
test_size 352

在这里插入图片描述

构建自己的数据集-wiki800

在这里插入图片描述

adj (109772, 109772)
features (109772, 300)
y_train (109772, 2)
y_val (109772, 2)
y_test (109772, 2)
train_mask (109772,)
val_mask (109772,)
test_mask (109772,)
train_size 83497
test_size 4564

在这里插入图片描述

构建自己的数据集-wiki8000

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图卷积网络(Graph Convolutional Networks,简称GCN)在文本分类任务中的应用是指将文本数据表示为图结构,然后利用GCN模型从这个图中学习文本特征并进行分类。相比传统的基于词向量的文本分类方法,GCN可以充分利用文本中的语义关系和上下文信息,提高文本分类的准确性。 GCN模型的主要思想是将每个文本表示为一个节点,每个节点与其它节点之间建立连接,形成一个图结构。节点之间的连接可以表示为共现矩阵或者语义关系矩阵,其中每个元素表示两个节点之间的关系强度。在这个图结构中,每个节点的特征可以表示为一个向量,比如词向量、TF-IDF权重等。 GCN模型的核心是基于图卷积操作的神经网络。通过多层的图卷积操作,GCN模型可以逐层聚合节点的特征,并利用节点之间的连接信息进行上下文感知。最终,GCN模型可以将图中节点的特征映射到一个低维向量空间中,然后使用全连接层对向量进行分类。 在文本分类任务中,GCN模型通常用于处理有标签的数据,其中每个文本都有一个标签。模型的训练过程是通过最小化预测标签与真实标签之间的差距来实现的。在预测阶段,GCN模型可以对新的文本进行分类,并输出其属于每个标签的概率。 总之,GCN模型是一种利用图结构进行文本分类的方法,它可以充分利用文本中的语义关系和上下文信息,提高文本分类的准确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值