文本分类使用场景

0
1

  • 文本分类任务
    2
  • 文本分类-机器学习
    3
贝叶斯算法

0

  • 应用
    1
    2
  • 在NLP中的应用
    用贝叶斯公式处理文本分类任务
    一个合理假设:
    文本属于哪个类别,与文本中包含哪些词相关
    任务:
    知道文本中有哪些词,预测文本属于某类别的概率
    3
  • 贝叶斯算法优点
    1.简单高效
    2.一定的可解释性
    3.如果样本覆盖的好,效果是不错的
    4.训练数据可以很好的分批处理
  • 贝叶斯算法缺点
    1.如果样本不均衡会极大影响先验概率
    2.对于未见过的特征或样本,条件概率为零,失去预测的意义(可以引入平滑)
    3.特征独立假设只是个假设
    4.没有考虑语序,也没有词义
    4
import jieba
import json
from collections import defaultdictjieba.initialize()
"""
贝叶斯分类实践
P(A|B) = (P(A) * P(B|A)) / P(B)
事件A:文本属于类别x1。文本属于类别x的概率,记做P(x1)
事件B:文本为s (s=w1w2w3..wn)
P(x1|s) = 文本为s,属于x1类的概率.   #求解目标#
P(x1|s) = P(x1|w1, w2, w3...wn) = P(w1, w2..wn|x1) * P(x1) / P(w1, w2, w3...wn)
P(x1) 任意样本属于x1的概率。x1样本数/总样本数
P(w1, w2..wn|x1) = P(w1|x1) * P(w2|x1)...P(wn|x1)  词的独立性假设
P(w1|x1) x1类样本中,w1出现的频率
公共分母的计算,使用全概率公式:
P(w1, w2, w3...wn) = P(w1,w2..Wn|x1)*P(x1) + P(w1,w2..Wn|x2)*P(x2) ... P(w1,w2..Wn|xn)*P(xn)
"""
class BayesApproach:def __init__(self, data_path):self.p_class = defaultdict(int)self.word_class_prob = defaultdict(dict)self.load(data_path)def load(self, path):self.class_name_to_word_freq = defaultdict(dict)self.all_words = set()  #汇总一个词表with open(path, encoding="utf8") as f:for line in f:line = json.loads(line)class_name = line["tag"]title = line["title"]words = jieba.lcut(title)self.all_words = self.all_words.union(set(words))self.p_class[class_name] += 1  #记录每个类别样本数量word_freq = self.class_name_to_word_freq[class_name]#记录每个类别下的词频for word in words:if word not in word_freq:word_freq[word] = 1else:word_freq[word] += 1self.freq_to_prob()return#将记录的词频和样本频率都转化为概率def freq_to_prob(self):#样本概率计算total_sample_count = sum(self.p_class.values())self.p_class = dict([c, self.p_class[c] / total_sample_count] for c in self.p_class)#词概率计算self.word_class_prob = defaultdict(dict)for class_name, word_freq in self.class_name_to_word_freq.items():total_word_count = sum(count for count in word_freq.values()) #每个类别总词数for word in word_freq:#加1平滑,避免出现概率为0,计算P(wn|x1)prob = (word_freq[word] + 1) / (total_word_count + len(self.all_words))self.word_class_prob[class_name][word] = probself.word_class_prob[class_name]["<unk>"] = 1/(total_word_count + len(self.all_words))return#P(w1|x1) * P(w2|x1)...P(wn|x1)def get_words_class_prob(self, words, class_name):result = 1for word in words:unk_prob = self.word_class_prob[class_name]["<unk>"]result *= self.word_class_prob[class_name].get(word, unk_prob)return result#计算P(w1, w2..wn|x1) * P(x1)def get_class_prob(self, words, class_name):#P(x1)p_x = self.p_class[class_name]# P(w1, w2..wn|x1) = P(w1|x1) * P(w2|x1)...P(wn|x1)p_w_x = self.get_words_class_prob(words, class_name)return p_x * p_w_x#做文本分类def classify(self, sentence):words = jieba.lcut(sentence) #切词results = []for class_name in self.p_class:prob = self.get_class_prob(words, class_name)  #计算class_name类概率results.append([class_name, prob])results = sorted(results, key=lambda x:x[1], reverse=True) #排序#计算公共分母:P(w1, w2, w3...wn) = P(w1,w2..Wn|x1)*P(x1) + P(w1,w2..Wn|x2)*P(x2) ... P(w1,w2..Wn|xn)*P(xn)#不做这一步也可以,对顺序没影响,只不过得到的不是0-1之间的概率值pw = sum([x[1] for x in results]) #P(w1, w2, w3...wn)results = [[c, prob/pw] for c, prob in results]#打印结果for class_name, prob in results:print("属于类别[%s]的概率为%f" % (class_name, prob))return resultsif __name__ == "__main__":path = "../data/train_tag_news.json"ba = BayesApproach(path)query = "中国三款导弹可发射多弹头 美无法防御很急躁"ba.classify(query)
支持向量机SVM

0
1
2

解决多分类

假设要解决一个K分类问题,即有K个目标类别

  • one vs one方式
    建立 K(K - 1)/2 个svm分类器,每个分类器负责K个类别中的两个类别,判断输入样本属于哪个类别
    对于一个待预测的样本,使用所有分类器进行分类,最后保留被预测词数最多的类别
    假设类别有[A,B,C]
    X->SVM(A,B)->A
    X->SVM(A,C)->A
    X->SVM(B,C)->B
    最终判断 X->A

  • one vs rest方式
    建立K个svm分类器,每个分类器负责划分输入样本属于K个类别中的“某一个类别,还是其他类别”
    最后保留预测分值最高的类别
    假设类别有[A,B,C]
    X->SVM(A,rest)->0.1
    X->SVM(B,rest)->0.2
    X->SVM(C,rest)->0.5
    最终判断 X->C

  • 支持向量机优点
    1.少数支持向量决定了最终结果,对异常值不敏感
    2.对于样本数量需求较低
    3.可以处理高维度数据

  • 支持向量机缺点
    1.少数支持向量决定了最终结果,对异常值不敏感
    2.对于样本数量需求较低
    3.可以处理高维度数据

深度学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/915380.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/915380.shtml
英文地址,请注明出处:http://en.pswp.cn/news/915380.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache SeaTunnel详解与部署(最新版本2.3.11)

目录 一、概述 1.1、软件介绍 1.2、解决问题​ 1.3、软件特性​ 1.4、使用用户 1.5、产品对比 二、架构 2.1、运行流程 2.2、连接器​ 2.3、引擎 2.3.1、设计理念 2.3.2、集群管理​ 2.3.3、核心功能​ 2.3.4、引擎对比 三、软件部署 3.1、Docker部署 3.2、发…

pytorch | minist手写数据集

一、神经网络神经网络&#xff08;Neural Network&#xff09;是一种受生物神经系统&#xff08;尤其是大脑神经元连接方式&#xff09;启发的机器学习模型&#xff0c;是深度学习的核心基础。它通过模拟大量 “人工神经元” 的互联结构&#xff0c;学习数据中的复杂模式和规律…

[C/C++安全编程]_[中级]_[如何避免出现野指针]

场景 在Rust里不会出现野指针的情况&#xff0c;那么在C里能避免吗&#xff1f; 说明 野指针是指指向无效内存地址的指针&#xff0c;访问它会导致未定义行为&#xff0c;可能引发程序崩溃、数据损坏或安全漏洞。它是 C/C 等手动内存管理语言中的常见错误&#xff0c;而 Rust…

机器学习基础:从数据到智能的入门指南

一、何谓机器学习​ 在我们的日常生活中&#xff0c;机器学习的身影无处不在。当你打开购物软件&#xff0c;它总能精准推荐你可能喜欢的商品&#xff1b;当你解锁手机&#xff0c;人脸识别瞬间完成&#xff1b;当你使用语音助手&#xff0c;它能准确理解你的指令。这些背后&a…

steam游戏搬砖项目超完整版实操分享

大家好&#xff0c;我是阿阳&#xff0c;今天再次最详细的给大家综合全面的分析讲解下steam搬砖&#xff0c;可以点击后面跳转往期文章了再次解下阿阳网客&#xff1a;关于steam游戏搬砖项目&#xff0c;我想说&#xff01;最早是21年5月份公开朋友圈&#xff0c;初次接触是在2…

vue2 面试题及详细答案150道(21 - 40)

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

原生前端JavaScript/CSS与现代框架(Vue、React)的联系与区别(详细版)

原生前端JavaScript/CSS与现代框架&#xff08;Vue、React&#xff09;的联系与区别&#xff0c;以及运行环境和条件 目录 引言原生前端技术概述 JavaScript基础CSS基础 现代框架概述 Vue.jsReact 联系与相似性主要区别对比运行环境和条件选择建议总结 引言 在现代Web开发中&…

基于机器视觉的迈克耳孙干涉环自动计数系统设计与实现

基于机器视觉的迈克耳孙干涉环自动计数系统设计与实现 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 摘要 本文设计并实现了一种基于机器视觉的迈克耳孙干涉环自动计数系统。该系统…

设计模式笔记(1)简单工厂模式

最近在看程杰的《大话设计模式》&#xff0c;在这里做一点笔记。 书中主要有两个角色&#xff1a; 小菜&#xff1a;初学者&#xff0c;学生&#xff1b; 大鸟&#xff1a;小菜表哥&#xff0c;大佬。 也按图中的对话形式 01 简单工厂模式 要求&#xff1a;使用c、Java、C#或VB…

Vue3 学习教程,从入门到精通,Vue 3 声明式渲染语法指南(10)

Vue 3 声明式渲染语法指南 本文将详细介绍 Vue 3 中的声明式渲染语法&#xff0c;涵盖所有核心概念&#xff0c;并通过一个完整的案例代码进行演示。案例代码中包含详细注释&#xff0c;帮助初学者更好地理解每个部分的功能和用法。 目录 简介声明式渲染基础 文本插值属性绑…

React hooks——useReducer

一、简介useReducer 是 React 提供的一个高级 Hook&#xff0c;用于管理复杂的状态逻辑。它类似于 Redux 中的 reducer 模式&#xff0c;适合处理包含多个子值、依赖前一个状态或逻辑复杂的状态更新场景。与 useState 相比&#xff0c;useReducer 提供更结构化的状态管理方式。…

SEO中关于关键词分类与布局的方法有那些

前边我们说到关键词挖掘肯定很重要&#xff0c;但如何把挖掘出来的关键词用好更为重要&#xff0c;下边我们就来说说很多seo刚入行的朋友比较头疼的关键词分类问题&#xff0c;为了更直观的感受搭配了表格&#xff0c;希望可以给大家一些帮助!SEO优化之关键词分类​挖掘出的关键…

考研最高效的准备工作是什么

从性价比的角度来说&#xff0c;考研最高效的准备工作是什么呢&#xff1f; 其实就是“卷成绩”。 卷学校中各门课程的成绩&#xff0c;卷考研必考的数学、英语、政治和专业课的成绩。 因为现阶段的考研&#xff0c;最看重的仍然是你的成绩&#xff0c;特别是初试成绩。 有了…

【Linux】基于Ollama和Streamlit快速部署聊天大模型

1.环境准备 1.1 安装Streamlit 在安装Streamlit之前&#xff0c;请确保您的系统中已经正确安装了Python和pip。您可以在终端或命令行中运行以下命令来验证它们是否已安装 python --version pip --version一旦您已经准备好环境&#xff0c;现在可以使用pip来安装Streamlit了。…

Jetpack - ViewModel、LiveData、DataBinding(数据绑定、双向数据绑定)

一、ViewModel 1、基本介绍 ViewModel 属于 Android Jetpack 架构组件的一部分&#xff0c;ViewModel 被设计用来存储和管理与 UI 相关的数据&#xff0c;这些数据在配置更改&#xff08;例如&#xff0c;屏幕旋转&#xff09;时能够幸存下来&#xff0c;ViewModel 的生命周期与…

Go并发聊天室:从零构建实战

大家好&#xff0c;今天我将分享一个使用Go语言从零开始构建的控制台并发聊天室项目。这个项目虽然简单&#xff0c;但它麻雀虽小五脏俱全&#xff0c;非常适合用来学习和实践Go语言强大的并发特性&#xff0c;尤其是 goroutine 和 channel 的使用。 一、项目亮点与功能特性 …

疯狂星期四第13天运营日报

网站运营第13天&#xff0c;点击观站&#xff1a; 疯狂星期四 crazy-thursday.com 全网最全的疯狂星期四文案网站 运营报告 昨日访问量 昨天大概60个ip, 同比上个星期是高点的&#xff0c;但是与星期四差别还是太大了。&#x1f602; 昨日搜索引擎收录情况 百度依旧0收录 …

吴恩达《AI for everyone》第二周课程笔记

机器学习项目工作流程以Echo/Alexa&#xff08;语音识别AI&#xff09;作为例子解释&#xff1a; 1. collect data 收集数据——人为找很多人说 Alexa&#xff0c;并录制音频&#xff1b;并且还会让一群人说其他词语&#xff0c;比如hello 2. train model 训练模型——用机器学…

uniapp props、$ref、$emit、$parent、$child、$on

1. uniapp props、ref、ref、ref、emit、parent、parent、parent、child、$on 1.1. 父组件和子组件 propsPage.vue导入props-son-view.vue组件的时候,我们就称index.vue为父组件依次类推,在vue中只要能获取到组件的实例,那么就可以调用组件的属性或是方法进行操作 1.2. pr…

4、ubuntu | dify创建知识库 | 上市公司个股研报知识库

1、创建知识库步骤 创建一个知识库并上传相关文档主要涉及以下五个关键步骤&#xff1a; 创建知识库&#xff1a;首先&#xff0c;需要创建一个新的知识库。这可以通过上传本地文件、从在线资源导入数据或者直接创建一个空的知识库来实现。 指定分段模式&#xff1a;接下来是…