CPSC 120 B




Lecture
MWF 10:50am - 11:50am
Lab
MWF 12:00pm - 1:00pm

Scotty Smith

Office
Trexler 365-B
Office Hours
Monday / Thursday
3:00pm - 5:00pm
Email
chssmithATroanoke.edu

< Back
Printable Copy

Chat Bot

The Loebner Prize Competition is held every year to evaluate artificial intelligence chat programs using the Turing Test. In 1950, Alan Turing proposed a test to measure the intelligence of computers. In the Turing, test a subject has a text chat with either a person in another room or with a computer (the subject does not know which). There are no limits to what the subject can chat about, but when done chatting the subject must choose whether they think they were talking to a real person or to a computer. The more frequently a the computer computer is labeled as human, the more intelligent the computer is, according to the test. (Whether the Turing test is actually a measure of intelligence is debatable, but one interesting thing to consider is, what if a computer was labeled as human more than an actual human?) One simple artificial intelligence chat algorithm is to just repeat what other people have said previously in the same context.

This assignment is to be done individually. You will not work with a partner for this assignment.


Setup

Create a directory assignment8 under assignments in your cs120 directory. All code for the assignment should be stored in this directory.

cd ~/cs120/assignments
mkdir assignment8
cd assignment8

Details

Write a simple artificial intelligence chat program. The program should use a dictionary to associate phrases with responses. When a user types a phrase into a prompt the program should check if there is an entry for the phrase. If there is an entry it should print it, if there is not, then it should print a response for a random phrase in the dictionary. Note, the dictionary must be initialized with at least one phrase and response or else it will not be able to select a random phrase. After printing the response the program should repeat. The program should repeat a large fixed number of times and it should inform that user that pressing ctl-c will quit the program.

The chat will be very boring unless the program’s response dictionary is updated. The program should add the users input as a new response to the last phrase the program printed. That is, the program’s last output is the new key, and the user’s last input is the new value. The key should be converted to lowercase and stripped of all non-alphabetic characters to prevent capitalization and punctuation from affecting the look-up. If the key is already in the dictionary, the value should be overwritten with the new response.


Submission

You are required to submit a tar file to http://cseval.roanoke.edu/. On cseval, there is a link for Assignment 8. You can create a tar file by issuing the following commands:

cd ~/cs120/assignments
tar czvf assignment8.tgz assignment8/

Hacker Prompt

  1. Long Term Memory: The longer a person chats with the program the better it will be become. However, the program will lose all of this progress unless the program is able to remember phrases and responses from previous conversations. When the program first starts it should load the dictionary from a file using the pickle module. If the file does not exist, the program should start with an empty dictionary. To test if a file exists use the os.path.isfile() function in the os module. The dictionary should also be written to a file whenever the dictionary is updated.

  2. A Better Bot: One problem with the chat function is that it forgets previous (and perhaps better responses) when it encounters the same phrase twice. A better chat program would store a list of responses in each dictionary entry. When looking up a phrase the function should choose randomly from all of the phrases stored in the list. An even better chat program would also store how frequently each of the phrases in a list has been encountered and weight the random selection to favor of the more frequently encountered phrases.

  3. Loebner Competition: It's time to put your thinking caps on! We will run our own version of the Loebner competition in class. During the competition, you will get paired with either another student in the class, or one of your fellow classmates chatbot program. Your goal in class is to discover as many chatbots as possible. Your goal when writing the assignment is to fool as many of your peers as possible. The program which fools the most people will be awarded additional bonus points.