当前位置: 首页 > news >正文

自然语言处理实战项目2-文本关键词抽取和关键词分值评估

大家好,我是微学AI,今天给大家带来自然语言处理实战项目2-文本关键词抽取和关键词分值评估。关键词抽取是自然语言处理中的重要任务,也是基础任务。

一、关键词抽取传统方法

1.基于统计的方法:

基于统计的方法是通过对一组文本进行分析,计算出每个词在文本中出现的频率和权重,然后根据一定的算法计算词语的重要性,从而抽取出关键词。常用的算法有TF-IDF(词频-逆文档频率)算法等。TF-IDF算法是通过计算一个词在文本中的词频和出现文档的逆文档频率来计算一个词的重要性。出现文档的逆文档频率越低,则该词的权重越高,即该词在文本中越关键。

2.基于规则的方法:

基于规则的方法是根据一定的规范和语言学规则,对文本进行词性标注和语法分析,然后从中提取出关键词。通常情况下,利用句子的语法结构,如主语、谓语、定语、状语等,来判断一个词的重要性,并将其作为关键词。此外,还可以结合自定义规则、英文分词等方式进行关键词提取。

3.基于语义的方法:

通过利用自然语言处理和信息检索技术,对文本进行分析,了解文本所表达的含义,从而抽取出关键词。基于语义的方法能够更准确地挖掘文本中的重要信息和隐含含义。例如,可以使用词向量模型(如Word2Vec),通过计算文本中各个词之间的相似度来判断一个词的重要性,并将其作为关键词。还可以使用LDA等主题模型,将文本抽象成一些主题,从而提取关键词。

本项目将要采用KeyBERT模型来实现关键词的抽取。

二、KeyBERT模型介绍

KeyBERT是一个用于关键词抽取和关键短语生成的Python第三方库。它是基于BERT预训练模型和TextRank算法的混合方法,同时结合了分句、词性筛选、主题建模等技术,以提高关键词和短语生成的准确性和有意义性。

KeyBERT的主要特点:

(1)基于BERT:KeyBERT使用预训练的BERT模型来编码和理解文本,从而提高关键词和短语的质量和准确性。

(2)灵活性:KeyBERT支持不同的预训练BERT模型,用户可以根据需求自由选择所需的模型。

(3)多语言支持:KeyBERT支持多种语言的处理,包括英语、汉语、阿拉伯语等,方便用户进行跨语言的应用。

(4)高效性:KeyBERT基于BERT预训练模型,运算效率高,尤其在长文本上处理效率更高。

(5)易用性:KeyBERT使用简单,只需一行代码即可实现文本关键词提取和关键短语生成。

 三、KeyBERT模型的训练

KeyBERT是一个基于BERT模型进行关键词提取的工具,其训练步骤主要是:

1.预处理:对文本进行预处理,包括数据清洗、分词、停用词过滤、词干化等处理。

2.BERT编码:使用预训练的BERT模型对文本进行编码,得到文本的向量表示。

3.句向量构建:将文本中的多个句子的向量进行加权平均或使用类似Pooling的操作,得到文本的处理后的一个向量表示,这个向量称为句向量。

4.基于余弦相似度的关键词提取算法: KeyBERT通过计算文本embedding矩阵中每个句子embedding向量和整个文本embedding向量的相似度,给每个句子打上相应的权重,然后从每个句子中抽取得分最高的几个词作为关键词,计算方式就是用每个词的embedding向量和得分最高的K个句子embedding向量计算余弦相似度,然后加和作为关键词权重得分,最后按照得分排序输出结果。

5.超参数调整:使用验证集对模型进行超参数调整,如句子数量、关键词数量等。

6.模型评估:使用测试数据对模型进行评估,包括准确率、召回率、F1值、AUC等指标。

四、KeyBERT的应用

# coding=utf-8/gbk
from sklearn.feature_extraction.text import CountVectorizer
import jiebadef tokenize_zh(text):words = jieba.lcut(text)return words
vectorizer = CountVectorizer(tokenizer=tokenize_zh)from keybert import KeyBERTdoc = """AI生成视频是利用人工智能技术生成视频的过程,通常,这种技术基于图像识别、语音合成等算法,从各种不同来源的数据中获取信息,然后自动生成视频。 AI生成视频技术的优势是可以快速生成高质量视频,同时还可以自动完成各种冗长的编辑工作,提高工作效率。此外,还可以实现一些人类不可能完成的任务,例如在极端天气、危险环境下进行拍摄。
"""kw_model = KeyBERT()keywords = kw_model.extract_keywords(doc, vectorizer=vectorizer,top_n=6)
#print(keywords)keys = [x for x in keywords if len(x[0])>1]
print(keys)

运行结果:

[('完成', 0.5415), ('生成', 0.4935), ('人工智能', 0.4928), ('进行', 0.4882), ('合成', 0.3963), ('高质量', 0.3836)]

关键词抽取的可视化代码:

colorlist =['#7aebec','#e3e7d2','#ab9cfc','#bfe1d9','#c2e19d','#d423d2','#f423d2']
with open("keyword2.html", "w", encoding="utf8") as f:head = '''<div class="entities" style="line-height: 3.5; direction: ltr"> <h3>关键词抽取结果:</h3></div>'''f.write(head)mainhtml =''textlist = doc.split('\n')for tex in textlist:mainhtml= mainhtml+ '''<div class="entities" style="line-height: 2.5; direction: ltr">''' + tex + '''</div>'''for sch,color in zip(keylist,colorlist[0:len(keylist)]):mainhtml =mainhtml.replace(sch,'''<mark class="entity" style="background: '''+color+'''; padding: 0.45em 0.6em; margin: 0 0.25em; line-height: 1; border-radius: 0.35em;">'''+sch+'''<span style="font-size: 0.5em; font-weight: bold; line-height: 1; border-radius: 0.35em; vertical-align: middle; margin-left: 0.5rem">'''+'keyword'+'''</span></mark>''')f.write(mainhtml)keys =''for key in keylist:keys = keys+key+'; 'keyword_show = '''<div class="entities" style="line-height: 2.5; direction: ltr"><h4>''' + '关键词:'+keys + '''</h4></div>'''f.write(keyword_show)

最后会生成keyword2.html网页文件,我们打开网页文件就可以看到:

 我们可以清晰地看到关键词的位置,以及出现的频次。

相关文章:

自然语言处理实战项目2-文本关键词抽取和关键词分值评估

大家好&#xff0c;我是微学AI&#xff0c;今天给大家带来自然语言处理实战项目2-文本关键词抽取和关键词分值评估。关键词抽取是自然语言处理中的重要任务&#xff0c;也是基础任务。 一、关键词抽取传统方法 1.基于统计的方法&#xff1a; 基于统计的方法是通过对一组文本…...

软件测试面试,项目经验板块如何答?初中高级测试工程师都问什么?

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 项目经验相关的问题…...

软件测试之测试用例的设计

对于测试工作而言&#xff0c;最重要的无疑就是测试用例的设计。好的测试用例可以帮助测试人员更好更快地发现软件中的错误&#xff0c;对于提高产品质量意义重大。本文就是针对测试用例的设计方法。 文章目录测试用例的基本要素测试用例的设计设计测试用例的具体方法等价类划分…...

MySQL安装与配置(保姆级教程)

MySQL安装 我们进入Mysql的官网进行下载MySQL Community Edition(GPL),这里我们以8.0.32.0版本为例&#xff0c;点击下面进行下载&#xff1a; MySQL Community Edition(GPL) 此时我们选择下面一个32位(64位的系统也选他)&#xff0c;上面那个是在线安装等待时间比较长 当然我们…...

MATLAB算法实战应用案例精讲-【元启发式算法】随机蛙跳跃算法(SFLA)(附matlab代码实现)

目录 前言 知识储备 多目标优化问题 多目标元启发式优化方法 算法原理 数...

内网穿透:远程访问内网IP中的电脑

需求&#xff1a;家里电脑在路由器内网中&#xff0c;能连外网。想在外地时能ssh&#xff08;也即vscode&#xff09;访问家里的电脑。 家里电脑系统&#xff1a;win11&#xff08;Ubuntu流程也一模一样&#xff09; 具体流程 家里电脑下载【花生壳】内网穿透软件并登录&#…...

day4 selenium爬取数据总结

day4 selenium爬取数据 一、selenium基本操作 导入相关模块&#xff1a; from selenium.webdriver import Chrome(一)、创建浏览器对象 b Chrome()(二)、打开网页&#xff08;需要爬取哪个页面的数据就打开该页面对应的网页地址&#xff09; 案例&#xff1a;爬取豆瓣电影…...

信息收集之WAF绕过

信息收集之WAF绕过前言一、工具进行目录扫描1. 工具的下载2. 工具的使用二、Python代码进行目录扫描前言 对于web安全无WAF的信息收集&#xff0c;大家可以查看如下链接的文章&#xff1a; web安全之信息收集 对于有WAF信息收集&#xff0c;看如下所示&#xff1a;&#xff08;…...

从数据到智慧,TOOM舆情监测系统让你的决策更加精准!

当今社会信息化程度日益提高&#xff0c;网络平台已成为人们获取最新信息的主要途径&#xff0c;无论是个体还是组织、政府还是企业&#xff0c;都需要通过各种手段及时了解社会舆情&#xff0c;把握市场动态&#xff0c;调整经营策略。而舆情监测系统无疑是这些手段中最为有效…...

ChatGPT中文版网页插件-如何体验chatGPT

ChatGPT中文版网页插件 目前&#xff0c;OpenAI的ChatGPT并没有官方提供中文版的网页插件&#xff0c;但是&#xff0c;一些第三方网站和开发者已经开始提供一些针对中文的自然语言处理和对话机器人服务。以下是其中一些例子&#xff1a; 问答机器人&#xff1a; 像小蛮腰和小…...

Docker的网络模式

Docker常见的几种网络模式 docker network ls 查看使用了哪些网络 [rootcentos8-nat-168-182-152 ~]# docker network ls NETWORK ID NAME DRIVER SCOPE c0184302f6a8 bridge bridge local 420492e04276 host host local …...

基于vue3.2、three实现地图在地图加载

基于vue3.2、three实现地图在地图加载code效果预览地址code 在这里插入代码片 import { ref, onMounted } from "vue"import * as THREE from "three"; import Earth from "./textures/Earth.png" import EarthSpec from "./textures/Eart…...

【C++】---优先级队列 仿函数

文章目录优先级队列介绍优先级队列使用仿函数优先级队列模拟实现优先级队列介绍 优先队列是一种容器适配器 &#xff0c;它的底层实现是堆&#xff0c;虽然它的名字里面有队列&#xff0c;但它并没有队列先进先出的特性 优先级队列定义在头文件中&#xff0c;其模板参数有三个…...

图的遍历算法

图的遍历1.连通图的深度优先搜索1.1. 递归1.2.非递归2.连通图的广度优先遍历3. 非连通图的深度&#xff08;广度&#xff09;优先遍历1.连通图的深度优先搜索 算法思想&#xff1a;从图中某个顶点vi出发&#xff0c;访问此顶点&#xff0c;然后依次从v1的各个未被访问的邻接点…...

【蓝桥杯集训·每日一题】 AcWing 3996. 涂色

文章目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解三、知识风暴区间DPUnique函数一、题目 1、原题链接 3996. 涂色 2、题目描述 有 n 个砖块排成一排&#xff0c;从左到右编号为 1∼n。 其中&#xff0c;第 i 个砖块的初始颜色为 ci。 …...

人工智能中的Web端编程

Java是当前的主流编程语言之一&#xff0c;常年稳居TIOBE编程语言排行榜前五。Java的使用领域非常广泛&#xff0c;包括了桌面端编程、Web端编程、移动端编程等几乎所有的编程领域。Java是Web端编程使用最广泛的编程语言之一。要学习Web端编程&#xff0c;需要了解Java语言的知…...

jsp+mysql+J2EE校园自行车租赁系统cdA1A2程序

本系统的具体功能有以下六项&#xff1a; 1、用户信息管理模块&#xff1a;用户需要注册成为本网站的用户&#xff0c;同时修改自己的用户资料&#xff0c;在必要时修改自己的登陆密码。 2、车辆查询模块:用户可以根据自己的要求&#xff0c;按照不同的查询方式来查询自己想要的…...

当营养遇上肠道菌群:探究其对儿童健康的影响

谷禾健康 越来越多的证据表明&#xff0c;肠道菌群定植紊乱和微生物多样性减少与全球非传染性疾病 (NCD) 的增加有关。影响儿童和青少年的非传染性疾病包括肥胖及其相关合并症、自身免疫性疾病、过敏性疾病和哮喘。饮食变化也与非传染性疾病的发病机制有关&#xff0c;并且由于…...

vue尚品汇商城项目-day01【4.完成非路由组件Header与Footer业务】

文章目录4.完成非路由组件Header与Footer业务4.1使用组件的步骤&#xff08;非路由组件&#xff09;本人其他相关文章链接4.完成非路由组件Header与Footer业务 在咱们项目开发中&#xff0c;不在以HTML CSS 为主&#xff0c;主要搞业务、逻辑 开发项目的流程&#xff1a; (1)…...

IDEA安装教程(图文详解,一步搞定)

文章目录第一步&#xff1a;官网下载IDEA第二步&#xff1a;卸载旧的IDEA&#xff08;没有则跳过&#xff09;第二步&#xff1a;安装IDEA第一步&#xff1a;官网下载IDEA 地址&#xff1a;https://www.jetbrains.com/idea/download/other.html 第二步&#xff1a;卸载旧的I…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...