定制个机器人帮你和Ta聊天

BitJourneyer
• 阅读 3447

自动聊天示例

聊天1:

user: 在吗?
bot: 在
user: 在干嘛呢?
bot: 看电视
user: 看啥电视呀
bot: 活色生香
user: 很好看吗?
bot: 特搞笑
user: 你在哪里呀?
bot: 家里
user: 家里就你一个人嘛?
bot: 我喜欢一个人玩
user: 那我过来找你?
bot: 不可以,乖乖上班去

聊天2:

Q: 在吗?
A: 在
Q: 干嘛呢?
A: 没事
Q: 陪我去逛街嘛?
A: 嗯
Q: 你在打游戏?
A: 没有
Q: 那去不去?
A: 去

这是基于200万聊天记录训练出来的,你可以用自己和女朋友的记录训练了试试效果 :P

至于微信机器人怎么用,你可以 GitHub 搜搜看哈

项目说明

chatbot 是一个通过已知对话数据集快速生成回答的 Go 问答引擎。

为啥会有 chatbot 项目呢?

好多年前,当我们需要一个聊天机器人的时候,我是先用了 ChatterBot,但是使用下来,我们的1.2亿对话语料训练后的模型回答一个问题需要21秒左右,实在没法接受。仔细看了 ChatterBot 源码之后,我用 Go 重新实现了一个,并用 go-zero 的 MapReduce 框架做了并行优化,结果我们一个回答平均耗时大概18毫秒。

国庆假期,我有点空闲时间,所以就把这个项目整理了开源出来,一是给大家一个实际的 go-zero 的 MapReduce 示例;二是也提供大家一个闲聊机器人的项目玩玩。

BTW:后续我可能会开源智能客服机器人的项目,可以关注我的github:

https://github.com/kevwan

代码目录和命令行使用说明

bot

问答引擎,可以自定义自己的匹配算法

cli

  • train

    训练给定的问答数据并生成 .gob 文件

    • -d 读取指定目录下所有 jsonyaml 语料文件
    • -i 读取指定的 jsonyaml 语料文件,多个文件用逗号分割
    • -o 指定输出的 .gob 文件
    • -m 定时打印内存使用情况
  • ask

    一个示例的问答命令行工具

    • -v verbose
    • -c 训练好的 .gob 文件
    • -t 数据几个可能的答案

数据格式

如果你有语料数据,可以自行整理用来训练。

数据格式可以通过 yaml 或者 json 文件提供,参考 https://github.com/kevwan/chatterbot-corpus 里的格式。大致如下:

categories:
- AI
conversations:
- - 什么是ai
  - 人工智能是工程和科学的分支,致力于构建具有思维的机器。
- - 你是什么语言编写的
  - Python
- - 你听起来像机器
  - 是的,我受到造物者的启发
- - 你是一个人工智能
  - 那是我的名字。

致谢

go-zero - https://github.com/zeromicro/...

go-zerocore/mr 包的 MapReduce 实现使 chatbot 的回答效率得到了巨大的提升!

ChatterBot - https://github.com/gunthercox...

最早我是使用 ChatterBot 的,但由于回答太慢,所有后来只能自己实现了,感谢 ChatterBot,非常棒的项目!

项目地址

https://github.com/kevwan/chatbot

欢迎使用并 star 支持!

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
java8新特性
Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定keyvalue,value是对象中的某个属性值。 Map<Integer,StringuserMap1userList.str
Easter79 Easter79
3年前
springboot2.2和mybatis2.1的增删改查
直接结构图!(https://oscimg.oschina.net/oscnet/574820232583656659f583b60ba15706741.png)数据表CREATETABLE\user\(\id\int(32)NOTNULLAUTO\_INCREMENT,\user\_name\varc
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
oracle游标的例子
declare    cursor ca is select id_no, name from user where ym201401;begin    for cb in ca loop        update path set enamecb.name where id_nocb.id
Easter79 Easter79
3年前
SQLAlchemy 几种查询方式总结
几种常见sqlalchemy查询:    简单查询    print(session.query(User).all())    print(session.query(User.name, User.fullname).all())    print(session.query(User, User.na
Stella981 Stella981
3年前
SQLAlchemy 几种查询方式总结
几种常见sqlalchemy查询:    简单查询    print(session.query(User).all())    print(session.query(User.name, User.fullname).all())    print(session.query(User, User.na
yandex bot user agent
网站收集和整理了所有的,方便大家识别yandexbot。yandexbotuseragent列表Mozilla/5.0(compatible;YandexAccessibilityBot/3.0;http://yandex.com/bots)说明:YandexAccessibilityBot下载页面以检查用户的可访问性。它每秒最多向站
block yandex bot
是Yandex搜索引擎的爬虫。在这篇文章中,我总结了所有的Useragent,通过那篇文章,我们可以看出有些Yandexbot遵守,有些不遵守robots.txt协议。我们需要屏蔽yandexbot(blockyandexbot)可以通过robots.txt和IP的方式屏蔽,下面分别来讲。通过robots.txt
BitJourneyer
BitJourneyer
Lv1
野径云俱黑,江船火独明。
文章
3
粉丝
0
获赞
0