【问题标题】:Question Answering with Lucene使用 Lucene 进行问答
【发布时间】:2011-01-25 16:06:22
【问题描述】:

对于一个玩具项目,我想用 Lucene 实现一个自动问答系统,并试图找出一种合理的方法来实现它。基本操作如下:

1) 用户将输入一个问题。

2) 系统会识别问题中的关键词。

3) 将在大型知识库中搜索关键字,并将匹配的句子显示为答案。

我的知识库(即语料库)不是结构化的。它只是一个大而连续的文本(例如,没有任何章节的用户手册)。我的意思是唯一的结构是句子和段落被识别出来。

我计划将每个句子或段落视为单独的文档。为了在上下文中给出答案,我可以考虑在索引之前/之后保留一个句子/段落作为有效负载。我想知道这是否有意义。另外,我想知道这种系统是否还有其他久经考验且众所周知的方法。例如,想到的另一种方法是将语料库的大块索引为具有标记位置的文档,然后处理找到的关键字附近以构建我的答案。

我会非常感谢基于经验或直觉的直接建议,以及针对使用 Lucene 的问答系统的教程或介绍性材料。

谢谢。

【问题讨论】:

  • 也许,我还应该补充一点,内存是一个问题。我不想将我所有的知识库都保存在内存中。可能,这排除了使用荧光笔的方法。
  • Lucene 在处理大型文档集时非常快速高效。默认情况下,索引在磁盘上,尽管您可以映射到内存。

标签: lucene information-retrieval


【解决方案1】:

这不是不合理的做法。

您可能会考虑的一项改进是整合学习反馈,以便您可以不断提高内容与搜索字词的评分。为此,您将要求用户对返回的答案进行评分(“有帮助与无帮助”),这样您就可以开始根据历史数据根据关键字对文档进行排名。您可以使用简单的贝叶斯分类器将潜在文档分类为对给定关键字有用/无用。

【讨论】:

    【解决方案2】:

    将每个句子作为文档进行索引会给您带来一些问题。您已经指出了一个:您需要将周围的文本存储为有效负载。这意味着您需要将每个句子存储 3 次(之前、期间和之后),并且您必须手动进入有效负载。

    如果您想将每个句子都作为文档,我建议您为每个句子提供一个 ID 并将其存储为单独的字段。然后可以在每个结果中显示 [ID-1, ID, ID+1]。

    但更大的问题是:您应该如何将文本分解为文档?识别语义相关区域似乎很困难,因此通过句子/段落来识别可能是唯一的方法。更好的方法是,如果您可以找到哪个文本是某个部分的标题,然后将该部分中的所有内容作为文档放入。

    您可能还想使用索引(如果您的语料库有)。那里的条款可能会得到提升,因为它们可能更重要。

    【讨论】:

      【解决方案3】:

      我认为使用 Apache Mahout 之类的东西会有所帮助,而不是进行文本索引、搜索和检索的 luncene。 Mahout 将文本视为知识,这样做可以使回答问题比仅仅匹配文本更好。 Mahout 是一种机器学习和数据挖掘软件,更适合该领域。只是一个非常高级的想法。

      --赛

      【讨论】:

      • 你会推荐哪种 Mahout 学习算法来解决这个问题?
      • 对我来说,这或多或少看起来像是一个分类问题。
      • 谢谢。这可能是一个很有前途的方法;但是,我目前的问题不是提高问答者的表现。我只是想看看在 Lucene 上下文中处理此类问题的最佳方法,将其视为一项挑战。我的意思是,我对在磁盘/内存中存储大量非结构化数据并根据几个关键字随机访问它的技术问题更感兴趣。
      • @Amaç - Lucene 将愉快地处理非常大的文档集。除非您考虑数以百万计的文档,或者硬件非常有限,否则您可能不必担心扩展。
      猜你喜欢
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 2014-08-31
      • 1970-01-01
      相关资源
      最近更新 更多