it编程 > 硬件开发 > 驱动开发

【文本分类】《融合知识感知与双重注意力的短文本分类模型》

68人参与 2024-08-05 驱动开发

参考论文信息 (很牛)

  论文名称:《融合知识感知与双重注意力的短文本分类模型》

  发布期刊:《软件学报》

  期刊信息:cscd
在这里插入图片描述

[0] 摘要

  短文本包含有效信息较少且口语化严重, 对模型的特征学习能力要求较高。为此,论文提出kaercnn模型, 该模型在textrcnn模型的基础上, 融合了知识感知双重注意力机制

  知识感知包含了知识图谱实体链接和知识图谱嵌入, 可以引入外部知识以获取语义特征。

  双重注意力机制可以提高模型对短文本中有效信息提取的效率。

[1] 相关工作

  基于word2vec词向量训练

  我们知道不用大模型的话,embedding层一般会使用预训练词向量,常用的词向量有word2vecglovefasttext,本文用的是word2vec

  基于机器学习的文本分类

  传统的机器学习方法处理短文本的过程主要分为3个阶段, 分别为文本预处理、文本的特征选择和文本训练.。

  · 预处理:主要是分词,一般采用jieba、hanlp;
  · 特征选择:对分词结果经行进一步提取,常用的方法有chi、mi、pca、tfidf等等‘
  · 文本训练:模型很多,主要是机器学习的模型,svm、knn、nb等等。

  基于深度学习的文本分类

  主要是基于cnn和rnn模型算法。

  基于预训练模型的文本分类

  介绍了transformer、bert和ernie。

  论文说了预训练模型的缺点,很有参考价值:

  然而, 基于预训练模型的文本分类方法往往模型参数巨大、收敛缓慢、训练时间长, 并对硬件的要求较为苛刻, 因此这类方法的使用受到了一定程度的限制, 需要根据实际应用背景来使用. 例如: 在处理训练样本稀少的文本分类任务时, 基于预训练模型的方法效果拔群; 然而在有充足训练样本的场景下, 训练时间长以及硬件要求高使其不适用于许多任务。

  知识图谱嵌入

  典型的知识图谱由数百万个实体-关系-实体三元组(h,r,t)组成, 其中, h、r和 t分别代表三元组的头部、关
系和尾部. 给定知识图谱中的所有三元组, 知识图谱嵌入的目标是学习每个实体和关系的低维表示向量, 保留原始知识图谱的结构信息.

  注意力机制

[2] 模型

在这里插入图片描述

  本文模型的创新点如下:

  · 双重注意力机制
  · 词过滤算法
  · 知识感知实体增强
  · textrcnn分类模型

  双重注意力机制

  论文采取双重注意力机制, 分别在输入层和rcnn中引入注意力机制。

  在分类前, 计算词对各类别的贡献度, 为词过滤做准备; 希望将注意力分配给有实际意义、词性重要的名词或动词, 而相对较少或几乎不分配注意力给介词、语气词、口语词一类的词组, 以此赋予有准确语义的词在文本分类任务中有更高的权重。

  词过滤算法

  在上面一部得到的(词数,标签数)向量,然后我们根据一个贡献度计算公式计算这条n个词的文本中每个词的贡献度,然后把小于一定值的词直接剔除。

  加入剔除了a个词,那么现在文本就剩下n-a个词了。

  知识感知实体增强

  利用实体链接将短文本中通过命名实体识别发现的实体, 与知识图谱中预定义的实体相关联,以消除它们的歧义。最后也会生成一个向量。

  textrcnn分类模型

  textrcnn模型结构代码如下:

class model(nn.module):
    def __init__(self, config):
        super(model, self).__init__()
        if config.embedding_pretrained is not none:
            self.embedding = nn.embedding.from_pretrained(config.embedding_pretrained, freeze=false)
        else:
            self.embedding = nn.embedding(config.n_vocab, config.embed, padding_idx=config.n_vocab - 1)
        self.lstm = nn.lstm(config.embed, config.hidden_size, config.num_layers,
                            bidirectional=true, batch_first=true, dropout=config.dropout)
        self.maxpool = nn.maxpool1d(config.pad_size)
        self.fc = nn.linear(config.hidden_size * 2 + config.embed, config.num_classes)

    def forward(self, x):
        embed = self.embedding(x)  # [batch_size, seq_len, embeding] = [128, 32, 300]
        out, _ = self.lstm(embed)  # [batch_size, seq_len, hidden_size * 2] = [128, 32, 512]
        out = torch.cat((embed, out), 2)  # [batch_size, seq_len, hidden_size * 2 + embeding] = [128, 32, 812]
        out = f.relu(out)  # [batch_size, seq_len, hidden_size * 2 + embeding] = [128, 32, 812]
        out = out.permute(0, 2, 1)  # [batch_size, hidden_size * 2 + embeding, seq_len] = [128, 812, 32]
        out = self.maxpool(out).squeeze()  # [batch_size, hidden_size * 2 + embeding] = [128, 812]
        out = self.fc(out)
        return out

  很简单,textrcnn = 嵌入层+bilstm+池化层+全连接层。

[3] 实验结果及分析

  数据集是thucnews,效果如下:
在这里插入图片描述

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

ODA:基于观察驱动的智能体,用于集成LLMs和知识图谱 ODA: Observation-Driven Agent for integrating LLMs and Knowledge Graphs

08-05

RAG 工业落地方案框架(Qanything、RAGFlow、FastGPT、智谱RAG)细节比对!CVPR自动驾驶最in挑战赛赛道,全球冠军被算力选手夺走了

08-05

三菱FX3U系列—原点回归指令

08-05

【AI Agent教程】各种Agent开发框架都是如何实现ReAct思想的?深入源码学习一下

08-05

数据仓库【建模理解】

08-06

2024年运维最全ICT技术发展趋势,AI、大数据和云计算的概述及存储应用技术【2】

08-04

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论