0
photos in washington VS show me photos in washington VS I wanna see all my photos in washington taken day before yesterday

what:photos
entities:washington (dont want to be too assuming)
when: 2013-03-14

我想将预设查询解析为条件(如上)。我想要这些品质:

  1. 即使存在绒毛(“我想看到”)和小写名词,我也可以提取相关术语
  2. 温暖的程序可以接受通过 HTTP 的请求或允许我添加一些网络通信
  3. 温暖的程序在 50ms 内响应,并且需要最多 500Mb 的内存用于合理的句子
  4. 我在 Python 方面更有经验,在 Java 方面经验较少
  5. 解析器数据结构易于处理

我使用 NLTK,但速度很慢。我认为 StanfordNLP 和 OpenNLP 是可行的替代方案,但我发现程序启动延迟太高。如果我别无选择,我不介意将它们集成到 servlet 上。

4

1 回答 1

0

斯坦福解析器是一个可靠的选择,并且得到了很好的支持(正如研究代码一样)。但听起来低延迟对你来说是一个重要的要求,所以我也建议你看看BUBS Parser(完全披露——我是研究 BUBS 的主要研究人员之一)。

我没有直接与 NLTK 进行比较,但我想您可能会发现 Stanford Parser 无法满足您的性能需求。本文发现总吞吐量约为 60 字/秒(约 2-3 句/秒)。这些时间已经很老了,所以更新的硬件肯定会改善这一点,但可能仍然不会接近 50 毫秒的延迟。

正如您所注意到的,启动时间对于任何解析器都是一个问题 - 高精度模型必然非常大。而且 500 MB 可能也很紧凑(我通常运行 1-1.2 GB 的 BUBS)。但是一旦加载,BUBS 延迟通常在每个句子 10 毫秒左右(对于大约 20-25 个单词的句子),我们可以在准确度开始下降之前将总吞吐量提高到 2500 单词/秒左右。我认为这些数字可能满足您的性能需求,而且我不知道有任何其他速度接近的高精度 (F1 >= 88-89) 解析器。

注意:最快的结果是使用尚未发布到网站上的最新修剪模型,但如果您需要,我可以为您提供模型。希望对您有所帮助,如果您有更多问题,请随时提问。

于 2013-03-15T16:27:02.007 回答