尝试在线 IDE!
Chatito 可帮助您使用简单的 DSL 生成用于训练和验证聊天机器人模型的数据集。
如果您正在使用商业模型、开源框架构建聊天机器人或编写自己的自然语言处理模型,则需要培训和测试示例。 Chatito 随时为您提供帮助。
该项目包含:
在线chatoto IDE
Chatito DSL 规范
pegjs 格式的 DSL AST 解析器
生成器在 typescript + npm 包中实现
有关完整的语言规范和文档,请参阅 DSL 规范文档。
如果我们正确使用 Chatito,过度拟合是可以避免的问题。该工具背后的想法是在数据增强和可能的句子组合的描述之间建立交叉点。它并不是为了生成可能过度拟合单个句子模型的确定性数据集,在这些情况下,您可以对生成路径进行一些控制,仅根据需要提取样本。
Visual Studio Code 语法突出显示插件 感谢 Yuri Golobokov 在这方面所做的工作。
AI 蓝图:如何构建和部署 AI 业务项目在第 7 章中使用 chatito 实现了实用的完整聊天机器人示例。
在不同 NLP 提供者之间转换聊天机器人训练数据的 3 个步骤详细介绍了将数据格式转换为未实现的适配器的简单方法。您可以将生成的数据集与 DialogFlow、Wit.ai 和 Watson 等提供商一起使用。
Aida-nlp 是一个小型实验性 NLP 深度学习库,用于文本分类和 NER。使用 Tensorflow.js、Keras 和 Chatito 构建。用 JS 和 Python 实现。
该语言独立于生成的输出格式,并且因为每个模型可以接收不同的参数和设置,这是当前实现的数据格式,如果您的提供者未列出,在工具和资源部分有更多关于如何支持更多的信息格式。
注意:为了更轻松地查看,示例不会在意图之间打乱,因为某些适配器将示例直接流式传输到文件,建议将意图拆分到不同的文件中,以便于查看和维护。
Rasa 是一个开源机器学习框架,用于自动文本和基于语音的对话。了解消息、进行对话并连接到消息传递渠道和 API。 Chatito 可以帮助您为 Rasa NLU 组件构建数据集。
Rasa 适配器的一种特殊行为是,当槽定义语句仅包含一个别名,并且该别名将“同义词”参数定义为“true”时,生成的 Rasa 数据集会将别名映射为同义词。例如:
%[some intent]('training': '1') @[some slot] @[some slot] ~[some slot synonyms] ~[some slot synonyms]('synonym': 'true') synonym 1 synonym 2
在此示例中,生成的Rasa数据集将包含synonym 1
和synonym 2
的entity_synonyms
映射到some slot synonyms
。
Flair 一个非常简单的最先进的 NLP 框架。由 Zalando Research 开发。它为许多开箱即用的语言提供最先进的(GPT、BERT、RoBERTa、XLNet、ELMo 等)预训练嵌入。该适配器支持 FastText 格式的text classification
数据集和两列 BIO 注释词的named entity recognition
数据集,如 flair 语料库文档中所述。这两种数据格式非常常见,并且与许多其他提供商或模型一起使用。
NER 数据集需要进行单词标记化处理,目前使用简单的标记器来完成。
注意:Flair 适配器仅适用于 NodeJS NPM CLI 包,不适用于 IDE。
LUIS 是 Microsoft 认知服务的一部分。 Chatito 支持通过其批量添加标记话语端点及其批量测试 API 来训练 LUIS NLU 模型。
要训练 LUIS 模型,您需要将话语批量发布到相关 API 进行训练或测试。
参考问题:#61
Snips NLU 是另一个很棒的 NLU 开源框架。 Snips 适配器的一项特殊行为是您可以为槽定义实体类型。例如:
%[date search]('training':'1') for @[date] @[date]('entity': 'snips/datetime') ~[today] ~[tomorrow]
在前面的示例中,所有@[date]
值都将使用snips/datetime
实体标记进行标记。
如果您计划训练自定义模型或正在编写自定义适配器,请使用默认格式。这是最灵活的格式,因为您可以使用自定义实体参数注释Slots
和Intents
,并且它们都将出现在生成的输出中,因此例如,您还可以使用 DSL 包含对话/响应生成逻辑。例如:
%[some intent]('context': 'some annotation') @[some slot] ~[please?] @[some slot]('required': 'true', 'type': 'some type') ~[some alias here]
输出中将提供“上下文”、“必需”和“类型”等自定义实体,因此您可以根据需要处理这些自定义参数。
Chatito 支持 Node.js >= v8.11
。
使用yarn或npm安装它:
npm i chatito --save
然后使用您的代码创建一个定义文件(例如: trainClimateBot.chatito
)。
运行 npm 生成器:
npx chatito trainClimateBot.chatito
生成的数据集应该位于定义文件旁边。
以下是完整的 npm 生成器选项:
npx chatito <pathToFileOrDirectory> --format=<format> --formatOptions=<formatOptions> --outputPath=<outputPath> --trainingFileName=<trainingFileName> --testingFileName=<testingFileName> --defaultDistribution=<defaultDistribution> --autoAliases=<autoAliases>
<pathToFileOrDirectory>
.chatito
文件或包含 chatito 文件的目录的路径。如果是目录,将递归搜索其中的所有*.chatito
文件并使用它们生成数据集。例如: lightsChange.chatito
或./chatitoFilesFolder
<format>
可选。 default
、 rasa
、 luis
、 flair
或snips
。
<formatOptions>
可选。每个适配器可以选择使用的 .json 文件的路径
<outputPath>
可选。保存生成的数据集的目录。使用当前目录作为默认目录。
<trainingFileName>
可选。生成的训练数据集文件的名称。不要忘记在末尾添加 .json 扩展名。使用<format>
_dataset_training.json 作为默认文件名。
<testingFileName>
可选。生成的测试数据集文件的名称。不要忘记在末尾添加 .json 扩展名。使用<format>
_dataset_testing.json 作为默认文件名。
<defaultDistribution>
可选。如果未在实体级别定义,则默认频率分布。默认为regular
,可以设置为even
。
<autoAliases>
可选。发现未定义别名时生成器的行为。有效选项有allow
、 warn
、 restrict
。默认为“允许”。
罗德里戈·皮门特尔
sr.rodrigopv[at]gmail