首页/新闻资讯/正文详情

compromise 词库数据管线:从 data/ 词表到预训练词模型的压缩与打包机制

发布时间:2026/9/23 15:29:01 来源:云帆数科 栏目:资讯中心
compromise 词库数据管线:从 data/ 词表到预训练词模型的压缩与打包机制
NLP人工智能【免费下载链接】compromisemodest natural-language processing项目地址https://gitcode.com/gh_mirrors/co/compromise点击查看免费下载导读本指南聚焦 compromisemodest natural-language processing项目中负责词库数据的data/目录讲解文本词表如何经过编译与压缩最终变成 nlp 引擎运行时加载的词模型。读完本文你将掌握该项目的词库组织方式、npm run pack打包管线、efrt 压缩的保留字符规则、歧义词switch的处理策略以及自动词形变化conjugation的生成原理并能安全地向词库中添加新词条。data/ 目录在 compromise 中的角色compromise 是一个基于规则与词表的轻量级 NLP 库。它不依赖外部模型文件而是把人工整理的词表数据编译进 JavaScript 代码中。data/目录正是这份数据源开发者在这里维护纯文本词表运行打包脚本后数据会被压缩并写入src/2-two/preTagger/下的模型文件供词性标注preTagger等模块在运行时直接使用。从源码结构看data/下分为两个主要部分data/lexicon/ —— 按词性分类的平面词表名词、动词、形容词、人名、地名、日期等以及处理歧义词的switches/子目录data/pairs/ —— 用于自动推导词形变化的词对数据如过去式、比较级、动名词等。打包入口data/lexicon/index.jsdata/lexicon/index.js是整个词表数据的汇总入口文件开头的注释直接说明了它的用途//directory of files to pack with node scripts/pack.js //they are stored in compressed form它把每个词表文件与对应的词性标签tag绑定成一个二维数组例如[demonyms, Demonym], [organizations, Organization], [possessives, Possessive], [actors, Actor], [pronouns, Pronoun], [singulars, Singular], [uncountables, Uncountable], [properNouns, ProperNoun], [weekdays, WeekDay], [months, Month], [dates, Date], [durations, Duration], [infinitives, Infinitive], [modals, Modal], [verbs, Verb], [phrasals, PhrasalVerb],随后遍历该数组把每个词条写入lex对象词 → 标签最终export default lex。其中还内置了一条词表 lint 规则如果某个词包含.、,、数字或-或不是全小写就会在控制台打印出来帮助维护者发现格式问题。除了这些分类词表data/lexicon/misc.js还维护着一批零散的精确映射例如said: PastTense、going: Gerund、never: Negative、where: QuestionWord、myself: Reflexive、leaves: Plural|Verb等用于兜底那些不便归类的常见词。核心流程一修改后运行npm run packdata/README.md的第一条注意事项是修改词表后必须运行npm run pack改动才会生效。这是因为运行时加载的并不是data/下的原始词表而是打包生成的压缩产物。打包逻辑集中在 scripts/pack.js它定义了两个打包步骤步骤标签输出路径压缩方式1lexicon./src/2-two/preTagger/model/lexicon/_data.jsefrt 的pack()2pairs./src/2-two/preTagger/model/models/_data.jssuffix-thumb 的learn()compress()打包脚本会打印每个步骤的耗时与产物大小以 kB 计并在生成的产物文件顶部写入// generated in ./lib/lexicon之类的注释明确标注这是自动生成的文件不应手工编辑。lexicon 步骤的压缩逻辑该步骤先把词表按标签反转为标签 → 词数组再对每个数组调用efrt的pack()Object.keys(lexicon).forEach(word { let tags lexicon[word] if (typeof tags string) { tags [tags] } tags.forEach(tag { packed[tag] packed[tag] || [] packed[tag].push(word) }) }) Object.keys(packed).forEach(tag { packed[tag] pack(packed[tag]) })注意一个细节由于lexicon[word]可能是Person|Noun这类双标签字符串脚本会先把它拆成数组再把词分别挂到两个标签下从而在压缩产物里形成Person|Noun这样的复合键。查看产物 src/2-two/preTagger/model/lexicon/_data.js 可以看到最终输出是标签: true¦压缩串的形式例如Singular: true¦0:5I;1:5G;2:4V;..., Person|Date: true¦a2j0sep;an0une;!uary;p0ugust,v0;ril, Verb: true¦born,cannot,gonna,has,keep tabs,msg,核心流程二efrt 压缩与保留字符data/README.md第二条注意事项指出词表中的词会统一转为小写并用 efrt 进行压缩字符集[0-9,;!:|¦]是保留字符不能出现在词条中。efrt 是一种面向单词列表的紧凑 trie 压缩算法它把大量单词合并成极短的字符串这也是 compromise 能保持轻量modest的关键。由于压缩格式依赖,、;、:、|、¦等字符作为分隔/索引符号如果词条本身包含这些字符就会破坏压缩串的结构导致解析错乱。因此向词库添加新词时必须遵守这一约束词条必须全小写index.js中的 lint 逻辑也会校验str.trim().toLowerCase() ! str词条不能包含数字、.、,、-以及;、:、|、¦多词词条可以用空格连接如keep tabs、make sure、credit card这类词在产物中依然存在。从 data/lexicon/verbs/verbs.js 可以看到这类多词词条的真实用法——它注释说明该文件收录的是出于各种原因不应被自动变形的动词例如has、keep tabs、cannot、gonna、msg、make sure。歧义词处理switches/ 目录与双标签data/README.md第三条注意事项是最具实战价值的一条添加词条时要小心歧义词。文档给出的例子是ray不应直接标成#Person人名它更适合放进./switches/person-date.js。这条规则的背后是 compromise 的标签体系很多词具有多重词性直接给单一标签会引入大量误报。解决方案是使用data/lexicon/switches/目录下的开关词表用管道符连接两个候选标签把消歧决策交给后续的上下文标注逻辑。例如person-date.js既是人名也可能是日期如april、august、january、june、avrilmay被注释排除避免过度标注noun-verb.js、adj-noun.js、person-verb.js、person-place.js、unit-noun.js等。data/lexicon/index.js中对应的绑定形式为[actorVerb, Actor|Verb], [adjGerund, Adj|Gerund], [adjNoun, Adj|Noun], [personDate, Person|Date], [unitNoun, Unit|Noun],也就是说歧义词在词库阶段只是被标记为可能是 A 或 B真正的取舍发生在src/2-two/preTagger/的上下文标注阶段。对于像ray这样的词如果强行标成#Person所有叫 Ray 的场景确实命中但大量无关语境也会被误判为人名放进 switch 词表则把决定权交给句子上下文是更稳妥的做法。自动词形变化data/pairs/ 与 suffix-thumbdata/README.md第四条注意事项指出许多词表会自动应用词形变化——例如#Singular的词会自动推导出复数形式。这意味着维护者不需要手工列出每个词的复数、过去式等变体只需提供种子词对由打包脚本学习出变形规则。data/pairs/目录维护了 7 组词对数据data/pairs/index.js 汇总如下export default { Comparative, Gerund, Participle, PastTense, PresentTense, Superlative, AdjToNoun, }在打包管线中pairs 步骤使用suffix-thumb库的learn()从这些词对中学习后缀变换规则再用compress()压缩成模型唯一例外是AdjToNoun会显式设置opts.reverse false。产物写入 src/2-two/preTagger/model/models/_data.js本仓库中该文件由打包脚本生成。与之呼应的是data/lexicon/nouns/singulars.js的注释大多数名词其实不需要被列出——出于各种原因这些词看起来不像名词它们都会被变形inflect以生成复数形式。也就是说#Singular词表是看起来不像名词的名词清单打包后引擎会自动为它们计算复数同理形容词词表配合Comparative/Superlative词对可以推导比较级/最高级。输出产物与运行时衔接打包完成后两处产物直接服务于词性标注模块词表lexicon压缩数据src/2-two/preTagger/model/lexicon/_data.js词形变化模型src/2-two/preTagger/model/models/_data.js。data/README.md明确给出了这两条路径它们共同构成 preTagger 在启动时加载的词模型。当你在代码中调用nlp(...)时这些压缩串会在运行时被解包成可查询的字典为分词后的每个词提供候选标签而models/_data.js中的变形模型则支撑toPlural()、toPast()等词形 API 的底层推导。实践建议如何安全地新增词条综合data/README.md的规则与scripts/pack.js、data/lexicon/index.js的实现向本仓库词库添加新词的标准流程如下根据词性把词放入 data/lexicon/ 对应分类文件名词、动词、形容词、人名、地名等若词是歧义词如人名兼月份、名词兼动词放入data/lexicon/switches/的对应文件并使用TagA|TagB双标签绑定而不是单一标签确保词条全小写且不包含[0-9,;!:|¦]这些保留字符多词短语用空格连接无需手工列出所有词形变体data/pairs/中的词对会自动学习变形规则运行npm run pack让改动被编译进src/2-two/preTagger/model/lexicon/_data.js与src/2-two/preTagger/model/models/_data.js通过项目测试tests/目录验证新词在真实句子中的标注行为特别是歧义词的消歧效果。小结data/目录是 compromise 的词库源头lexicon/提供按词性组织的词表与歧义开关pairs/提供词形变化的学习语料npm run pack借助 efrt 与 suffix-thumb 把它们压缩成运行时加载的词模型。理解这四类规则——打包必跑npm run pack、小写与保留字符约束、歧义词走 switch 双标签、自动变形减少手工词条——就能安全、高效地扩展 compromise 的词汇能力。赞分享NLP人工智能【免费下载链接】compromisemodest natural-language processing项目地址https://gitcode.com/gh_mirrors/co/compromise点击查看免费下载相关推荐MindSpore-Lab/gpt2-medium模型转换教程从PyTorch到MindSpore的完整迁移指南MindSpore Lab/gpt2 medium模型转换教程从PyTorch到MindSpore的完整迁移指南 想要在MindSpore框架中使用强大的GPNLP人工智能oh-my-pi 离线词表数据体系解析ctok 压缩词表与 UTOK1 排名表的生成、二进制格式与验证管线oh my pi 离线词表数据体系解析ctok 压缩词表与 UTOK1 排名表的生成、二进制格式与验证管线 导读 本文围绕 crates/pi natives人工智能AI Agent代码智能体工具调用CLIMCP ClientsXTuner 基于 InternLM 仓库预分词数据集格式的模型训练指南XTuner 基于 InternLM 仓库预分词数据集格式的模型训练指南 适用场景说明 本文档的核心目标是讲解如何基于 InternLM 仓库发布的数据格式大模型模型微调上一篇【亲测免费】 Neper多晶体生成与网格划分的开源工具下一篇Apache HugeGraph入门指南如何快速搭建亿级图数据库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

时域自相关法实现DSSS直扩信号盲估计:码片速率与伪码周期提取
时域自相关法实现DSSS直扩信号盲估计:码片速率与伪码周期提取

简介:面向无线通信方向学生与研究人员的MATLAB代码包,基于时域自相关法实现DSSS/BPSK信号伪码周期估计,用于理解扩频信号处理、参数估计与算法实现流程。包内共8个.m源码文件,涵盖m序列生成、BPSK调制/解调、信号发送及自相关检测… · 2026/9/23 15:29:01

2026最新神乐千鹤实战:解决代码跑不通的3种调试法
2026最新神乐千鹤实战:解决代码跑不通的3种调试法

2026最新神乐千鹤实战:解决代码跑不通的3种调试法 刚把神乐千鹤的示例代码复制进本地,结果报错?别慌,这在2026最新的开发环境里太常见了。很多老手都栽在这一步:源码看着对,跑起来却像换了个人。 一、 为什么复制来的代码总是“水土不服”… · 2026/9/23 15:29:01

天启者API重构避坑指南:3步搞定版本迁移的保姆级教程
天启者API重构避坑指南:3步搞定版本迁移的保姆级教程

天启者API重构避坑指南:3步搞定版本迁移的保姆级教程 版本升级后 API 全变了?别慌,这套保姆级教程能救你的项目。很多开发者在升级“天启者”相关组件时,都会遇到接口失效、参数不匹配导致的线上事故。这不仅仅是代码修改的问题,更是底层交互逻… · 2026/9/23 15:29:01

C++11核心特性解析:智能指针与类型推导实战
C++11核心特性解析:智能指针与类型推导实战

1. C11标准带来的变革2003年发布的C03标准之后,经过8年酝酿,C11在2011年正式发布。这是自1998年以来C语言最大规模的一次更新,带来了数量惊人的新特性。作为C程序员,我至今记得第一次接触C11时那种"打开新世界大门"的感… · 2026/9/23 16:07:14

QMC格式解析原理与Julia高性能实现
QMC格式解析原理与Julia高性能实现

1. 项目概述:这不是一个“解密工具”,而是一场针对QMC封装格式的底层性能攻坚你搜“qmc-decoder”时,看到的多半是各种GUI界面、拖拽转换、带广告弹窗的在线工具,或者Python写的几行脚本,跑个几十MB的QMC文件要等半分钟… · 2026/9/23 16:07:13

免费发送短信平台入门到精通:解决版本升级API全变了的3个坑
免费发送短信平台入门到精通:解决版本升级API全变了的3个坑

免费发送短信平台入门到精通:解决版本升级API全变了的3个坑 版本升级后 API 全变了,代码一跑就报错,是不是让你抓狂? 别急,这是很多开发者从新手迈向资深路上必经的磨难。 想要彻底搞懂免费发送短信平台的 入门到精通… · 2026/9/23 16:07:07

Talos Linux 中的 LVMLogicalVolumeConfig:在卷组内声明式定义逻辑卷
Talos Linux 中的 LVMLogicalVolumeConfig:在卷组内声明式定义逻辑卷

云原生操作系统容器编排 【免费下载链接】talos Talos Linux is a modern Linux distribution built for Kubernetes. 项目地址: https://gitcode.com/gh_mirrors/ta/talos 点击查看 免费下载 LVMLogicalVolumeConfig 是 Talos Linux 引入的一种 v1alpha1 配置文档… · 2026/9/23 16:07:07

swagger-codegen 生成 Java (Jersey1) 客户端模型 Client 深度解析:从 OpenAPI Schema 到 POJO 的完整链路
swagger-codegen 生成 Java (Jersey1) 客户端模型 Client 深度解析:从 OpenAPI Schema 到 POJO 的完整链路

开发工具代码生成API设计 【免费下载链接】swagger-codegen swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. 项目地址: http… · 2026/9/23 16:07:00

桥式起重机PLC+变频器控制系统设计与实战调试
桥式起重机PLC+变频器控制系统设计与实战调试

简介:本资源是一份面向自动化控制专业学生、电气工程师及PLC初学者的桥式起重机PLC控制系统设计详解文档,聚焦解决传统继电器控制可靠性低、故障率高、能耗大等工程痛点。文档完整覆盖变频调速系统架构(主令控制器西门子PLC变频器&#xff09… · 2026/9/23 16:07:00

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码