(1)
在《自然语言理解》这本书的绪论中曾分析了聊天机器人ELIZA的设计机理,表明这是一种语言变换的技巧,而不是真正的“自然语言理解”。午间休息时检索了一下,找到了一个它的连接:
http://www-ai.ijs.si/eliza-cgi-bin/eliza_script
它并不如书中所举的例子那样的“聪明”;也许因为这是第一个聊天机器人,以及它并没有真正采取“自然语言理解”的技术有关。下面是笔者与它交流时的一些例子:
You: Men are all alike.
Eliza: What resemblance do you see?
You: Most of them never bathed.
Eliza: Please go on.
You: I feel bad these dayes.
Eliza: Do you often feel bad these dayes?
You: Yes,but I don't know how to make myself happy.
Eliza: Why do you not know what to make yourself happy?
You: Will you tell me something?
Eliza: Oh, i tell you something.
You: Tell me then.
Eliza: Can you elaborate on that?
You: No,I just feel unhappy.Maybe I am worried about something.
Eliza: How long have you been worried about something?
You: For two weeks.
Eliza: Please go on.
You: And Eliza, I need your help.
Eliza: Why do you want my help?
的确,Eliza没有智能,它仅使用了对话者自己的智能来使它所说的话变的有意义。也就是说,它其实并不知道谈话对方的“意思”。这一痕迹,可以从上下文语言的细节中感觉的到。
(2)
自然语言生成,有两个比较关键的问题:
Eliza并不知道自己要表达的“意思”,它所做的就是做一个变换:
f(S-in)=S-out
由于S-out是在S-in的基础上变换而来,且符合自然语言的语法要求,所以对话者一般潜意识中就把S-out的“意思”当作Eliza的表达内容了:事实上内部的程序中根本没有“语义”(semantic or meaning)的计算。所以,对于上面两个问题的回答,Eliza方案有意忽略了中间最重要的核心部分,而根据输入与输出采取了一些技巧性的手段。
图灵测试没有说“智能”是什么,而是通过其行为来描述——由此Eliza在上世纪60年代诞生也可以说成绩斐然。然而学科要发展,终归不能回避这个问题。就如Eliza,既然它不能进行语义计算,所以也就无法确切知道谈话者的“意思”,也不能如人类一样作出连续的、合理的反应,更不要说知道并表达自己的意思了。当它不知道如何变换的时候,经常说诸如“Please go on.”之类的话也就不奇怪了。
(3)
Eliza虽然并没有真正“理解”语言,但它的设计原理仍具有一定的启发意义。本节就从其设计原理说一说,主要参考《自然语言理解》中的内容,谈谈在此基础上的初步思考。
在内部机制上,以前曾说Eliza是对输入句子做了一个变换,直接产生了输出语句,并没有进行“语义计算”。这个变换,主要是通过一个关键字数据库完成的,该数据库的模式为:
(关键字,级别,匹配模式,输出格式)
关键字就是英文的word,级别是一个整数。匹配模式是一个核心内容,它是英文句子的一种抽象,由部分英文搭配和变量组成,可表示一类英文句子的格式。例如:
模式: ?X are you ?Y
可以匹配: Why are you looking at me ?
输出格式:Would you prefer it if I weren‘t ?Y
“?”与字母相连表示一个变量。例子中的句子与模式就可以匹配成功。匹配成功,则可以查看输出格式,如例子中,就可以用相应的变量值替换输出格式中的变量,得到如下的输出:
输出句子:Would you prefer it if I weren’t looking at you ? (注意:需要做调整,就是把me替换为you,使得会话角色一致)
这基本上就是Eliza的工作机制。至此,你可以看到它是如何“利用对话者的智能来使它所说的话变的有意义”的。它的算法大体上类似于:
//输入:句子S-in;输出:句子S-out
(1)在数据库中查找S-in的关键字,使得S-in与相应的匹配模式匹配。
(2)若存在多个关键字,则选择级别最高的那个匹配模式。
使用该匹配模式对应的输出格式产生S-out。
(3)若无匹配模式,则输出过度内容(默认S-out)以引导对话继续进行。
(4)
我们不妨看一下Eliza的知识库的例子,这些例子来源于《自然语言理解》:
词语 级别 模式 输出
alike 10 ?X In what way?
What resemblance do you see?
are 3 ?X are you ?Y What would you prefer it if I weren't ?Y
what 2 ?X Why do you ask?
Does that interest you?
从计算机的技术角度讲,Eliza使用的是模式以及关键字匹配和置换的方法,它本身并没有形成一套的自然语言理解的理论、技术体系。
但是,我们说这不仅仅是个技巧,也有它的启发意义,也有它的成功之处。毕竟,语言是思想的外壳;语义是语言的灵魂。虽然语义形式化有极度的困难;而直观的说,对一个有意义的输入作出有意义的输出也是比较困难的:但Eliza初步做到了后者,通过一个知识库。
也就是说,“知识”需要一种表达方式,来供计算机使用,虽然使用的手段,也就是技术上的技巧很简单,但是思考如何利用知识是一个必然的探索。在Eliza中,关键字,级别,模式与输出的确定,就是它对知识库的固化——这是它成功的地方。
但同时,也是它不足的地方。首先我们就这种知识表达形式来说,可以有一个深入的方向,知识库的内容,尤其是级别、模式与输出的内容与关系,是否可以通过机器学习来得到?而不是事先设定?如果可以通过输入,通过一个封闭或开放的语料集合来进行学习,而不断的改进知识库的内容的话,Eliza的效果将是大有提高的。其次,我们可以改进对知识库的使用算法,这种算法不仅仅把“级别”当作唯一的、单调增的参数,而是有一种复合的机制,保证Eliza能在谈话中形成、表现自己的特点(性格特点?),那么Eliza也将是更加成功的。再次,我们说这种知识表达形式本身与缺陷:它没有形式化甚至涉及语义。我们可以寻找更好的语义表述模式,使得对话形成如下的思路:
输入 <=> 语义空间 <=> 输出
以这种方式来模拟人类的智能,Eliza将发生根本性的变化。
另外有一个聊天机器人,是ALICE,她也是采用了模式匹配的方法来检索最合适的回答,但她有一个很好的知识库扩充机制,并能对聊天记录进行分析而得到没有明确答案句子的建议模式。下面是她的地址:http://www.alicebot.org/
又及,她的眼睛很好看:),并获得2000年度、2001年度以及2002年度的“Loebner Prize”比赛冠军。这也是Eliza的后辈机器人了。