NLTK在生产环境中?

时间:2013-04-03 13:01:29

标签: python nltk opennlp

我在python nltk中开发了几种用于聚类,数据抽象等的算法。现在,问题是,我要在风险投资之前呈现大规模。 NLTK有自己的优势,比如快速开发等。但是当我在开始时选择时,这对我来说很有意义。现在我已经足够成熟,并且发现它有一些局限性,比如缺乏可扩展性。对Mahout进行了一些研究,但这也是针对集群/分类和搭配的。打开NLP是一个选项,但我不确定我能用多长时间。对于高规模的nlp有什么好处吗?

请注意 - 此问题与我的旧问题无关 - How can I improve the performance of NLTK? alternatives?。我已经完全阅读了NLTK on a production web application

1 个答案:

答案 0 :(得分:4)

NLTK确实是一个很好的学习平台,但并不是为数百万客户提供强大的服务。

您可以通过两种不同的方式解决可扩展性问题:

  • 第一个“大数据”方法:使您的算法适应MapReduce并在MongoDB / Hadoop / Google MapReduce上运行它们......有不同的地方来托管此类解决方案(亚马逊,谷歌,Rackspace,...)< / LI>
  • 第二种,“自己动手”方法:使用通用托管解决方案或您自己的数据中心。

“大数据”方法

这意味着需要重新思考算法。需要良好的数学背景和对算法的充分理解。也许你甚至会替换算法,因为执行时间与工作量的关系不大。

因此,在实施您的想法方面,这可能是最困难的(甚至可能是不可能的)解决方案,具体取决于您的技能。对于部署和未来的好处,这是迄今为止最简单的解决方案。

“滚动你自己”的方法

你可以通过可扩展性来表达不同的东西:

  • 更大的训练集
  • 更多客户
  • 更多算法和应用
  • 培养你的训练集可能意味着重新训练或适应
  • ...

关于可扩展性有不同的数量级:你想扩展10倍,100倍,1000倍......?

有许多方法可以克服可伸缩性问题:

  • Parallellize:添加服务器的精确副本并执行负载平衡
  • 管道传输:可以在不同服务器上执行的不同步骤中的拆分处理
  • 更昂贵的硬件,更快的CPU,RAM,磁盘,总线,ASIC,......
  • 客户端处理
  • 请求缓存
  • 软件性能调优,在C / C ++中实现瓶颈
  • 使用更好的算法
  • 更智能地分离离线状态(例如使用cron作业)以及每个请求执行的操作。
  • ...

无论可伸缩性的类型如何,以及您用来克服它的方法,都要进行负载测试以查看可以处理的内容。由于您无法立即负担所有硬件,因此可以通过不同方式对扩展基础架构进行负载测试:

  • 租用处理器,内存,磁盘空间......每小时,足以进行负载测试和纾困。这样,您就不需要购买设备了。
  • 风险更大:对比生产中更少,更便宜的设备进行负载测试并推断结果。也许你有一个关于你的算法如何扩展的理论模型,但要注意副作用。布丁的证据就在吃。

接近VC(就可扩展性而言)

  • 创建一个明确自我解释您的想法的原型(不一定可扩展)
  • 向自己证明,未来某些时候一切都会好起来,成本是多少(最低/预期/最高一次性/持续成本)
  • 从私有测试版开始,因此可扩展性从一开始就不是问题。没有最后期限退出测试版。估计没问题,但没有截止日期。不要妥协!
祝你好运!