WinkNLP 是一个用于自然语言处理 (NLP) 的 JavaScript 库。 winkNLP 专为使 NLP 应用程序的开发变得更轻松、更快捷而设计,并针对性能和准确性的适当平衡进行了优化。
其词嵌入支持可解锁更深入的文本分析。轻松将单词和文本表示为数值向量,从而在语义相似性、文本分类等任务中带来更高的准确性 - 即使在浏览器中也是如此。
它是在没有外部依赖的情况下构建的,并且具有约 10Kb 压缩和压缩的精益代码库。约 100% 的测试覆盖率并符合开源安全基金会最佳实践,使 winkNLP 成为充满信心地构建生产级系统的理想工具。
WinkNLP 具有完整的 Typescript 支持,可在 Node.js、Web 浏览器和 Deno 上运行。
维基百科文章时间轴 | 上下文感知词云 | 关键句子检测 |
---|---|---|
前往实例进行进一步探索。
WinkNLP 可以在 M1 Macbook Pro 的浏览器和 Node.js 环境中以超过650,000 个令牌/秒的速度轻松处理大量原始文本。它甚至可以在低端智能手机的浏览器上流畅运行。
环境 | 基准测试命令 |
---|---|
Node.js | 节点基准测试/运行 |
浏览器 | 如何测量winkNLP在浏览器上的速度? |
WinkNLP 拥有全面的自然语言处理 (NLP) 管道,涵盖标记化、句子边界检测 (sbd)、否定处理、情感分析、词性 (pos) 标记、命名实体识别 (ner)、自定义实体识别 (cer) 。它提供了丰富的功能集:
?快速、无损和多语言分词器 | 例如,多语言文本字符串"¡Hola! नमस्कार! Hi! Bonjour chéri" 被标记为["¡", "Hola", "!", "नमस्कार", "!", "Hi", "!", "Bonjour", "chéri"] 。标记器在 M1 MBP 浏览器上以接近400 万个标记/秒的速度处理文本。 |
开发人员友好且直观的 API | 借助 winkNLP,使用简单的声明性语法处理任何文本;大多数实例都有30-40行代码。 |
?一流的文本可视化 | 使用 HTML 标记或您选择的任何其他标记以编程方式标记标记、句子、实体等。 |
♻️ 广泛的文本处理功能 | 删除和/或保留具有特定属性的标记,例如词性、命名实体类型、标记类型、停用词、形状等等;计算 Flesch 阅读难度分数;生成 n 元语法;标准化、词形还原或词干化。查看如何通过正确类型的文本预处理,即使朴素贝叶斯分类器也能在情感分析和聊天机器人意图分类任务中实现令人印象深刻的(≥90%)准确度。 |
?预训练语言模型 | 尺寸紧凑,从约 1MB 开始(缩小和压缩)——在 4G 网络上将模型加载时间大幅缩短至约 1 秒。 |
超过 35 万个英语单词的 100 维英语单词嵌入,针对 winkNLP 进行了优化。允许轻松计算句子或文档嵌入。 |
使用 npm 安装:
npm install wink-nlp --save
为了在安装后使用winkNLP,您还需要根据所使用的节点版本安装语言模型。下表概述了特定于版本的安装命令:
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。
在tsconfig.json
文件中启用esModuleInterop
和allowSyntheticDefaultImports
:
"compilerOptions": {
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
...
}
如果您在浏览器中使用 winkNLP,请使用 wink-eng-lite-web-model。请参阅我们在浏览器中使用 winkNLP 的指南,了解其安装和使用情况。探索 Observable 上的winkNLP 配方,了解基于实时浏览器的示例。
按照 replit 上的示例进行操作。
这是“你好世界!” winkNLP 的:
// Load wink-nlp package.
const winkNLP = require ( 'wink-nlp' ) ;
// Load english language model.
const model = require ( 'wink-eng-lite-web-model' ) ;
// Instantiate winkNLP.
const nlp = winkNLP ( model ) ;
// Obtain "its" helper to extract item properties.
const its = nlp . its ;
// Obtain "as" reducer helper to reduce a collection.
const as = nlp . as ;
// NLP Code.
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。
在具有 16GB RAM 的 M1 Macbook Pro 机器上使用“James Joyce 的《尤利西斯》第 13 章”进行基准测试时,winkNLP 通过其 wink-eng-lite-web-model 以每秒约 650,000 个标记的速度处理原始文本。处理过程包括整个 NLP 流程——标记化、句子边界检测、否定处理、情感分析、词性标记和命名实体提取。这个速度远远领先于现行的速度基准。
该基准测试是在 Node.js 版本 16 和 18 上进行的。
它对《华尔街日报》语料库的一个子集进行 pos 标记,准确度约为95% ——这包括在进行 pos 标记之前对原始文本进行标记化。目前最先进的精度约为 97%,但速度较低,并且通常使用黄金标准预标记语料库进行计算。
使用 UCI 机器学习存储库中的亚马逊产品评论情绪标记句子数据集进行验证时,其通用情绪分析的 f 分数约为 84.5% 。目前经过专门训练的模型的基准准确度可以达到 95% 左右。
Wink NLP 以最小的 RAM 负载提供这种性能。例如,它处理整个《印度历史》第一卷,总峰值内存需求低于80MB 。该书约有 350 页,相当于 125,000 多个标记。
请在 Stack Overflow 提问或在 Wink JS GitHub 讨论中讨论或在 Wink JS Gitter Lobby 与我们聊天。
如果您发现错误并且尚未报告该错误,请提出新问题或考虑修复该错误并发送 PR。
寻找新功能,请通过新功能和想法讨论论坛请求或考虑成为贡献者。
WinkJS 是一系列用于 NodeJS 中的自然语言处理、机器学习和统计分析的开源包。该代码经过完整记录,易于人类理解,并且测试覆盖率约为 100%,可确保构建生产级解决方案的可靠性。
Wink NLP版权所有 2017-24 GRAYPE Systems Private Limited。
它根据 MIT 许可证条款获得许可。