构建聊天机器人的最佳方式

时间:2011-10-20 22:40:40

标签: java chatbot

我可以从哪个框架开始创建一个简单的聊天机器人?机器人的重点非常有限(对于我的项目管理网站http://ayeboss.com)。

可以将它与iPhone上的SIRI进行比较。我想创建一个简单的“回答”聊天,它将回答诸如“给我所有已完成的任务到目前为止”或“显示我最后完成的任务”或“显示|列表|给我我的待处理任务”等问题。用户询问后问题我想向用户提供数据

截至目前,我正在创建可能问题的正则表达式字典,如果没有匹配,那么我会进行lucene搜索以找到最接近的匹配。 我做得对吗?

5 个答案:

答案 0 :(得分:5)

通常,像您这样的狭窄领域内的聊天机器人通常依赖于两个重要概念:

  • 意图检测:确定用户请求的内容
  • 实体提取:识别用户请求中的entites。例如,在航班预订中,实体的示例是源,目的地和旅行日期。在天气机器人中,实体可以是天气所需的日期或需要天气的位置。

针对您特定类型的聊天机器人,其目标明确是检索已完成任务列表并检索上次完成的任务。要开发它,您需要定义感兴趣的意图。从您的示例中,我们可以轻松定义2个意图:

  • COMPLETED_TASKS_REQUEST
  • LAST_COMPLETED_TASK

基于这2个意图,实际上没有可检测到的实体。您只需查询服务API以检索每个方案中的请求信息。

下一阶段将培训分类器以识别意图。这可以通过为每种请求类型获取一些示例句子并对其进行培训来完成。

然后将流程简化为以下内容:

  1. Bot收到消息
  2. Bot识别意图
  3. Bot提取相关实体(如果需要)
  4. 如果识别出意图,则机器人查询数据源以检索答案,否则机器人会抱怨它不理解该请求。或者,如果机器人需要一个实体来完成请求,那么机器人会要求用户提供信息并完成其任务。这通常称为基于插槽的方法。您可以详细了解Dialog Manager的工作原理。
  5. 请注意,如果您没有进入机器学习或NLP,您可以轻松地在wit.ai或api.ai等平台上训练意图检测器,并且此任务的实体分类部分将简化为简单{{1 API请求。虽然在构建真正复杂或复杂的机器人时,构建自己的模型几乎总是更好,因为您可以完全控制并且可以更好地处理边缘情况。像wit.ai或api.ai这样的平台通常需要在多个领域中表现良好,同时您可以专注于让您的任务管理专家。

    希望这有帮助。

    PS:为了让您的机器人更有趣,我们可以添加一个更多的意图,例如检索给定id的特定任务的状态。例如,用户可以询问任务54的状态。可以调用此意图: http。在此示例中,intent具有一个实体,该实体是所请求任务的id,因此您需要提取该实体:)

答案 1 :(得分:3)

这是一项NLP任务,构建像这样的系统需要大量的R& D.您可以从构建可能被问到的一组问题开始。分析问题并为每种类型的问题提出单词模式。下一步是将英语句子转换为某种形式的正式结构(可能是SQL或lambda演算)。后端数据库应该有存储在其中的数据,可以用正式语言查询。

主要问题在于将英语句子转换为正式语言。您可以从正则表达式开始,通过检查输入句子的词性,句法结构来使其更复杂。查看NLTK包以执行NLP任务。

答案 2 :(得分:1)

在聊天机器人库之上,您可以集成像Hyphenate这样的即时消息库,以便为移动和Web通信启用聊天机器人。

以下是几个简单的步骤:

  1. Hyphenate控制台:通过在Hyphenate控制台(console.hyphenate.io)注册帐户来创建聊天机构实体,通过为机器人创建连字符IM帐户,为聊天机器人提供身份和语音。
  2. Platform SDK:将您的应用(iOS,Android或Web)与Hyphenate IM服务和开源UI库集成。
  3. Webhooks(事件回调):设置Hyphenate webhooks以接收来自用户的消息,这些消息将推送到您的开发人员后端,然后使用您的聊天机器人AI库进行处理。
  4. 后端REST API:通过开发人员后端的Hyphenate提供的REST API将chatbot的消息推送给用户。
  5. 万岁! Webhooks +后端REST API =在聊天机器人和用户之间传递消息。
  6. http://docs.hyphenate.io/docs/chat-bot-integration

答案 3 :(得分:1)

您可以直接使用Microsoft NLP框架,也可以将它们用于初学者。也被称为LUIS,它是其中之一。 Microsoft提供的认知服务。 它基本上是API调用的组合,您可以通过c#进行编码以使用相同的代码。

答案 4 :(得分:0)

不确定您熟悉哪种语言,但是在Java中,您可以使用Apache OpenNLP库来实现。这是一个非常好用的库,用于自然语言处理。要提供非常基本的方法,您可以将句子打断并将其标记为单词。然后,您可以对单词进行词素化以使其具有基本的单词形式。然后,您可以使用带有适当训练数据的分类器对它们进行分类或分类。更好的培训,更聪明的聊天机器人。您还可以选择类别,以使聊天机器人以更具吸引力的方式进行对话。 Here is a very good article with detailed example & demo