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 computer is
thought to be more intelligent if it is more frequently able to fool the human tester
into labelling it as a human. (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 is an individual assignment!
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.
Each week, additional exercises related to the assignment will be
provided at the end. These exercises are typically more challenging
than the regular assignment. Bonus points will be provided to
students who complete any of the "Hacker" level assignments.
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.
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.
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.