ingredient-parser项目中的句子标准化处理技术解析
2025-06-20 15:31:29作者:温艾琴Wonderful
引言
在自然语言处理(NLP)领域,数据预处理是构建高效模型的关键步骤。本文将深入解析ingredient-parser项目中针对食材描述句子的标准化处理技术,这是该项目预处理流程的核心部分。
标准化处理的重要性
标准化处理是将句子中的特定特征转换为标准形式的过程,其核心目标是:
- 消除数据中可预见的变体
- 为模型提供整洁一致的数据
- 降低模型学习难度
- 提高标签分配的准确性
标准化处理流程详解
ingredient-parser项目通过PreProcessor类实现句子标准化,初始化时自动调用_normalise方法完成以下处理步骤:
1. 特殊符号标准化
破折号处理:
- 将en-dash(–)和em-dash(—)统一转换为连字符(-)
- 目的:便于数量范围的识别
2. 分数表示标准化
HTML实体分数转换:
- 将HTML实体分数(如
½)转换为Unicode形式(如½) - 使用Python标准库的
html.unescape函数实现
Unicode分数转换:
- 将Unicode分数转换为文本格式(如½→1/2)
- 特殊处理两种情况:
- 前面有连字符时:保持连接(如½-¾→1/2-3/4)
- 前面无连字符时:添加空格(如1½→1 1/2)
3. 复合分数处理
"and"连接的分数合并:
- 处理如"1 and 1/2"的复合分数
- 提前处理避免后续步骤将1/2单独处理
4. 分数标记化保护
分数特殊标记:
- 小于1的分数:1/2→#1$2
- 大于1的分数:2 3/4→2#3$4
- 目的:确保分数在分词时保持为单个token
5. 数量与单位分离
强制分隔:
- 在数量和单位间强制添加空格
- 处理连字符连接的情况(如1-cup→1 cup)
- 特殊处理"x"表示的数量(如1x, 2x)
6. 单位后缀处理
去除多余句点:
- 移除单位后的冗余句点(如tsp.→tsp)
- 仅针对训练数据中观察到的特定单位
7. 范围表达式标准化
范围格式统一:
- 识别多种范围表达形式:
- "1 to 2"
- "1- to 2-"
- "1 or 2"
- "1- or 2-"
- 统一转换为"X-Y"格式
- 确保范围保持为单个token
8. 重复单位处理
范围中单位合并:
- 处理如"5 oz - 8 oz"→"5-8 oz"
- 考虑单位同义词(如oz和ounce)
9. 数量与"x"合并
特殊数量格式:
- 合并如"1 x"→"1x"
- "0.5 x"→"0.5x"
10. 范围格式优化
空格清理:
- 移除范围连字符周围的空格
单位单数化处理
虽然单位单数化在分词后执行,但值得在此说明:
- 使用预定义的复数单位到单数形式的映射
- 记录被修改的token索引
- 模型标注后可自动恢复复数形式
调试技巧
通过设置show_debug_output=True,可以观察标准化过程的每个中间步骤,这对理解处理流程和调试非常有帮助。
结语
ingredient-parser项目的句子标准化处理展现了专业NLP工程中的精细设计,通过系统化的预处理流程,显著提升了后续模型处理的准确性和可靠性。这种处理方式不仅适用于食材解析领域,也可为其他领域的文本处理提供参考。
登录后查看全文
热门项目推荐
kernelopenEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。C030
Kimi-K2-ThinkingKimi K2 Thinking 是最新、性能最强的开源思维模型。从 Kimi K2 开始,我们将其打造为能够逐步推理并动态调用工具的思维智能体。通过显著提升多步推理深度,并在 200–300 次连续调用中保持稳定的工具使用能力,它在 Humanity's Last Exam (HLE)、BrowseComp 等基准测试中树立了新的技术标杆。同时,K2 Thinking 是原生 INT4 量化模型,具备 256k 上下文窗口,实现了推理延迟和 GPU 内存占用的无损降低。Python00
GLM-4.6V-FP8GLM-4.6V-FP8是GLM-V系列开源模型,支持128K上下文窗口,融合原生多模态函数调用能力,实现从视觉感知到执行的闭环。具备文档理解、图文生成、前端重构等功能,适用于云集群与本地部署,在同类参数规模中视觉理解性能领先。Jinja00
HunyuanOCRHunyuanOCR 是基于混元原生多模态架构打造的领先端到端 OCR 专家级视觉语言模型。它采用仅 10 亿参数的轻量化设计,在业界多项基准测试中取得了当前最佳性能。该模型不仅精通复杂多语言文档解析,还在文本检测与识别、开放域信息抽取、视频字幕提取及图片翻译等实际应用场景中表现卓越。00
GLM-ASR-Nano-2512GLM-ASR-Nano-2512 是一款稳健的开源语音识别模型,参数规模为 15 亿。该模型专为应对真实场景的复杂性而设计,在保持紧凑体量的同时,多项基准测试表现优于 OpenAI Whisper V3。Python00
GLM-TTSGLM-TTS 是一款基于大语言模型的高质量文本转语音(TTS)合成系统,支持零样本语音克隆和流式推理。该系统采用两阶段架构,结合了用于语音 token 生成的大语言模型(LLM)和用于波形合成的流匹配(Flow Matching)模型。 通过引入多奖励强化学习框架,GLM-TTS 显著提升了合成语音的表现力,相比传统 TTS 系统实现了更自然的情感控制。Python00
Spark-Formalizer-X1-7BSpark-Formalizer 是由科大讯飞团队开发的专用大型语言模型,专注于数学自动形式化任务。该模型擅长将自然语言数学问题转化为精确的 Lean4 形式化语句,在形式化语句生成方面达到了业界领先水平。Python00
项目优选
收起
deepin linux kernel
C
26
10
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
425
3.26 K
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
689
334
暂无简介
Dart
686
161
Ascend Extension for PyTorch
Python
231
264
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
9
1
React Native鸿蒙化仓库
JavaScript
266
326
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.22 K
667
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
65
19
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
19
30