这里采用Python自带的基于机器学习的语音对话引擎ChatterBot,我们可以采用它自带的训练库进行对话训练,也可以自己写入新的训练集帮助它学习对话。ChatterBot独特的语言设计可以使它通过训练来用任何一种语言进行对话。该项目的开源代码链接:https://github.com/gunthercox/ChatterBot。
首先我们使用自己建立的训练集来训练小机器人,使用ListTrainer可以把训练的对话语料直接放到代码里。
from chatterbot import ChatBot
from chatterbot.trainers import ListTrainer #采用自己建立语料库的方式
my_bot=ChatBot("小C")#建立一个小机器人
my_bot.set_trainer(ListTrainer)#使用ListTrainer训练my_bot
#调用train()函数,离别参数为对话方式,注意用逗号分隔问答
my_bot.train([
"你叫什么名字?",
"我叫小C。",
"你多大了?",
"我还很年轻",
"你喜欢美食么?",
"我喜欢宫保鸡丁。你呢?",
"我喜欢冰激凌",
"啊,太凉了,吃多了肚子会疼的",
])
while True:
print(my_bot.get_response(input("user:")))
下面正式开始聊天。其中user表示用户,前方无标注的为机器人,测试的结果如下。
可以看出,对于训练过的语料以及相似的语料,小C都可以做出比较好的回答,但是如果超出了语料范围,小C就开始答非所问了。大家可以尝试一下这个程序,写入自己的语料库。(https://www.xing528.com)
也可以采用中文语料库ChatterBotCorpusTrainer进行训练,这个训练时间会比较长,测试代码如下。
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBot CorpusTrainer
chatbot=ChatBot("全能小C")
chatbot.set_trainer(ChatterBotCorpusTrainer)
chatbot.train("chatterbot.corpus.chinese")
lineCounter=1
#开始对话
while True:
print(chatbot.get_response(input("("+str(lineCounter)+")user:")))
lineCounter+=1
可以看出,在训练过程中使用了多个领域的语料库,包括打招呼(greeting)、情感(emotion)、食物(food)等,而且小C会把前面学到的内容和交互过的内容存入学习库中。
但是,由于这个开源库中的语料库资源过少,也不能主动上网查询,因此很多问题它还是答非所问,要想使它能够做到回答和提问基本吻合,还需要做大量的工作。
本章小结
本章介绍了语音识别和文本分析的基本思路,读者需重点了解如何对语音进行特征提取和建立语音模型,如何采用Python程序调动系统自带的语音识别引擎工作;了解基于文本分词的自然语言统计和理解,以及相应Python程序的实现。
本章习题
尝试调用系统自带的语音API,实现语音合成和语音识别。
尝试进行文本分析,判断不同作者的作品。
尝试建立自己的聊天语料库来训练小机器人。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
