【AI学习从零至壹】基于深度学习的⽂本分类任务

article/2025/6/7 22:35:25

基于深度学习的⽂本分类任务

  • 文本分类任务的实现思路
  • ⽂本预处理
    • 文本分词
      • Jieba分词
      • 文本分词器SentencePiece
        • 训练步骤
        • ⽂本结构化转换
      • 语料转换为训练样本

文本分类任务的实现思路

⽂本分类就是⼀个将⽂本分配到预定义类别的⼀个过程
在这里插入图片描述
整体流程包括:

  • ⽂本语料的获取和预处理
  • ⽂本语料的结构化编码
  • 分类模型设计及实现
    其中的⽂本语料结构化编码是重点,具体实现包括
    ⽂本语料 → 通过语料创建词典 → 语料转换为训练样本 → 词向量Embedding

⽂本预处理

模型训练的样本,通常会以句(sentence)或段落(paragraph⽅式呈现。所以通常会先进⾏⽂本分词,在⾃然语⾔处理过程中,称为标记(tokenize)。

文本分词

英⽂语料进⾏分词,相对⽐较简单。可以直接通过字符串的 split() 函数来直接拆分使⽤空格分隔开的单词。当然,这种直接的⽅式也存在着⼀些问题。例如:⽂本中的标点符号抽取,连字符的拼接等,也需要注意。

Jieba分词

jieba是⼀款强⼤的Python中⽂分词组件,采⽤MIT授权协议,兼容Python 2/3。它⽀持精确、全、搜索引擎、paddle四种分词模式,还能处理繁体中⽂,⽀持⾃定义词典,应⽤⼴泛。
核心功能

jieba.cut接受字符串,返回可迭代⽣成器
jieba.cut_for_search⽤于搜索引擎分词
jieba.lcut()直接生成的就是一个list
import jieba
strs = ["中国人民大学","你好我是谁","甜美"]
for str in strs:seg_list = jieba.cut(str,use_paddle = True)print("paddle Mode: " + '/'.join(list(seg_list)))
seg_list = jieba.cut("我来到北京大学",cut_all = True)
seg_list = jieba.cut("我来到中国人民大学",cut_all = False)
print(",".join(seg_list))

文本分词器SentencePiece

SentencePiece 是⼀种⽆监督的⽂本分词器和去分词器,主要⽤于基于神经⽹络的⽂本⽣成系统,其中词汇量在神经模型训练之前预先确定。 SentencePiece 实现了⼦词单元 subword units(例如,字节对编码 byte-pair-encoding(BPE))和 ⼀元语⾔模型 unigram language model),并扩展了从原始句⼦的直接训练⽅式。 SentencePiece 允许我们制作⼀个纯粹的端到端系统,不依赖于特定于语⾔的预处理/后处理。
需要预定义token的数量
通常情况下,基于神经⽹络的机器翻译模型使⽤的都是固定词汇表。不像绝⼤多数假设⽆限词汇量的⽆监督分词算法SentencePiece训练分词模型是要确保最终词汇量是固定的,例如 8k、16k 或 32k。请注意,SentencePiece 指定了训练的最终词汇量⼤⼩,这与使⽤合并操作次数的 subword-nmt 不同。合并操作的次数是 BPE 特定的参数,不适⽤于其他分割算法,包括 unigram、word 和 character。
通过原始语料训练
以前的分词实现需要输⼊的语句进⾏预标记处理。这种要求是训练确保模型有效性所必需的。但这会使预处理变得复杂,因为我们必须提前运⾏语⾔相关的分词器。 SentencePiece 就是⼀个可以满⾜快速从原始句⼦进⾏训练的模型。这对于训练中⽂和⽇⽂的分词器和分词解码器都很有⽤,因为单词之间不存在明确的空格。
空格被视为基本符号
⾃然语⾔处理的第⼀步是⽂本标记化。例如,标准的英语分词器会分割⽂本“Hello world.ˮ。分为以下三个token。[Hello][World][.]
SentencePiece 将输⼊⽂本视为 Unicode 字符序列。空格也作为普通符号处理。
为了显式地将空格作为基本标记处理,SentencePiece ⾸先使⽤元符号“▁ˮ(U+2581)对空格进⾏转义,如下所⽰。由于空格保留在分段⽂本中,因此我们可以对⽂本进⾏解码,⽽不会产⽣任何歧义。
此功能可以在不依赖特定语⾔资源的情况下执⾏去标记化。 请注意,在使⽤标准分词器拆分句⼦时,我们⽆法应⽤相同的⽆损转换,因为它们将空格视为特殊符号。标记化序列不保留恢复原始句⼦所需的信息。

detokenized = ''.join(pieces).replace('_',' ')

byte-pair-encoding(BPE)
BPE⾸先把⼀个完整的句⼦分割为单个的字符,频率最⾼的相
连字符对合并以后加⼊到词表中,直到达到⽬标词表⼤⼩。对
测试句⼦采⽤相同的subword分割⽅式。BPE分割的优势是它
可以较好的平衡词表⼤⼩和需要⽤于句⼦编码的token数量

训练步骤

分词
模型训练

import sentencepiece as spm
#引入外部文本资料训练分词模型
spm.SentencePieceTrainer.Train(intput = 'hlm_c.txt',model_prefix = 'hlm_mod',vocab_size = 10000)
#加载模型进行分词
sp = spm.SentencePieceProcessor(model_file = 'hlm_mod.model')
print(sp.EncodeAsPieces('我爱北京天安门'))
  • 方法参数
  • input : 每⾏⼀句的原始语料库⽂件。⽆需预处理。默认情况下,SentencePiece 使⽤ Unicode NFKC 规范化输⼊。还可以传递逗号分隔的⽂件列表
  • model_prefix : 输出的模型名前缀。算法最后会⽣成<model_name>.model和<model_name>.vocab两个⽂件。
  • vocab_size :词表⼤⼩,类似于8000,16000,32000等值
  • character_coverage :模型覆盖的字符数量,良好的默认值:对于具有丰富字符集的语⾔(如⽇语或中⽂)使⽤0.9995;对于其它⼩字符集的语⾔使⽤1.0
  • model_type :模型算法类型。从 unigram(默认)、bpe、char 、word 中进⾏选择。使⽤word类型时,输⼊句⼦必须预先标记。
    模型训练后还⽣成了⼀个 <model_name>.vocab 的⽂件,⾥⾯包含了指定⼤⼩的词典。
    ⽂字处理基本单元(token) 字符或词汇不重复字符构建字典
    当模型推理过程中,遇到字典中没有包含token时,出现key index错误。Out Of Value(OOV问题)解决思路:通过特殊token ,统⼀替代未知token,通过字典映射,⽂本转换token index
    转换值转变模型导⼊数据
    数据还需要从⽂本到数值转换,使⽤Dataset封装上⾯处理逻辑
    模型结构搭建
    token_index →→ embedding →→ rnn →→ linear →→ logits
    embedding shape:[batch, token_len, features] 符合 RNN输⼊要求
⽂本结构化转换

分词之后通常会选择下⼀步做的就是构建词典(词汇表 vocabulary)。它包含语料中所有不重复的词汇的集合。
词典(vocabulary)本质上就是⼀个 token ↔ index 的⼀个dict。

class Vocabulary:def __init__(self,vocab):self.vocab = vocabdef from_documents(cls,documents):#字典构建no_repeat_tokens = set()for cmt in documents:no_repeat_tokens.update(list(cmt))tokens = ['PAD','UNK'] + list(no_repeat_tokens)vocab = { tk:i for i,tk in enumerate(tokens)}return cls(vocab)

关于Token
在NLP的语料处理分词环节,因语⾔不同,往往也会产⽣出不同的结果。以东亚语⾔为例(中、⽇、韩):我们既可以把⽂章拆分为“词ˮ,⼜可以把⽂章拆分为“字ˮ。这种结果导致我们在描述分词时往往会让⼈产⽣歧义:到底是“词ˮ还是“字ˮ?
token可以解决这个概念(或者说描述)问题,不论我们拆分的是什么,每个被拆分出的内容,统⼀以token指代。
词汇表中保存的是不重复的token,token_index也就是给每个
token分配的唯⼀索引值。
代码中的 PAD 和 UNK 是在词表中添加的特殊符号。这⾥要解释⼀下NLP中的OOV概念。
关于OOV(Out Of Value )
OOV是指模型在测试或预测中遇到的新词。这些新词在模型已构建的词汇表中并不存在。因此,会导致模型⽅法⽆法识别并处理这些OOV新词。
例如我们的词表是基于标准的汉语词典词汇。当遇到类似“爷⻘
回ˮ,“⼝嗨ˮ,“布吉岛ˮ等新词时,词表⾥⾯没有这样的词,也就
⽆法把新词映射为对应的索引。

语料转换为训练样本

得到了词汇表,我们就把⽂本语料集中的每个样本,统⼀转换为token_index的集合。


http://www.hkcw.cn/article/AKSogJBOBh.shtml

相关文章

sourcetree中的mercurial有什么用

1、安装SourceTree的过程中&#xff0c;有一个选项就是mercurial&#xff0c;&#xff0c;一直没搞明白他是干什么用的&#xff0c;直到今天 2、ai登场 3、总结 此软件无用&#xff0c;不需要安装

【Linux】linux基础指令

目录 管理用户相关useraddpaaswduserdelLinux中的用户文件结构 ls-aLinux目录中的.和..是什么&#xff1f; -l-d-FLinux指令使用多个选项 pwdcd绝对路径与相对路径 touchmkdir-p rmdir-p rm-r-i-f mancpmvecho输出重定向和追加重定向 cat-b-n-s moreless-N-i headtail管道文件搭…

Linux中shell介绍

一、脚本实践 脚本示例1 -- 直接编辑并创建一个文件 vim bak.sh-- 写入下面这句话 # 获取ip地址信息 ifconfig ens33 | grep -w inet | awk {print $2} | xargs echo "IP: "-- 运行bak文件 bash bak.sh或者-- 添加可执行权限 chmod ax bak.sh./bak.sh或者source ba…

【智能制造】精读57页智慧工厂MES 项目解决方案【附全文阅读】

本文概述了智慧工厂MES项目解决方案在工业4.0背景下的整体框架与应用。智慧工厂以企业管理运营中心为核心&#xff0c;融合战略绩效、集团管控、决策分析及大数据分析平台&#xff0c;实现C2M&#xff08;Consumer to Manufacturer&#xff09;个性化订单处理。通过信息化系统平…

Stable Diffusion 技术原理解析与代码实践

1. 引言 Stable Diffusion 是由 Stability AI 开发的开源文本到图像生成模型,自 2022 年发布以来在创意产业和研究领域引起了广泛关注。它基于潜在扩散模型架构,能够根据文本描述生成高质量的图像内容,为艺术创作、设计和内容生成提供了强大工具。 2. 技术原理详解 2.1 扩…

Cursor + Claude 4:海外工具网站开发变现实战案例

项目背景 在全球数字化浪潮中&#xff0c;海外工具网站市场蕴含着巨大的商业机会。本文将详细介绍如何使用Cursor编辑器结合Claude 4 AI助手&#xff0c;开发一个面向海外用户的多功能工具网站"ToolBox Pro"&#xff0c;并通过多元化策略实现有效变现。该项目在6个月…

AI 赋能名片设计:告别模板化,创造独特视觉风格

在商务社交与个人品牌传播中&#xff0c;名片是传递信息的重要载体&#xff0c;但千篇一律的模板设计往往让印象大打折扣。智能设计工具的出现&#xff0c;正以智能排版、创意生成和高效迭代的优势&#xff0c;颠覆传统名片设计范式。本文将推荐创客贴、Canva、Fotor 懒设计等多…

MCP:让AI工具协作变得像聊天一样简单 [特殊字符]

想象一下,你正在处理一个项目,需要从A平台查看团队讨论,从B平台获取客户信息,还要在GitHub上检查代码进度。传统做法是什么?打开三个不同的网页,在各个平台间来回切换,复制粘贴数据,最后还可能因为信息分散而遗漏重要细节。 听起来很熟悉?这正是当前工作流程的痛点所…

h5的aliplayer-min.js 加密视频会走到debugger

h5的aliplayer-min.js 如果 https://g.alicdn.com/apsara-media-box/imp-web-player/2.19.0/aliplayer-min.js走加密视频的话会有debugger 更换aliplayer-min.js版本解决了 https://g.alicdn.com/apsara-media-box/imp-web-player/2.25.1/aliplayer-min.js 对应css&#xff1a…

AgenticSeek:您的本地AI智能大脑,免费且私密

还在为昂贵的AI智能体订阅费望而却步吗&#xff1f;还在担心将敏感数据交由第三方处理的隐私风险吗&#xff1f;现在&#xff0c;一款名为AgenticSeek的AI工具横空出世&#xff0c;它承诺提供一个完全免费、100%本地化运行、且功能强大的AI智能体解决方案&#xff0c;旨在成为付…

活动选择问题一文详解

活动选择问题一文详解 一、活动选择问题描述1.1 问题定义1.2 示例说明 二、贪心算法求解策略2.1 贪心思想2.2 策略证明2.3 算法步骤 三、代码实现3.1 Python 实现3.2 C 实现3.3 Java 实现 四、复杂度分析4.1 时间复杂度4.2 空间复杂度 五、应用拓展5.1 资源分配5.2 任务调度优化…

xmake的简易学习

文章目录 1. xmake是什么2. 一个可执行程序3. 一个库文件4. 遍历文件用法5. 第三方库3.1 系统安装库3.2 独立库 6. 后续 由于前一篇博客的最后说要做一些rknn的优化&#xff0c;其实这个工作很早就完成了&#xff0c;但是我是使用 xmake这个来做我的工程的构建的&#xff0c;不…

【网络安全 | 信息收集】灯塔(资产收集工具)安装教程

文章目录 简介安装教程1.创建文件2.执行命令3.运行程序简介 ARL(Asset Reconnaissance Lighthouse)资产侦察灯塔系统,旨在快速侦察与目标关联的互联网资产,构建基础资产信息库。 协助甲方安全团队或者渗透测试人员有效侦察和检索资产,发现存在的薄弱点和攻击面。 其特性如…

TCP小结

1. 核心特性 面向连接&#xff1a;通过三次握手建立连接&#xff0c;四次挥手终止连接&#xff0c;确保通信双方状态同步。 TCP连接建立的3次握手 抓包&#xff1a; client发出连接请求&#xff1b; server回应client请求&#xff0c;并且同步发送syn连接&#xff1b; clien…

Ansys Zemax | 手机镜头设计 - 第 3 部分:使用 STAR 模块和 ZOS-API 进行 STOP 分析

附件下载 联系工作人员获取附件 该系列文章将讨论智能手机镜头模组设计的挑战&#xff0c;从概念、设计到制造和结构变形的分析。本文是四部分系列的第三部分&#xff0c;它涵盖了使用 Ansys Zemax OpticStudio Enterprise 版本提供的 STAR 技术对智能手机镜头进行自动的结构…

【Redis】set 类型

set 一. set 类型介绍二. set 命令sadd、smembers、sismemberscard、spop、srandmembersmove、srem集合间操作交集&#xff1a;sinter、sinterstore并集&#xff1a;sunion、sunionstore差集&#xff1a;sdiff、sdiffstore 三. set 命令小结四. set 内部编码方式五. set 使用场…

006网上订餐系统技术解析:打造高效便捷的餐饮服务平台

网上订餐系统技术解析&#xff1a;打造高效便捷的餐饮服务平台 在数字化生活方式普及的当下&#xff0c;网上订餐系统成为连接餐饮商家与消费者的重要桥梁。该系统以菜品分类、订单管理等模块为核心&#xff0c;通过前台展示与后台录入的分工协作&#xff0c;为管理员和会员提…

Python趣学篇:Pygame重现经典打砖块游戏

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏介绍&#xff1a;《Python星球日记》 目录 一、游戏背景与技术选型1. 打砖块游戏…

Transformer学习资料

​​核心论文​​ 原论文标题&#xff1a;《Attention Is All You Need》&#xff08;Transformer原始论文&#xff09; ​​Transformer学习资源​​ 视频教程&#xff1a; B站中文视频&#xff1a;Transformer详解 中文教程&#xff1a; GitHub项目&#xff1a;learn-nlp-wi…

AIGC 基础篇 高等数学篇 02导数与微分

声明&#xff1a;本文章仅用于复习&#xff0c;请不要将本文章当做预习篇或者讲解篇 此外&#xff0c;此文章不会包含全部的高等数学知识&#xff0c;仅仅是为了学习AI而进行的前期学习&#xff0c;因此知识含量不会很多&#xff0c;另外补充一句&#xff0c;博主已经对上一篇…