CoffeeScript或JavaScript中的基本NLP - Punkt tokenizaton,简单训练的贝叶斯模型 - 从哪里开始? [关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CoffeeScript或JavaScript中的基本NLP - Punkt tokenizaton,简单训练的贝叶斯模型 - 从哪里开始? [关闭]相关的知识,希望对你有一定的参考价值。

我目前的网络应用程序项目需要一点NLP:

  • 通过Punkt和类似的方式将文本标记为句子;
  • 通过从属条款打破较长的句子(通常是逗号,除非它不是)
  • 一个贝叶斯模型适合分块段落,感觉均匀,没有孤儿或寡妇,也没有尴尬的分裂(可能)

...如果你有NLTK,那么这很大程度上是一项幼稚的任务 - 我做的有点:应用程序后端是龙卷风上的Django;你认为做这些事情不是问题。

但是,我必须以交互方式提供必须使用令牌化器的用户反馈,因此我需要对数据客户端进行令牌化。

现在我实际上正在使用NLTK,通过REST API调用Tornado进程来包装NLTK函数而不是其他任何东西。目前,延迟和并发等事情显然不是最优惠的w / r / t这个ad-hoc服务,礼貌地说。我想,我应该做的是,如果不自己重新实现这个功能的咖啡/ Java版本。

然而,从我所看到的情况来看,javascript并没有被认为很酷,足以累积出可以在C或Python(甚至是Erlang)中找到的非常网络特定的通用库schmorgasbörd。 NLTK当然是任何人的衡量标准,但我只需要几个百分点的包装。

但是现在我处于一个十字路口 - 我必须加倍努力:

  • “学习科学JavaScript技术适合重新实现算法,我最好与Facebook好友”计划,或者:
  • 不那么有趣但更具决定性的可行性“通过电线进行标记化,但过度补偿速度和编程兴趣的缺点 - 通过将函数调用提升为一个强大的高性能Web服务架构典范,确保无沙滩球的用户体验, Facebook看起来像Google+“选项。

或完全不同的东西。我该怎么办?喜欢开始做事。这是我的问题。我愿意接受涉及非典型方法的解决方案 - 只要你的建议不令人反感(例如“使用Silverlight”)和/或时间漩涡(例如“获得计算语言学博士你的troglodyte”)我就是游戏。先感谢您。

答案

我认为,正如您在评论中所写的那样,高效算法运行所需的数据量最终将阻止您在客户端做事。甚至基本处理也需要大量数据,例如bigram / trigram频率等。另一方面,符号方法也需要重要的数据(语法规则,字典等)。根据我的经验,如果没有至少3MB到5MB的数据,你就无法运行良好的NLP流程,我认为这对于今天的客户来说太大了。

所以我会通过电线做事。为此我建议使用异步/推送方法,也许使用Faye或Socket.io?只要在客户端等待服务器处理文本时用户没有卡住,我确信您可以实现完美且流畅的用户体验。

另一答案

node.js有一个非常好的自然语言处理叫做natural。它目前不是为在浏览器中运行而构建的,但作者have stated表示他们想要修复它。大部分甚至可能已经使用了browserifyRequire.JS之类的东西。

另一答案

winkjs有几个自然语言处理包:

  1. 多语言标记器,用于标记每个标记的类型,如单词,数字,电子邮件,提及等。
  2. 英语词性(POS)标记器,
  3. 语言无关的命名实体识别器,
  4. 用于常见NLP任务的有用功能以及更多例如情感分析,lemmatizer,朴素贝叶斯文本分类器等

它具有用于NodeJS中的统计分析,自然语言处理和机器学习的packages。该代码经过全面记录,易于理解,并且可靠性测试覆盖率约为100%,可构建生产级解决方案。

另一答案

我认为你应该部署一个单独的服务,独立于你的应用程序的其余部分,它完成大部分工作服务器端,但可以根据客户端接下来输入的内容向客户端发送多个选项。当我读到您的请求时,我会想到Google,Quora和Yelp等网站的搜索自动完成功能。您可能在搜索框中只输入了3或4个字符,但这些服务会根据他们认为您将在下次输入的内容发送多个查询建议。如果你动态地标记文本,你可以使用某种ngram模型(或其他更复杂的语言模型)来猜测句子何时结束,并告诉前端如何为k最有可能的未来结果做些什么。基本上有一个后端服务,可以预先计算/缓存大量的结果,并有一个半智能前端,可以检查用户输入的当前状态是否与后端发送的预测状态匹配几百毫秒之前和看似即时在客户面前做正确的事情,而不是挂断浏览器试图在那里做一些内存/计算密集型操作。

您提供的两个选项是 1)做一切客户端,由于缺少现有的nlp js库,可能会很快但很复杂

2)做一切可能更容易的服务器端,但使你的应用程序看起来对用户来说很滞后

我请你做

3)做好服务器端的所有事情,但提前考虑几个步骤,并向客户端发送多个选项,以便在更容易实现的地方完成工作,但客户感觉就像是瞬间发生的。

以上是关于CoffeeScript或JavaScript中的基本NLP - Punkt tokenizaton,简单训练的贝叶斯模型 - 从哪里开始? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Rails:在 CoffeeScript 或 JavaScript 资产文件中访问控制器实例变量

CoffeeScript或JavaScript中的基本NLP - Punkt tokenizaton,简单训练的贝叶斯模型 - 从哪里开始? [关闭]

用JavaScript编写的CoffeeScript

从 JavaScript 文件或 REPL 中 require()'ing CoffeeScript 文件

CoffeeScript单元测试?

Javascript / jQuery / Coffeescript 在 Ruby on Rails 中的作用是啥?