제 27 회 한국정보처리학회 춘계학술발표대회 논문집 제 14 권 제 1 호 (2007. 5) 427 Intelligent Chat Agent in JESS Ahmad Ibrahim, Ho-Jin Choi School of Engineering, Information and Communications University {ibrahim, hjchoi}@icu.ac.kr Abstract An intelligent chat agent is a computer application that can have conversation with the user. This paper gives an overview of design and implementation of such a system in Java Expert System Shell (Jess) and have compared some of the limitations by using two different implementation approaches. 1. Introduction ∗ The Turing Test is a method for determine the computer (machine) capability of thinking (reasoning) as humans. It was named after Alan Turing who proposed "Turing Test" in his paper “Computing machinery and intelligence”. In the test a participant engages in a natural language conversation with other parties, a human and a machine and if he is unable to distinguish the machine then the machine is said to pass the test. Currently, computer based chat agents are used to simulate the Turing test [1]. In this paper, we have described a similar system build using the JESS (Java Expert System Shell) [7]. However, our research focused on reasoning aspect of such system and not on the complex natural language syntax and semantics. 2. Approach for problem-solving The intelligent reasoning requires three engines which include sentence matching , keyword matching and one word matching engine and their purpose is to match the user input with the stored vocabulary in the form of sentence and word patterns [1] [6]. Such system also requires features like repetition detection and priority feature. Repetition feature generates different outputs if the user types same input while priority feature give certain sentences and keywords preferences over the other. These features are considered since the user may input same sentence over and over to reveal the system identity while the priority feature enables the system to reason efficiently in case two or more keywords are detected in the input. The user input was analyzed by decomposing the input into several parts. The decomposition was done based on the decomposition rules in the vocabulary list. For the input sentence {"It seems that you hate me"} decomposed keywords will be { (1) It seems that (2) you (3) hate (4) me} which will be generated based on the decomposition rules like these {(0 you 0 me),(0 you 1 me),(0 you 0),(0 you 1)} in the vocabulary list. The "0" and "1" are the wild cards representing infinity and only one word respectively. i.e. ∗ This research was supported by the MIC(Ministry of Information and Communication), Korea, under the ITRC(Information Technology Research Center) support program supervised by the IITA(Institute of Information Technology Advancement). (0 you 1 me) means that infinite number of words can precede "you" while number of word in between "you" and "me" is equal to one. For the above sentence only rule2 (0 you 1 me) will succeed. The system output is generated after any decomposition rule is matched with the input sentences. The two types of output generated include response in the form of fix sentences or sentence generated based on the input. For the first case, the output is already defined as shown in Table-1. <Table1> Predefine output for matched sentences Input Output hello hello, good to see you how are you I am fine …….. ………………. For the second case i.e. Sentence Generation and Re- assembly, the output is generated based on the input decomposed sentence. For the given decomposed sentence {(1) It seems that (2) you (3) hate (4) me}, the corresponding reassembly rule can be {What makes you think I (3) you}. (3) in the reassembly rule will be replaced by the 3rd component of the input , so the output would be { What makes you think I hate you }. (Fig 1) Overall architecture of application 3. Discussions on implementation The system was build using two approaches i.e using the Jess Forward Chaining Technique and using Jess Search technique. On the front end Java while on the backend Jess was used (as shown in Fig-1). The tool used for Java was