讲师中心 微信公众号
AI工具推荐 视频效率加速

Python处理中文文本如何构建PyTorch词表_jieba分词结合torchtext生成Vocab

星杰同学_5148

星杰同学_5148

发布时间:2026-05-13 06:24:22

|

749人浏览过

|

来源于php中文网

原创

因为torchtext默认按空格切分,而中文无空格,必须先用jieba等工具完成词粒度分词,再将每句分词结果作为token列表yield给build_vocab_from_iterator。

python处理中文文本如何构建pytorch词表_jieba分词结合torchtext生成vocab

为什么不能直接用 torchtext.vocab.build_vocab_from_iterator 处理中文原始文本

因为 torchtext.vocab.build_vocab_from_iterator 默认按空格切分,而中文词之间没有空格。直接喂入“我喜欢学习”会变成 ['我', '喜', '欢', '学', '习'](字粒度),而非你想要的 ['我', '喜欢', '学习'](词粒度)。不先分词,Vocab 就无法识别有意义的语义单元。

必须在构建 Vocab 前完成分词,且分词结果需是可迭代的 token 列表(如 ['我', '喜欢', '机器', '学习']),不是字符串或嵌套结构。

常见错误:把 jieba.lcut("我喜欢") 的结果直接传给 build_vocab_from_iterator 而不包装成生成器;或误用 jieba.cut(返回 generator,但内部 yield 字符串,需显式转 list)。

如何用 jieba 分词并适配 torchtext.vocab.build_vocab_from_iterator

关键在于构造一个「每次 yield 一个分词后 token 列表」的迭代器。不是对每个字符、也不是对整句,而是对每条样本做 jieba.lcut,再把结果作为单次产出。

立即学习“Python免费学习笔记(深入)”;

Python Use Agent
Python Use Agent

智能执行Python任务,自动生成、执行代码并反馈结果,无需额外配置,兼容旧命令。

下载
  • 用 jieba.lcut(sentence)(非 cut)确保返回 list[str],避免 generator 嵌套问题
  • 迭代器函数里不要 return,要用 yield 返回分词列表,例如:yield ['我', '喜欢', '深度', '学习']
  • 务必过滤空字符串和纯空白 token,比如 jieba.lcut(' ') 可能返回 [''],会污染词表
  • 若需保留标点,确保 jieba 没开启 cut_all=True 或 use_paddle=True 导致切分过细(如把“。”切成“。”和空)

示例代码片段:

import jieba
from torchtext.vocab import build_vocab_from_iterator
<p>def yield_tokens(data_iter):
for sentence in data_iter:</p><h1>sentence 是 str,如 "今天天气很好"</h1><pre class='brush:python;toolbar:false;'>    tokens = jieba.lcut(sentence.strip())
    tokens = [t for t in tokens if t.strip()]  # 过滤空白
    yield tokens

假设 train_texts 是中文句子列表

vocab = build_vocab_from_iterator( yield_tokens(train_texts), min_freq=2, specials=['<unk>', '<pad>', '<sos>', '<eos>'] ) vocab.set_default_index(vocab['<unk>'])

torchtext 0.12+ 版本中 Vocab 构建的兼容性注意点

新版 torchtext(≥0.12)已弃用 torchtext.vocab.Vocab 的旧初始化方式(如传 Counter),统一使用 build_vocab_from_iterator。如果你看到 TypeError: 'Vocab' object is not iterable,大概率是误把旧版写法(如 Vocab(counter))混进新流程。

另外注意:

  • build_vocab_from_iterator 不接受单个 list,只接受可迭代对象(如 list、generator、map)——所以 yield_tokens 必须返回 generator,不能直接返回 [['我'], ['喜欢']]
  • min_freq 对中文尤其重要:很多分词结果(如人名、地名)频次低但需保留,建议先统计再设阈值,别盲目设 min_freq=5
  • specials 中的 <pad> 必须存在,否则后续 pad_sequence 会报 KeyError;顺序不影响,但名字要严格匹配

如何验证分词 + 词表是否真正生效

最直接的方式:拿一句测试文本走通全流程,看输出 id 是否合理。别只检查 vocab.__len__() 或打印前 10 个词。

  • 用 vocab.lookup_indices(['我', '喜欢', '学习']) 看是否返回非负整数(不是 [0, 0, 0])
  • 对未登录词(如生造词“量子纠缠体”),应返回 <unk> 对应的 index(通常是 0),而不是抛异常
  • 检查 vocab['<pad>'] 和 vocab['<unk>'] 是否存在且不相等;若相等,说明 set_default_index 没生效或 specials 漏写了
  • 如果模型训练时 loss 不降、梯度爆炸,回头查 vocab 是否把大量词映射到了 <unk> —— 很可能是分词阶段漏了加载自定义词典(如用 jieba.load_userdict())

中文场景下,分词质量直接影响 Vocab 的泛化能力。与其调 min_freq,不如先确认 jieba 分得对不对。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1631

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

3984

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1629

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

22937

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2807

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2847

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1123

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

0

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn