【NLP项目-01】手把手教你基于TF-IDF提取向量+贝叶斯或者随机森林进行文本分类

【NLP项目-01】手把手教你基于TF-IDF提取向量+贝叶斯或者随机森林进行文本分类
 
本次修炼方法请往下查看
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地!
🎇 相关内容文档获取 微信公众号
🎇 相关内容视频讲解 B站

🎓 博主简介:AI算法驯化师,混迹多个大厂搜索、推荐、广告、数据分析、数据挖掘岗位 个人申请专利40+,熟练掌握机器、深度学习等各类应用算法原理和项目实战经验

🔧 技术专长: 在机器学习、搜索、广告、推荐、CV、NLP、多模态、数据分析等算法相关领域有丰富的项目实战经验。已累计为求职、科研、学习等需求提供近千次有偿|无偿定制化服务,助力多位小伙伴在学习、求职、工作上少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于机器学习、深度学习、数据分析、NLP、PyTorch、Python、Linux、工作、项目总结相关的实用内容。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

🌵文章目录🌵

  • 🎯 1. 基本介绍
      • 1.1 TF-IDF介绍
  • 💡 2. 使用方法
      • 2.1 英文数据准备
      • 2.2 项目数据介绍
      • 2.3 项目数据处理
      • 2.4 文本向量化
      • 2.5 文本分类
  • 🔍 3. 高级用法
  • 🔍 4. 注意事项
  • 🔧 5. 总结

下滑查看解决方法

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  

🎯 1. 基本介绍

  文本分类是自然语言处理(NLP)中的一项基础任务,其目标是将文本数据自动归类到预定义的类别中。TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的文本向量化方法,它能够衡量一个词语对于一个文档集或一个语料库中的其中一份文档的重要性。

1.1 TF-IDF介绍

  • 作用:用来计算一个词在文档中的权重大小,通常用来计算词权重方法之一
  • TF:一个词在文档中的频次
  • IDF:逆文档频率,一个关键词w在dw个文档中出现的次数
  • TF-IDF的计算公式如下所示:
    T F i , j = n i , j ∑ k n k , j TF_{i,j}=\frac{n_{i,j}}{\sum_k n_{k,j}} TFi,j=knk,jni,j , I D F i = l o g ∣ D ∣ ∣ 1 + j : t i ∈ d j ∣ IDF_i=log\frac{|D|}{|{1+j:t_i\in d_j}|} IDFi=log1+j:tidjD
    T F − I D F i , j = t f i , j ∗ i d f i TF-IDF_{i,j}=tf_{i,j}*idf_i TFIDFi,j=tfi,jidfi

💡 2. 使用方法

2.1 英文数据准备

  使用tf-idf进行文本向量化时,我们需要注意中文和英文的处理方法不一致的问题,对于中文的文本数据需要对其进行切词,对于英文只需要对其进行判断即可。
  对于英文数据的处理的代码示例如下所示:

from sklearn.feature_extraction.text import TfidfVectorizer

# 假设我们有以下文本数据
texts = [
    "The sky is blue.",
    "The sun is bright.",
    "The sun in the sky is bright.",
    "We can see the shining sun, the bright sun."
]

# 初始化TF-IDF向量化器
vectorizer = TfidfVectorizer(stop_words='english')
tfidf_matrix = vectorizer.fit_transform(texts)

# 查看向量化结果
print(tfidf_matrix.toarray())

[[0.78528828 0.         0.         0.6191303  0.        ]
 [0.         0.70710678 0.         0.         0.70710678]
 [0.         0.53256952 0.         0.65782931 0.53256952]
 [0.         0.36626037 0.57381765 0.         0.73252075]]

2.2 项目数据介绍

  本项目中的数据为中文的历史上用户的评价中文数据,具体的数据格式为:
在这里插入图片描述

  其中text为输入的文本,flag为文本的标签

2.3 项目数据处理

  通过jieba分词器对中文数据进行切词处理,具体的代码如下所示:

data['cus_comment']= data['text'].apply(lambda x: ' '.join(list(jieba.cut(x))))

category_mapping = {
    "体育": 0,
    "娱乐": 1,
    "房产": 2,
    "教育": 3, 
    "时政": 4,
    "游戏": 5,
    "社会": 6, 
    "科技": 7,
    "股票": 8, 
    "财经": 9
}
    
#特征值转换
data['target'] = data['flag'].map(category_mapping)
data.head() 

	text	flag	cus_comment	target
0	中华女子学院:本科层次仅1专业招男生	教育	中华 女子 学院 : 本科 层次 仅 1 专业 招 男生	3
1	两天价网站背后重重迷雾:做个网站究竟要多少钱	科技	两天 价 网站 背后 重重 迷雾 : 做个 网站 究竟 要 多少 钱	7
25环海棠公社230-2902居准现房98折优惠	房产	东 5 环 海棠 公社 230 - 2902 居 准现房 98 折 优惠	2
3	卡佩罗:告诉你德国脚生猛的原因 不希望英德战踢点球	体育	卡佩罗 : 告诉 你 德国 脚 生猛 的 原因 不 希望 英德 战 踢 点球	0
4	82岁老太为学生做饭扫地44年获授港大荣誉院士	社会	82 岁 老太 为 学生 做饭 扫地 44 年 获授 港大 荣誉 院士	6

2.4 文本向量化

  为了使得特征不向量穿越,这个时候需要先对其进行训练数据、测试数据的划分,具体的代码如下所示:

#切分测试集、训练集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(data['cus_comment'], data['target'], random_state=3, test_size=0.25)

#引入停用词
infile = open("stop_word.txt",encoding='utf-8')
stopwords_lst = infile.readlines()
stopwords = [x.strip() for x in stopwords_lst]

#中文分词
def fenci(train_data):
    words_df = train_data.apply(lambda x:' '.join(jieba.cut(x)))
    return words_df
 
x_train[:5]

195436               评论 : 买房 别 拿 通货膨胀 做 理由
133504                       诺安 旗下 两 基金 分红
193602        《 恶魔城 》 系列 新作 公布   支持 6 人 游戏
29919      组图 : 蔡健雅 许茹芸 苏慧伦 齐聚   合开 演唱会 有谱
21642     上海 2010 年 高考 成绩 626 日晚 8 点 可查
Name: cus_comment, dtype: object

  中文文本特征处理,需要进行中文分词,jieba分词库简单好用。接下来需要过滤停用词,最后就要进行文本转向量,有词库表示法、TF-IDF、word2vec等,这里我们使用sklearn库的TF-IDF工具进行文本特征提取。

#使用TF-IDF进行文本转向量处理
from sklearn.feature_extraction.text import TfidfVectorizer
tv = TfidfVectorizer(stop_words=stopwords, max_features=3000, ngram_range=(1,2))
tv.fit(x_train)

tv.transform(x_train)
<150000x3000 sparse matrix of type '<class 'numpy.float64'>'
	with 510413 stored elements in Compressed Sparse Row format>

  从上可以得出,将文本吹成了3000维的向量表示

2.5 文本分类

  特征和标签已经准备好了,接下来就是建模了。这里我们使用文本分类的经典算法朴素贝叶斯算法,而且朴素贝叶斯算法的计算量较少,具体的代码如下所示:

#计算分类效果的准确率
from sklearn.naive_bayes import MultinomialNB
import numpy as np
from sklearn.metrics import roc_auc_score, f1_score, classification_report
classifier = MultinomialNB()
classifier.fit(tv.transform(x_train), y_train)
print(classification_report(y_test,  [np.argmax(i) for i in classifier.predict_proba(tv.transform(x_test))]))

  precision    recall  f1-score   support

           0       0.68      0.87      0.76      4862
           1       0.76      0.71      0.73      5036
           2       0.89      0.81      0.85      4967
           3       0.87      0.90      0.89      5068
           4       0.78      0.78      0.78      5072
           5       0.83      0.79      0.81      4907
           6       0.77      0.80      0.79      4953
           7       0.81      0.70      0.75      5093
           8       0.72      0.73      0.73      5063
           9       0.80      0.79      0.80      4979

    accuracy                           0.79     50000
   macro avg       0.79      0.79      0.79     50000
weighted avg       0.79      0.79      0.79     50000

🔍 3. 高级用法

  使用tfidf进行机器学习分类分类是,特征的提取向量决定了最终模型的效果上线,对于sklearn中的tfidf算法,文本特征向量表达效果的好坏取决于滑动窗口的大小,具体的参数如下所示:

  • tv = TfidfVectorizer(stop_words=stopwords, max_features=3000, ngram_range=(1,2))

  起绝对性因素的两个参数为max_feature得大小,但是ngram_range参数的区间如果变大的话可以使得整个文本提取的表达能力达到最优的状态。

🔍 4. 注意事项

  • 数据清洗:确保文本数据是干净的,去除无关字符和噪声,如HTML标签、特殊符号等。
  • 文本标准化:将所有文本转换为统一的小写形式,以避免大小写引起的差异。
  • 停用词过滤:去除常见的停用词,如“the”,“is”,“in”等,因为这些词通常对文本的语义贡献不大。
  • 词干提取或词形还原:根据需要选择是否进行词干提取或词形还原,以减少词形变化带来的影响。
  • 特征选择:TF-IDF可能会生成大量的特征,考虑使用特征选择技术来减少特征维度,提高模型性能。
  • 参数调优:对于贝叶斯和随机森林分类器,需要调整模型参数以获得最佳性能,如随机森林中的树的数量和深度。
  • 避免数据泄露:在划分训练集和测试集时,确保训练集和测试集之间没有信息泄露。
  • 模型评估:使用适当的评估指标,如准确率、召回率、F1分数等,来全面评估模型性能。
  • 交叉验证:使用交叉验证来评估模型的稳定性和泛化能力。
  • 类别不平衡:如果数据集中的类别分布不均匀,考虑使用重采样技术或调整分类阈值。

🔧 5. 总结

  在本教程中,我们学习了如何使用TF-IDF方法提取文本特征,并使用贝叶斯或随机森林分类器进行文本分类。预处理和特征提取是文本分类任务中的关键步骤,选择合适的模型和评估方法对于获得良好性能至关重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/718600.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是隐马尔可夫模型?

文章目录 一、说明二、玩具HMM&#xff1a;5′拼接位点识别三、那么&#xff0c;隐藏了什么&#xff1f;四、查找最佳状态路径五、超越最佳得分对齐六、制作更逼真的模型七、收获 关键词&#xff1a;hidden markov model 一、说明 被称为隐马尔可夫模型的统计模型是计算生物学…

5.华为交换机局域网vlan网段隔离配置

目的:PC1与PC2互通 与PC3隔离 LSW1配置 [Huawei]vlan batch 10 20 [Huawei]int g0/0/1 [Huawei-GigabitEthernet0/0/1]port link-type access [Huawei-GigabitEthernet0/0/1]port default vlan 10 [Huawei-GigabitEthernet0/0/1]int g0/0/2 [Huawei-GigabitEthernet0/0/2]port…

【网络安全学习】使用Kali做渗透情报收集-02-<指纹识别+目录扫描>

1.指纹识别 指纹识别是指通过一些特征或特定文件来识别目标网站或系统的类型、版本、组件等信息&#xff0c;以便寻找相应的漏洞或攻击方法。 主动指纹识别 通过向目标系统发送正常和异常的请求以及对文件内容的查找&#xff0c;记录响应方式&#xff0c;然后与指纹库进行对比…

SQL160 国庆期间每类视频点赞量和转发量

描述 用户-视频互动表tb_user_video_log iduidvideo_idstart_timeend_timeif_followif_likeif_retweetcomment_id110120012021-09-24 10:00:002021-09-24 10:00:20110NULL210520022021-09-25 11:00:002021-09-25 11:00:30001NULL310220022021-09-25 11:00:002021-09-25 11:00…

如何在Windows 10中恢复已删除的文件?

在 Windows 10 电脑上删除文件是一种常见的操作。如果你不需要某个文件&#xff0c;你会删除它。如果电脑空间用完了&#xff0c;你会尝试删除一些文件以释放更多空间。此外&#xff0c;你可以尝试清理电脑&#xff0c;使用电脑清理工具删除文件。 但是&#xff0c;如果您在 W…

云服务器部署Neo4j

文章目录 导读安装Neo4j先去官网看看下载安装包如果真的下载了rpm安装包 插件 导读 大模型&#xff0c;他终于来了。 不过呢&#xff0c;大模型相关&#xff0c;现在也就跟着热点去尝试一下multi-agent的RAG方向&#xff0c;看看能做到什么地步。总之我们先从安装neo4j开始。…

IAP固件升级进阶(Qt上位机)

前言 时隔近一年&#xff0c;再次接触IAP固件升级&#xff0c;这次修改了以前的一些bug&#xff0c;同时新增一些实用性的功能。 有纰漏请指出&#xff0c;转载请说明。 学习交流请发邮件 1280253714qq.com。 上位机界面 视频演示 当Up对iap固件升级的机制有了更深的理解后…

44. 【Java教程】方法引用

通过前两个小节对Lambda表达式的学习&#xff0c;本小节我们来介绍一个更加深入的知识点 —— 方法引用。通过本小节的学习&#xff0c;你将了解到什么是方法引用&#xff0c;方法引用的基础语法&#xff0c;方法引用的使用条件和使用场景&#xff0c;方法引用的分类&#xff0…

实用软件下载:UltraEditUEStudio最新安装包及详细安装教程

​UEStudio简介&#xff1a;UEStudio建立在上文本编辑器UltraEdit的功能基础上&#xff0c;并为团队和开发人员提供了其他功能&#xff0c;例如深度Git集成&#xff0c;您可以直接在UEStudio中克隆&#xff0c;签出&#xff0c;更新&#xff0c;提交&#xff0c;推入/拉入等操作…

《汇编语言程序设计》例子之查找最大数

以下是第5章中讲到的 CMOV 的指令的例子&#xff0c;原来的源码是这样的&#xff1a; # cmovtest.s - An example of the CMOV instructions .section .data output:.asciz "The largest value is %d\n" values:.int 105, 235, 61, 315, 134, 221, 53, 145, 117, 5 …

反向海淘代购系统集成功能详解:从商品对接到物流转运的一体化解决方案

随着全球化进程的加速&#xff0c;反向海淘&#xff08;即从国外购买商品至国内&#xff09;的需求日益增长。为满足这一市场趋势&#xff0c;反向海淘代购系统正不断进化&#xff0c;集成多种功能以提供更加便捷、高效的服务。本文将深入探讨反向海淘代购系统的核心集成功能&a…

HTML基础结构入门

HTML&#xff08;超文本标记语言&#xff09;是构建网页的基础语言。它用于描述网页的结构和内容。让我们从最基本的HTML文档开始。 HTML基础结构 一个基本的HTML文档结构如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta …

【Linux硬盘数据读取】WIN10访问linux分区解决方案:ext2fsd

<div id"content_views" class"htmledit_views" style"user-select: auto;"><p>尝试ext2explore、Paragon ExtFS都不好用&#xff0c;强烈安利ext2fsd&#xff0c;可读写&#xff0c;很强大</p> 转自&#xff1a;https://blog…

SpringBoot三层架构

目录 一、传统方式 二、三层架构 三、代码拆分 1、dao层 2、service层 3、control层 四、运行结果 一、传统方式 上述代码存在一定的弊端&#xff0c;在进行软件设计和软件开发中提倡单一责任原则&#xff0c;使代码的可读性更强&#xff0c;复杂性更低&#xff0c;可扩展性…

PFA烧杯带把手带刻度1000ml3000mlPFA氟树脂温度范围-270~250℃

随着越来越多的痕量分析实验需要对ppb和ppt级的浓度进行测定。目前所使用的一般材料由于无特别处理&#xff0c;不可避免会与所储存的样品&#xff0c;试剂或标准液反应&#xff0c;导致痕量分析实验得到不正确的结果。但我厂的PFA产品刚好能弥补其不足。PFA金属元素空白值低&a…

AI存储解决案例分享

AI数据管道&#xff08;Data Pipeline&#xff09;是指在AI项目中&#xff0c;数据从原始状态到最终可用模型的整个处理流程&#xff0c;包括数据采集、清洗、转换、分析、训练模型、验证模型直至部署和监控等多个环节。 在AI训练和推理过程中&#xff0c;多个管道可能同时读取…

一道session文件包含题

目录 环境说明 session文件包含getshell 审计源码 session包含 base64在session中的解码分析 题目&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Q0BN08b8gWiVE4tOnirpTA?pwdcate 提取码&#xff1a;cate 环境说明 这里我用的是linux&#xff0c;也可以用p…

【计算机毕业设计】235基于微信小程序点餐系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

从GAN到WGAN(02/2)

文章目录 一、说明二、GAN中的问题2.1 难以实现纳什均衡(Nash equilibrium)2.2 低维度支撑2.3 梯度消失2.4 模式坍缩2.5 缺乏适当的评估指标 三、改进的GAN训练四、瓦瑟斯坦&#xff08;Wasserstein&#xff09;WGAN4.1 什么是 Wasserstein 距离&#xff1f;4.2 为什么 Wassers…

大模型太贵?找找自己的原因好吧?

什么&#xff1f; 炼个大模型还嫌贵&#xff1f; 到底哪里贵了&#xff01;&#xff1f; 大模型算力贵&#xff1f;哪里贵了&#xff01;&#xff1f; 争先恐后训练大模型&#xff0c; 搞得现在“算力慌”“一卡难求”&#xff0c; 算力当然水涨船高了! “特供版”GPU又…