解读:如何让机器自动答题?
冲顶大会、芝士超人、百万赢家、百万英雄……搜狗推语音搜索答题外挂。今天我来总结下利用搜索来答题的技术原理。
本质上,这是一个自动问答( Question Answering, QA )的问题。
QA 是指利用计算机自动回答用户所提出的问题以满足用户知识需求的任务。
QA 研究内容和关键科学问题:
1 问句理解
给定用户问题,自动问答首先需要理解用户所提问题。
2 文本信息抽取
给定问句语义分析结果,自动问答系统需要在已有语料库、知识库或问答库中匹配相关 的信息,并抽取出相应的答案。
3 知识推理
自动问答中,由于语料库、知识库和问答库本身的覆盖度有限,并不是所有问题都能直 接找到答案。这就需要在已有的知识体系中,通过知识推理的手段获取这些隐含的答案。
例如,知识库中可能包括了一个人的“出生地”信息,但是没包括这个人的“国籍”信息,因此无法直接回答诸如“某某人是哪国人?”
回到利用搜索自动答题的任务,我们可以用 Q 表示问题,其中某一个答案是 An , As 表示所有的答案选项,则:
As=[A1,A2,A3,A4]
我们要解决的问题就是找到 Q+An 最相关的 An ,然后把 An 作为 Q 的答案。
那么,我们需要一个题目跟答案的数据库吗?不需要,基于搜索引擎即可省去整理答题数据库。大部分的答题外挂都是基于百度搜索,本文也基于百度,做一些梳理。
以下题为例:
Q =‘撒贝宁的姐妹是’As=[’涂经纬','撒贝娜','任雪','李思思']
方案1 简单粗暴型
搜索 Q ,统计 An 在搜索结果中出现的次数,取次数最高的,作为推荐答案。
结果:
涂经纬 0
撒贝娜 4
任雪 0
李思思 0
答案:
撒贝娜
方案2 算法型
分别搜索 Q、An ,统计结果的数量,然后计算 PMI 值,取值最高的作为推荐答案。
什么是 PMI ?
机器学习里经常会用到 PMI( Pointwise Mutual Information )点间互信息,这个指标来衡量两个事物之间的相关,用在自然语言处理中,比如计算两个词的相关度。
表示 Q 跟 An 同时出现的概率;
表示 Q 出现的概率;
表示 An 出现的概率;
如果 Q + An 同时出现的概率 > 分别出现的概率之积,则Q + An越相关;
NQ 表示 Q 的结果数量,NA 分别表示 An 的结果数量,NQA 表示 Q+An 的搜索数量,下面是伪代码:
NQ=search(Q)
for An in As: NA=search(An) NQA=search(Q+An) K=Log( NQA/(NA*NQ) ) print K
我们比较 NQA 与 NA 乘于 NQ 的关系,求解出 K 值最大的,即表示 Q + An 最相关;
看下具体计算:
NQ=910000
NAs=[292000,33700,1740000,5400000]
NQAs=[5800,19100,3,22200]
计算结果:
涂经纬 -17.64009576320894
撒贝娜 -14.289009380798765
任雪 -26.991983261015633
李思思 -19.215261822167164
答案:
撒贝娜
以上为2种基于搜索的自动答题方案,思路可以拓展至其他应用,只要是涉及查找两个词之间的相关度。
大家可以拓展下。
ps: