(一)比赛介绍

最早的聊天机器人(ChatBot)ELIZA诞生于1966年,由麻省理工学院(MIT)的约瑟夫·魏泽鲍姆(Joseph Weizenbaum)开发,用于在临床治疗中模仿心理医生。也正是通过 ELIZA 的实验引发了人们对“智能机器”的思考,开启了智能聊天机器人时代。ELIZA 诞生于那个计算机时间被当作宝贵资源的年代,仅仅用于模拟笔谈。

难点:环境的搭建

我先使用了wechaty_js,按照官方文档中的readme.md很容易搭建起一个服务,根据克隆下来的文件大概看了下源码中提供了哪些接口,根据example,自己可以容易的实现哪些功能。(本人虽然做项目时候写过一点js的东西,但实现一个bot实在不想用js来解决,就使用深度学习模型来说,js还是不太好用,所以转向wechaty_python).
先使用一台PC作为服务器(win或者linux,都试过,可行)搭建好wechaty的docker,扫码登录wechat(在此过程中建议使用小号微信,后面测试功能的时候避免因为消息打扰他人)。

(二)个人思路

随着时代的发展,群聊bot以微软小冰为代表,逐渐进入互联网er的视野。以使用范围最广的wechat为道路,以baidu家的wechaty为载具,再载以各式model,理论上可以生成各式所需要的聊天bot。

比赛提供了100h的算力卡,理论上可以在AI STUDIO平台训练出符合期望的model(本人比较懒,就直接调用了社区曾提供的对联模型了)

本团队制作了有如下功能的bot,测试过程中发现bot对所有的文字都进行回复效果超级不友好(有时上传任务后人就离开了,打开微信发现傻逼bot在所有群里捣乱,害我差点被踢),所以加固定的启动词才会回复:



B站演示链接

(三)具体方案

本项目以baidu提供的对联生成模型为例,下面介绍一下这种模型:

ernie_gen_couplet:ERNIE-GEN 是面向生成任务的预训练-微调框架,首次在预训练阶段加入span-by-span 生成任务,让模型每次能够生成一个语义完整的片段。在预训练和微调中通过填充式生成机制和噪声感知机制来缓解曝光偏差问题。此外, ERNIE-GEN 采样多片段-多粒度目标文本采样策略, 增强源文本和目标文本的关联性,加强了编码器和解码器的交互。ernie_gen_couplet采用开源对联数据集进行微调,可用于生成下联。下图是模型结构:


ernie_tiny_couplet:ernie_tiny_couplet是一个对联生成模型,它由ernie_tiny预训练模型经PaddleHub TextGenerationTask微调而来,仅支持预测,如需进一步微调请参考PaddleHub text_generation demo。预训练模型转换成预测module的转换方式请参考Fine-tune保存的模型如何转化为一个PaddleHub Module。下图是模型结构:

该模型可以通过API的方式一键生成模型,参考:

import paddlehub as hubmodule = hub.Module(name="ernie_gen_couplet")test_texts = ["人增福寿年增岁", "风吹云乱天垂泪"]
results = module.generate(texts=test_texts, use_gpu=False, beam_width=5)
for result in results:
sults:print(result)

本项目详细代码请参考work/run.py文件,大致流程为:
监听消息->启动关键词->启动模型进行对联生成->进行回复
需要对消息进行筛选,只对被艾特的时候进行回复:

不然会这样(这俩个都是我的机器人):

运行

1 按照教程搭建docker wechaty服务提供token,个人请更换run.sh中的token值

2 具体代码位于run.py中,在run.py中设置昵称,指示机器人只在群聊中被艾特的情况下回复,不回复未被艾特的消息。contact_id为指示ID,可设置后不回复指定人消息,逻辑可自己更改

(四)总结

使用wechaty可以按自己需要制作个定时给自己发送通知的个人助手,后续看情况完善。

还是想制作一个可以正常进行多轮对话的聊天bot,目前没看到适用的效果好的开放model,后续会跟进这方面发展。

(五)建议

AI STUDIO平台就邮费力度来说挺值的,方便我们贫农玩model,提供的预训练模型也够自己玩的,目前还没遇到bug,可能自己玩的不够深入吧。

(六)参考资料

  1. https://github.com/wechaty/wechaty
  2. https://github.com/wechaty/python-wechaty
  3. https://github.com/wechaty/wechaty/issues/66
  4. https://aistudio.baidu.com/aistudio/projectdetail/690991?channelType=0&channel=0
  5. https://github.com/wechaty/python-wechaty-getting-started

运用wechaty在群聊中生成对联相关推荐

  1. 小程序 小程序中打开其他小程序、小程序跳转其他小程序、微信群聊中打开小程序

    1.小程序中打开其他小程序可将要打开的小程序通过半屏的形态快速拉起(1)配置app.json的embeddedAppIdList字段中声明需要通过半屏形态打开的小程序,若不配置将降级为普通的小程序跳转 ...

  2. 怎么从微信群聊中引流?如何从群聊进行引流?微信群怎么引流

    在微信群当中,微信群裂变营销是很恐怖的的,但是,我们都知道微信群不像QQ群一样,没办法进行搜索,所以微信群引流就成为了许多人的难题,那么微信群聊怎么引流呢? 一.个人定位 做微信群引流之前,我们要先定 ...

  3. java redis 生成唯一id_Redis在集群环境中生成唯一ID

    概述 设计目标:每秒最大生成10万个ID,ID单调递增且唯一.Reidis可以不需要持久化ID. 要求:集群时钟不能倒退. 总体思路:集群中每个节点预生成生成ID:然后与redis的已经存在的ID做比 ...

  4. android讨论功能,集成融云Android SDK实现在群聊/讨论组中@人的功能

    集成融云Android SDK实现在群聊/讨论组中@人的功能 可以确定的是融云SDK本身不提供@的功能,需要自定义实现. 在实现这个功能时,基本模仿微信的做法: 在列表中显示有人@了你 通知显示有人@ ...

  5. 【uni-app】小程序实现微信在线聊天(私聊/群聊)

    之前学习使用uni-app简单实现一个在线聊天的功能,今天记录一下项目核心功能的实现过程.页面UI以及功能逻辑全部来源于微信,即时聊天业务的实现使用socket.io,前端使用uni-app开发,后端 ...

  6. 重金悬赏丨2019 华为 IoT 开发者大赛喊你加入“群聊”,倾听科技的“声音”!...

    进入互联网时代后,能爆炸式获得大量信息的,可不止我们人类.那些遍布全城.全行业"成精"的物件,其实它们也在用我们听不到的声音在"聊天". 比如楼梯里的灯会&qu ...

  7. IM多人聊天-群聊头像合成方法

    IM多人聊天群聊头像合成方法 群聊中将多个成员的头像合成为群聊的头像: ViewController.m // // ViewController.m // imageMerge // // Crea ...

  8. netty之微信-群聊的发起与通知(十八)

    群聊的发起与通知 这小节,我们来学习一下如何创建一个群聊,并通知到群聊中的各位成员 我们依然是先来看一下最终的效果是什么样的. 1. 最终效果 服务端 创建群聊的客户端 其他客户端 首先,依然是三位用 ...

  9. java仿QQ聊天室群聊(快速写一个简易QQ)

    [mie haha的博客]转载请注明出处(万分感谢!): https://blog.csdn.net/qq_40315080/article/details/83052689 用java写聊天室实现群 ...

最新文章

  1. PAT甲级(Advanced Level)真题--1046 Sharing
  2. Nginx访问VM虚拟机CentOS 7系统与本地Windows系统共享目录403
  3. 定义分销渠道(distribution channel)
  4. UIImage 裁剪图片和等比列缩放图片
  5. unity android sd卡路径,一、文件与路径——2、unity路径特点写法和文件读写全攻略...
  6. tensorflow 安装_tensorflow安装后Failed to get convolution algorithm问题
  7. 网吧服务器维护工具,某某网吧专用维护工具(网吧维护管理助手)V5.1 最新版
  8. 十二个“一”的人物对比--《雪中悍刀行》
  9. 【githubboy】一份开源的小型金融知识图谱构建流程,可帮助你更好的学习与理解知识图谱的使用
  10. 神经网络学习笔记1——BP神经网络原理到编程实现(matlab,python)
  11. java 批量生成条形码,打包zip(springboot)
  12. 一位ML工程师构建深度神经网络的实用技巧
  13. linux网络驱动 poll,网络 – Linux网络驱动程序中的并发:probe()VS ndo_open(),ndo_start_xmit()VS NAPI poll()...
  14. 单片机c语言程序编写步骤,Proteus运行Keil编写的51单片机C语言步骤
  15. java卡夫卡_卡夫卡(kafka)
  16. CRP原理的简单例子
  17. gil 简述_求职面试常见问题:Python常见面试题全解析附答案
  18. centos6.8服务器中了挖矿程序病毒的解决方法
  19. 学完软件测试还能找到工作吗?
  20. uva11538(组合数学)象棋中的皇后

热门文章

  1. win7怎么查看计算机主板,怎么看主板bios版本号?Win7系统查看主板bios版本的方法...
  2. 【CUDA】CUDA9.0+VS2017+win10详细配置
  3. 入职一个月的工作感悟
  4. VB编码, Gamma编码, Delta编码
  5. 小米笔记本指纹识别失效解决方法
  6. 【译】40 个为开发者提供的免费工具
  7. 快看,教你怎么上班摸鱼!
  8. java oracle 流复制_Oracle流复制技术
  9. Kubernetes: 微内核的分布式操作系统
  10. jspssm小型药店药品管理系统