【问题标题】:How to expose an NLTK based ML(machine learning) Python Script as a Web Service?如何将基于 NLTK 的 ML(机器学习)Python 脚本公开为 Web 服务?
【发布时间】:2012-11-03 21:39:10
【问题描述】:

让我解释一下我想要实现的目标。过去在 Java 平台上工作时,我曾经编写 Java 代码(例如,从 MySQL 数据库推送或拉取数据等),然后创建一个 war 文件,该文件基本上捆绑了所有类文件、支持文件等,并将其放在一个像 Tomcat 这样的 servlet 容器,它变成了一个 Web 服务,可以从任何平台调用。

在我目前的情况下,我的大部分工作都是在 Java 中完成的,但是自然语言处理 (NLP)/机器学习 (ML) 部分是在 Python 中使用 NLTK、Scipy、Numpy 等库完成的。我正在尝试在现有的 Java 代码中使用这个 Python 引擎的服务。通过 Jython 之类的东西将 Python 代码集成到 Java 并不是那么简单(因为据我所知,Jython 不支持调用任何具有基于 C 的扩展的 python 模块),所以我认为下一个选择是让它一个 Web 服务,类似于我过去使用 Java Web 服务所做的事情。现在问题的真正症结出现了,我如何将 ML 引擎作为 Web 服务运行并从任何平台调用它,在我当前的场景中,这恰好是 Java。我尝试在网上寻找各种选项来实现这一点,并找到了诸如 CherryPy、Werkzeug 等之类的东西,但找不到正确的方法或任何示例代码或任何显示如何调用 NLTK-Python 脚本并提供结果的东西web,并最终复制 Java web 服务提供的功能。在 Python-NLTK 代码中,ML 引擎在大型语料库上进行数据训练(这需要 3-4 分钟),我们不希望 Python 代码在每次调用方法时都经过这一步。如果我将其设为 Web 服务,则数据训练只会发生一次,即服务启动时服务已准备好被调用并使用已训练的引擎。

现在回到问题上来,我对 Python 中的这个 Web 服务的东西还很陌生,我会很感激任何关于如何实现这一点的指针。此外,任何关于实现从 Java 调用基于 NLTK 的 python 脚本的目标的指针,不使用 Web 服务方法并且可以部署在生产服务器上以提供良好的性能也将是有帮助和可观的。提前致谢。 需要说明的是,我目前正在一台安装了 Python 2.6、JDK 1.6 的 Linux 机器上运行我的所有代码。

【问题讨论】:

  • 嗨@alphaGeek 我知道这篇文章太旧了,但现在我对非常相似的要求感到震惊。您是否有任何机会通过解决方案解决了这个问题。我的想法是在 Python 中使用 Flask(需要学习 Flask),但不确定这是否有帮助。对此有何意见?

标签: python machine-learning cherrypy


【解决方案1】:

基于 NLTK 的系统对每个请求的响应往往很慢,但如果有足够的 RAM,则可以实现良好的吞吐量。

【讨论】:

  • 是的,我同意该声明。您愿意分享您在这方面的经验吗?假设我们有一个可以每秒处理 1000 个请求的 Sentiment 引擎,那么 RAM 和其他机器配置的理想数量应该是多少?任何球场数字?关于 NLTK,原因之一是易用性、大量支持的库、支持社区和隐式 Python 平台支持。
  • NLTK 需要加载需要大量 RAM 的语料库。每个实例的请求速率约为每秒 5-10 个请求。假设您有 8 个 procs 服务器和 8 Gig RAM。您可以运行 16 个实例,这将为您提供每台服务器每秒 80 个请求的吞吐量。服务器的负载平衡集假设为 10,它应该能够每秒执行 1000 个请求。
【解决方案2】:

一种方法是构建一个 XML-RPC 服务器,但您可能希望为每个连接创建一个新进程,以防止服务器阻塞。我已经写了一个关于如何去做的详细教程:https://speakerdeck.com/timclicks/case-studies-of-python-in-parallel?slide=68

【讨论】:

  • 感谢您的快速回答。我会看看并回复。顺便说一句,我有一个快速的问题。这种方法能否让我将基于 NLTK 的 Python 引擎作为 Web 服务运行,并且每秒能够处理至少 100 个 Web 服务调用?
猜你喜欢
  • 2018-05-07
  • 1970-01-01
  • 2019-07-07
  • 2018-02-07
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 2014-11-04
  • 2019-08-28
相关资源
最近更新 更多