Fool's Garden

Talking about Windows Mobile and Embedded gadgets...Web counter

导航

Lucene及自动问答系统

Posted on 2005-03-16 14:59  Levins Dai  阅读(5464)  评论(7)    收藏  举报
最近接触了一个项目,一个简单的中文自动问答系统。之所以说它简单,是因为,首先,这是一个Domain-Specific的问答系统,有一个特定的领域背景。其次,它有一个固定的、封闭的、格式化的知识库,具体而言就是一个“问题-答案对”的集合。最后,它没有任何的关于答案的分析、抽取和生成技术,对于用户的提问,系统仅仅是在知识库中所有的问题中寻找最匹配的一个,然后把该问题的答案直接返回给用户。

事实上,在一般的Question Answering System中,都有一个FAQ集,用户的问题会现在FAQ集中匹配,若找不到再到知识库中搜寻。而上面所提的这个问答系统就类似于这么一个FAQ的模块。

这么一个简单的问答系统,其问题的搜寻匹配技术也很简单,使用了Lucene这个开源的文档检索引擎。Lucene作为一个Document Retrieval Engine使用的还是非常原始(或者说经典)的IR算法:TF-IDF,即利用香农的信息论原理和统计的方法,把查询关键词和文档关键词映射成一个N维空间的向量,然后计算它们的夹角(即cos值),如果这个值越大,说明夹角越小,也就是说两者越相似。这种70年代提出来的IR的经典算法,在文档检索方面一直被证明是非常行之有效的,然而这个问答系统要做的并不是文档检索,相反,更像是要求两个问句(用户输入问句,和知识库已有问句)的相似度。因此,正确率也自然不可能高了。

对于这个的应用改进的方法,我想除了TF-IDF之外,还可以引入其它的启发性规则对评分结果进行修正,比如,两个问句长度越接近可以认为它们越相似,或者说,两个句子的关键词顺序、距离都可以作为计算句子相关度的一个依据。当然,这样的规则也完全是启发性的,可能也要依靠大量的试验和测试来获取权重参数。

再进一步的话,就只能引入语法和语意的考虑来计算相似度,当然这也就相当复杂了,国内在这方面还是有一些研究,但遗憾的是,没有见到实际的应用和成型的系统:

句子相似度计算在FAQ 中的应用
面向双语句对检索的汉语句子相似度计算
基于语义依存的汉语句子相似度计算
语句相似度研究中的骨架依存分析法及其应用