Jump to content
Kratos

[Python] [PyTeam] Inteligência Artificial - AIML

Recommended Posts

Kratos

Bom dia a todos, :P

Inteligência Artificial - Chatbot

Já ouviram falar de A.I (Inteligência Artificial) ? Ok!

Provavelmente já viram algo sobre os famosos chatbots ou chatterbots.

Chatbot ou chatterbot, são programas de computador que usam da Inteligência Artificial, com o propósito de simular a habilidade de conversação de um ser humano.

Chat = sala de bate-papo.

Bot = Robô.

Então pode se dizer que chatbot, é um robô com inteligência de interagir, num ambiente de bate-papo.

Estes chatbots são usados em sala de bate-papo, para prender a atenção do usuário, são usados também, por empresas que querem que haja uma interacção mecânica (porém inteligente) do cliente com seu site, divulgando produtos, informando preços, atraindo a atenção do cliente, de modo que este pense estar teclando com algum humano.

Eles são baseados em uma rotina de 'estímulo - resposta', ou seja, você pergunta, e ele responde com base na sua pergunta. Mas não é tão simples quanto a explicação sugere, há uma rotina muito complexa por trás de tudo.

AIML - Artificial Intelligence Markup Language

Para criar um chatbot, podemos Usar Prolog, ou outra linguagem de programação em lógica, e criar um chatbot a partir do zero, mas isso não é tarefa fácil ou ainda adaptar uma versão existente de algum programa desse tipo. Tudo isso requer muito conhecimento elaborado de programação de computadores e de programação em lógica.

Porém, podemos usar uma linguagem de marcação desenvolvida para esse propósito como a Artificial Intelligence Markup Language (AIML).

A especificação da AIML encontra-se na Internet.

AIML é virtualmente independente de linguagem de programacão.

Existem inúmeros chatterbot's na internet, porém, um deles ganha destaque neste conceito, trata-se da A.L.I.C.E. Este bot ja ganhou muitos prémios por ser o mais realista possível, e é escrito em AIML.

Python e AIML = pyAIML.

Tudo que precisamos para AIML funcionar, é um processador de AIML escrito na linguagem que mais convém, no nosso caso, Python. Essa opcão permite um rápido desenvolvimento sem a necessidade de técnicos especialistas em programação e lógica.

PyAIML, é nosso motor para funcionar o bot em AIML.

Download de PyAIML: http://sourceforge.net/projects/pyaiml

Esse módulo é uma implementação de um interpretador para AIML (Artificial Intelligence Markup Language. Na página de download do módulo PyAIML baixe também as definições padrões da AIML, ou vá directo por aqui:

Download da AIML standard.

Esse arquivo de definições, é que contém a "inteligência" do robô. Apenas descompacte-o para uma pasta qualquer.

Trabalhando com pyAIML

Agora que foi resumido o que é AIML e pyAIML, vou mostrar um bot que escrevi há um tempo atrás.

Primeiro, gostaria de informar que ao fazer o bot, trabalhamos apenas com texto, como em uma sala de bate papo, veja um pequeno exemplo:

# coding: iso-8859-1 -*-
import aiml
import os

os.chdir('C:/Python24/curso/projetoAIML') # diretório que contém os arquivos da AIML standard
ai = aiml.Kernel() # inicialização
ai.learn('std-startup.xml') # lê o arquivo principal da AIML e faz referências aos outros
ai.respond('load aiml b') # faz com que os outros arquivos da AIML sejam carregados

while (1==1):
frase = raw_input('Fale algo ao bot em english:')
print "Resposta do bot: %s" % ai.respond(frase)

Ok, mas para dar mais dinamismo e impolgação ao programa, resolvi que o mesmo, deveria ter um mecanismo da fala, foi então que implantei ao mesmo a função de TSS (Text-To-Speak), da Microsoft.

Com pyTTS,

você converte texto em fala humana.

Download do PyTTS

Veja o exemplo com pyTTS:

# coding: iso-8859-1 -*-
import aiml
import os
import pyTTS
import time

tts = pyTTS.Create() # cria o motor de fala.
tts.Volume = 90 # Ajusta o Volume.

os.chdir('C:/Python24/curso/projetoAIML') # muda para o diretório que contém os arquivos da AIML

standard
ai = aiml.Kernel() # inicialização
ai.learn('std-startup.xml') # abre o arquivo principal da AIML (que faz referências aos outros)
ai.respond('load aiml b') # faz com que os outros arquivos da AIML sejam carregados

while (1==1):
frase = raw_input('Fale algo ao bot em english:')
print "Resposta do bot: %s" % tts.Speak(ai.respond(frase))

Ainda não satisfeito com o programa, percebi que ele não estaria completo sem uma interface gráfica, algo que chamaria a atenção do usuário, ou seja, que deveria ter uma aparencia realista, foi então que tive a brilhante idéia de usar os Agentes da Microsoft (MS Agents).

Veja a famosa foto de um deles:

dev_geral:merlin.gif

saiba mais sobre MS Agent's aqui

Agôra meu bot tem:

Inteligência;

Fala;

Aparência.

Então, voltando a falar de AIML

Com AIML, podemos criar um bot, capaz de aprender com os usuários que interagem com ele, isso mesmo, tem como fazer o bot aprender palavres novas e adicionalas em sua base dados.

Os arquivos AIML, são formados por tag's XML, que tem uma engine simples e facil de entender/programar. Funciona assim:

Saiba mais sobre AIML

As principais tags são:

<aiml> inicia o bloco AIML.

<category> indica uma categoria ou unidade de conhecimento.

<pattern> Indica o padrão da mensagem que será digitada pelo usuário.

<templat> indica a resposta para o que foi digitado

<random> proporciona respostas aleatórias

<li> marca bloco de respostas aleatórias é usado dentro do bloco <random>

<that> registra a ultima sentença, gerando uma seqüência no dialogo.

<srai> Redireciona para outra questão ou categoria.

exemplo de tags AIML:

<aiml>
<category>
<pattern>oi</pattern>
<template>Ola, tudo bem?</template>
</category>


<category>
<pattern>qual o seu nome?</pattern>
<template>
<random>
<li>Sou chamado de chatterbot</li>
<li>Me chamo chatterbot</li>
<li>Chatterbot</li>
<li>pode me chamar de chatterbot</li>
</random>
</template>
</category>


</aiml>

Simples !!!

Com isso, e um pouco mais de estudo sobre a Linguagem, eu pretendo criar uma pequena e expansível inteligência para o meu bot.

Eu adicionei alguns componentes da Microsoft, que fazem meu bot falar em Português, ja que por padão ele fala em inglês. Baixe-os aqui!

Obs: Vou citar aqui, mas creio que isso é óbvio Para Utilizarem os MS Agents, é preciso a manipulação da 'Component Objec Model', que é conhecida apenas por COM, ou seja, é uma plataforma da Microsoft para componentes de software lançada em 1993. Ela é usada para permitir a comunicação entre processos e a criação dinâmica de objectos em qualquer linguagem de programação que suporte a tecnologia.

Como Python te da suporte a está tecnologia (COM), através do pacote pyWin32 você pode controlar muitos objectos do Windows.

E para finalizar, o meu bot (não está totalmente pronto, é preciso arrumar o soteio da lista):

# coding: iso-8859-1 -*-
# Projeto: bot-AIMerLin
# Por: Kratos - 2007

import aiml # Carrega a Inteligência Artificial de conversação do bot
import os, sys # Para entrada e saída de dados e fechar o programa
import random # Para Sortear itens na lista
import win32com.client # Controla API do Win32 (COM)

ag = win32com.client.Dispatch("Agent.Control.2") # Declara o objecto a ser controlado (Agent's)
ag.connected = True # Conecta com o objeto

# lista de Animação do MS Agent, no caso, o Sr. Merlin.
playList =["Acknowledge","Alert","Announce","Blink","Confused","Congratulate","Congratulate_2", "Greet","Decline","DoMagic1","DoMagic2","DontRecognize","GestureDown","GestureLeft",
"GestureRigh","GestureUp","GetAttention","GetAttentionContinued","GetAttentionReturn","Greet",
"Hearing_1","Hearing_2","Hearing_3","Hide","Idle1_1","Idle1_2","Idle1_3","Idle1_4","Idle2_1",
"Idle2_2","Idle3_1","Idle3_2","LookDown","LookDownBlink","LookDownReturn","LookLeft","LookLeftBli
nk", "LookLeftReturn","LookRight","LookRightBlink","LookRightReturn","LookUp","LookUpBlink","LookUpRet
urn", "Pleased","Process","Processing","Read","ReadContinued","Reading","ReadReturn","RestPose",
"Sad","Search","StartListening","StopListening","Suggest","Surprised","Think","Uncertain",
"Uncertain","Wave","Write"]

os.chdir('C:\Python24\Curso\Meus Programas\Projetos\BotPython') # AIML standard.
ai = aiml.Kernel() # Inicialização no bot.
ai.learn('std-startup.xml') # Abre o arquivo principal da AIML (que faz referências aos outros).
ai.respond('load aiml b') # Carrega arquivos da AIML (Inteligência Artificial).

ag.Characters.Load("Merlin") # Carrega o Merlin como agent, existem inúmeros outros.
ag.Characters("Merlin").Show() # Mostra o agent.
ag.Characters("Merlin").TTSModeID = "{8AA08CA1-A1AE-11D3-9BC5-00A0C967A2D1}" # Português BR

ag.Characters("Merlin").Play(playList[7]) # Executa uma animação da lista
ag.Characters("Merlin").Speak(u"Olá, meu criador, Kratos, ainda está me ensinando a falar em português!") # Fala
ag.Characters("Merlin").Play(playList[0]) # Executa a animação da Lista.
ag.Characters("Merlin").Speak(u"Meu nome é Mérlin, qual é o seu nome?") # Fala a frase.
ag.Characters("Merlin").Speak(u"Só lembrando que a partir de agora, falarei em inglês, com sutaque Português")
ag.Characters("Merlin").Speak(u"Pois, precisam carregar meus dados AIML com informações em Português")


about = """ >>> Agente AIML Speak <<<

Digite '-q' ou nada, para sair.
Digite '-h' para minimizar.
Digite '-s' para maximizar.
Total de Animações: %s .\n""" %(len(playList))
print about

# Inicia a conversa com o bot, você pergunta, e ele responde!
while (1==1):	
try:
	youSpeak = raw_input(u"Fale algo ao bot em english: ")
	if youSpeak == "-q":
		sys.exit()
	if youSpeak == "-h":
		ag.Characters("Merlin").Hide()
	if youSpeak == "-s":
		ag.Characters("Merlin").Show()
	botSpeak = ai.respond(youSpeak)
	ag.Characters("Merlin").Speak(botSpeak)
	print
except:
	ag.connected = False
	sys.exit()		
raw_input(">>") # Serve para manter o Agent activo

Proponho aqui, um projecto, para se criar um bot (chatbot). Preciso de ajuda, pois:

1° Decidir sobre o que o Bot irá saber, sobre qual tipo de conhecimento ele terá tendência, se será só bate-papo, ou ele pode responder questões de matemática, moda, programação, dicas, etc..

2° Colectar as informações, sobre o que o bot irá saber, para escrever nas Tag's de AIML.

3° Escrever, em seus arquivos de AIML, os "estímulos" e suas respectivas "respostas"... isso sozinho vai demorar p'ra caramba, preciso de alguém para ajudar, porque sem duvida, esta parte é a mais difícil Por padrão, todas as informações do bot AIML são em inglês, então devemos reescrever tudo para Português.

Bom galera, espero que tenham gostado!

Até a próxima!

Kratos

[Artigo no Wiki]


"Vejo sempre além, pois me apóio em ombro de Gigantes"

Share this post


Link to post
Share on other sites
wpy

faz um bom tempo que esta off não kratos?jja vi alguns de seus codigos no darkers,o tutorial ficou bem explicativo parabens

Share this post


Link to post
Share on other sites
Tharis

Aqui dá erro.

Traceback (most recent call last):

  File "C:\Documents and Settings\Proprietário\Ambiente de trabalho\bot.py", line 8, in <module>

    import win32com.client # Controla API do Win32 (COM)

ImportError: No module named win32com.client

Share this post


Link to post
Share on other sites
djthyrax

Belo tutorial, já tinha ouvido falar em AIML mas em PHP. :D


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
Kratos

Aqui dá erro.

Traceback (most recent call last):

  File "C:\Documents and Settings\Proprietário\Ambiente de trabalho\bot.py", line 8, in <module>

    import win32com.client # Controla API do Win32 (COM)

ImportError: No module named win32com.client

Amigo, :) ...

Neste caso, o erro se dá, pelo fato, de você não ter instalado no seu sistema, o pacote pyWin32.

Download: AQUI

Importante você usar o Windows, para funcionar o MS Agent.

Kratos


"Vejo sempre além, pois me apóio em ombro de Gigantes"

Share this post


Link to post
Share on other sites
Tharis

Eu uso Windows e tu não dizes que é preciso o pyWin32... quando se deu o erro pensava que win32com.client era mesmo do Windows e não uma coisa externa.

Share this post


Link to post
Share on other sites
djthyrax

Kratos, acrescenta essa info no primeiro post. :)


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
Kratos

Eu uso Windows e tu não dizes que é preciso o pyWin32... quando se deu o erro pensava que win32com.client era mesmo do Windows e não uma coisa externa.

Pois é amigo, se trata de uma Lib extra do Python e não do Windows, até pq o Python por si só, não chama funções da API do Windows !

faz um bom tempo que esta off não kratos?jja vi alguns de seus codigos no darkers,o tutorial ficou bem explicativo parabens

Darkers.. pois é ... no coment''s

Off pq eu estava a procura de um exelente forum, como este !

abraço

Kratos


"Vejo sempre além, pois me apóio em ombro de Gigantes"

Share this post


Link to post
Share on other sites
ber0x88

Muito boa a explicação!!!  :D

Sempre tive curiosidade em assuntos de Inteligencia artificial...  ;)


"Impossível é apenas uma grande palavra usada por gente fraca que prefere viver no mundo como está em vez de usar o poder que tem para mudá-lo."

Share this post


Link to post
Share on other sites
djthyrax

Um reparo que só reparei agora:

os.chdir('C:\Python24\Curso\Meus Programas\Projetos\BotPython') # AIML standard.

Essa linha não está bem. Ou se usa o r antes da plica, ou se faz escape das \ (com o \), ou usa-se / em vez de \. :D


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
Karla

Oi amigo,

Estou com uma duvida tentei baixar os arquivos abaixo, só que na hora de instalar, da a seguinte informação: ex: No Python installation found in the registre.

PyAIML-0.8.5.win32

pyTTS-3.0.win32-py2.5

pywin32-213.win32-py2.3

Share this post


Link to post
Share on other sites
Kratos

Oi amigo,

Estou com uma duvida tentei baixar os arquivos abaixo, só que na hora de instalar, da a seguinte informação: ex: No Python installation found in the registre.

PyAIML-0.8.5.win32

pyTTS-3.0.win32-py2.5

pywin32-213.win32-py2.3

Você deve instalar o Python em seu sistema !!!

recomendo o Python26 (versão 2.6)


"Vejo sempre além, pois me apóio em ombro de Gigantes"

Share this post


Link to post
Share on other sites
Karla

Mais uma pergunta, essas instalações funcionam no Windows Vista?

Python26 (versão 2.6)

PyAIML-0.8.5.win32

pyTTS-3.0.win32-py2.5

pywin32-213.win32-py2.3

Obrigada

Share this post


Link to post
Share on other sites
Karla

Amigo, consegui instalar o python-2.6, PyAIML-0.8.5.win32.

Mas os outros 2 não pywin32-213.win32-py2.3, pyTTS-3.0.win32-py2.5, da a seguinte mensagem: Python version 2.5 required/ which was not found in the registry.

Obrigada.

Share this post


Link to post
Share on other sites
Kratos

Bom...

A versão mais recente do PyTTS que é a 3.0 só tem suporte a VM-Python 2.5

Porem, não é necessário esta lib.

Agôra a lib que você teve usar nesta aplicação é esta: PyWin32-py2.6

Então recomendo que você instale mesmo, a versão 2.6 do Python: AQUI (No item download escolha o O.S)

qualquer coisa: MSN: eu_mesmoSP@hotmail.com


"Vejo sempre além, pois me apóio em ombro de Gigantes"

Share this post


Link to post
Share on other sites
Kratos

😲Vamos lá tenho que fazer um Chatterbot de entreterimento...

😡 Esse é o meu tcc aiaiaia, não sei por onde começar, preciso muito da sua ajuda, vou te add no msn. :wallbash:

Tudo bem?

Pode me add... estou a disposição !!!

MSN: eu_mesmoSP@hotmail.com


"Vejo sempre além, pois me apóio em ombro de Gigantes"

Share this post


Link to post
Share on other sites
Karla

Pra começar se eu instalar o Python 3.0.1

Tenho que instalar:

PyAIML

pyTTS

pywin32

Para o meu Chatterbot funcionar?

Se sim. Quais as versões compatíveis com o Python 3.0.1?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.