65.9K
CodeProject 正在变化。 阅读更多。
Home

聊天机器人 Eliza

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.28/5 (30投票s)

2006年2月20日

5分钟阅读

viewsIcon

150045

downloadIcon

10421

这是一个类似 Eliza 的聊天机器人。

Sample Image

引言

此程序是一个类似 Eliza 的聊天机器人。像 Eliza 这样的机器人是人工智能研究(更具体地说,是自然语言处理和自然语言理解;NLP:自然语言处理,NLU:自然语言理解)的成果。第一个聊天机器人由麻省理工学院教授 Joseph Weizenbaum 于 1966 年发表。而且,如今编写的大多数聊天机器人很大程度上都基于 Joseph Weizenbaum 编写的原始聊天机器人 Eliza,这意味着它们使用一些适当的关键词来选择生成响应,当它们收到用户的新输入时。在“聊天机器人数据库”或“脚本文件”中用于表示聊天机器人知识的技术被称为“案例推理”或 CBR。

一个非常好的类似 Eliza 的聊天机器人例子是“Alice”。这个程序曾三次赢得 Loebner 奖,被评为最像人类的聊天机器人。NLP 和 NLU 的目标是创建能够理解自然语言并能通过“语音识别”处理自然语言以获取用户输入的程序,或通过“文本转语音”生成输出的程序。在过去的几十年里,“语音识别”和“文本转语音”领域取得了长足的进步。然而,对于 NLU 来说,让软件能够普遍地展现出对“自然语言”的良好理解程度,对许多人工智能专家来说,似乎仍然遥不可及。关于这个主题的普遍观点是,在任何计算机能够像人类一样真正理解“自然语言”之前,还需要至少几十年的时间。此代码受版权保护,并有有限保修。

这个新版本的程序比以往任何时候都更智能,自上次提交以来增加了更多新功能,现在用户与聊天机器人之间的对话记录会自动保存在文件中:log.txt。最后,“脚本文件”(script.txt),即聊天机器人的知识库,已被完全重写,并且肯定比以前的版本要好。

背景

此代码中的大部分想法都直接受到 Joseph Weizenbaum 编写的原始聊天机器人“Eliza”的启发。

使用代码

代码很简单易懂,代码中最重要的一部分可以在名为“Eliza”的类中找到。

  • script.txt 是存储程序知识的文件。
  • time records.txt 是保存程序用于模拟人类打字员的时间延迟(以秒为单位)记录的文件。
  • unknown.txt - 如果在与用户的对话中,程序没有为给定的句子找到任何关键词,该句子将被保存在此文件中。之后,用户可以使用这个新句子来决定向数据库添加哪个新关键词。

关注点

在我编写聊天机器人代码时,我想到了一种控制程序重复的方法。这个新功能是通过函数 bot_repeat()similar_response()handle_repetition() 实现的。

当前程序中有许多有趣的功能。此聊天机器人能够在选择新响应时避免重复。它还可以遵循与用户的对话上下文。当程序检测到不属于“脚本文件”的新关键词时,它会将它们保存在“unknown.txt”文件中,最后,它在屏幕上显示响应时会模拟“人类打字员”。实际上,程序中还有更多功能,您可以通过阅读“源代码”来找到它们。

编辑聊天机器人数据库的技巧

编辑程序数据库(script.txt)时,您应该记住,用两个下划线(前面一个,后面一个)括起来的关键词(_KeyWord_)表示该特定关键词只能单独出现在给定输入中,在该句子中不能有其他单词。当关键词后跟一个下划线(KeyWord_)时,表示该关键词只能出现在相应输入的末尾。最后,当关键词中没有下划线(KeyWord)时,表示该关键词可以出现在用户输入的任何位置,但不能出现在末尾。

现在关于响应,当聊天机器人响应中出现至少一个字符('*'、'@'、'%')时,表示该响应是一个模板。在处理最终响应时,字符 '*' 将被输入中紧跟找到的关键词的部分替换。字符 '@' 将简单地被替换为用户最后的输入,字符 '%' 将被替换为聊天机器人的前一个响应。而且,每当一个响应被认为是模板时,它总是会被转置(聊天机器人会进行一些代词反转,例如“我”变成“你”等),然后再打印到屏幕上。

历史

我通过使用更多函数对程序的功能进行了更多的封装。最后,数据库比上次更大。此外,还增加了一个控制用户使用短输入的新功能。有了这个新功能,聊天机器人确保用户使用更长的句子,这反过来可能保证在用户输入中找到更多关键词的机会。数据库(script.txt)已更新,添加了更多条目,并且对一些关键词的格式进行了一些修正。

© . All rights reserved.