所謂[人工無腦],根據本人在百度百科中的解釋^^,即:
人工無腦“人工無脳(じんこうむのう)”,是日語中特有的說法,日文引用英文的舶來語,[人工無腦]在英文中被稱為chatterbot、chatbot等,中文通常稱其為“聊天機器人”。[人工無腦]與[人工智能]等[強AI]產物相反,是[弱AI]的代表產品。
世界上第一個[人工無腦]系統chatterbot, 誕生于1966年.名為ELIZA,由J. Weizenbaum開發。ELIZA會分解問話,再以問話檢索事前錄入好的答案。從而模擬人機通信,造成計算機與人溝通的[假象],這也是所有[弱 AI]系統的共同特點。初期的[人工無腦]實現,以ELIZA和PARRY為主流。此后Ractor、Verbot、A.L.I.C.E.、ELLA等陸 續登場,[弱AI]系統得以長足發展。
[人工無腦]與[人工智能]的最大區別在于,它僅是模擬人機數據交換,而根據簡單的[表面現象]使之產生作用的程式,并沒有[強AI]那種模擬生命智能的 需 求。只是應用編碼好的程序,把提出的問題再以固定的方式回應,是一種[弱AI]。再簡單地說,這是在暫時無法實現人工智能時,一種模擬人工智能的方式。
如絕大部分游戲編程中,關于[人機交互]這一部分,都是以[人工無腦]的方式來實現的。
在這里首先提供一個簡單的Java用例:

此用例不過濾用戶會話,僅將輸入的會話再次返回,但卻是[無腦]系統的基礎所在。
代碼如下:
ChatbotPanel:
package org.test;
/**
* <p>Title: LoonFramework</p>
* <p>Description:</p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: LoonFramework</p>
* @author chenpeng
* @email:ceponline@yahoo.com.cn
* @version 0.1
*/
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.ScrollPane;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
* <p>Title: LoonFramework</p>
* <p>Description:[人工無腦]系統的初步實現。</p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: LoonFramework</p>
* @author chenpeng
* @email:ceponline@yahoo.com.cn
* @version 0.1
*/
public class ChatbotPanel extends Panel implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private static final int WIDTH = 480;
private static final int HEIGHT = 480;

// 用于信息顯示
private TextArea dialogueArea;
// 用于信息輸入
private TextField inputField;

private Chatbot chatbot = new Chatbot(Chatbot.NAME);

public ChatbotPanel() {
setPreferredSize(new Dimension(WIDTH, HEIGHT));

init();
}

/**
* 初始顯示
*/
private void init() {
setLayout(new BorderLayout());

// 創建文本框
dialogueArea = new TextArea();
dialogueArea.setEditable(false);
dialogueArea.append("人機通信模擬 ");

//初始信息
inputField = new TextField("要與["+Chatbot.NAME+"]進行的對話。");
inputField.selectAll();

//設定滾動條
ScrollPane scrollPane = new ScrollPane();
scrollPane.add(dialogueArea);
add(scrollPane, BorderLayout.CENTER);
add(inputField, BorderLayout.SOUTH);

inputField.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {
//獲得輸入的內容
String input = inputField.getText();
dialogueArea.append("人類說: " + input + " ");

//返回響應
String response = chatbot.getResponse(input);
dialogueArea.append(chatbot.getName() + ": " + response + " ");
dialogueArea.setCaretPosition(dialogueArea.getText().length());
inputField.setText("");
}
public static void main(String[]args){
Frame frm=new Frame();
frm.setSize(WIDTH, HEIGHT);
frm.setResizable(false);
frm.setTitle(Chatbot.NAME);
frm.add(new ChatbotPanel());
frm.setVisible(true);
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}


Chatbot:
package org.test;
/**
* <p>Title: LoonFramework</p>
* <p>Description:</p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: LoonFramework</p>
* @author chenpeng
* @email:ceponline@yahoo.com.cn
* @version 0.1
*/
public class Chatbot {
private String name;
public static final String NAME="無腦0號機";

public Chatbot(String name) {
this.name = name;
}

public String getResponse(String message) {
return message;
}

public String getName() {
return name;
}
}

在[人工無腦]系統中,真正關鍵的技術在詞條的檢索和回復方式,比如我略微擴充Chatbot類后,將變成這樣。

變更后Chatbot如下:
package org.test;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Random;

/**
* <p>Title: LoonFramework</p>
* <p>Description:</p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: LoonFramework</p>
* @author chenpeng
* @email:ceponline@yahoo.com.cn
* @version 0.1
*/
public class Chatbot {
private String name;
public static final String NAME="無腦0號機";
private ArrayList dic;
private Random rand;

public Chatbot(String name) {
this.name = name;

dic = new ArrayList();
rand = new Random(System.currentTimeMillis());

//加載字典
loadDic();
}

public String getResponse(String message) {
String response = (String)dic.get(rand.nextInt(dic.size()));
return response;
}

public String getName() {
return name;
}
private void loadDic() {
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(getClass().getResourceAsStream("dic.txt")));
String line;
while ((line = br.readLine()) != null) {
dic.add(line); //寫入list
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

dic.txt內容如下:
[中國人民是不可戰勝的。
一切反動派都是紙老虎。
人民萬歲!
慶祝17大勝利召開。
共建和諧社會。]
雖然沒有經過更多處理,但已經能體現出人機對話的[假象了],若通過網絡的字典數據庫系統,甚至能夠完成以假亂真的弱AI聊天機器人呢。
人工無腦“人工無脳(じんこうむのう)”,是日語中特有的說法,日文引用英文的舶來語,[人工無腦]在英文中被稱為chatterbot、chatbot等,中文通常稱其為“聊天機器人”。[人工無腦]與[人工智能]等[強AI]產物相反,是[弱AI]的代表產品。
世界上第一個[人工無腦]系統chatterbot, 誕生于1966年.名為ELIZA,由J. Weizenbaum開發。ELIZA會分解問話,再以問話檢索事前錄入好的答案。從而模擬人機通信,造成計算機與人溝通的[假象],這也是所有[弱 AI]系統的共同特點。初期的[人工無腦]實現,以ELIZA和PARRY為主流。此后Ractor、Verbot、A.L.I.C.E.、ELLA等陸 續登場,[弱AI]系統得以長足發展。
[人工無腦]與[人工智能]的最大區別在于,它僅是模擬人機數據交換,而根據簡單的[表面現象]使之產生作用的程式,并沒有[強AI]那種模擬生命智能的 需 求。只是應用編碼好的程序,把提出的問題再以固定的方式回應,是一種[弱AI]。再簡單地說,這是在暫時無法實現人工智能時,一種模擬人工智能的方式。
如絕大部分游戲編程中,關于[人機交互]這一部分,都是以[人工無腦]的方式來實現的。
在這里首先提供一個簡單的Java用例:

此用例不過濾用戶會話,僅將輸入的會話再次返回,但卻是[無腦]系統的基礎所在。
代碼如下:
ChatbotPanel:
package org.test;
/**
* <p>Title: LoonFramework</p>
* <p>Description:</p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: LoonFramework</p>
* @author chenpeng
* @email:ceponline@yahoo.com.cn
* @version 0.1
*/
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.ScrollPane;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* <p>Title: LoonFramework</p>
* <p>Description:[人工無腦]系統的初步實現。</p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: LoonFramework</p>
* @author chenpeng
* @email:ceponline@yahoo.com.cn
* @version 0.1
*/
public class ChatbotPanel extends Panel implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private static final int WIDTH = 480;
private static final int HEIGHT = 480;
// 用于信息顯示
private TextArea dialogueArea;
// 用于信息輸入
private TextField inputField;
private Chatbot chatbot = new Chatbot(Chatbot.NAME);
public ChatbotPanel() {
setPreferredSize(new Dimension(WIDTH, HEIGHT));
init();
}
/**
* 初始顯示
*/
private void init() {
setLayout(new BorderLayout());
// 創建文本框
dialogueArea = new TextArea();
dialogueArea.setEditable(false);
dialogueArea.append("人機通信模擬 ");
//初始信息
inputField = new TextField("要與["+Chatbot.NAME+"]進行的對話。");
inputField.selectAll();
//設定滾動條
ScrollPane scrollPane = new ScrollPane();
scrollPane.add(dialogueArea);
add(scrollPane, BorderLayout.CENTER);
add(inputField, BorderLayout.SOUTH);
inputField.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
//獲得輸入的內容
String input = inputField.getText();
dialogueArea.append("人類說: " + input + " ");
//返回響應
String response = chatbot.getResponse(input);
dialogueArea.append(chatbot.getName() + ": " + response + " ");
dialogueArea.setCaretPosition(dialogueArea.getText().length());
inputField.setText("");
}
public static void main(String[]args){
Frame frm=new Frame();
frm.setSize(WIDTH, HEIGHT);
frm.setResizable(false);
frm.setTitle(Chatbot.NAME);
frm.add(new ChatbotPanel());
frm.setVisible(true);
frm.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}


Chatbot:
package org.test;
/**
* <p>Title: LoonFramework</p>
* <p>Description:</p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: LoonFramework</p>
* @author chenpeng
* @email:ceponline@yahoo.com.cn
* @version 0.1
*/
public class Chatbot {
private String name;
public static final String NAME="無腦0號機"; 
public Chatbot(String name) {
this.name = name;
}
public String getResponse(String message) {
return message;
}
public String getName() {
return name;
}
}

在[人工無腦]系統中,真正關鍵的技術在詞條的檢索和回復方式,比如我略微擴充Chatbot類后,將變成這樣。

變更后Chatbot如下:
package org.test;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Random;
/**
* <p>Title: LoonFramework</p>
* <p>Description:</p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: LoonFramework</p>
* @author chenpeng
* @email:ceponline@yahoo.com.cn
* @version 0.1
*/
public class Chatbot {
private String name;
public static final String NAME="無腦0號機";
private ArrayList dic;
private Random rand;
public Chatbot(String name) {
this.name = name;
dic = new ArrayList();
rand = new Random(System.currentTimeMillis());
//加載字典
loadDic();
}
public String getResponse(String message) {
String response = (String)dic.get(rand.nextInt(dic.size()));
return response;
}
public String getName() {
return name;
}
private void loadDic() {
try {
BufferedReader br = new BufferedReader(
new InputStreamReader(getClass().getResourceAsStream("dic.txt")));
String line;
while ((line = br.readLine()) != null) {
dic.add(line); //寫入list
}
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

dic.txt內容如下:
[中國人民是不可戰勝的。
一切反動派都是紙老虎。
人民萬歲!
慶祝17大勝利召開。
共建和諧社會。]
雖然沒有經過更多處理,但已經能體現出人機對話的[假象了],若通過網絡的字典數據庫系統,甚至能夠完成以假亂真的弱AI聊天機器人呢。

浙公網安備 33010602011771號