当前位置: 首页 > 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

http://www.lryc.cn/news/547831.html

相关文章:

  • 【一个月备战蓝桥算法】递归与递推
  • 算法策略深度解析与实战应用
  • 【LeetCode 热题 100】3. 无重复字符的最长子串 | python 【中等】
  • 计算机网络(1) 网络通信基础,协议介绍,通信框架
  • 在 Docker 中,无法直接将外部多个端口映射到容器内部的同一个端口
  • 计算机网络开发(2)TCP\UDP区别、TCP通信框架、服务端客户端通信实例
  • ubuntu打包 qt 程序,不用每次都用linuxdeployqt打包
  • 【Python项目】基于深度学习的车辆特征分析系统
  • C++(初阶)(二)——类和对象
  • JS—组成:2分钟掌握什么是ECMAScript操作,什么是DOM操作,什么是BOM操作
  • ArcGIS操作:10 投影坐标系转地理坐标系
  • NVIDIA Jetson Nano的国产替代,基于算能BM1684X+FPGA+AI算力盒子,支持deepseek边缘部署
  • c++全排列
  • VSCode 配置优化指南:打造极致高效的前端开发环境
  • 利用 ArcGIS Pro 快速统计省域各市道路长度的实操指南
  • CTF 中的 XSS 攻击:原理、技巧与实战案例
  • LeetCode hot 100—二叉树的最大深度
  • .h264/.h265文件 前端直接播放
  • 【单片机通信技术】串口通信的几种方式与比较,详细解释SPI通信
  • PDF转JPG(并去除多余的白边)
  • 题目 3217 ⭐成绩统计⭐【滑动窗口 + 二分搜索】蓝桥杯2024年第十五届省赛
  • URL中的特殊字符与web安全
  • 八卡5090服务器首发亮相!
  • esp32驱动带字库芯片TFT屏幕
  • 为AI聊天工具添加一个知识系统 之138 设计重审 之2 文章学 引言之2 附加符号学附属诠释学附随工程学(联系)
  • java环境部署
  • 正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-2.1 uboot简介
  • CentOS 7.9 安装 ClickHouse 文档
  • 高考數學。。。
  • 使用GitLink个人建站服务部署Allure在线测试报告