由“你好”引发的血案——调戏图灵机器人

本文介绍了一种利用图灵机器人自动对话生成FAQ语料的方法。通过两个图灵机器人不断对话,并在一定轮次后插入新问题的方式,有效避免了对话陷入循环。此方法能够高效收集大量用于自动问答系统的训练数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近和学长想做一个自动问答的系统,有了一个整体模型的设计概念后,我就开始收集FAQ(常用聊天语料),大概就是“你好”、“你是谁”这类问题。但是网上关于这类问题的语料库质量都不高,或者要收费,于是我采取了让两个图灵机器人对聊的方式保存语料。

一、首先去注册图灵机器人。关于图灵机器人的使用方式不再赘述,官网上有很详细的说明,我们只需要知道它的url以及key(官网有API接入文档)接入信息

二、接下来就到了最令人激情的时刻:写代码!

1.引入相应的模块和编码设置,防止中文的打印出现乱码

import json  
import requests
import time
import sys
import os

reload(sys)
sys.setdefaultencoding('utf-8')

2.初始化一个列表,列表元素为每次向机器人打招呼的句子。

FAQ = ['你好', '嗨', '欢迎', '嗨,最近如何', '你好吗', '很高兴见到你',\
     '怎么了', '早上好!', '中午好!', '晚上好!', '你最喜欢什么书?', \
     '你最喜欢什么颜色?', '你是谁?', '复杂优于晦涩', '你是一个程序员吗?',\
     '我能问你一个问题吗?', '你喜欢什么食物?', '你的爱好是什么?', \
     '什么是爱', '你爱我吗?']

这时你也许会产生疑惑,为什么不直接让机器人一直对聊下去呢?本来我也是这么想的,但是测试了几次之后发现,图灵机器人在对聊10轮左右都会陷入重复语句的无限循环,如图:

机器人聊天记录

于是我的解决方法就是每当图灵机器人对聊10轮后,人为地插入新的语句,从而避免这个循环,即使出现循环也会马上进入下一个话题的轮次。

3.重头戏就是使用API与之交互

class tulingRobot(object):
    #http://www.tuling123.com/member/center/

    #发送json数据
    data = {
        "key" : '',
        "info" : ''
    }

    #传入相应的url和key
    def __init__(self, url, key):
        self.url = url
        self.key = key

    def robot(self, myfile):
        try: 
            with open(myfile, 'r+') as f:
                #每次读取文件中的最后一行,作为问句发送给机器人
                lastLine = f.readlines()[-1]

                self.data['key'] = self.key
                self.data['info'] = lastLine

                #用py的requests模块发送请求
                req = requests.post(self.url, data = self.data).text

                #返回的数据也是json格式,截取机器人的回答
                answer = json.loads(req)['text']

                #把机器人的回答写入文件底部,作为下一个问句
                f.write('\n' + answer)
        #异常处理
        except UnicodeError, e:
            print e.reason
        except IOError:
            print 'IO Error'

4.在聊天记录中插入新问句的操作

def insertQuestion(myfile, i):
    #print FAQ[i].decode('UTF-8').encode('GBK')
    try:
        with open(myfile, 'a') as f:
            #双回车可以清晰地看出每轮对话的边界
            f.write('\n' + '\n' + FAQ[i])
    except Exception, e:
        raise e

5.开始对话

def startTalking(myfile):
    #路径下存在该文件则删除之
    if os.path.exists(myfile):
        os.remove(myfile)

    url = 'http://www.tuling123.com/openapi/api'
    key1 = 'your key'
    key2 = 'your key'

    #创建了两个机器人
    r1 = tulingRobot(url, key1)
    r2 = tulingRobot(url, key2)

    i = 0
    l = len(FAQ)
    try:
        print 'takling...'
        #共进行l轮对话,l为FAQ表中句子数量
        while i < l:
            #插入新问句
            insertQuestion(myfile, i)
            j = 0
            #两个机器人对一个句子展开j轮对话,j太大机器人会循环同一个回答
            while j < 10:
                r1.robot(myfile)
                r2.robot(myfile)
                #每次对话后暂停0.001秒,防止调用过于频繁
                time.sleep(0.001)
                j = j+1 
            i = i + 1
            print '%d/%d finished' %(i, l)  
        print 'all finished'
    except Exception, e:
        raise e

6.运行程序。图灵机器人会对一个问句生成不同的回答,这里共进行5轮对话,可以搜集更多的语料。

if __name__ == '__main__':
    startTalking('talk_1.txt')
    startTalking('talk_2.txt')
    startTalking('talk_3.txt')
    startTalking('talk_4.txt')
    startTalking('talk_5.txt')

三、运行结果
直接在cmd中执行我们的py脚本,然后机器人就开始欢快地聊天了。

这里写图片描述

然后就可以在我们的txt文件中看到机器人对聊的语句了,有神奇的,也有很蠢的。

这里写图片描述

对图灵机器人的调戏就到此为止~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值