当我们需要任何信息时我们该怎么办? 简单:“我们问,谷歌告诉”。
但如果答案取决于多个变量,那么现有的Ask-Tell模型往往会出现问题。 最先进的搜索引擎通常无法处理此类请求。 我们必须搜索可用的信息,然后尝试过滤和组装相关的部分。 听起来很费时间,不是吗?
随着聊天机器人(也称为“机器人”)的出现,这种Ask-Tell模型正在迅速发展。
本文讨论了用于提取与印度最近推出的商品和服务税(GST)相关的信息的机器人的开发。 作为一个相对较新的概念,很多人仍在试图了解它的工作原理。 聊天机器人可以以自然和对话的方式提供此类信息。 本文演示了如何构建一个聊天机器人来回答与GST相关的查询。 我们称之为GST-FAQ Bot!
要了解更多关于商品及服务税的信息,例如如何申请注册,税务等,公司已在其网站上发布了常见问题解答(FAQ)。 通过这些信息可能是一个艰苦的过程。 在这些情况下,聊天机器人派上用场,有效,因此,已经变得非常受欢迎。
如今,自然语言处理(NLP),特别是其自然语言理解(NLU)组件,使机器人能够更好地理解语言和语境。 他们在理解搜索的含义方面变得更加智能,并且可以返回非常具体的基于上下文的信息。
像WhatsApp,Facebook Messenger,Slack等应用程序越来越多地被企业使用。 机器人也开始取代网站界面。 从可用于构建聊天机器人的大量选择中,这个特定的实现使用Python中的RASA-NLU库。
目前有许多聊天机器人平台可用,从基于规则的基本AIML(人工智能标记语言)到高度复杂的AI机器人。 一些流行的聊天机器人平台是API.ai,Wit.ai,Facebook API,Microsoft LUIS,IBM Watson等。
RASA-NLU构建了一个本地NLU(自然语言理解)模型,用于从会话中提取意图和实体。 它是开源的,完全是本地的,最重要的是免费! 它还与wit.ai,LUIS或api.ai兼容,因此您可以将聊天应用程序数据迁移到RASA-NLU模型中。
下面是如何安装RASA-NLU并在Python中构建一个简单的FAQ bot的演示。
聊天机器人是客户端 - 服务器应用程序。 在RASA-NLU的情况下,甚至服务器也可以是本地的。 客户端只是chabot UI。 可以通过下图来理解交互和体系结构:
可以在独立计算机上安装和配置RASA。 要遵循的步骤:
RASA-NLU由几个组件组成,每个组件都执行一些特定的工作(意图检测,实体提取等)。 每个组件可能都有一些特定的依赖项和安装。 MITIE(NLP + ML),Spacy和Sklearn等选项可供选择。 我们将在这里使用Spacy-Sklearn。
客户端UI可以是一个网页(使用像Python中的Flask这样的框架)或移动应用程序。 Flask很容易编码并在本地运行。 使用pip install flask并按照本教程获得对该框架的基本了解。
在开始使用之前,需要对RASA-NLU平台进行培训。 我们需要提供一些句子,并提及其中的意图和实体。 意图是句子的动作/类别,实体是完成动作所需的必要变量。
例如,“我希望预订3月27日从孟买飞往浦那的航班”以“航班预订”为目的,以“孟买”,“浦那”和“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"
}
]
}
以下是上述代码中提到的一些字段的解释:
https://rasahq.github.io/rasa-nlu-trainer/
{
"pipeline": "spacy_sklearn",
"path" : "./",
"data" : "./data/gstfaq-data.json"
}
-m rasa_nlu.train -c config.json
-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 there
我们现在可以查看GST FAQ bot的其余组件。
我们的聊天机器人客户端UI是使用Flask框架构建的。 它使用两个html模板来呈现UI(即聊天窗口)。 外部UI使用base.html构建,如下所示:
<!DOCTYPE HTML>
<html lang="en">
<head>
…
</head>
<body>
<h1 align="center">GST FAQ Chat</h1>
<div class="container">
{% block content %}{% endblock %}
</div>
</body>
<footer>
{% block other_footers %}{% endblock %}
</footer>
</html>
内容和other_footers块在home.html中定义,如下所示:
{% block content %}
{% endblock %}
{% block other_footers %}
{% endblock %}
这是聊天机器人的核心。 根据从RASA-NLU收到的意图,它将实体分派给映射的回调函数。 该函数依次根据实体调用Knowledgebase来获取响应。 收到响应后,会将其发送回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上找到。
操作步骤:
您可以在此处观看视频演示。
本教程只是一个小例子,展示了开发成熟和实用的东西的潜力。 我们的GST Q&A机器人可以在各个方面得到增强,例如知识库的扩展(即问题和答案的数量),更好的培训以找到更多的意图和实体,自然语言生成的响应具有人类语言感觉等。
GST常见问题Bot只是使用政府信息构建直观前端的一个示例。 随着更多API和开放公共数据的可用性,我们可以为这些数据库构建类似的(如果不是更好的)机器人。 想象一下,使用健谈的机器人与政府部门进行互动!
RASA-NLU 创建,安装 https://github.com/RASAHQ/rasa_nlu
Bhavani Ravi’s event-bot code
Building chatbots using Python/Django – Youtube video.
GST FAQ http://www.cbec.gov.in/resources//htdocs-cbec/deptt_offcr/faq-on-gst.pdf