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

公开笔记:自然语言处理(NLP)中文文本预处理主流方法

        在自然语言处理(NLP)领域,将中文文本转化为数字的主流方法主要集中在预训练语言模型子词编码技术上。这些方法能够更好地捕捉语义信息,并且在各种NLP任务中表现出色。以下是目前主流的文本编码方法:


1. 基于预训练语言模型的编码方法

        预训练语言模型通过大规模语料库进行训练,能够生成高质量的文本表示。以下是几种主流的预训练模型:

1.1 BERT(Bidirectional Encoder Representations from Transformers)

  • 特点:BERT 是一种双向 Transformer 模型,能够捕捉上下文信息。

  • 应用场景:文本分类、命名实体识别、问答系统等。

  • 使用方法

    from transformers import BertTokenizer, BertModel
    import torch# 加载预训练模型和分词器
    tokenizer = BertTokenizer.from_pretrained("bert-base-chinese")
    model = BertModel.from_pretrained("bert-base-chinese")# 输入文本
    text = "我爱北京天安门"
    inputs = tokenizer(text, return_tensors="pt")# 获取文本表示
    outputs = model(**inputs)
    last_hidden_states = outputs.last_hidden_state
    print(last_hidden_states)

1.2 GPT(Generative Pre-trained Transformer)

  • 特点:GPT 是一种单向 Transformer 模型,适合生成任务。

  • 应用场景:文本生成、对话系统、摘要生成等。

  • 使用方法

    from transformers import GPT2Tokenizer, GPT2Model
    import torch# 加载预训练模型和分词器
    tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
    model = GPT2Model.from_pretrained("gpt2")# 输入文本
    text = "我爱北京天安门"
    inputs = tokenizer(text, return_tensors="pt")# 获取文本表示
    outputs = model(**inputs)
    last_hidden_states = outputs.last_hidden_state
    print(last_hidden_states)
     

1.3 RoBERTa

  • 特点:RoBERTa 是 BERT 的改进版本,通过更大的数据集和更长的训练时间优化性能。

  • 应用场景:与 BERT 类似,但性能更好。

  • 使用方法

    from transformers import RobertaTokenizer, RobertaModel
    import torch# 加载预训练模型和分词器
    tokenizer = RobertaTokenizer.from_pretrained("roberta-base")
    model = RobertaModel.from_pretrained("roberta-base")# 输入文本
    text = "我爱北京天安门"
    inputs = tokenizer(text, return_tensors="pt")# 获取文本表示
    outputs = model(**inputs)
    last_hidden_states = outputs.last_hidden_state
    print(last_hidden_states)

1.4 ERNIE(Enhanced Representation through kNowledge Integration)

  • 特点:ERNIE 是百度推出的预训练模型,专门针对中文优化,融合了知识图谱信息。

  • 应用场景:中文文本理解、问答系统等。

  • 使用方法

    from transformers import BertTokenizer, BertModel
    import torch# 加载ERNIE模型(基于BERT架构)
    tokenizer = BertTokenizer.from_pretrained("nghuyong/ernie-1.0")
    model = BertModel.from_pretrained("nghuyong/ernie-1.0")# 输入文本
    text = "我爱北京天安门"
    inputs = tokenizer(text, return_tensors="pt")# 获取文本表示
    outputs = model(**inputs)
    last_hidden_states = outputs.last_hidden_state
    print(last_hidden_states)


2. 子词编码(Subword Tokenization)

子词编码是一种将单词分解为更小子词单元的技术,能够有效处理未登录词(OOV)问题。

2.1 Byte Pair Encoding (BPE)

  • 特点:通过合并高频子词对来构建词汇表。

  • 应用场景:GPT、BERT 等模型的分词基础。

  • 工具

    • Hugging Face Transformers:支持 BPE 分词。

    • SentencePiece:独立的子词分词工具。

使用 SentencePiece:
import sentencepiece as spm# 加载预训练模型
sp = spm.SentencePieceProcessor()
sp.load("model.spm")# 分词和编码
text = "我爱北京天安门"
tokens = sp.encode_as_pieces(text)
ids = sp.encode_as_ids(text)
print(tokens)  # ['▁我', '爱', '北京', '天安门']
print(ids)    # [123, 456, 789, 1011]

2.2 WordPiece

  • 特点:BERT 使用的分词方法,基于概率选择子词。

  • 应用场景:BERT 及其变体模型。

  • 工具

    • Hugging Face Transformers:支持 WordPiece 分词。

使用 BERT 的 WordPiece:
from transformers import BertTokenizertokenizer = BertTokenizer.from_pretrained("bert-base-chinese")
text = "我爱北京天安门"
tokens = tokenizer.tokenize(text)
ids = tokenizer.convert_tokens_to_ids(tokens)
print(tokens)  # ['我', '爱', '北', '京', '天', '安', '门']
print(ids)    # [2769, 4263, 1266, 776, 1921, 2110, 730]

3. 传统方法

虽然预训练模型和子词编码是主流,但传统方法在某些场景下仍然有用。

3.1 词袋模型(Bag of Words, BoW)

  • 特点:简单高效,但无法捕捉语义信息。

  • 工具

    • Scikit-learnCountVectorizer

示例:
from sklearn.feature_extraction.text import CountVectorizercorpus = ["我爱北京天安门", "天安门上太阳升"]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
print(X.toarray())
print(vectorizer.get_feature_names_out())

3.2 TF-IDF

  • 特点:考虑词频和逆文档频率,适合文本分类。

  • 工具

    • Scikit-learnTfidfVectorizer

示例:
from sklearn.feature_extraction.text import TfidfVectorizercorpus = ["我爱北京天安门", "天安门上太阳升"]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
print(X.toarray())
print(vectorizer.get_feature_names_out())

4. 总结

目前主流的中文文本编码方法主要集中在以下两类:

  1. 预训练语言模型(如 BERT、GPT、ERNIE 等):能够捕捉上下文语义,适合复杂的 NLP 任务。

  2. 子词编码(如 BPE、WordPiece):有效处理未登录词,适合分词和编码。

传统方法(如词袋模型、TF-IDF)虽然简单,但在深度学习时代逐渐被淘汰,仅适用于简单的任务或小规模数据集。

根据任务需求选择合适的编码方法:

  • 如果需要高质量的语义表示,优先选择预训练语言模型。

  • 如果需要处理未登录词或分词问题,优先选择子词编码技术。

备注:huggingface访问不了问题可以使用国内镜像:HF-Mirror

相关文章:

公开笔记:自然语言处理(NLP)中文文本预处理主流方法

在自然语言处理(NLP)领域,将中文文本转化为数字的主流方法主要集中在预训练语言模型和子词编码技术上。这些方法能够更好地捕捉语义信息,并且在各种NLP任务中表现出色。以下是目前主流的文本编码方法: 1. 基于预训练语…...

【一个月备战蓝桥算法】递归与递推

字典序 在刷题和计算机科学领域,字典序(Lexicographical order)也称为词典序、字典顺序、字母序,是一种对序列元素进行排序的方式,它模仿了字典中单词的排序规则。下面从不同的数据类型来详细解释字典序: …...

算法策略深度解析与实战应用

一、算法策略的本质与价值 算法策略是计算机科学的灵魂,它决定了问题解决的效率与质量。优秀的算法设计者就像战场上的指挥官,需要根据地形(问题特征)选择最佳战术(算法策略)。本文将深入剖析五大核心算法…...

【LeetCode 热题 100】3. 无重复字符的最长子串 | python 【中等】

美美超过管解 题目: 3. 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 注…...

计算机网络(1) 网络通信基础,协议介绍,通信框架

网络结构模式 C/S-----客户端和服务器 B/S -----浏览器服务器 MAC地址 每一个网卡都拥有独一无二的48位串行号,也即MAC地址,也叫做物理地址、硬件地址或者是局域网地址 MAC地址表示为12个16进制数 如00-16-EA-AE-3C-40 (每一个数可以用四个…...

在 Docker 中,无法直接将外部多个端口映射到容器内部的同一个端口

Docker 的端口映射是一对一的,即一个外部端口只能映射到容器内部的一个端口。 1. 为什么不能多对一映射? 端口冲突: 如果外部多个端口映射到容器内部的同一个端口,Docker 无法区分外部请求应该转发到哪个内部端口,会…...

计算机网络开发(2)TCP\UDP区别、TCP通信框架、服务端客户端通信实例

TCP与UDP区别 UDP:用户数据报协议,面向无连接,可以单播,多播,广播, 面向数据报,不可靠TCP:传输控制协议,面向连接的,可靠的,基于字节流&#xff…...

ubuntu打包 qt 程序,不用每次都用linuxdeployqt打包

用linuxdeployqt打包太麻烦,每次程序编译都要用linuxdeployqt打包一次,而且每次都要很长时间,通过研究得出一个新的打包方法 1.用用linuxdeployqt得出依赖的库文件(只要没有增加新模块,只要用一次就可以) …...

【Python项目】基于深度学习的车辆特征分析系统

【Python项目】基于深度学习的车辆特征分析系统 技术简介:采用Python技术、MySQL数据库、卷积神经网络(CNN)等实现。 系统简介:该系统基于深度学习技术,特别是卷积神经网络(CNN),用…...

C++(初阶)(二)——类和对象

类和对象 类和对象类的定义格式访问限定符类域 实例化实例化概念内存对齐 this指针 类的定义 类(Class)是一种用于创建对象的蓝图或模板。它定义了对象(变量)的属性(数据)和方法(行为&#xff…...

JS—组成:2分钟掌握什么是ECMAScript操作,什么是DOM操作,什么是BOM操作

个人博客:haichenyi.com。感谢关注 1. 目录 1–目录2–组成3–内置对象 2. 组成 一直都在说JS,JS,到底啥是JS有了解过吗?JS由哪几部分组成的呢? 定义: JavaScript是一种轻量级、解释型或即时编译型的编程语…...

ArcGIS操作:10 投影坐标系转地理坐标系

应用情景:在计算shp面质心坐标的时,由于需要的坐标是经纬度,所以需要将投影坐标系转化为地理坐标系 1、打开工具箱 2、右侧:数据管理工具 → 投影和变换 → 要素 → 投影 3、选择投影的数据、输出路径、地理坐标系,点…...

NVIDIA Jetson Nano的国产替代,基于算能BM1684X+FPGA+AI算力盒子,支持deepseek边缘部署

NVIDIA Jetson Nano的国产替代,基于算能BM1684X的AI算力盒子,支持deepseek边缘部署 另外,还提供BM1684XFPGAAI的解决方案。 核心板基于Sophon SG2300X SoC(也叫BM1684X)打造 带有8核ARM Cortex-A53 2.3GHz&#xff0c…...

c++全排列

题目描述 按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n。 输出格式 由 1∼n 组成的所有不重复的数字序列,每行一个序列。 每个数字保留 5 个场…...

VSCode 配置优化指南:打造极致高效的前端开发环境

VSCode 配置优化指南:打造极致高效的前端开发环境 一、基础环境配置:让开发更流畅 1. 性能优化设置 // settings.json {"files.autoSave": "afterDelay", // 自动保存(延迟1秒)"files.exclud…...

利用 ArcGIS Pro 快速统计省域各市道路长度的实操指南

在地理信息分析与处理的工作中,ArcGIS Pro 是一款功能强大的 GIS 软件,它能够帮助我们高效地完成各种复杂的空间数据分析任务。 现在,就让我们一起深入学习如何借助 ArcGIS Pro 来统计省下面各市的道路长度,这一技能在城市规划、…...

CTF 中的 XSS 攻击:原理、技巧与实战案例

跨站脚本攻击(Cross-Site Scripting,简称 XSS)是一种常见的 Web 漏洞,利用该漏洞,攻击者可以在受害者浏览器中注入并执行恶意脚本。在 CTF(Capture The Flag)竞赛中,XSS 攻击不仅是一…...

LeetCode hot 100—二叉树的最大深度

题目 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3示例 2: 输入:root [1,n…...

.h264/.h265文件 前端直接播放

由于接收摄像头 告警视频,需要前端直接播放,不想后端转码后传输。 摄像头 判断到告警后往服务器上报 .h264 /.h265 视频文件。 解决方式:html5直接采用 ffmpeg 进行转码 ,然后塞入 video标签,进行播放 目前改动ffmp…...

【单片机通信技术】串口通信的几种方式与比较,详细解释SPI通信

一、介绍 串口通信是一种通过串行接口逐位传输数据的通信方式,广泛应用于嵌入式系统、工业控制、传感器网络等领域。 二、以下是几种常见的串口通信方式及其对比: 1.UART(Universal Asynchronous Receiver/Transmitter) 特点&am…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...