公开笔记:自然语言处理(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-learn:
CountVectorizer。
-
示例:
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-learn:
TfidfVectorizer。
-
示例:
from sklearn.feature_extraction.text import TfidfVectorizercorpus = ["我爱北京天安门", "天安门上太阳升"]
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
print(X.toarray())
print(vectorizer.get_feature_names_out())
4. 总结
目前主流的中文文本编码方法主要集中在以下两类:
-
预训练语言模型(如 BERT、GPT、ERNIE 等):能够捕捉上下文语义,适合复杂的 NLP 任务。
-
子词编码(如 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:传输控制协议,面向连接的,可靠的,基于字节流ÿ…...
ubuntu打包 qt 程序,不用每次都用linuxdeployqt打包
用linuxdeployqt打包太麻烦,每次程序编译都要用linuxdeployqt打包一次,而且每次都要很长时间,通过研究得出一个新的打包方法 1.用用linuxdeployqt得出依赖的库文件(只要没有增加新模块,只要用一次就可以) …...
【Python项目】基于深度学习的车辆特征分析系统
【Python项目】基于深度学习的车辆特征分析系统 技术简介:采用Python技术、MySQL数据库、卷积神经网络(CNN)等实现。 系统简介:该系统基于深度学习技术,特别是卷积神经网络(CNN),用…...
C++(初阶)(二)——类和对象
类和对象 类和对象类的定义格式访问限定符类域 实例化实例化概念内存对齐 this指针 类的定义 类(Class)是一种用于创建对象的蓝图或模板。它定义了对象(变量)的属性(数据)和方法(行为ÿ…...
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,…...
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…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
