对于一个玩具项目,我想用Lucene实现一个自动问答系统,我正试图找出一种合理的方法来实现它。基本操作如下:
1)用户将输入一个问题。
2)系统将识别问题中的关键字。
3)关键词将在大型知识库中搜索,匹配的句子将显示为答案。
我的知识库(即语料库)没有结构化。它只是一个大而连续的文本(例如,没有任何章节的用户手册)。我的意思是唯一的结构是识别句子和段落。
我打算将每个句子或段落视为单独的文件。为了在上下文中给出答案,我可以考虑在索引的一个句子之前/之后保留一个句子/段作为有效载荷。我想知道这是否有意义。此外,我想知道是否有其他尝试和众所周知的方法为这种系统。作为示例,另一种想到的方法是将语料库的大块索引为具有令牌位置的文档,然后处理找到的关键词的附近以构建我的答案。
我希望能够根据经验或直觉提出直接建议,还要考虑Lucene的问答系统的教程或介绍材料。
感谢。
答案 0 :(得分:1)
这不是一种不合理的方法。
您可能考虑的一项增强功能是整合学习反馈,以便您可以不断提高内容与搜索字词的评分。要做到这一点,您会要求用户对回来的答案进行评分(“有帮助和无用”),这样您就可以根据历史数据开始根据关键字对文档进行排名。您可以使用简单的贝叶斯分类器将潜在文档归类为对给定关键字有用/无用。
答案 1 :(得分:0)
而不是使用文本索引,搜索和检索的luncene,我认为使用像Apache Mahout这样的东西会对此有所帮助。 Mahout认为文本是知识,而这样做使得回答问题比仅仅文本匹配更好。 Mahout是一个机器学习和数据挖掘f / w,更适合这个领域。只是一个非常高层次的想法。
- 西
答案 2 :(得分:0)
将每个句子索引为文档会给您带来一些问题。你已经指出了一个:你需要将周围的文本存储在有效载荷中。这意味着您需要将每个句子存储三次(之前,期间和之后),并且您必须手动进入有效负载。
如果你想把每个句子的路线作为一个文件,我会建议为每个句子提供一个ID并将其作为一个单独的字段存储。然后,您可以在每个结果中显示[ID-1,ID,ID + 1]。
更大的问题是:你应该如何将文本分解为文档?识别语义相关区域似乎很困难,因此按句子/段落进行可能是唯一的方法。更好的方法是,如果您可以找到哪个文本是节的标题,然后将该节中的所有内容都作为文档。
您可能还想使用索引(如果您的语料库有一个)。那里的条款可能有所提升,因为它们可能更重要。