智能问答系统:GST常见问题解答

在处理依赖多个变量的问题时,传统的问答模型往往表现不佳。现代搜索引擎通常无法处理这类请求,需要从零散的信息中搜索,然后尝试过滤和组合相关部分。听起来很耗时,不是吗?

随着聊天机器人(简称“机器人”)的出现,这种问答模型正在迅速发展。本文讨论了为印度新引入的商品和服务税(GST)开发信息提取机器人的过程。作为一个相对较新的概念,许多人仍在尝试理解其工作原理。聊天机器人可以以自然和对话的方式提供此类信息。本文展示了构建一个回答GST相关问题的聊天机器人的过程。让将这个机器人称为GST-FAQ机器人!

为了更深入地了解GST,比如如何申请注册、税率等级等,公司在其网站上发布了常见问题解答(FAQ)。浏览这些信息可能是一个痛苦的过程。在这种情况下,聊天机器人变得非常方便和有效,因此变得非常受欢迎。

如今,自然语言处理(NLP)特别是其组成部分自然语言理解(NLU),使得机器人能够更好地理解语言和上下文。它们在理解搜索的含义方面变得更加智能,并且能够返回非常具体的、基于上下文的信息。

RASA-NLU构建了一个本地NLU(自然语言理解)模型,用于从对话中提取意图和实体。它是开源的、完全本地的,最重要的是,它是免费的!它还与wit.ai、LUIS或api.ai兼容,因此可以将聊天应用程序数据迁移到RASA-NLU模型中。

下面是一个如何安装RASA-NLU并在Python中构建一个简单的FAQ机器人的演示。

聊天机器人是一个客户端-服务器应用程序。在RASA-NLU的情况下,甚至服务器也可以是本地的。客户端只不过是聊天机器人用户界面。通过以下图表可以理解交互和架构:

RASA可以安装和配置在独立机器上。安装步骤如下:

pip install rasa_nlu

可以在这里查看最新的文档。RASA-NLU由几个组件组成,每个组件执行一些特定的工作(意图检测、实体提取等)。每个组件可能有一些特定的依赖项和安装。可以选择MITIE(NLP + ML)、Spacy和Sklearn等选项。将在这里使用Spacy-Sklearn。

客户端用户界面可以是网页(使用Python中的Flask框架)或移动应用程序。Flask编码简单且运行在本地。使用

pip install flask

并遵循此教程以基本了解该框架。

RASA-NLU平台在开始使用之前需要进行训练。需要向它提供几个句子,并指出其中哪些是意图和实体。

意图是句子的动作/类别,实体是完成动作所需的必要变量。例如,“想预订3月27日从孟买飞往浦那的航班”有“flight-booking”作为意图,“孟买”、“浦那”和“3月27日”作为实体。同样,可以使用许多训练示例,以便RASA-NLU模型在不同方式上从领域对话中提取意图/实体。这个训练数据存储在一个json文件中,一个样本可以在

这里查看。它包含许多条目。其中一个样本条目如下所示:

{ "text": "show me a mexican place in the centre", "intent": "restaurant_search", "entities": [ { "start": 31, "end": 37, "value": "centre", "entity": "location" }, { "start": 10, "end": 17, "value": "mexican", "entity": "cuisine" } ] }

以下是上述代码中提到的一些字段的解释:

text:输入句子。

intent:动作或类别,在这个例子中是“restaurant_search”。这通常是回调函数的名称。

entities:实体数组。这里有两个。一个是类型为‘location’,值为‘centre’,另一个是类型为‘cuisine’,值为‘mexican’。‘start’和‘end’指定句子中单词的开始和结束索引。

也可以使用以下在线工具生成此json文件:

构建GST聊天机器人应用程序的服务器端步骤:

创建一个新目录并导航到其中。

在其中创建以下内容:

data目录

data/demo_gst.json:这个文件包含了上面显示的GST FAQ训练示例

json:这个文件包含了RASA-NLU的设置,如下所示:

{ "pipeline": "spacy_sklearn", "path" : "./", "data" : "./data/gstfaq-data.json" }

在Python中训练模型

-m rasa_nlu.train -c config.json

这将创建一个model_YYYYMMDD-HHMMSS文件夹

运行:

-m rasa_nlu.server -c config.json --server_model_dirs=./model_YYYYMMDD-HHMMSS

这将启动RASA-NLU服务器,并让知道端口,例如

一旦服务器开始运行,可以通过curl进行GET/POST或将其用作HTTP服务器。

对于HTTP服务器,在运行服务器时添加“-e luis”。

然后,在浏览器中输入:

http://localhost:5000/parse?q=hello%20there

输出如下所示:

现在可以查看GST FAQ机器人的其余组件。

客户端

聊天机器人客户端用户界面是使用Flask框架构建的。它使用两个html模板来渲染UI(即聊天窗口)。外部UI是用base.html构建的,如下所示:

这是聊天机器人的核心。根据从RASA-NLU接收到的意图,它将实体分派到映射的回调函数。该函数反过来,根据实体,调用知识库以获取响应。一旦收到响应,它就会被发送回UI。

知识库可以像一个简单的问题和答案字典一样简单,或者像人们可以想象/需要的那样复杂(如数据库、互联网源等)。本文为了演示目的,从字典中获取预编码的响应。

让看看样本字典:

intent_response_dict = { "intro": ["This is a GST FAQ bot. One stop-shop to all your GST related queries"], "greet":["hey","hello","hi"], "goodbye":["bye","It was nice talking to you","see you","ttyl"], "affirm":["cool","I know you would like it"], "faq_link":['You can check all the events here '] }

引擎使用RASA-NLU进行意图-实体提取和分派回调如下:

@app.route('/chat',methods=["POST"]) def chat(): try: user_message = request.form["text"] response = requests.get("http://localhost:5000/parse",params={"q":user_message}) response = response.json() response = response["topScoringIntent"] intent = response.get("intent") entities = response.get("entities") if intent == "gst-info": response_text = gst_info(entities) elif intent == "gst-query": response_text = gst_query(entities) else: response_text = get_random_response(intent) return jsonify({"status":"success","response":response_text}) except Exception as e: print(e) return jsonify({"status":"success","response":"Sorry I am not trained to do that yet..."})

用户文本通过http://localhost:5000/parse发送到RASA-NLU服务器。其响应包含意图和实体。根据意图,调用诸如gst-info和gst-query之类的函数。然后,它们的响应被发送回UI。

这个应用程序的源代码可以在github上找到。

聊天机器人在行动

操作步骤:

1. 通过执行“run_server.bat”脚本启动RASA-NLU服务器。它加载自定义训练的模型并开始监听端口5000

2. 通过在给定端口(例如8000)运行localhost来执行Flash应用程序。

3. 在底部聊天窗口中开始输入命令并单击“发送”。

4. 输入的消息及其响应将出现在上面的窗口中,如旁边的图片所示。

可以在这里查看视频演示。

结束语

本教程仅提供了一个小示例,展示了开发一个完整且实用工具的潜力。GST Q&A机器人可以在多个方面进行增强,例如扩展知识库(即问题和答案的数量),更好的训练以找到更多的意图和实体,自然语言生成的响应以具有人类语言感等。

GST FAQ机器人只是使用政府信息构建直观前端的一个例子。随着更多API和公开数据的可用性,可以为这些数据库构建类似(甚至更好)的机器人。想象一下使用聊天机器人与政府部门互动!

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485