中文短文本关键词抽取方案

2024-02-03 23:59

本文主要是介绍中文短文本关键词抽取方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

    • 1. 前言
    • 2. 数据
    • 3. 方案
      • 3.1 SIFRank
      • 3.2 NegSamplingNER
    • 4. 代码

1. 前言

  本文提出一种中文短文本关键词抽取方案,适用于无监督语料场景。
  无监督关键词抽取算法虽然无需标注语料,但是效果一般。有监督学习方法效果好但是需要标注数据,很多业务场景下并没有标注好的数据。能否结合无监督学习方法和有监督学习方法的长处,用无监督方法标注语料,然后用于训练有监督方法?为此我们用实验证明了该方案是可行的,文末给出代码地址。

2. 数据

  我们选用联通问答数据集中的问题数据,从问题中提取联通业务关键词。下载地址

3. 方案

  首先使用SIFRank方法标注语料,然后训练NegSamplingNER命名实体识别模型。
在这里插入图片描述

3.1 SIFRank

  无监督关键词抽取算法选用SIFRank。原方法使用ELMO语言模型得到词向量和句向量,我们将其替换为RoBerta模型。原方法使用清华的分词工具thulac,我们对比了jieba、thulac、百度lac和哈工大LTP四种工具,发现LTP效果最好,于是我们选用LTP作为分词和词性标注工具。
  SIFRank将名词和形容词+名词的组合视为候选关键词,使用语言模型得到每个词的向量,关键词中各个词向量加权得到关键词向量,同理句子中各个词向量加权得到句向量。关键词向量和句向量的cos值作为关键词得分。
  SIFRank提取关键词的重要一点是词权重,可以使用他提供的词权重文件,也可以自行计算词权重。收集大规模问题语料,计算词频,再计算领域语料中的词频,可按照TFIDF方法计算词权重,也可以直接将词频倒数加上平滑项作为权重。
  SIFRank流程如下图。
(1)分词+标词性。
(2)获取候选关键词列表:利用正则表达式确定名词短语(例如:形容词+名词),将名词短语作为候选关键短语。
(3)通过预训练语言模型,得到关键词的embedding。
(4)同样地,得到句子或文档的embedding。
(5)计算(3)与(4)结果的余弦相似度,选取topN作为其最终提取的关键词。
在这里插入图片描述

3.2 NegSamplingNER

  用SIFRank去标注数据,为了让标注的词尽可能是正确的,每个句子我们只选取一个SIFRank输出的关键词。这样保证了标注的精确率,但是会导致很多漏标数据,这些漏标数据可视为噪声,用这样的数据去训练常规的命名实体识别模型显然是不可行的。
  为此我们选择适用于远程监督数据的NER模型NegSamplingNER,该论文来自ICLR 2021。远程监督生成的NER数据集有个特点,标注的实体基本正确,但是存在大量漏标实体,这和我们用SIFRank生成的数据非常类似。NegSamplingNER采用BERT+span classifier结构,负样本通过随机采样片段得到,因此有很大概率噪声不会被采样,这也就避免了噪声影响。
  NegSamplingNER结构如下图。编码器的输入输出和常规方法相同。采样过程就是随机挑选一个起始位置和一个结束位置,作为一个负样本,将起始位置和结束位置的向量拼接得到负样本表征。正样本的表征也是将起始位置和结束位置的向量拼接得到。将正负样本向量表征输入MLP分类,得到每个样本的类型,负样本的类型为‘O’。
在这里插入图片描述

4. 代码

  本文开源代码:https://github.com/wjx-git/KeyWordsExtraction,需要自行下载预训练语言模型RoBerta。

这篇关于中文短文本关键词抽取方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/675821

相关文章

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里

SpringSecurity中的跨域问题处理方案

《SpringSecurity中的跨域问题处理方案》本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码... 目录1.什么是CORS2.简单请求3.非简单请求4.Spring跨域解决方案4.1.@CrossOr

使用MyBatis TypeHandler实现数据加密与解密的具体方案

《使用MyBatisTypeHandler实现数据加密与解密的具体方案》在我们日常的开发工作中,经常会遇到一些敏感数据需要存储,比如用户的手机号、身份证号、银行卡号等,为了保障数据安全,我们通常会对... 目录1. 核心概念:什么是 TypeHandler?2. 实战场景3. 代码实现步骤步骤 1:定义 E

Python实现繁体转简体功能的三种方案

《Python实现繁体转简体功能的三种方案》在中文信息处理中,繁体字与简体字的转换是一个常见需求,无论是处理港澳台地区的文本数据,还是开发面向不同中文用户群体的应用,繁简转换都是不可或缺的功能,本文将... 目录前言为什么需要繁简转换?python实现方案方案一:使用opencc库方案二:使用zhconv库

MyBatis Plus中执行原生SQL语句方法常见方案

《MyBatisPlus中执行原生SQL语句方法常见方案》MyBatisPlus提供了多种执行原生SQL语句的方法,包括使用SqlRunner工具类、@Select注解和XML映射文件,每种方法都有... 目录 如何使用这些方法1. 使用 SqlRunner 工具类2. 使用 @Select 注解3. 使用

tomcat日志中文乱码问题及解决方案

《tomcat日志中文乱码问题及解决方案》文章主要介绍了在使用Tomcat时遇到的乱码问题及其解决方法,页面输出乱码可能由于server.xml配置、HTML标签、编程输出编码不一致引起,解决方法包括... 目录一、页面输出乱码1.server.XML配置未注明编码格式2.catalina.bawww.cp

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S