Hvad er artificial intelligence eller AI som det hedder i forkortet form.
På dansk kan det oversættes til kunstig intelligens
Det lyder meget komplex og uoverskueligt, men det er det faktisk slet ikke.
At bygge en kunstig hjerne eller en form for svar på et spørgsmål kan laves meget simpelt.
En simpel form for AI
Som alt andet i denne verden skal man begynde i det små, dette gælder også AI
Både for at få en forståelse for virkningen, men også for at lære processer mv.
Lad os lave et lille eksempel.
Vi skal lære en mus at holde sig i live i 3 dage
Der er nogle basale ting den skal have hver dag, for at leve i 3 dage
Mad
Vand
Søvn
# Jeg har her lavet mit eget lille programmeringssprog, bare for at gøre det forståeligt.
# Vi sletter musens hukommelse
Erease Mus
# Musen skal nu prøve sig frem for at lære (få erfaring = AI)
# Hvis musen tager rør nr. 1 så får den vand
If Mus goes to rør(1)
Then Mus får Vand
# Hvis musen tager rør nr. 2 så får den mad
If Mus goes to rør(2)
Then Mus får Mad
# Hvis musen tager rør nr. 3 så får den søvn
If Mus goes to rør(3)
Then Mus får Søvn
# Hvis musen tager rør nr. 4 så ender den hos katten og dør
If Mus goes to rør(4)
Then Mus får Kat
# Mus
Der har været en del fokus på chatbot's efter at Microsoft udgav deres chatbot Tay
Tay blev lanceret som en Twitter chatbot, og det gik tydeligt galt, da brugere hurtigt fik den til at tweete udtalelser der både var racistiske og seksuelle.
Problemet med AI bots er
Du kan læse mere om Microsoft Bot Framework her kan man også selv være med til at udvikle bots til forskellige formål.
Goggle har også udviklet deres version af AI (Library for Machine Intelligence) det hedder Google TensorFlow
Der er flere der her udviklet deres egen version af AI herunder er nogle af dem:
Gennerel AI:
AIMA
PyDatalog
Simple AI
SimpleAI (Artificial Intelligence Python lib) from PyData on Vimeo.
Machine Learning:
PyBrain
FeatureForge
PyMl
Milk
Derudover findes der mange forskellige udviklinger af IA på websiden SourceForge kan der findes mange former for software der er tilpasset forskellige formål af artificial intelligence
Kan man lave sin helt egen chatbot?
Ja, det kan man godt, det kræver noget kode og en database.
Lad os lave en kode
import re
import sqlite3
from collections import Counter
from string import punctuation
from math import sqrt
# initialize the connection to the database
connection = sqlite3.connect('chatbot.sqlite')
cursor = connection.cursor()
# create the tables needed by the program
try:
# create the table containing the words
cursor.execute('''
CREATE TABLE words (
word TEXT UNIQUE
)
''')
# create the table containing the sentences
cursor.execute('''
CREATE TABLE sentences (
sentence TEXT UNIQUE,
used INT NOT NULL DEFAULT 0
)''')
# create association between weighted words and the next sentence
cursor.execute('''
CREATE TABLE associations (
word_id INT NOT NULL,
sentence_id INT NOT NULL,
weight REAL NOT NULL)
''')
except:
pass
def get_id(entityName, text):
"""Retrieve an entity's unique ID from the database, given its associated text.
If the row is not already present, it is inserted.
The entity can either be a sentence or a word."""
tableName = entityName + 's'
columnName = entityName
cursor.execute('SELECT rowid FROM ' + tableName + ' WHERE ' + columnName + ' = ?', (text,))
row = cursor.fetchone()
if row:
return row[0]
else:
cursor.execute('INSERT INTO ' + tableName + ' (' + columnName + ') VALUES (?)', (text,))
return cursor.lastrowid
def get_words(text):
"""Retrieve the words present in a given string of text.
The return value is a list of tuples where the first member is a lowercase word,
and the second member the number of time it is present in the text."""
wordsRegexpString = '(?:\w+|[' + re.escape(punctuation) + ']+)'
wordsRegexp = re.compile(wordsRegexpString)
wordsList = wordsRegexp.findall(text.lower())
return Counter(wordsList).items()
B = 'Hello!'
while True:
# output bot's message
print('B: ' + B)
# ask for user input; if blank line, exit the loop
H = raw_input('H: ').strip()
if H == '':
break
# store the association between the bot's message words and the user's response
words = get_words(B)
words_length = sum([n * len(word) for word, n in words])
sentence_id = get_id('sentence', H)
for word, n in words:
word_id = get_id('word', word)
weight = sqrt(n / float(words_length))
cursor.execute('INSERT INTO associations VALUES (?, ?, ?)', (word_id, sentence_id, weight))
connection.commit()
# retrieve the most likely answer from the database
cursor.execute('CREATE TEMPORARY TABLE results(sentence_id INT, sentence TEXT, weight REAL)')
words = get_words(H)
words_length = sum([n * len(word) for word, n in words])
for word, n in words:
weight = sqrt(n / float(words_length))
cursor.execute('INSERT INTO results SELECT associations.sentence_id, sentences.sentence, ?*associations.weight/(4+sentences.used) FROM words INNER JOIN associations ON associations.word_id=words.rowid INNER JOIN sentences ON sentences.rowid=associations.sentence_id WHERE words.word=?', (weight, word,))
# if matches were found, give the best one
cursor.execute('SELECT sentence_id, sentence, SUM(weight) AS sum_weight FROM results GROUP BY sentence_id ORDER BY sum_weight DESC LIMIT 1')
row = cursor.fetchone()
cursor.execute('DROP TABLE results')
# otherwise, just randomly pick one of the least used sentences
if row is None:
cursor.execute('SELECT rowid, sentence FROM sentences WHERE used = (SELECT MIN(used) FROM sentences) ORDER BY RANDOM() LIMIT 1')
row = cursor.fetchone()
# tell the database the sentence has been used once more, and prepare the sentence
B = row[1]
cursor.execute('UPDATE sentences SET used=used+1 WHERE rowid=?', (row[0],))
Du kan se mere om dette projekt her