英文智能问答之OpenEphyra

来源:互联网 发布:淘宝宝贝发布最佳时间 编辑:程序博客网 时间:2024/05/22 10:27

聊天机器人相信大家对于这个并不陌生,苹果手机Siri,百度的小度,小I机器人,虽然智能程度不同,但是关于智能问答已经走入了国人的眼中,扑面而来。

今天的互联网上,已出现“比利”、“艾丽斯”等聊天机器人等,中文的如“白丝魔理沙”、“乌贼娘”等由网友制作的聊天机器人。

聊天机器人(chatterbot)是一个用来模拟人类对话或聊天的程序。Chatterbots已应用于在线互动游戏Tinymuds。一个单独的玩家可以在等待其他“真实”的玩家时与一个chatterbot进行互动。

小编近来,沉浸在前人开发的问答系统中不能自拔,这种说法虽然有些夸张,确实很惊讶于前辈们的智慧。本文与大家分享继YodaQA的另一个开源项目OpenEphyra。两者实现思路类似,主要的差别YodaQA是基于UIMA框架实现的,在代码理解和掌握上还需要有UIMA的基础。而OpenEphyra完全是基于Java 开发的模块化、可扩展的问答系统、安装简单。本文分享的一个主要目的,是大家对问答的实现思路从代码上有个认识,形成个大致思路。最后关于答案选择部分在明天的文中分享。

OpenEphyra英文问答

OpenEphyra 是一个使用 Java 开发的模块化、可扩展的问答系统、安装简单。

It retrieves answers to natural language questions from the Web and other sources. OpenEphyra comes with implementations of algorithms that proved effective in Carnegie Mellon's Ephyra system, which participated in the TREC evaluations.The goal of this project is to give researchers the opportunity to develop new QA techniques without worrying about the end-to-end system.

它从Web和其他来源检索自然语言问题的答案。OpenEphyra来源于卡耐基-梅隆大学的OpenEphyra系统有效实施的实现算法,该系统参加TREC评估。该项目的目标是让研究人员有机会开发新的QA技术,而不必担心端到端系统。


OpenEphyra运行方式

- 源码中提供了执行脚本 'scripts'.
- 执行 OpenEphyra.sh (Unix, Linux, and Mac OS) 或者 OpenEphyra.bat (Windows).
- Type in a factoid question, 'LIST:' followed by a list question, or 'exit'.

整个系统只需要Java运行环境 (jdk 版本v1.5及以上) ,大约1GB RAM.


OpenEphyra架构

四大模块Question Analysis问题分析、Query Generation生成查询语句、Search搜索、Answer Extraction and Selection答案提取和选择。

 

Question Analysis:问题标准化,问题分析(问题模式,类型模式);

Query Generation查询生成器:词袋生成器,查询重写生成器,问题解释生成器;

Search搜索:google知识挖掘,Indri知识挖掘

Answer Extraction and Selection候选答案过滤器:

Extraction过程:回答模式过滤器,回答类型过滤器,语义抽取过滤器,回答投影过滤器;

Selection过程:去停用词,问题关键词,factoid subset filter虚构的子集,重复过滤,评分排序。


OpenEphyra核心代码解析

1、 console获取问题的方式启动

new OpenEphyra()   创建OpenEphyra实例,并初始化系统。

2、commandLine()

确认问题类型(FACTOID or LIST);

核心流程:askFactoid和 askList包含了所有过程。

3、askFactoid(question, FACTOID_MAX_ANSWERS, FACTOID_ABS_THRESH);


包含了问答的核心过程:问题分析,生成查询语句,搜索,答案提取和选择。主要由以下几个模块构成:

(1)     initFactoid():初始化pipeline的各个模块

(2)     QuestionAnalysis.analyze(question):问题分析

(3)     runPipeline(aq, maxAnswers, absThresh):获取答案

 initFactoid()初始化pipeline的各个模块:

QuestionAnalysis.analyze(question):问题分析

context:提供关于问题的附加上下文信息的字符串。

整个问题分析过程走下来,产生的结果如下:

(3) runPipeline(aq, maxAnswers, absThresh):获取答案

aq是上一步的问题分析结果,maxAnswers设为1,absThresh设为0.0。

该过程分为3个步骤:

3.1 query generation 生成查询语句

3.2 search 搜索答案

3.3 answer selection 选择答案