CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 19 Sep 2018 05:11

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 7 mensajes ] 
Autor Mensaje
NotaPublicado: 29 Ago 2018 19:36 
Desconectado
Yiepp
Yiepp
Avatar de Usuario

Registrado: 21 Jun 2017 13:16
Mensajes: 63
Ubicación: Madrid
Esto es algo que me han comentado hoy al comentar sobre si sería posible crear una aventura de texto con Visual Studio https://docs.microsoft.com/es-es/azure/architecture/data-guide/scenarios/natural-language-processing
Me preguntaba sobre si alguien sabe del tema o si ha intentado algo en este ide.

_________________
https://skoto3d.jimdofree.com/


Arriba
 Perfil  
 
NotaPublicado: 30 Ago 2018 15:19 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5303
Ubicación: Coruña
Yo algo sé del tema, me dedico a investigar en procesamiento del lenguaje natural :lol:

Antes que nada, es importante aclarar (esto ya lo expliqué alguna vez en este foro hace años, he estado un rato buscando el enlace pero no lo encuentro, así que soltaré el rollo otra vez :lol:) que el procesamiento del lenguaje natural está muy lejos de ser la panacea aventurera, porque al contrario de lo que pueda parecer superficialmente, el mayor cuello de botella al que se enfrenta el programador de aventuras no es entender el texto que teclea el jugador. Es el modelo de mundo.

En realidad, entender el tipo de lenguaje que un jugador puede utilizar para comunicarse con una aventura (que no es lenguaje natural arbitrario, sino muy restringido: siempre se trata de órdenes, lo cual ya es una restricción muy fuerte, y además suelen ser referidas a objetos y conceptos que tengan sentido en el modelo de mundo) es fácil. Estoy bastante seguro de que se podría entrenar sin mucha dificultad una herramienta que diese precisiones muy cercanas al 100% para ese tipo de entrada. El problema es que no vale para gran cosa.

Por ejemplo, imagínate una aventura donde el jugador pueda comerse una hamburguesa. Un parser existente que utilice un análisis mínimamente robusto (si algo sí que puede aprender el mundo aventurero del procesamiento del lenguaje natural es que el parsing estricto no vale para gran cosa y es un callejón sin salida, eso es bien sabido desde hace más de treinta años) podrá reconocer que en órdenes como "comer hamburguesa", "comer la hamburguesa", "come rápidamente la hamburguesa" y "come la maldita hamburguesa", lo que quiere hacer el jugador es comerse la hamburguesa. Palabras como "rápidamente" o "maldita" las va a ignorar, porque no se ajustan a los sencillos patrones que tiene.

Ahora, imaginemos que mejoramos la aventura añadiendo una herramienta de procesamiento del lenguaje natural. Esto nos permitiría saber que "comer" es el verbo y la "hamburguesa" es su objeto directo (cosa que más o menos ya suponíamos); pero a mayores nos va a identificar la sintaxis del resto de la oración. Por ejemplo, nos va a permitir saber que "rápidamente" es un adverbio que modifica a "comer", y que "maldita" es un sustantivo que modifica a "hamburguesa".

Pues bien, ¿para qué nos vale saber eso? Pues en realidad... probablemente, para nada. Porque a no ser que hayamos programado en nuestro modelo de mundo maneras diferentes de comer la hamburguesa (rápidamente, lentamente, parcialmente, con fruición, con desgana, etc.); en realidad nos va a dar igual que el jugador haya puesto "come rápidamente la hamburguesa" que "come la hamburguesa" a secas. Si sólo tenemos un comportamiento programado para comernos la hamburguesa, da bastante igual el adverbio o adjetivo que el jugador use. Estamos reconociendo muchas entradas diferentes, pero como no tenemos muchas salidas diferentes, no lo aprovechamos.

Sería un ejemplo de "matar moscas a cañonazos", sobreingeniería, o atacar algo que no es el cuello de botella. El cuello de botella de las aventuras no es la entrada, es el modelo de mundo. Entender la entrada del jugador no es tan difícil, tener previsto un comportamiento diferenciado para cualquier entrada que se le pueda ocurrir al jugador, sí que lo es.

Con esto tampoco quiero desanimar y decir que el procesamiento del lenguaje natural en las aventuras no sirva para nada. Puede servir para muchas cosas, por ejemplo para generar textos (pongamos en situaciones como combates) y no depender de textos preescritos siempre iguales, para detectar de forma más fiable verbos y así saber si una orden es nueva o continúa la anterior (esto AGE lo hace con listas de verbos, pero hay formas mejores de hacerlo), o para crear un PNJ que mantenga un diálogo más o menos coherente con el jugador (ya que la entrada a los PNJs sí es lenguaje natural prácticamente libre). Y supongo que muchas más cosas que no se me ocurren. Por último, también puede servir para crear aventuras que utilicen bien cosas como adverbios, locuciones, etc... pero sólo si el autor realmente quiere darse el trabajo de programar distintas variantes de las acciones según el adverbio/adjetivo/etc. que se use.

Simplemente digo que es un error pensar, como se piensa a veces, que el problema de las aventuras está en "el parser" y que si les enchufamos un analizador sintáctico probabilístico, automáticamente podremos tener aventuras donde podamos escribir cosas como "cómete tres cuartas partes de la hamburguesa, para a continuación coger la cuarta parte restante, métertela en el zapato izquierdo, y salir del restaurante a la pata coja". Poder, podremos escribirlas, y el analizador sintáctico podrá extraer significado de la oración, pero salvo que hayamos implementado un modelo detallado de división de objetos y de modos de movimiento incluyendo pata coja, la diferencia para el jugador va a ser nula. Y en mi experiencia, en la mayoría de los casos pasa eso: las limitaciones de las aventuras están en en modelo de mundo, porque es muy difícil programar un mundo que tenga un nivel de detalle "realista", y no en procesar la entrada.

Dicho esto, si queréis experimentar con procesamiento del lenguaje natural, a pequeña escala como es el caso de las aventuras, no es necesario pagarle a Microsoft. Hay herramientas gratis, libres y muy buenas.

Stanford CoreNLP (Universidad de Stanford): https://stanfordnlp.github.io/CoreNLP/ - en Java, podéis probar parte de la funcionalidad online en http://corenlp.run/

NLTK (Natural Language Toolkit): https://www.nltk.org/ - en Python

Apache OpenNLP https://opennlp.apache.org/ - en Java

Hay muchas más, pero estas tres son las más conocidas, todas libres, muy completas, y al menos la de Stanford trae modelos preentrenados para español de un montón de cosas. Las otras dos no estoy seguro de si traen modelos preentrenados para español, pero siempre se pueden entrenar, el NLTK por ejemplo tiene un libro que te va enseñando cómo hacerlo.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 30 Ago 2018 16:15 
Desconectado
Yiepp
Yiepp
Avatar de Usuario

Registrado: 21 Jun 2017 13:16
Mensajes: 63
Ubicación: Madrid
Muchas gracias Al-Khwarizmi, ha quedado muy claro.
La idea original que tenía era usar ficheros txt: uno para verbos, objetos y personajes. Donde el final lo marcaba un punto.
Ejemplo. Coger asir agarrar sujetar tomar prender atenazar aferrar trabar.
Una función que se encargue de buscar el verbo y el objeto y si es correcto lo escrito se añade al inventario. Que me da a mí que sería mucho más simple.
En cada localización habría objetos que identificarían elementos (suelos, techo o cielos, objetos, etc...) con sus metodos respectivos de descripción, vida o lo que se ocurra.
No sé cómo lo verías.

PD. En unos días te volveré a preguntar sobre el metodo update de AGE, no me sale el condenado y no quería ser pesado preguntando.

_________________
https://skoto3d.jimdofree.com/


Arriba
 Perfil  
 
NotaPublicado: 30 Ago 2018 16:34 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5303
Ubicación: Coruña
Eso que comentas tiene sentido, pero es lo que ya básicamente hace AGE, y seguro que también se puede hacer fácilmente con otros sistemas. No hace falta un software de procesamiento del lenguaje natural para hacer eso. El procesamiento del lenguaje natural te permite analizar textos tratando la ambigüedad mediante herramientas como las gramáticas probabilísticas, modelos de lenguaje, aprendizaje automático, etc.; pero si lo que quieres es buscar palabras en listas, todo eso no te hace falta.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 30 Ago 2018 18:15 
Desconectado
Dragón
Dragón
Avatar de Usuario

Registrado: 27 Feb 2018 13:49
Mensajes: 107
Una masterclass de Al-khwarizmi :D (cuyo contenido a grandes rasgos es cierto que me sonaba haber leído por aquí más o menos así).

A mi la parte que me parece más interesante de todo esto, aplicada a las aventuras, es la de la Lematización.

Citar:
Lematización. Normalizar las palabras para asignar las distintas formas a la palabra canónica con el mismo significado. Por ejemplo, "corriendo" y "corrió" se asignan a "correr".


A veces nos liamos con la quimera de que el ordenador nos entienda filosofar, cuando lo único que tiene que hacer es seguir unas sencillas instrucciones (normales o a la pata coja) como un lacayo bien educado, o como toda la vida hicieron los sistemas por línea de comandos.

Imagen

Por cierto, coque_mad, tienes un mensaje privado de hace unos días que empieza a oler a cerrado :D


Arriba
 Perfil  
 
NotaPublicado: 30 Ago 2018 19:10 
Desconectado
Yiepp
Yiepp
Avatar de Usuario

Registrado: 21 Jun 2017 13:16
Mensajes: 63
Ubicación: Madrid
[AZ] escribió:
Una masterclass de Al-khwarizmi :D (cuyo contenido a grandes rasgos es cierto que me sonaba haber leído por aquí más o menos así).

A mi la parte que me parece más interesante de todo esto, aplicada a las aventuras, es la de la Lematización.

Citar:
Lematización. Normalizar las palabras para asignar las distintas formas a la palabra canónica con el mismo significado. Por ejemplo, "corriendo" y "corrió" se asignan a "correr".


A veces nos liamos con la quimera de que el ordenador nos entienda filosofar, cuando lo único que tiene que hacer es seguir unas sencillas instrucciones (normales o a la pata coja) como un lacayo bien educado, o como toda la vida hicieron los sistemas por línea de comandos.

Imagen

Por cierto, coque_mad, tienes un mensaje privado de hace unos días que empieza a oler a cerrado :D


Monumento para el señor XD
Contestado :)

Edito: ni me entero si me mandan un privado, no ha sido por hacerme el importante :lol:

_________________
https://skoto3d.jimdofree.com/


Arriba
 Perfil  
 
NotaPublicado: 09 Sep 2018 23:15 
Desconectado
Yiepp
Yiepp
Avatar de Usuario

Registrado: 21 Jun 2017 13:16
Mensajes: 63
Ubicación: Madrid
Me ha surgido una duda con el tema complementos. ¿Cómo podría ignorarlos? Me explico

>>Coger espada
¡Enhorabuena has cogido una espada!
//Donde Coge y Espada son dos palabras que tengo metidos en ficheros diferentes: verbos.txt y objetos.txt. Pero si escribo

>>Coger la espada
//El programa se pondrá a buscar en los archivos, pero cuando le toque el turno al complemento directo, la, lo más probable es que salte un error.
¿Cómo se podría resolver?

_________________
https://skoto3d.jimdofree.com/


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 7 mensajes ] 

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM