聊天机器人ELIZA

      (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)

     自然语言生成,有两个比较关键的问题:

  1. 确定要说哪些内容。          =>即知道自己要表达的“意思”
  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的后辈机器人了。

你可能感兴趣的:(HNC工作历程)