Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: $Edu$ en 27 Enero 2013, 01:06 am



Título: Como harian su propio Bot?
Publicado por: $Edu$ en 27 Enero 2013, 01:06 am
Hablo de esos tipicos Chat Bot, pero obviamente que se podria agregarle para que obedezca ordenes y miles de cosas mas, pero la base de todo es Como enseñarle?

He buscado sobre estas cosas pero hay poco y nada, ademas de que hacer bot en ingles es mas facil que en español, por el tema de los verbos, etc.

Pero hago este tema para que el que quiera deje su idea de como empezarian, que programarian y como. Sin irse por las ramas de que hara el bot, solo interesa saber el mecanismo que utilizarian para enseñarle al bot a hablar y/o que entienda las ordenes.

Por ejemplo, yo tenia pensado hacer un programa con buena interfaz donde se "cargaria" el bot que ya esta entrenado. Y por otra parte hacer un Entrenador de Bot para que cada uno lo entrene como quiera.

Vendria a ser como hacer una aplicacion con sistema de plugins, donde el plugin es el bot.

Pero yo como programador del bot, tendria que entrenar a un bot para dejarlo con buena base, es decir, que sepa hablar y recibir ordenes basicas, todo a lo basico, pero luego cada usuario usando el Entrenador de Bot le entrenara con las cosas que quiera, con la personalidad que quiera, con los gustos que quiera, etc.

---------------------------------------------------------------------------------------

La idea es que den ideas para crear un algoritmo de aprendizaje, sabiendo que partiras de nada, como cuando nacimos, que nos enseñan a hablar de a poco (en este caso no habria que decir Papá muchas veces xD con una bastaria), pero tambien esta la habilidad que el bot "ya es inteligente" y tal vez puede aprender muy rapido dependiendo del algoritmo que se aplique.

Como comenzar? :P


Título: Re: Como harian su propio Bot?
Publicado por: alister en 27 Enero 2013, 01:11 am
tienes que leer todo lo que pilles de Bruce Wilcox


Título: Re: Como harian su propio Bot?
Publicado por: $Edu$ en 27 Enero 2013, 02:16 am
Si, ya lo habia leido, en su tiempo cuando gano el premio. Ahora me estoy descargando unos codigos que encontre de su bot Suzette pero de todas formas me gustaria que piensen como programadores que son como harian la primer parte, lo que da vida al bot xD Todo con palabras simplemente, para ir dando ideas entre todos.

Lo que pasa que no se como empezar xD es que no quiero hacer lo que hacen los demas, quiero hacer algo nuevo y mejor. Y la clave esta en hacer un buen algoritmo base para aprender, y lo bueno de esto es que no es necesario mucho codigo, solo un buen algoritmo que representara las neuronas artificiales, el resto estara en una base de datos.
Es decir, busco ideas del sistema de razonamiento y nada mas, la base de datos se va completando a medida que vaya hablando con el bot y enseñandole.


Título: Re: Como harian su propio Bot?
Publicado por: alister en 27 Enero 2013, 16:49 pm
Si, ya lo habia leido, en su tiempo cuando gano el premio. Ahora me estoy descargando unos codigos que encontre de su bot Suzette pero de todas formas me gustaria que piensen como programadores que son como harian la primer parte, lo que da vida al bot xD Todo con palabras simplemente, para ir dando ideas entre todos.

Lo que pasa que no se como empezar xD es que no quiero hacer lo que hacen los demas, quiero hacer algo nuevo y mejor. Y la clave esta en hacer un buen algoritmo base para aprender, y lo bueno de esto es que no es necesario mucho codigo, solo un buen algoritmo que representara las neuronas artificiales, el resto estara en una base de datos.
Es decir, busco ideas del sistema de razonamiento y nada mas, la base de datos se va completando a medida que vaya hablando con el bot y enseñandole.

el problema mental que tenemos como programadores es asociar "la primera parte" a "lo que da vida al bot", porque este concepto es ENORME y si no tienes capacidad para dividirlo en problemas mas pequeños, entonces estás listo.

personalmente, mi unico acercamiento al mundo de la toma artifiicial de decisiones fue con un sotware llamado Argos que encuentra y crackea el acceso a camaras de seguridad de todo el planeta, pero aunque suene espectacular estamos hablando de un algoritmo muy simple y bastante arborescente, sin apenas heuristica.

en el terreno más humanístico, lo primero que necesitas es un parser de lenguaje y una clasificacion muy compleja de conceptos linguisticos. son bases de datos que te puede llevar unos meses hacer, solo los datos, sin la lógica algorítmica que los use luego.

bueno, es que te voy a repetir lo que ya has leido de wilcox!

EDITO:
has tratado de hacer mejores preguntas para ver si te aclaras con als respuestas?

mira lo que sale en google al buscar "introduction to AI programming", porque es interesantisimo:

http://www.cs.berkeley.edu/~russell/intro.html
http://web.engr.oregonstate.edu/~tgd/classes/430/
http://mind.sourceforge.net/progman.html

y sobre todo:
ISBN 0805347801


Título: Re: Como harian su propio Bot?
Publicado por: $Edu$ en 27 Enero 2013, 17:01 pm
Si, de hecho he leido muchas cosas sobre aprendizaje en los humanos, y siempre me gustaron esos temas de como funciona nuestro cerebro y todo eso.

Todavia seguimos aprendiendo cosas nuevas de nuestro cerebro, asi que hacer lo que yo digo lo veo complicado cuando todavia no sabemos como funciona nuestro cerebro completamente xD

De todas formas, siento que a cualquier programador le fascina la idea de hacer un chat bot de inteligencia artificial, por eso hice el tema, por si alguno tiene ideas innovadoras.


Título: Re: Como harian su propio Bot?
Publicado por: alister en 27 Enero 2013, 17:05 pm
Si, de hecho he leido muchas cosas sobre aprendizaje en los humanos, y siempre me gustaron esos temas de como funciona nuestro cerebro y todo eso.

Todavia seguimos aprendiendo cosas nuevas de nuestro cerebro, asi que hacer lo que yo digo lo veo complicado cuando todavia no sabemos como funciona nuestro cerebro completamente xD

De todas formas, siento que a cualquier programador le fascina la idea de hacer un chat bot de inteligencia artificial, por eso hice el tema, por si alguno tiene ideas innovadoras.


mas que innovar, lo que hay que hacer es conocer muy bien la casuistica y los procedimientos.

tu y yo, por ejemplo, no tenemos distinciones en este area, y por lo tanto no tnemos vision.

en cambio wilcox llega y seguro que nos hace un roadmap, una proyección con un diagrama de gantt y cientos de tareas a repartir entre un equipo de desarrollo, un complejo arbol clasificatorio de tareas con prioridad, un modelo de datos, un conjunto de algoritmos...

y en el desarrollo de esas distinciones y esa vision pre-clara de las cosas, es donde tienes que esforzarte ahora si de verdad quieres implementar una AI.

Personalmente creo que si de verdad quiedes, ese libro que te paso, de casi 800 páginas, es lo que necesitas.  Pero asume que estas hablando de un asunto complejo con el cual no se puede ir a medias, esto es el mas alto nivel de desarrollo eh! Piensa que el valor de cosas como google no reside en la potencia de calculo de sus servidores, sino en la compleja inteligencia de sus algoritmos! los algoritmos son los que crean valor, sino los superordenadores serian costosas calculadoras de ecuaciones de primer grado :)


Título: Re: Como harian su propio Bot?
Publicado por: Weeken en 27 Enero 2013, 17:05 pm
aver si comprendi tu quieres crear un bot que aprenda los conocimientos de un humano y eneseñe a otros que no saben.


algoritmo de inteligencia artificial ilimitada seria un sueño ;)

pero seria un software o web  :huh:

7W52TL9Akv4

http://vtr.indisys.cl/avi/

yo solo conocia

bot de xat y justin.tv  

bot de maus recorde

bot themaposter para postear en miles de foros.

aimbot de tiros perfectos en juegos de disparos


Título: Re: Como harian su propio Bot?
Publicado por: alister en 27 Enero 2013, 17:07 pm
aver si comprendi tu quieres crear un bot que aprenda los conocimientos de un humano y eneseñe a otros que no saben.


algoritmo de inteligencia artificial ilimitada seria un sueño ;)

pero seria un software o web  :huh:

7W52TL9Akv4

http://vtr.indisys.cl/avi/

yo solo conocia

bot de xat y justin.tv  

bot de maus recorde

bot themaposter para postear en miles de foros.

aimbot de tiros perfectos en juegos de disparos


normalmente se usan lenguajes mas orientados a la AI, al parsing, a la logica...
tratar de, encima, hacerlo aplicativo web, sería un dolor adicional.

ah! y por cierto! un bot, en lenguaje "civil" no es una AI. Suele ser mas un automatizador de tareas. Por ejemplo esos bots de postear spam son un claro ejemplo. No son una AI en absoluto.


Título: Re: Como harian su propio Bot?
Publicado por: $Edu$ en 27 Enero 2013, 17:28 pm
El bot Zussette de Wilox paso el Test de Turing y aún asi me parece que ese bot pierde coherencia, solo hace como el resto de los demas robots, nada nuevo.

Ahora, el Asistente Denise, me ha dejado de boca abierta cuando lo vi hace un tiempo, pero es algo que requiere mucho tiempo y alguna empresa que te respalde.
No solo hace de todo tipo de ordenes que le digas, sino que cumple con un Chat Bot de IA porque puedes hablar de lo que quieras.


Título: Re: Como harian su propio Bot?
Publicado por: Weeken en 27 Enero 2013, 17:57 pm
El bot Zussette de Wilox paso el Test de Turing y aún asi me parece que ese bot pierde coherencia, solo hace como el resto de los demas robots, nada nuevo.

Ahora, el Asistente Denise, me ha dejado de boca abierta cuando lo vi hace un tiempo, pero es algo que requiere mucho tiempo y alguna empresa que te respalde.
No solo hace de todo tipo de ordenes que le digas, sino que cumple con un Chat Bot de IA porque puedes hablar de lo que quieras.

imaginaos que busco como   descargar  :P  ese software  pero aun no lo consigo creo que nadies lo compro ni en todos los torrents esta!

esta bien costoso $ 820,00 WTF   :o .

https://guile3d.com/en/compare-the-versions-and-find-the-best-for-you/

y lo malo que no tiene version de prueba   :-\ 



bueno ami me gustaria que un bot movil me enseñe ingles o que haga de traductor  cuando alguien me hable en ingles el me lo tradusca hablado al  español ,y  el bot le responda en ingles lo que yo hable en español.

seria magico  mientras uno aprende para dialogar en las calles  , o para entender lo que dicen en una peliculas sin subtitulos :)


Título: Re: Como harian su propio Bot?
Publicado por: $Edu$ en 27 Enero 2013, 18:54 pm
Estoy esperando hace tiempo que sea gratis esa asistente Denise xD


Título: Re: Como harian su propio Bot?
Publicado por: daryo en 27 Enero 2013, 18:56 pm
bue mira aunque no tengo ni idea del tema se me ocurren varias cosas:

1.el bot tiene una base de datos con varias palabras catalogadas segun el tipo de palabra que sea verbo sujeto adjetivo etc

2. el bot captura en su base de datos palabras que digan otros usuarios y con analisis sintactico de determinadas frases pueda aprender que tipo de palabra es

3. el bot tiene respuestas predefinidas en caso de no saber que decir ; hay muchas frases estandar cuando queremos desviar la conversacion o algo por estilo XD

4. no estaria mal que el bot tuviera ciertas expresiones predeterminadas en su base de datos .

5. que identificara cierto numero de preguntas comunes .

6. que haga preguntas.

5. la personalidad quedaria definida en  varias cosas entre ellas: un diferente vocabulario(en caso que sea mas agresivo o mas servicial el vocabulario es diferente) y en como responderia las diferentes preguntas para que en caso de preguntar la edad diga que tenga la de su personalidad o en caso de ser mujer u hombre .

7. cierto tipo de patrones para que sigua un tema en especifico ( repetir ciertas palabras entre otros mas complejos)

en fin suerte en el  gigantesco proyecto XD


Título: Re: Como harian su propio Bot?
Publicado por: $Edu$ en 27 Enero 2013, 19:06 pm
Jajaja gracias! yo simplemente sueño, no hare nada, no he ni escrito una palabra en codigo, pero me gusta esto y esta bueno tener ideas para cuando sepa del tema poder aplicarlas, pero de todas formas hacer algo de esto solo, sin una empresa que te respalde es casi imposible.


Título: Re: Como harian su propio Bot?
Publicado por: 0x120x7 en 28 Enero 2013, 07:54 am
Buenas, bueno, yo habia entrado aqui buscando tutoriales de hackeo para win, pero como estoy tan rayado ya... y vi tu post y como es algo que intente en el pasado pues te comento una idea que se me ha ocurrido.

Ya en el pasado probe a hacer algo parecido. En una ocasion hice un bot de IRC, muy sencillo, era un simple bicho que respondia a comandos o preguntas estrictas con respuestas o acciones predeterminadas. Fin. Eso no tiene mucha gracia, verdad?

En otra ocasion intente con redes neuronales. Eso tiene mas gracia, pero no se puede hacer a lo loco. Las redes neuronales artificiales responden a los entrenamientos, si. Pero no se puede simplemente darle una entrada de datos totalmente arbitraria, sin haberla preparado para que tenga un cierto sentido estructural antes, y esperar que la red neuronal responda de manera inteligente. Al menos no con una red de tan pocas neuronas y de estructura tan simple como las que permiten los ordenadores(si, soy español) de hoy dia. Finalmente intente crear un programa de entrenamiento neuronal, que consistia en hacer permutaciones de la estructura neuronal, hasta dar con la estructura mas eficiente para el resultado buscado. Generalmente el entrenamiento neuronal consiste en un reajuste de los pesos de los puentes neuronales para adecuar la respuesta dada a la respuesta esperada; asi que modificar la estructura neuronal era ir un pasito mas alla, pero tampoco es que hiciera milagros. No suele haber indicadores a la hora de diseñar la estructura neuronal que mejor realice un trabajo determinado; es mas una cuestion de prueba y error. Por eso era importante para mi automatizar este proceso de modificacion de la estructura y ver hasta donde podia llegar.

Lo que se me ha ocurrido es lo siguiente(no se si es algo descabellado):

Crear tablas de significado unico por cada palabra, y conseguir un significado unico y completo (como el humano) por cada frase -> procesarlo por una red neuronal -> traducir la respuesta a la inversa con dichas tablas. Me explico:

Analogia:
Como formamos 256 numeros unicos(significados unicos) con tan solo un byte?
Un byte tiene 8 bits. Cada uno de ellos tiene dos unicos estados (1 o 0), pero combinando cada uno de ellos en sus distintos estados conseguimos 256 numeros distintos. Esto funciona porque cada bit es interpretado segun la posicion que ocupa dentro del byte.

Si decimos que cada uno de esos bits es una palabra o la raiz de una palabra (que tiene significado unico por si sola), y los combinamos de manera analoga a como se hace en el byte, obtendriamos 256 significados unicos (frases de diferente significado)

Esto se hace mediante ORs. Por ejemplo:

1: perro
2: bonito
4: esta
8: triste
16: gato
32: feo
64: corre
128: feliz

perro bonito esta triste -> 1+2+4+8 = 15 (15 seria el significado unico que representaria a la frase "(el) perro bonito esta triste")
gato feo corre feliz -> 16+32+64+128 = 240 (240 seria el significado unico que representaria a la frase "(el) gato feo corre feliz")
perro feliz esta feo -> 1+128+4+32 = 165 (165 seria el significado unico que representaria a la frase "(el) perro feliz esta feo")
etc

Esto tiene un problema:
p.e.: "el perro feliz esta feo" y "el perro feo esta feliz" tendria el mismo significado, pero sabemos que en realidad no es asi. No es lo mismo "el perro (que es) feliz esta feo", que "el perro (que es feo) esta feliz". Lo primero apunta a un perro que por lo general suele estar feliz, o que en ese momento esta feliz, y le añade a este un estado (esta feo). Lo segundo apunta a un perro cuya caracteristica es la de ser feo, y añade un significado de estado: esta feliz.

La solucion pasaria por un filtrado de subsecciones semanticas o sintacticas del lenguaje. Obtener el valor significativo unico de cada subseccion, y OR'earlo a la sección padre junto con un bit extra que le indique a la sección padre, que el significado proviene de una sección hija, de modo que el significado final del padre, sea el conjunto completo de padre e hijo y la diferenciacion clara de lo que es el padre y lo que es el hijo. (Esto se me esta complicando ;) ) No tengo muy claro hasta que punto seria esto factible. Voy con un ejemplo, a ver si me puedo aclarar yo mismo, jaja:

De hecho, he pensado que seria imposible determinar el padre y el hijo mediante un solo bit. Por eso creo que la manera adecuada, seria mediante el posicionamiento de los bytes. Vamos a determinar que el byte mas anterior sea el padre del siguiente. Ejemplo:
"el perro feliz esta feo":
"el perro feliz" -> 1+128 = 129
"esta feo" -> 4+32 = 36
"el perro feliz" "esta feo" -> 129 36
si esto lo traducimos en bits, usando dos bytes y no uno, seria:
10000001 00100100
si en lugar de OR'ear estos dos bytes (como haciamos antes con todos los bits) interpretamos los dos bytes tal cual, es decir, asignando nuevos valores de significado unico para los bits del byte superior (el anterior), tendriamos un significado unico de:
33060

"el perro feo esta feliz":
"el perro feo" -> 1+32 = 33
"esta feliz" -> 4+128 = 132
"el perro feo" "esta feliz" -> 33 132
00100001 10000100
8580

Por tanto ahora cada frase tendria un significado completamente distinto, justo como en la realidad.

Y procederiamos asi indefinidamente hasta resolver toda la jerarquia sintactica :)

Mas problemas:
Hay que tener en cuenta que el español, por ejemplo, consta de unas 90mil palabras.
Si cada palabra tomara un valor unico y OR'eable como se explico al principio, tendriamos valores ENORMES, que ningun ordenador actual seria capaz de procesar directamente, PERO, mediante un proceso secuencial, se podria lograr. Es decir, el ordenador no necesita saber que un significado consta de 100mil bytes(por ejemplo), solo necesita procesarlo adecuadamente, con la unidad mayor de informacion de que sea capaz (bytes, palabras de 64bits, etc).
Si ademas, añadimos el hecho de que deberemos utilizar secciones del numero de bits que corresponda al conjunto de todas las palabras del lenguaje, y que cada subseccion semantica podria ser hija de otra sección, tendriamos numeros ASTRONOMICOS. Por ejemplo, si el español consta de unas 90mil palabras, deberiamos manejar secciones compuestas de 90mil bits. Como "esta feo" es una subseccion semantica que pertenece a "el perro feliz", tendriamos una entrada de nada menos que 180mil bits.

Empieza a parecerme que mi acercamiento a la interpretacion del lenguaje humano, aunque parece ser factible y funcional, es ,hoy por hoy, impractico :)

En definitiva, este seria el proceso que yo utilizaria principalmente:

*Filtrar la entrada: eliminar palabras carentes de significado per se, como los articulos determinados (el la), etc.
*procesar la estructura sintactica de la entrada y encontrar las antedichas subsecciones semanticas
*alimentar el valor significativo y unico final a una red neuronal
*entrenar dicha red para que responda:
 -con acciones
 -con lenguaje humano: se procesa la salida de manera inversa a como se proceso la entrada alimentada a la red, traduciendo mediante tablas las diferentes subsecciones semanticas, obteniendo una estructura sintactica final con sentido semantico unico

Y ya, para terminar, el summum del summum:
*que el ordenador modifique la estructura de su propia red neuronal, acorde con el significado extraido de la entrada:
Al principio, podria modificarse a si mismo, segun lo que interprete de lo que le digamos, en definitiva solo estaria siguiendo ordenes complejas, nada nuevo.
Si le programamos una subrutina que se lance cuando el significado unico de la entrada diga algo asi como "te odio" o "me parece que eres tonto", etc. Esta subrutina podria hacer modificaciones estructurales minimas en la red neuronal, de modo que la siguiente entrada no seria interpretada exactamente del mismo modo que la primera vez, pero aun conserva la capacidad suficiente de interpretacion como para tener un alto grado de coherencia en sus respuestas. Sin embargo, tras ciertas llamadas a esta subrutina, se experimentaria un cambio(experiencia) final que se alejaria mas y mas del entrenamiento inicial(nacimiento), llegando al punto de que el sistema pudiera generar autenticas nuevas salidas(soluciones, opinion), y que no reaccionara del mismo modo anterior para llamar a su subrutina de modificacion estructural(comportamiento, se vuelve terco o complejo).

Por supuesto habria que mantener unos bancos de memoria enormes para almacenar la serie de entradas y salidas pasadas, un historico, y darle una subrutina para que el mismo pueda comprobarlas cuando reaccione a una determinada entrada, que bien pudiera haberse diluido o modificado de la inicial puesto que recordemos que incluimos una subrutina de modificacion estructural. De este modo, gozaria de un simil de la memoria humana, y accederia a ella, para sumarsela a la entrada, segun la entrada inicial lo exigiera, dando como resultado algo que no depende exclusivamente de la entrada recibida ni de su estructura neuronal, sino tambien de su memoria o experiencia(mas alla de su estructura neuronal).

Tambien podria incluirse el factor tiempo, para que pueda recordar y goce de un pensamiento mas humano. Se incluiria una subrutina cuyo proposito fuera el de llamar a la subrutina de acceso a los bancos de memoria (recordar), cogiendo varios y alimentandolos como entrada, para generar una nueva salida, que como ya habreis adivinado, puede ser decir algo, o realizar una accion practica, entre las que se incluirian las susodichas subrutinas de modificacion estructural, acceso a memoria pasada, y alimentacion a la misma subrutina tiempo inicializandola con valores basados en la entrada, para que, segun la entrada, sea llamada en un determinado siguiente momento... Y vuelva a recordar, y a modificarse a si mismo, etc, etc, etc...

Pfiuuu...
Bueno, pues eso es lo que yo NO haria jajajajaja
Yo cogeria algo hecho ya por ahi, e intentaria adaptarlo a mis necesidades.
Como elucubracion esta bonito, pero como proyecto practico queda bastante alejado de la realidad, me parece a mi.
Pero oye, si conseguis hacerlo asi como yo he dicho, me encantaria verlo. Seria algo asi como una conciencia en si misma...
Me avisais cuando lo hagais jajaja ;)

Saludos

Edito:
Un par de apuntes mas (o elucubraciones):

*Aclarar que el procesamiento de numeros mas grandes de los que puede manejar el ordenador no es ninguna invencion, y es perfectamente factible. Si tenemos un sistema de arquitectura de 64bits, con un S.O. de 64 bits, abrimos una calculadora y calculamos el valor de 2 elevado a 64, vemos que nos da el resultado decimal, pero si seguimos sumandole 1, 1, 1... el resultado no se vuelve cero ni mucho menos. El programa de calculo utiliza este sistema de procesamiento al que me referi anteriormente, y nos sigue dando numeros mas altos de los que el sistema es capaz de utilizar per se.

*Habiamos calculado que "el perro feliz esta feo" ocuparia nada menos que 180mil bits, lo que viene a ser 21Kbs nada menos! Pero hay que tener en cuenta, que dificilmente un ser humano lograria componer una frase(o mejor, una subseccion semantica) con la totalidad de las palabras de la lengua española. Por lo que, en definitiva, la mayoria del espacio ocupado por ese "significado", constaria de 0's. Y eso significa que se podria comprimir, y terminaria ocupando muchiiisimo menos, nada que ver. Y no solo seria practico la compresion y descompresion para almacenarlo en la memoria(de recuerdos), sino que incluso se podria utilizar en si misma(sin descomprimir en la practica) a la hora de la interpretacion de los significados mediante el anteriormente citado procesamiento secuencial. Y quizas incluso ahorrariamos ciclos de proceso.

Problem solved!

Lo se, soy un alucinado de la vida :)


Título: Re: Como harian su propio Bot?
Publicado por: 0xDani en 28 Enero 2013, 16:12 pm
Pues te ha quedado bastante bien, @0x120x7. Ahora a ver quien se atreve a meterle mano a eso xD


Título: Re: Como harian su propio Bot?
Publicado por: $Edu$ en 28 Enero 2013, 16:43 pm
Muchas gracias por contestar! es exactamente lo que querian que hagan, veo que me has entendido!

Con todas las conclusiones que sacaste, no se que mas decir, yo tenia pensado algo asi, mezclando con matrices y mapas semanticos jajaj pero es algo complicado, pero por lo menos mas o menos la idea se me viene a la cabeza, por lo menos para poder dejar volar mi imaginacion cuando tenga ganas como cuando cree este tema aca :P

Muchisimas gracias!

pd: Meterle a eso siento que requiere de muchas personas (empresa) para lograr algo como Denise, lamentablemente no esta al alcanze de nosotros.


Título: Re: Como harian su propio Bot?
Publicado por: alister en 28 Enero 2013, 18:40 pm
no quiero ser mamon ,  pero si pretendo sobre todo ser realista.

diseñad primero un parser complejo o un lenguaje de programacion propio.

sim las habiliades que aprendereis haciendo ese camino, no podeis, de momento, apuntar a asumir un pryecto de estas caractersitcas.

las ideas apuntadas estan bien, pero intuyo que estan aun muy inconcretas y vagas, lejos del nivel de concencia y claridad mental que se necesita para este tipo de proyectos.

hay otra variable que podeis tener en cuenta: las faltas de ortografia.

que? a que jode pensar en que una simple h puede estropear el invento? jajajajaja

en la AI las cosas no son literales, y nosotros, que estamos acostumbrados a desarrollar software con comandos y simbolos total y absolutamente literales, puede ser harto complejo cruzar la frontera de lo concreto a lo abstracto.

hacer una AI capaz de "comprender" una conversacion es para ingenieros de primer nivel.


Título: Re: Como harian su propio Bot?
Publicado por: $Edu$ en 28 Enero 2013, 19:50 pm
Gracias por el comentario, todo aporte sirve, solo no sean tan corta viaje xD dejen soñar un poquito, mil y una vez dije que no lo podre hacer realmente, es solo para tener ideas de como seria, ya has dado una "crear un lenguaje de programacion propio", puede servir, gracias!

Tampoco den por hecho cosas imposible porque bien sabemos que esto se puede hacer en un futuro, el cerebro es muy complejo como para que lo imitemos completamente en un robot pero podemos acercarnos muchisimo y los cientificos estan en ese camino.


Título: Re: Como harian su propio Bot?
Publicado por: alister en 28 Enero 2013, 19:52 pm
Gracias por el comentario, todo aporte sirve, solo no sean tan corta viaje xD dejen soñar un poquito, mil y una vez dije que no lo podre hacer realmente, es solo para tener ideas de como seria, ya has dado una "crear un lenguaje de programacion propio", puede servir, gracias!

Tampoco den por hecho cosas imposible porque bien sabemos que esto se puede hacer en un futuro, el cerebro es muy complejo como para que lo imitemos completamente en un robot pero podemos acercarnos muchisimo y los cientificos estan en ese camino.

yo no cuestiono eso! sé perfectamente que la ciencia avanza mucho en ese terreno.

lo que cuestiono es mas bien nuestro nivel de compromiso hacia este objetivo, y nuestras capacidades como desarrolladores medios o amateurs.

ciertamente es complejo.

pero lo de hacer un lenguaje propio de programación puede servir para que cualquiera ahonde en el área de los algoritmos, que son la graaaaan piedra filosofal de la informatica (la potencia de calculo es impresionante, pero es inutil sin algoritmos)


Título: Re: Como harian su propio Bot?
Publicado por: ABDERRAMAH en 29 Enero 2013, 15:23 pm
No es tan dificil como parece (costoso si, dificil no) sólo hace falta algo de estructura. Te han dado buenas opciones (la mejor es la red neuronal multicapa) pero yo, que tengo mis rarezas lo haría de otro modo.

Comenzaría diseñando una máquina virtual con la funcionalidad buscada en mente, o sea, que sea capaz de dar la mejor respuesta ante la entrada y que absolutamente siempre responda con algo. La máquina virtual correría un lenguaje estilo ensamblador, aunque por supuesto usaría todos los beneficios de la programación de alto nivel. La máquina debe ser capaz de leer y escribir en una base de datos, en casos de ia suele ser bueno hacer cosas curiosas, como variables especiales que acepten varios nombres o varios valores, por ejemplo:

Citar
"saludo","hola","presentacion"="hola","que tal", "como estas?","ey, que tal", "nos conocemos?"

será la máquina virtual la encargada de que si yo pido la variable "hola" me responda con cualquier frase contenida en su resultado.

Éste método hace que puedas crear diferentes comportamientos cada vez, creando simples archivos de texto y cargandolos como código de la máquina virtual, o podrías modular la ia en diferentes archivos (uno para formular preguntas, otro para encadenar diferentes fragmentos de conversación en busca de datos para añadir a la db etc). Aunque a muchos programadores se les ponen los pelos de punta al hablar de crear un lenguaje, no es tan complicado como parece (creando una máquina virtual) y más aun cuando se trata de algo tan específico como esto.


Título: Re: Como harian su propio Bot?
Publicado por: $Edu$ en 29 Enero 2013, 15:45 pm
Es buena la idea, ya tengo por lo menos otra forma de mirar esto gracias a sus comentarios. Gracias!


Título: Re: Como harian su propio Bot?
Publicado por: Bulone en 11 Febrero 2013, 18:08 pm
Pues bien, vi este post hace unos días y me propuse hacer mi propio chat-bot programado en algo muy básico como es batch (que es lo que por ahora conozco mejor) y que aun no he visto ninguno parecido programado en batch.

Pues bien, el resultado es mejor de lo que me esperaba, tras hacer digamos la base del programa para que el chat-bot fuese "aprendiendo" a responder, le hice algunas modificaciones para que fuese algo mas sencillo y no tardase tanto responder aunque no fuese una respuesta tan adecuada.
Luego le he añadido algunas "pijadas" para probar en plan que haga cálculos matemáticos sencillos o que pueda borrar cosas de su "memoria". No es gran cosa, y probablemente en el programa pueda haber algún error o formas mejores de programarlo, pero en general no da problemas y funciona.


Hos dejo aquí el código que he hecho y si queréis me comentáis que os parece:
Código:
@echo off
title Chatbot Isaac
:reinicio
set dat=chatbot.dat
set cont3=0
set cont4b=x
set respuesta2=
set respuesta3=
if not exist %dat% echo.hola>>%dat%&echo.que tal estás?>>%dat%&echo.dime algo nuevo>>%dat%
echo.
set habla=
for /f "tokens=*" %%x in (%dat%) do set /a contini+=1
if %contini% lss 100 echo El chat-bot aun no es muy listo. Ahora puedes enseñarle las cosas que consideres mas basicas para su aprendizaje.&echo.
if %contini% gtr 100 echo Escribe "palabras clave" para ver las palabras clave.
echo.Dime lo que quieras...
echo.
goto conver2

:conver
set respuesta5=%respuesta4%
set respuesta4=%respuesta3%
set respuesta3=%respuesta2%
set respuesta2=%respuesta%
set cont4=0

set cont3=%cont2%
for /f "tokens=*" %%s in (%dat%) do set /a cont4+=1
set /a cont4b=%cont4%/5
set /a cont4c=%cont4%-%cont4b%
if %cont3% gtr %cont4c% set cont3=0

echo %habla%>>%dat%
echo.%respuesta%>>%dat%


:conver2
set val=
set val2=
echo.
echo.%respuesta%
echo.
:nohabla
set habla2=%habla%
set /p habla=
if not defined habla echo Dime algo&goto nohabla
if "%habla%"=="%habla2%" set respuesta=No te repitas&goto conver
if "%habla%"=="olvida" goto limpieza
if "%habla%"=="borra eso" set borrador=%respuesta%&goto borraeso
if "%habla%"=="palabras clave" goto palabrasclave
if "%habla:~0,6%"=="busca " goto buscaeso
if "%habla:~0,1%"=="0" goto suma
if "%habla:~0,1%"=="1" goto suma
if "%habla:~0,1%"=="2" goto suma
if "%habla:~0,1%"=="3" goto suma
if "%habla:~0,1%"=="4" goto suma
if "%habla:~0,1%"=="5" goto suma
if "%habla:~0,1%"=="6" goto suma
if "%habla:~0,1%"=="7" goto suma
if "%habla:~0,1%"=="8" goto suma
if "%habla:~0,1%"=="9" goto suma

:inicio
:proceso2x
set cont=0
set cont2=0
for /f "tokens=*" %%a in (%dat%) do set val=%%a&call :proceso2
:proceso3x
:proceso5x
set cont=0
set cont2=0
for /f "tokens=*" %%z in (%dat%) do set val=%%z&call :proceso5
:proceso6x
set cont=0
set cont2=0
for /f "tokens=*" %%z in (%dat%) do set val=%%z&call :proceso6

rem El caso de que no coincidan letras:
set respuesta=No te entiendo. Aun tengo que aprender frases nuevas.
echo %habla%>>%dat%
goto conver2


echo %habla%>>%dat%&goto conver2


:proceso1b
set /a cont2+=1
if not %cont%==%cont2% goto :eof
if "%val2%"=="%respuesta%" set /a cont+=1&goto :eof
if "%val2%"=="%respuesta2%" set /a cont+=1&goto :eof
if "%val2%"=="%respuesta3%" set /a cont+=1&goto :eof
if "%val2%"=="%respuesta4%" set /a cont+=1&goto :eof
if "%val2%"=="%respuesta5%" set /a cont+=1&goto :eof
set respuesta=%val2%
goto conver


:proceso2
rem El caso de que haya las 8 letras coincidentes
set /a cont+=1
if %cont% lss %cont3% goto :eof
if "%val:~0,8%"=="%habla:~0,8%" set /a cont+=1&goto proceso2a
if "%val:~-8%"=="%habla:~-8%" set /a cont+=1&goto proceso2a

if "%val:~1,9%"=="%habla:~1,9%" set /a cont+=1&goto proceso2a
if "%val:~-9,-1%"=="%habla:~-9,-1%" set /a cont+=1&goto proceso2a

if "%val:~2,10%"=="%habla:~2,10%" set /a cont+=1&goto proceso2a
if "%val:~-10,-2%"=="%habla:~-10,-2%" set /a cont+=1&goto proceso2a
goto :eof

:proceso2a
for /f "tokens=*" %%b in (%dat%) do set val2=%%b&call :proceso1b
goto :eof



:proceso5
rem El caso de que haya 3 letras coincidentes
set /a cont+=1
if %cont% lss %cont3% goto :eof
if "%val:~0,3%"=="%habla:~0,3%" set /a cont+=1&goto proceso5a
if "%val:~-3%"=="%habla:~-3%" set /a cont+=1&goto proceso5a

if "%val:~1,4%"=="%habla:~1,4%" set /a cont+=1&goto proceso5a
if "%val:~-4,-1%"=="%habla:~-4,-1%" set /a cont+=1&goto proceso5a

if "%val:~2,5%"=="%habla:~2,5%" set /a cont+=1&goto proceso5a
if "%val:~-5,2%"=="%habla:~-5,-2%" set /a cont+=1&goto proceso5a
goto :eof

:proceso5a
for /f "tokens=*" %%e in (%dat%) do set val2=%%e&call :proceso1b
goto :eof





:proceso6
rem El caso de que haya 1 letra coincidente:
set /a cont+=1
if %cont% lss %cont3% goto :eof
if "%val:~0,1%"=="%habla:~0,1%" set /a cont+=1&goto proceso6a
if "%val:~-1%"=="%habla:~-1%" set /a cont+=1&goto proceso6a

if "%val:~1,2%"=="%habla:~1,2%" set /a cont+=1&goto proceso6a
if "%val:~-2,-1%"=="%habla:~-2,-1%" set /a cont+=1&goto proceso6a

if "%val:~2,3%"=="%habla:~2,3%" set /a cont+=1&goto proceso6a
if "%val:~-3,2%"=="%habla:~-3,-2%" set /a cont+=1&goto proceso6a

goto :eof

:proceso6a
for /f "tokens=*" %%e in (%dat%) do set val2=%%e&call :proceso1b
goto :eof



:limpieza
if %cont4b%==x echo Dime algo y luego me olvido.&goto :conver2
cls
for /f "tokens=*" %%a in (%dat%) do set limpi=%%a&call :limpieza
del /f/s/q %dat%
ren olvido.dat %dat%
set limpieza=0
cls
goto conver

:limpieza
cls
echo. Estoy olvidando %cont4b% frases viejas... espera un poco...
echo. %porcen% %% completado.
echo.
echo.En cuanto acabe, podemos seguir hablando.
set /a porcen=%pasolim%*100/%cont4%
set /a pasolim+=1
if %pasolim% gtr %cont4b% echo.%limpi%>>olvido.dat
goto :eof

:borraeso
if %cont4b%==x echo Dime algo y luego me olvido.&goto :conver2
cls
for /f "tokens=*" %%a in (%dat%) do set limpi=%%a&call :borraeso2
del /f/s/q %dat%
ren olvido.dat %dat%
set limpieza=0
cls
goto reinicio


:borraeso2
cls
echo. Estoy olvidando %borrador% espera un poco... (%pasolim% frases analizadas)
echo. %porcen% %% completado.
echo.
echo.En cuanto acabe, podemos seguir hablando.
set /a porcen=%pasolim%*100/%cont4%
set /a pasolim+=1
if not "%borrador%"=="%limpi%" echo.%limpi%>>olvido.dat
goto :eof


:palabrasclave
echo.
echo.
echo.Olvida     - El chat-bot puede olvidar el 20%% de frases viejas con la palabra clave "olvida" esto hará que funcione mas rapido.
echo.
echo.Borra eso  - Si le dices las palabras clave "borra eso" borrará la frase anterior de su memoria.
echo.
echo.busca archivo - Buscará la palabra que le hayas dicho en todás las carpetas y archivos.
echo.
echo.Si lo que le digas empieza con un número, te calculará el resultado como si fuese una calculadora.


goto conver2


:buscaeso
echo. Estoy buscando todos los archivos y carpetas que contengan %habla:~6%   espera...
if exist c: DIR c:\*.* /S /B /N >tmp-1.dat
if exist d: DIR d:\*.* /S /B >>tmp-1.dat
if exist e: DIR e:\*.* /S /B >>tmp-1.dat
if exist f: DIR f:\*.* /S /B >>tmp-1.dat
if exist g: DIR g:\*.* /S /B >>tmp-1.dat
if exist h: DIR h:\*.* /S /B /N >tmp-1.dat
if exist i: DIR i:\*.* /S /B /N >tmp-1.dat
if exist j: DIR j:\*.* /S /B /N >tmp-1.dat
if exist k: DIR k:\*.* /S /B /N >tmp-1.dat
if exist l: DIR l:\*.* /S /B /N >tmp-1.dat
if exist m: DIR m:\*.* /S /B /N >tmp-1.dat
if exist n: DIR n:\*.* /S /B /N >tmp-1.dat
if exist ñ: DIR ñ:\*.* /S /B /N >tmp-1.dat
if exist o: DIR o:\*.* /S /B /N >tmp-1.dat
if exist p: DIR p:\*.* /S /B /N >tmp-1.dat
if exist q: DIR q:\*.* /S /B /N >tmp-1.dat
if exist r: DIR r:\*.* /S /B /N >tmp-1.dat
if exist s: DIR s:\*.* /S /B /N >tmp-1.dat
if exist t: DIR t:\*.* /S /B /N >tmp-1.dat
if exist u: DIR u:\*.* /S /B /N >tmp-1.dat
if exist v: DIR v:\*.* /S /B /N >tmp-1.dat
if exist w: DIR w:\*.* /S /B /N >tmp-1.dat
if exist x: DIR x:\*.* /S /B /N >tmp-1.dat
if exist y: DIR y:\*.* /S /B /N >tmp-1.dat
if exist z: DIR z:\*.* /S /B /N >tmp-1.dat
FIND /i "%habla:~6%" tmp-1.dat >tmp-2.dat
for /f "tokens=*" %%a in (tmp-2.dat) do echo %%a
DEL tmp-1.dat
DEL tmp-2.dat
goto conver2


:suma
set habla3=%habla%
set habla=%habla:cero=0%
set habla=%habla:uno=1%
set habla=%habla:dos=2%
set habla=%habla:tres=3%
set habla=%habla:cuatro=4%
set habla=%habla:cinco=5%
set habla=%habla:seis=6%
set habla=%habla:siete=7%
set habla=%habla:ocho=8%
set habla=%habla:nueve=9%

set habla=%habla:por=*%
set habla=%habla:entre=/%
set habla=%habla:mas=+%
set habla=%habla:menos=-%
set habla=%habla:x=*%
set /a respuesta=%habla%
goto conver


Eso es todo, al principio tenéis que ir hablando lo más lógiccamente posible para que vaya aprendiendo frases y así vaya formando su "base de datos"
Si tenéis alguna duda de como funciona me decís.






Título: Re: Como harian su propio Bot?
Publicado por: Bulone en 11 Febrero 2013, 18:12 pm
mirando un poco lo que acabo de publicar le sobra esto
Código:
:limpieza
if %cont4b%==x echo Dime algo y luego me olvido.&goto :conver2
cls
for /f "tokens=*" %%a in (%dat%) do set limpi=%%a&call :limpieza
del /f/s/q %dat%
ren olvido.dat %dat%
set limpieza=0
cls
goto conver

:limpieza
cls
echo. Estoy olvidando %cont4b% frases viejas... espera un poco...
echo. %porcen% %% completado.
echo.
echo.En cuanto acabe, podemos seguir hablando.
set /a porcen=%pasolim%*100/%cont4%
set /a pasolim+=1
if %pasolim% gtr %cont4b% echo.%limpi%>>olvido.dat
goto :eof
que no da ningún problema, solo que era una parte de una prueba que hize y se me olvidó quitárosla.