公开笔记:自然语言处理(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

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

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

相关文章

光伏电池输出功率模型

1.光伏电池输出功率 1.1光伏电池的效率 温度对光伏电池/组件电效率的影响可以追溯到温度对电流I和电压V的影响,因为最大功率表达式为: 其中,Pm为最大输出功率;Vm为最大输出功率点电压;Im为最大输出功率点电流&#xf…

【大模型基础_毛玉仁】1.4 语言模型的采样方法

【大模型基础_毛玉仁】1.4 语言模型的采样方法 1.4 语言模型的采样方法1.4.1 概率最大化方法1)贪心搜索(GreedySearch)2)波束搜索(BeamSearch) 1.4.2 随机采样方法1)Top-K 采样2)Top…

MyBatis - XML CRUD 其他查询

1. XML 配置文件 使用 MyBatis 操作数据库的方式有两种: 注解 (在注解中定义 SQL 语句)XML 配置文件 (在 XML 文件中定义 SQL 语句) 在上一篇博客中, 已经讲解了如何使用注解操作数据库, 本篇文章来讲解如何使用 XML 进行 MyBatis 开发. 使用 XML 的步骤, 和使用注解的步骤…

DeepSeek + 飞书多维表格搭建你的高效工作流

众所周知,大模型DeepSeek擅长于处理大规模语言模型推理任务,特别是在成本降低和思维链推理方面表现出色‌,我们一般把大模型必做我们的大脑,但是一个人不能只有大脑,还需要其他输入输出以及操作支配的眼耳鼻嘴手足等。…

跨域-告别CORS烦恼

跨域-告别CORS烦恼 文章目录 跨域-告别CORS烦恼[toc]1-参考网址2-思路整理1-核心问题2-个人思考3-脑洞打开4-个人思考-修正版1-个人思考2-脑洞打开 3-知识整理1-什么是跨域一、同源策略简介什么是源什么是同源是否是同源的判断哪些操作不受同源策略限制跨域如何跨域 二、CORS 简…

基于Django创建一个WEB后端框架(DjangoRestFramework+MySQL)流程

一、Django项目初始化 1.创建Django项目 Django-admin startproject 项目名 2.安装 djangorestframework pip install djangorestframework 解释: Django REST Framework (DRF) 是基于 Django 框架的一个强大的 Web API 框架,提供了多种工具和库来构建 RESTf…

基于多目标向日葵优化算法(Multi-objective Sunflower Optimization,MOSFO)的移动机器人路径规划研究,MATLAB代码

一、机器人路径规划介绍 移动机器人路径规划是机器人研究的重要分支,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量…

cursor使用经验分享(java后端服务开发向)

前言 cursor是一款基于vscode,并集成AI能力的代码编辑器,其功能包括但不限于代码生成及补全、AI对话(能够直接将代码环境作为上下文)、即时应用建议等等,是一款面向未来的代码编辑器。 对于vscode,最先想…

【Java学习】异常

一、异常的处理过程 异常类的似复刻变量被throw时,会立即中止当前所在的这层方法,即当层方法里throw异常类似复刻变量之后的语句就不会执行了,如果throw异常语句在当层方法中被try{}包裹,则中止就先发生被包裹在了try{}层&#xf…

双足机器狗开发:Rider - Pi

双足机器狗开发:Rider - Pi https://github.com/YahboomTechnology/Rider-Pi-Robot 项目介绍 Rider - Pi是一款为开发者、教育工作者和机器人爱好者设计的桌面双轮腿式机器人,它基于树莓派CM4核心模块构建,具备多种先进功能和特点: 硬件特性 核心模块:采用树莓派CM4核…

vscode 查看3d

目录 1. vscode-3d-preview obj查看ok 2. vscode-obj-viewer 没找到这个插件: 3. 3D Viewer for Vscode 查看obj失败 1. vscode-3d-preview obj查看ok 可以查看obj 显示过程:开始是绿屏,过了1到2秒,后来就正常看了。 2. vsc…

Nginx 本地配置ssl证书

Nginx 本地配置ssl证书 主要为了本地使用https站点访问测试 本地linux 服务器环境为Centos7 本地安装mkcert证书工具 对于 Debian 或 Ubuntu 系统,你可以使用以下命令安装: sudo apt update sudo apt install mkcert # 验证是否安装成功 mkcert --vers…

Redis相关面试题

Redis相关面试题 缓存三剑客 面试官:什么是缓存穿透 ? 怎么解决 ? 缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。这种情况…

Android ChatOn-v1.66.536-598-[构建于ChatGPT和GPT-4o之上]

ChatOn 链接:https://pan.xunlei.com/s/VOKYnq-i3C83CK-HJ1gfLf4gA1?pwdwzwc# 添加了最大无限积分 删除了所有调试信息 语言:全语言支持

机器学习(六)

一,决策树: 简介: 决策树是一种通过构建类似树状的结构(颠倒的树),从根节点开始逐步对数据进行划分,最终在叶子节点做出预测结果的模型。 结构组成: 根节点:初始的数据集…

求最小公倍数

求最小公倍数 编程实现: 求最小公倍数。 具体要求: 1、小猫询问“请输入第一个数”,并在列表中求出该数的质因数放入列表A,例如输入12; 2、小猫依次询问“请输入第二个数”,并在列表中求出该数的质因数…

【人工智能】GPT-4 vs DeepSeek-R1:谁主导了2025年的AI技术竞争?

前言 2025年,人工智能技术将迎来更加激烈的竞争。随着OpenAI的GPT-4和中国初创公司DeepSeek的DeepSeek-R1在全球范围内崭露头角,AI技术的竞争格局开始发生变化。这篇文章将详细对比这两款AI模型,从技术背景、应用领域、性能、成本效益等多个方…

C/C++蓝桥杯算法真题打卡(Day1)

一、LCR 018. 验证回文串 - 力扣(LeetCode) 算法代码: class Solution { public:bool isPalindrome(string s) {int n s.size();// 处理一下s为空字符的情况if (n 0) {return true; // 修正拼写错误}// 定义左右指针遍历字符串int left …

SpringUI高保真动态交互元件库:助力产品原型设计

SpringUI 是一个专为Web设计与开发领域打造的高质量、全面且易于使用的交互元件集合。通过提供一系列预制的、高质量的交互组件,帮助设计师快速构建出功能丰富、界面美观的原型。 ————基础元件: ——————按钮 Button:基础按钮、禁用…

vue+neo4j 四大名著知识图谱问答系统

编号: D039 视频 vueneo4j四大名著知识图谱问答系统 技术架构 vuedjangoneo4jmysql技术实现 功能模块图 问答:基于知识图谱检索、支持图多跳、显示推理路径 姜维的师傅的主公的臣是谁: 马谡 知识图谱:四大名著总共4个图谱 红楼梦图谱 …