winkNLP
开发者友好的自然语言处理 ✨
WinkNLP 是一个用于自然语言处理 (NLP) 的 JavaScript 库。WinkNLP 专为使 NLP 应用程序的开发更简单和更快速而设计,经过优化可以在性能和准确性之间达到最佳平衡。
其 词嵌入 支持能够解锁更深层的文本分析。可以轻松地将单词和文本表示为数值向量,从而在语义相似度、文本分类等任务中带来更高的准确性,甚至在浏览器中也能实现。
它从头开始构建,具有无外部依赖,且拥有 精简的代码库 (约 10Kb minified 和 gzipped)。约 100% 的测试覆盖率 和遵守开放源码安全基金会最佳实践 使得 WinkNLP 成为构建生产级系统的理想工具。
WinkNLP 支持完整的 Typescript,可在 Node.js、Web 浏览器 和 Deno 中运行。
快速构建精彩应用
前往 在线示例 进行进一步探索。
快如闪电
WinkNLP 可以轻松处理大量原始文本,速度超过 650,000 tokens/秒 在 M1 Macbook Pro 上,无论在浏览器还是 Node.js 环境下。即使在低端智能手机的浏览器上也能顺畅运行。
环境 | 基准测试命令 |
---|---|
Node.js | node benchmark/run |
浏览器 | 如何测量 winkNLP 在浏览器上的速度? |
特点
WinkNLP 具有 全面的自然语言处理 (NLP) 流水线,涵盖标记化、句子边界检测 (sbd)、否定处理、情感分析、词性 (pos) 标注、命名实体识别 (ner)、自定义实体识别 (cer)。它提供了丰富的功能集:
🐎 快速、无损且多语言的标记器 | 例如,多语言文本字符串 "¡Hola! नमस्कार! Hi! Bonjour chéri" 被标记为 ["¡", "Hola", "!", "नमस्कार", "!", "Hi", "!", "Bonjour", "chéri"] 。 标记器在 M1 MBP 的浏览器上处理文本的速度接近 4 百万 tokens/秒。 |
✨ 开发者友好和直观的 API | 使用 WinkNLP,可以使用简单的声明性语法处理任何文本;大多数 在线示例 只有 30-40 行代码。 |
🖼 最佳的 文本可视化 | 使用 HTML 标记或您选择的任何其他标签,以编程方式 标记 标记、句子、实体等。 |
♻️ 广泛的文本处理功能 | 根据特定属性(如词性、命名实体类型、标记类型、停用词、形状等)移除和/或保留标记;计算 Flesch 阅读易读性评分;生成 n-grams;规范化、词形还原或词干。查看如何通过正确的文本预处理,即使是 朴素贝叶斯分类器 也能在情感分析和聊天机器人意图分类任务中实现 令人印象深刻的 (≥90%) 准确性。 |
🔠 预训练的 语言模型 | 紧凑的尺寸从 ~1MB (minified 和 gzipped) 开始 – 大大减少模型加载时间,在 4G 网络下约为 ~1 秒。 |
↗️ 词向量 | 针对超过 35 万个英语单词的 100 维英语词嵌入,已针对 WinkNLP 进行优化。允许轻松计算句子或文档嵌入。 |
工具和工具 💼
- BM25 向量化器
- 相似度方法 – 余弦、Tversky、Sørensen-Dice、Otsuka-Ochiai
- its 和 as 助手 获取词袋、频率表、词形还原、词干、停用词移除、否定处理等。
文档
安装
使用 npm 安装:
npm install wink-nlp --save
为了在安装 winkNLP 后使用它,您还需要根据所使用的 Node 版本安装语言模型。下表概述了特定版本的安装命令:
Node.js 版本 | 安装命令 |
---|---|
16 或 18 | npm install wink-eng-lite-web-model --save |
14 或 12 | node -e "require('wink-nlp/models/install')" |
wink-eng-lite-web-model 设计用于 Node.js 版本 16 或 18。它也可以按照下一节中的描述在浏览器上工作。这是推荐的模型。
第二个命令安装 wink-eng-lite-model,它适用于 Node.js 版本 14 或 12。
如何配置 TypeScript 项目
在 tsconfig.json
文件中启用 esModuleInterop
和 allowSyntheticDefaultImports
:
"compilerOptions": {
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
...
}
如何为 Web 浏览器安装
如果您在浏览器中使用 winkNLP,请使用 wink-eng-lite-web-model。在我们的在浏览器中使用 winkNLP 的指南中了解其安装和使用。在 Observable 上探索 winkNLP 食谱 以获取基于浏览器的实时示例。
如何在 Deno 上运行
请参阅 replit 上的示例。
如何开始
以下是 winkNLP 的“Hello World!”示例:
// 加载 wink-nlp 包。
const winkNLP = require( 'wink-nlp' );
// 加载英语语言模型。
const model = require( 'wink-eng-lite-web-model' );
// 实例化 winkNLP。
const nlp = winkNLP( model );
// 获取 "its" 帮助器以提取项目属性。
const its = nlp.its;
// 获取 "as" 归约器帮助器以归约集合。
const as = nlp.as;
// NLP 代码。
const text = 'Hello World🌎! How are you?';
const doc = nlp.readDoc( text );
console.log( doc.out() );
// -> Hello World🌎! How are you?
console.log( doc.sentences().out() );
// -> [ 'Hello World🌎!', 'How are you?' ]
console.log( doc.entities().out( its.detail ) );
// -> [ { value: '🌎', type: 'EMOJI' } ]
console.log( doc.tokens().out() );
// -> [ 'Hello', 'World', '🌎', '!', 'How', 'are', 'you', '?' ]
console.log( doc.tokens().out( its.type, as.freqTable ) );
// -> [ [ 'word', 5 ], [ 'punctuation', 2 ], [ 'emoji', 1 ] ]
在 RunKit 上试验 winkNLP。
速度和准确性
winkNLP 使用其 wink-eng-lite-web-model 在 M1 MacBook Pro 16GB RAM 机器上对“詹姆斯·乔伊斯的《尤利西斯》第13章”进行基准测试时,每秒处理~650,000 个标记。处理内容包括整个 NLP 管道——标记化、句子边界检测、否定处理、情感分析、词性标注和命名实体提取。此速度远超当前的速度基准。
基准测试是在 Node.js 版本 16 和 18 上进行的。
它以**~95%**的准确率对 WSJ 语料库的子集进行词性标注——这包括标注前的原始文本标记化。当今最先进的技术在标注预标定语料库时准确率约为 97%,但速度较低。
它的通用情感分析在使用 Amazon Product Review 情感标注句子数据集 在 UCI Machine Learning Repository 上进行验证时,f-score 为 ~84.5%。当前专门训练模型的基准准确率可以达到约 95%。
内存需求
Wink NLP 在最低的 RAM 负载下实现了这一性能。例如,它在总峰值内存需求不到 80MB 的情况下处理完整的 《印度历史,第一卷》。该书大约有350页,相当于12.5万多个标记。
需要帮助?
使用问题 👩🏽💻
请在 Stack Overflow 上咨询,或在 Wink JS GitHub Discussions 上讨论,或在 Wink JS Gitter Lobby 上与我们聊天。
错误报告 🐛
如果您发现了尚未报告的错误,请提交新的 问题 或考虑修复它并提交 PR。
新功能 🌟
希望获取新功能,请通过 新功能和想法 讨论论坛请求,或考虑成为 贡献者。
关于 winkJS
WinkJS 是在 NodeJS 中用于自然语言处理、机器学习和统计分析的一系列开源包。代码彻底记录以便于人类理解,并且具有约 100% 的测试覆盖率,以确保构建生产级解决方案的可靠性。
版权及许可
Wink NLP 版权 2017-24 GRAYPE Systems Private Limited。
它根据 MIT 许可证条款进行许可。