公开笔记:自然语言处理(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…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...