用于构建聊天机器人的灵活实用的 NLU 意图匹配服务器

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
简介: 请注意,此 NLU 引擎仍处于 alpha 阶段。所以,非常适合学习和玩耍。尚未准备好用于任何类型的生产用途。还请记住,该项目正在快速发展,这包括其公共 API。在第一个稳定版本出现之前,任何时候都可能发生重大变化。

每个聊天机器人的核心都有一个意图识别组件,负责将用户话语与可用的聊天机器人意图之一相匹配。这是Xatkit自己的 NLU 服务器。注意:

  • 遵循 Xatkit 的聊天机器人编排平台理念,您可以使用任何可用的意图识别引擎来构建您的 Xatkit 机器人。
  • 由于其公共 REST API,此 NLU 引擎可以集成到其他 NLP 解决方案中,而不仅仅是在 Xatkit 中。

请注意,此 NLU 引擎仍处于 alpha 阶段。所以,非常适合学习和玩耍。尚未准备好用于任何类型的生产用途。还请记住,该项目正在快速发展,这包括其公共 API。在第一个稳定版本出现之前,任何时候都可能发生重大变化。

是什么让这个意图匹配项目与众不同?

如果说我们学到了什么,那就是当涉及到聊天机器人项目的自然语言处理要求时,没有_一种放之四海而皆准的解决方案。_

我们希望提供一种易于适应任何聊天机器人要求并提供一系列意图匹配选项的解决方案,主要采用相当务实的方法,而不是为整个机器人构建大型神经网络的典型解决方案**。**

Xatkit 的一些 NLU 特定特征:

  • Xatkit 为每个机器人上下文创建一个_单独的神经网络_。

我们将机器人视为具有不同的对话上下文(例如,作为机器人状态机的一部分)。在给定的上下文中,在考虑可能的匹配时,只应评估在该上下文中有意义的意图。

Xatkit 机器人由上下文组成,其中每个上下文可能包含多个意图(请参阅dsl包)。在训练阶段,NLP 模型根据这些意图的训练语句进行训练,并附加到上下文以进行未来预测)。

  • Xatkit 明白_神经网络并不总是_意图匹配的理想解决方案

如果用户输入的文本中充满了 NN 从未见过的单词怎么办?可以安全地假设我们可以直接确定没有匹配并触发机器人移动到默认回退状态。

或者,如果输入文本与其中一个训练句子完全匹配怎么办?我们不应该假设这是以最大的信心返回的意图吗?

这种务实的决策是 Xatkit 的核心,使其成为一个非常有用的特定于聊天机器人的意图匹配项目。

有关如何构建 Xatkit 的 NLU 以及如何使用它的更多详细信息,另请参阅此博客文章

特征

目前,该引擎专注于意图匹配和 NER(命名实体识别)。

自定义神经网络

我们允许您使用各自的值和同义词定义您自己的一组实体。

示例实体可以是“CityEntity”,其值为“Barcelona”(同义词:“BCN”、“Barna”)和“Madrid”。

基础神经网络

我们开发了可以在任何意图中使用的预定义实体类型:

  • 数字(例如“3”、“3.5”、“-3.5”、“负三点五”等)
  • 日期时间(例如“2022 年 12 月 1 日 15:00”、“12 月”、“下午 4 点”、“今天”、“3 个月内”等)

请参阅base_entities.py检查所有基本实体类型。

另请检查该tests文件夹以获取有关如何使用引擎及其配置选项的一些示例(如下所述)。

安装 Xatkit NLU

Xatkit NLU 引擎已通过 Python 3.9 测试。

其他关键要求是:

  • numpy~=1.22.2
  • fastapi~=0.74.0
  • 张量流~=2.8.0
  • 狂妄的~=1.9.0
  • matplotlib~=3.5.1
  • 节~=1.3.0
  • PyStemmer~=2.0.1
  • text2num~=2.5.0
  • 日期解析器~=1.1.3
  • python-dateutil~=2.8.2

FastAPI是我们用来将 NLU 引擎公开为 REST API 的 Web 框架。您可能会认出大多数其他依赖项 :-)

我们使用 Stanza 的语言依赖分词器。在运行服务器之前,您需要下载将在机器人中使用的语言模型

运行 Xatkit NLU

FastAPI 依赖uvicorn作为 ASGI web 服务器实现。

要将 Xatkit 公开为 Web API,请编写:

python -m uvicorn main:app --log-level trace

其中 main 是 FastAPI 应用所在的模块。

配置选项

配置选项和默认值列表(参见nlp_configuration.py

钥匙 价值观 描述 约束
country 细绳 机器人使用的国家语言 可选(默认en
region 细绳 机器人使用的区域代码 可选(默认US
timezone 细绳 机器人使用的时区 可选(默认Europe/Madrid
num_words 整数 单词索引中要跟踪的最大单词数 可选(默认1000
lower 布尔值 是否所有字符串都应转换为小写 可选(默认true
oov_token 细绳 在预测期间表示词汇表外单词的标记 可选(默认<OOV>
num_epochs 整数 训练期间要运行的时期数 可选(默认300
embedding_dim 整数 嵌入单词标记期间要起诉的维度数 可选(默认128
input_max_num_tokens 整数 为所有句子保留的最大长度(根据标记数) 可选(默认30
stemmer 布尔值 是否使用词干分析器作为训练句子(和用户话语)处理的一部分 可选(默认True
discard_oov_sentences 布尔值 当用户话语都是 OOV 标记时,自动为所有意图分配零概率 可选(默认True
check_exact_prediction_match 布尔值 是否检查要预测的句子与其中一个训练句子之间的精确匹配 可选(默认True
use_ner_in_prediction 布尔值 是否应该在预测期间使用实体匹配? 可选(默认True
activation_last_layer 细绳 最后一层的激活函数 可选(默认sigmoid
activation_hidden_layers 细绳 隐藏层的激活函数 可选(默认tanh

贡献

你想为 Xatkit 做贡献吗?我们很想听到您的声音。请记住,除了提交代码之外,还有很多方法可以支持开源项目!谈论 Xatkit、编写文档、贡献示例……所有这些都是帮助我们的好方法。

贡献代码时,请先与我们讨论您希望进行的更改。首先打开一个描述性问题,以便我们可以就继续您的错误修复或新功能想法的最佳方式提出建议。

感谢阅读到最后!如果您喜欢您所看到的内容,请不要忘记加注星标/观看此存储库,您会让我们非常高兴!

目录
相关文章
|
2月前
|
Java 关系型数据库 API
探索后端技术:构建高效、可靠的服务器端应用
在当今数字化时代,后端技术是任何成功应用程序的基石。它涉及服务器、数据库和应用程序之间的交互,处理数据存储、业务逻辑和系统性能等关键任务。本文将深入探讨后端开发的核心概念、常见技术栈及其实际应用,帮助读者更好地理解和掌握构建高效、可靠后端系统的技巧与策略。
|
2月前
|
监控 中间件 Java
后端技术:构建高效、稳定的服务器端应用
【10月更文挑战第5天】后端技术:构建高效、稳定的服务器端应用
84 0
|
2月前
|
监控 关系型数据库 Serverless
探索后端技术:构建高效、可靠的服务器端应用
本文将深入探讨后端开发的核心概念和关键技术,从服务器架构到数据库管理,再到安全防护,为读者提供全面的后端技术指南。无论是初学者还是经验丰富的开发者,都能从中汲取灵感,提升自己的技术水平。
|
19天前
|
XML 算法 自动驾驶
ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
【11月更文挑战第7天】本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。
|
1月前
|
关系型数据库 API 数据库
后端开发的艺术:从零到一构建高效服务器
在数字化时代,后端开发是支撑现代互联网应用的基石。本文旨在探讨后端开发的核心概念、关键技术以及如何构建一个高效的服务器。我们将从基础的编程语言选择开始,逐步深入到数据库设计、API开发和性能优化等关键领域。通过实际案例分析,我们将揭示后端开发的复杂性和挑战性,同时提供实用的解决方案和最佳实践。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和启发。
|
2月前
|
JSON JavaScript 前端开发
使用 Node.js 和 Express 构建 RESTful API 服务器
【10月更文挑战第3天】使用 Node.js 和 Express 构建 RESTful API 服务器
|
2月前
|
Web App开发 JavaScript 前端开发
使用Node.js和Express框架构建Web服务器
使用Node.js和Express框架构建Web服务器
|
3月前
|
存储 关系型数据库 API
深入理解后端技术:构建高效、可扩展的服务器端应用
本文将探讨后端开发的核心概念和技术,包括服务器端编程、数据库管理、API设计和安全性等方面。通过深入浅出的方式,让读者了解如何构建高效、可扩展的后端系统。我们将从基本的后端框架开始,逐步深入到高级主题,如微服务架构和容器化部署。无论您是初学者还是有经验的开发人员,都能在本文中找到有价值的信息和实用的建议。
|
2月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API服务器
【10月更文挑战第12天】使用JavaScript和Node.js构建简单的RESTful API服务器
22 0
|
2月前
|
人工智能 自然语言处理 机器人
用Python构建你的第一个聊天机器人
【10月更文挑战第7天】在这篇文章中,我们将一起探索如何利用Python编程语言和AI技术,一步步打造一个基础的聊天机器人。无论你是编程新手还是有一定经验的开发者,都能通过这个指南获得启发,并实现一个简单的对话系统。文章将引导你理解聊天机器人的工作原理,教你如何收集和处理用户输入,以及如何设计机器人的响应逻辑。通过动手实践,你不仅能够学习到编程技能,还能深入理解人工智能在语言处理方面的应用。
67 0