因没法公开代码,并且是怀着mmp的心情写的,所以这篇文章比较适合作者自己看。
在其他项目狂轰乱炸的形势下,终于有时间接着总结一下 最近的机器学习部分的东西了。
目前开源的 机器学习库 最好的就是 TensorFlow了。
一头雾水的我,在自学了几天的python之后,查遍了目前市场上的几种开源机器人框架,动手搭建了几个demo,考虑到业务问题,还是觉的rasa比较合适。
虽然 botfront是一个基于rasa开发的开源的对话机器人平台,更适合新手直接搭建,但是其默认是有自己的一套默认的web样式和交互似乎不太适合我们的业务环境。
最后决定就直接使用rasa来撸吧。
项目背景
需要搭建一套机器人聊天系统,能在一定程度上替代人工客服。
比如我司业务中的
- 考勤问题
- 门店设备维护维修问题
- 各种内部政策问题
- 新人入职常见问题
- 新店员入店常见问题
- ……
目前这些方面都会有专门的人员是负责答疑,包括HR或者客服部的同学还包括我(负责考勤问题,因为考勤系统是我写的)。每天都会浪费大量的时间在回答各种问题上,有一些问题是不能立即给出答案的,是需要查询系统之后才能回复,并且查询的权限又不能放开到全员。。。。。
初期搭建
找了几个rasa的demo看了一下,当中的版本都很老旧,想使用一套新的版本搭建。前期大量时间浪费在管理python版本、pip版本和 Tenserflow版本、rasa版本冲突等问题上。奈何没有人指导一下,完全是摸黑前行。。。
有几个基础的概念需要先明白一下,有助于理解和搭建项目
- domain.yml 域 文件相当于AI助手的大脑,记录了系统所有的信息。可以理解为机器的知识库,其中定义了【意图】【动作】以及对应动作所【反馈】的内容
- intents 意图 你期望用户说的东西。
- entities 实体 您想要从消息中提取的信息片段。
- actions 你的机器人可以做和说的东西
- slots 在会话期间跟踪的信息(例如用户年龄)
- templates 你的机器人可以说的东西的模板字符串
- utter actions:以utter_为开头,只发送一条信息给用户作为反馈的动作。 定义很简单,只需在domain.yml文件中的actions:字段定义以utter_为开头即可
- 具体的回复内容将被定义在templates部分。如果没有utter_这个前缀,那么action就会被识别为 自定义 actions。
项目结构
├── __pycache__ │ ├── __init__.cpython-36.pyc │ └── actions.cpython-36.pyc ├── actions │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ └── actions.cpython-36.pyc │ └── actions.py // 此文件包含可用于运行的自定义操作 ├── configs │ ├── config.yml // NLU和Core模型的配置 │ ├── credentials.yml // 连接其他服务的详细信息 │ ├── domain.yml // 最重要的文件,维护了必要信息 │ └── endpoints.yml // 当前配置中可以让rasa 连接 其他的web ├── data // 主要数据文件夹,机器学习的原始数据,需要维护好 │ ├── nlu.md // 定义各种意图 │ ├── stories.md // 各种story │ └── total_word_feature_extractor_zh.dat // 大佬提供的基于wiki百科训练的数据模型 ├── index.py // 搭建的server服务,提供mock接口查询 ├── models // 机器学习训练出的模型 │ ├── 20200710-163206.tar.gz │ ├── 20200712-223713.tar.gz │ ├── 20200712-223728.tar.gz │ ├── 20200712-225744.tar.gz │ ├── 20200712-230940.tar.gz │ ├── 20200714-091549.tar.gz │ ├── 20200714-092744.tar.gz │ ├── 20200715-085453.tar.gz │ ├── 20200716-085519.tar.gz │ ├── 20200716-091656.tar.gz │ ├── 20200716-093109.tar.gz │ └── nlu-20200712-223456.tar.gz ├── server.py // rasa 默认的服务 ├── store.back.md ├── story_graph.dot ├── tests └── conversation_tests.md
初次执行训练命令死活不行,一顿查找才知道是yml的问题。
yml 文件有严格的格式,最好使用lint 工具校验一下 http://www.yamllint.com/
另外一个坑:别使用vsCode 自带的命令行工具,垃圾的一批
具体的命令执行
rasa init 使用示例训练数据,操作和配置文件创建新项目。 rasa train 使用您的NLU数据和故事训练模型, rasa interactive 启动交互式学习会话,通过聊天创建新的培训数据。 rasa shell 加载训练有素的模型,并让您在命令行上与助手交谈。 rasa run 使用训练有素的模型启动Rasa服务器。有关详细信息,请参阅运行服务器文档。 rasa run actions 使用Rasa SDK启动操作服务器。 rasa visualize 可视化故事。 rasa test 使用您的测试NLU数据和故事测试训练有素的Rasa模型。 rasa data split nlu 根据指定的百分比执行NLU数据的拆分。 rasa data convert nlu 在不同格式之间转换NLU训练数据。 rasa -h 显示所有可用命令。
训练数据
python -m rasa train --config configs/config.yml --domain configs/domain.yml --data data/
项目中主要时间是放在编写store、和准确的命中意图,所以在我们基础数据不是特别多的情况下,采用交互式训练就显的尤为重要。
rasa interactive --config configs/config.yml --domain configs/domain.yml
交互训练需要注意一点的就是 缺少槽值的问题。
.........
在裸奔1.0即将开发完成之际,leader 告诉我,公司买了一套客服系统,不用我搞了。。。这。。。我。。。特么。。。。 我感觉我有点被耍了,怪不得和我说不要占用工作时间。。。
算啦,自己从头搞的项目,怎么着也能给自己长点经验和能力。
文章评论