IR学习笔记 #11 问答系统
本文最后更新于:2022年5月19日 中午
在传统的搜索引擎中,通常是以关键词为索引,通过匹配而返回相似的文档。然而,有时用户在搜索引擎中检索,并非想得到若干个网页,而是直接返回询问的答案,免去用户人工定位信息的过程。
问答式信息检索,是一种允许用户以自然语言方式询问,系统从单语或多语文档集中查找并返回确切答案或者蕴含答案文本片断的新型信息检索的方式。
要做到这一点,就需要先做到:
- 理解问句中的查询意图。
- 根据分析结果去检索匹配文档,尽量缩小范围。
- 在返回的文档中提取答案信息或定位答案文本。
当然,早期还有一种做法是构建 FAQ (Frequently Asked Questions,常用问题解答) 库,将用户的问句与问题库中的问句进行相似度匹配,直接返回对应的答案。
AskMSR: Shallow approach
AskMSR 是 Microsoft Research 提出的是一种简易的基于检索的问答系统。
其大体步骤分为六步:
- Rewrite Query:重写查询,并将问句类型归类。
- Search Engine:将所有重写结果输入到搜索引擎,返回前若干个文档。
- Mine N-grams:文档分词,N 通常枚举 1,2,3,根据出现频率给出置信度。
- Filter N-grams:过滤分词结果,保留与问题类型相关的。
- Tile N-grams:组合分词结果,把重叠可拼接的词 merge,置信度也相加。
- N-best Answers:答案通常都是多个,以置信度排序。
重写查询 | Query Rewriting
如果只是检索用户输入的问句,很可能返回的就是含有句子本身的文档。而根据我们的直觉:用户需要的答案通常在语义上与查询相近的句子中。为此,我们需要将疑问句改写成陈述句,如果在文本中有这样一句陈述句,它可能本身就包含了问题的答案。
重写后的陈述句不一定是满足语法规则的句子,但是这并不影响检索结果。一个 query 可以被改写成若干个问题,并通过搜索引擎查询更多个相似的文本片段。
此外,重写问句时,通常要对语言的语法规则有一点了解,从而对问题进行分类。如在英语中:Who 对应人名,When 对应时间,Where 对应地名等。这将用于后续的分词结果的过滤。
模式挖掘 | ISI: Surface patterns approach
在 AskMSR 中,我们只在句法相近的句子中寻找答案,但是实际上很多答案会隐藏在不同的形式中。如果我们使用特征短语——模式(Pattern),就可以检索到不同形式的答案。
例如在问题 “When was person
born ?” 中,答案的形式可能是:
- Mozart was born in 1756.
- Gandhi (1869-1948) ...
这两种特征短语可以挖掘出如下的模式:
NAME
was born inBIRTHDATE
NAME
(BIRTHDATE
-DEATHDATE
)
对于不同的模式,我们也可以赋予不同的置信度(准确度)。而后我们就可以用这两种模式在搜索引擎中匹配结果,并根据置信度返回结果排序。
在 2002 年 Hovy 等人还提出 QA Typology 的问答分类体系,将常见的问答分为以下六种类型:BIRTHDATE、LOCATION、INVENTOR、DISCOVERER、DEFINITION、WHY-FAMOUS,并给出了对应类型下常用的模式和置信度。这在使用中取得了较高的 MRR (Mean Reciprocal Rank)。
Shortcomings & Extensions
接下来分析 ISI 可能出现的问题,以及改进的方法。
第一,由于使用了简单的字符串匹配,可能会在文档中出现「模式符合,但并非答案」的句子,这就需要利用词性标注(Part-Of-Speech Tagging)对答案内容加以分析,从而修改置信度。
第二,原始的模式不支持长距离答案的匹配,实际中的陈述句中如果含有形容词、副词或者更长的插入语,就容易割裂模式。如「Mozart, who was a famous classical composer, was born in 1756.」中,原始的模式就会漏掉答案。因此我们需要在原始的模式中插入可任意文本填充的空白字段。
第三,当问句中的 NAME
以同义词或释义的形式出现时,直接字符串匹配的模式也会漏掉答案。这时就需要对问句中的关键词进行语义上的扩展,需要用到 WordNet 等词典。