Hace 5 años | Por fluffy
Publicado hace 5 años por fluffy

Comentarios

Res_cogitans

¿Esto lo has escrito tú o lo has copiado de algún sitio? Si es lo primero, felicidades, has dado un curso claro y sencillo del tema. Si no, deberías comprobar la licencia del documento y si fuera necesario, eliminarlo.

f

#1 Como podrás comprobar buscando, no existe en ningún sitio, está escrito por mí íntegramente.

Res_cogitans

#2 Está genial y aporta más que la inmensa mayoría de artículos y noticias.

D

Me acuerdo que meneame estaba plagado de envíos como éste, con información útil y de calidad, hace muchos años. Gracias por hacerme recordar lo que un día fue este sitio.

f

#4 Bueno, la bajada de calidad de contenidos de menéame, desde mi opinión, es fruto de diversos factores.
- No es una plataforma adecuada para escribir contenidos. Aunque existen muchas opciones opensource para editar contenidos, menéame opta por algo "hecho a mano" que carece de cosas fundamentales como el autoguardado de borradores, y la interfaz deja un pelín que desear.
- La base de usuarios ha cambiado. Antes se premiaba la información útil, hoy se premia lo rápido, mascado y mediocre. Echa un ojo en artículos a los últimos, de los que más karma tienen una tira cómica de disfraces de halloween que además no tiene gracia. Esfuerzo: click en artículo, click en subir foto. Aportación propia del usuario: 0.
- Como la base de usuarios cambia y se premia lo rápido y mediocre, los usuarios que sí aportaban se van con su música a otra parte. Uno no dedica varias horas de su vida a escribir un artículo basado en años de experiencia en un tema, para ver que una foto de un gatete resulta mucho más importante, y que su artículo muere en una marea de contenidos supérfluos. Así que se va a otros medios.

Pero es lo que hay, la vida es así de dura.

agorostidi

Buen articulo, pero hecho de menos añadir el que aportan las API de IBM Watson Conversation o de Google Dialogflow para reconocer intents y aplicar de forma automática diálogos en los chatbots.

agorostidi

#12 Me parece muy interesante lo que comentas de RSA, le hecharé un vistazo en cuanto pueda (no te extrañe que no lo conociera con anterioridad, mi puesto de trabajo no esta relacionado directamente con la IA, es mas inquietud personal y para aplicar sinergias con otros productos de los que si soy responsable).

Si conozco botkit, de hecho lo he usado con Watson, tanto para el UI de cara al usuario, como para aquellas cosas que en las que no quiero un dialogo asistido, sino mis propias reglas.. sigo opinando de todas formas que lo mejor es combinar ambos mundos, realmente los sistemas de dialogo asistido consiguen acelerar mucho el desarrollo y el mantenimiento....(ademas el watson assistant de ahora, no tiene nada que ver con el antiguo watson conversation de hace unos meses, ha mejorado muchisimo, no esta en absoluto limitado a empresas pequeñas, hay clientes muy grandes usandolo por las ventajas que comentaba).... eso no significa que debas usarlo para todo, son una ayuda mas (y considero que muy buena), no un sustituto.

Snips no lo conocia tampoco...... ¿ tiene algun diferenciador mas que el de poder ejecutarse en local sin requerir conexion a la nube ?. Por otra parte, quitando botkit, ¿ hay algun otro "frontal" para chatbots que me puedas sugerir ?

agorostidi

Buen articulo, pero hecho de menos añadir el que aportan las API de IBM Watson Conversation o de Google Dialogflow para reconocer intents y aplicar de forma automática diálogos en los chatbots (vamos, un poco de detalle sobre que podemos encontrarnos hoy en IA para trabajar con los chatbots).

f

#7 No entiendo muy bien tu pregunta la verdad. Lo que cuento en el artículo es con suficiente detalle el cómo se hace, precisamente para chatbots y no para análisis de corpus grandes. Y lo que cuento es con detalle lo que puedes encontrarte hoy en IA para trabajar con chatbots. Incluso incluyo una comparativa de NLU entre diversas plataformas. E incluso soy el desarrollador de la que tiene mejor score de NLU de todas ellas, así que creo que si sigues mi artículo paso a paso puedes desarrollar una IA exactamente igual, y que te dará mejor score que DialogFlow, y aproximadamente el de IBM Watson Conversation. No puedo confirmarte qué tipo de IA usa cada plataforma, lo que sí cuento en el artículo es cómo funciona una hecha con logistic regression classifier. Efectivamente no cuento binary relevance neural network, que es lo que permite dar mejor score que IBM Watson Conversation, pero mi código es licencia MIT, así que puedes ir a mirarlo.
Es decir, he dado un detalle brutal sobre como funcionan las IAs de NLU para chatbots.
Así que a lo mejor puedes reenunciar tu pregunta para que entienda qué es exactamente lo que echas de menos.

agorostidi

#8 La sencillez... Explicas muy bien los conceptos de NLU ,y como hacer tu propio analisis para que el bot tome decisiones.
Pero lo que yo creo entender es que la mayoria de las veces, no se utilizan esas tecnicas solas, simplemente por lo tedioso y lo complejo que puede llegar a ser construir un chatbot solo asi, y tomar decisiones. Ademas de las APIs de NLU de Watson , Google o cualquier otro proveedor (para lo cual viene muy bien saber los conceptos que tu indicas en tu articulo), mi experiencia con IBM Watson Assistant / Conversation (que es una capa "mas" a lo que simplemente serian las APIs de Watson NLU) es que simplifica enormemente hacer un chatbot al permitir identificar frases (y multiples variaciones de las mismas), asociarlas directamente a intents, identificar entities dentro de las mismas, y automaticamente, generarte el dialogo de vuelta, incluso solicitando al usuario final "scopes" si le faltan para hacer una accion (ejemplo que diga que quiera hacer una reserva pero no mencione en la frase para que dia o para cuantas personas). Nunca he querido insinuar que el articulo tuviera algun problema, ya digo que me parece un trabajo cojonudo.... y me ha servido para aprender cosas que no sabia.... pero yo (personalmente), con mis chatbots, me siento mucho mas comodo, y desarrollo mucho mas rapido (y con la suficiente precision) ayudandome de estos sistemas que he mencionado....... por eso echaba de menos simplemente mencionarlos, o bien para mencionar su valor añadido o por el contrario, aunque sea criticandolos, porque creo que son una parte importante, que mucha gente los usa, y que si te vas a meter a desarrollar chatbots, al menos debes conocer.

Para que te hagas una idea, con IBM Watson NLU es muy facil analizar una frase, pero incluso ni siquiera asi lo hago, prefiero utilizar directamente el Watson Assistant y automaticamente construir el dialogo....... De acuerdo que si me hago mi propio NLU ahorraria dinero (sin llamar a las APIs de Watson), pero no lo necesito. Me costaria mucho tiempo y esfuerzo llegar a un nivel parecido al que ya encuentro de terceros, el coste es totalmente asumible, consigo un desarrollo mucho mas rapido, sencillo, y me es mucho mas comodo añadir nuevas iteraciones y hacer un training/mantenimiento de la plataforma para reconocer nuevas frases.....

Si tuviera que reformular la pregunta, seria: ¿ Que valor ventajas e inconvenientes tiene desarrollarte tu propio NLU, al de utilizar frameworks/APIs que estan incluso un nivel por encima, al permitirte no solo utilizar su propio NLU Internamente, sino ademas general automaticamente dialogos y acciones ?

f

#9 Bien, por eso mi artículo no se titula "proovedores de NLP del mercado", se titula "cómo entienden los bots el lenguaje". Porque su objetivo es mostrar cómo funcionan los NLP por dentro, no enunciar cada uno de los comerciales y sus características ni compararlos. Eso lo dejo a los señores comerciales.

Pero ya que preguntas ventajas...:
1. Entender. En lugar de usar una API, que es algo que sabe hacer cualquier persona, estás entendiendo realmente la IA y cómo funciona, y deja de ser una caja mágica que hace cosas.
2. Gratuito y sin límites. Los que no cuestan dinero, tienen limitaciones al uso que no hacen posible implementar bots masivos a millones de usuarios.
3. Privacidad. Según la legislación de cada región, algunas conversaciones de usuarios no pueden ser enviadas a un tercero, por ejemplo datos sobre alergias, enfermedades, etc.
4. Velocidad. Al tener tu NLU directamente en el bot, el tiempo de clasificación de una utterance es de en torno a 1 milisegundo, frente al tiempo de transporte de una llamada a través de internet, que normalmente te pone en torno a 200ms mínimo, usualmente 400ms.
5. Implementación de características propias. Un ejemplo: la manera que tiene los proveedores en nube de manejar el multiidioma es que en cada utterance tienes que decir también el locale. En mi caso, identifico automáticamente el locale y lo paso al clasificador que toca, con lo cual un usuario puede cambiar de idioma en caliente en el bot, sin necesidad de pasar por un proceso de selección de idioma para guardar el locale en el contexto.
6. Modelo offline: Al entrenar tu modelo, puedes descargarlo e incluirlo en el bot, y no necesitar internet para nada. Por ejemplo para hacer bots que funcionan en móvil incluso si no hay cobertura. En mi caso lo que he implementado funciona en el browser, con lo cual se puede hacer una SPA sin estar consumiendo continuamente llamadas al backend.
7. Implementación propia de contexto y control de sesiones. Un ejemplo, con un bot con botkit o microsoft bot framework, el control del punto de conversación en el que estás para que los diálogos y ayudas sean contextuales al momento del usuario, no hay dios que lo haga en ningún NLP en la nube: Microsoft LUIS ni sabe lo que es un contexto, el de IBM solamente posee context variables, el más desarrollado comercial sería DialogFlow. En mi caso me lo implementé yo en mi NLP para que algo tan tonto como que las ayudas sean contextualizadas el momento del diálogo, funcionen en el NLP en lugar de tener que programarlas a mano.
8. Implementación de fallback to human, incluso basado en sentiment analysis.

Entiendo que trabajas en una de las empresas, pero no en la parte técnica que desarrolla la plataforma, sino como parte que la vende. Y por ello entiendo tu comentario. Pero entiende también que no ha lugar, dado el título y temática del artículo, en el que ni siquiera pongo link a mi código ni me promociono. Pero te invitaría, si además de vender sabes programar, a ir a mirar tanto la librería como el frontend.

agorostidi

#10 No pretendo que compares NLP del mercado. Solo digo que hay una capa mas, incluso, por encima del NLP, que facilita hacer trabajar a un bot, y que es la creacion de dialogos asistidos...... Tanto Google. como IBM, como Microsoft tienen API de NLU... pero luego, tienen otros "Productos" o "Servicios SaaS" que son asistentes de dialogo (que por dentro a su vez usaran NLUs). A esos me refereria...... no te pedia comparacion de los distintos que hay, sino que hubiera sido interesante tambien añadir en tu articulo la mencion a esta nueva capa......que puede usarse para automatizar el dialogo en un chatbot.. (y de manera sencilla y eficaz). Es algo habitual de usar tambien en bots, por lo que a mi parecer, si era algo que podia mencionarse dentro del articulo, y mas cuando este articulo es muy buena referencia en el uso de la IA en Chatbot para entender/procesar el lenguage.

No soy vendedor, soy tecnico, y tambien programo (aunque no de forma habitual, hago mas de consultor/arquitecto, y tal vez alguna prueba de concepto que requiera algun pequeño programa). Dicho esto... ¿ que tiene de malo en el que trabaje en una empresa de la que mencionas ? ¿ eso no me capacita para, aun dejando claro que el articulo es muy bueno, poder defender que añadir la capa del dialogo al articulo lo haria mas completo ? No se trataba de una critica negativa, no te ofendas por ello. Si, si trabajo en una empresa que hace IA y como tal, tiene herramientas que comercializa de NLU, pero me daba igual que herramienta comentaras, Watson Assistant, Google Dialogflow, o Microsoft Luis (que por otra parte, ignoro si tiene tambien la parte de dialogo o solo NLU). En el articulo, en ningun momento te dirigia especificamente a una, ni que comparases NLU, sino que a mi punto de ver, faltaba el punto de los asistentes de dialogo que existen por encima.

En cuanto a las ventajas que argumentas arriba son, muchos de ellos, discutibles y con una vision poco objetiva (y en algun caso desde mi punto de vista erroneos), pero no es mi intencion empezar un debate por cada uno de ellos, podriamos eternizarnos y aburririamos ademas al resto de la gente. Solo comentaba que echaba de menos un analisis de esos temas.

De verdad, el articulo me ha parecido muy bueno, ya te digo que yo he aprendido mucho leyendolo y ha despertado alguna inquietud...pero no te extrañe ni te ofendas cuando te digo que hecho de menos añadir en el articulo una visión también más práctica... y que es bastante habitual en el entorno que yo conozco (y usado por programadores expertos).....

No conocia el RASA Stack que mencionas en tu articulo (un NLU open-source), y lo probare cuando tenga oportunidad. Tengo curiosidad por saber si es posible que en un descarga "razonable" pueda bajarme todos los datos necesarios para trabajar off-line multi-idioma (diccionario, sinonimos, variaciones, reglas, etc....) , si es facil suministrarlo/intregrarlo con tu codigo, y por supuesto, como de efectivo es. No es facil salvar esa problematica, pero si lo hace bien, puede que incluso lo use en algun proyecto donde me baste con la capa NLU.

Me encantaria ver la libreria, siempre se aprende y se ven otras formas de hacer las cosas... tambien te animaria que vieras y usaras productos como, por ejemplo, watson assistant.. veras que NO es una NLU.... obviamente se basa en ella para reconocer el dialogo y sugerir las frases o acciones de vuelta, que es un concepto mas amplio. ,SI puedes hacer ayudas contextualizadas porque puedes pasar todo el contexto del dialogo (no solo variables, sino toda la relacion de todos nodos y intents que has atravesado para llegar ahi) o hacer un fallback a un humano, o a otra API, libreria o accion.. . yo lo que hago es tratar el dialogo con Watson Assistant, y si no me reconoce el intent porque no lo tengo implementado, entonces ya hacer NLU... ( Watson NLU, pero podria perfectamente utilizar cualquier libreria NLU ahi opensource)..... De la misma forma podria pasar una API de reconocimiento de sentimiento (ejemplo, Tone Analizer) antes de enviarlo al Watson Assistant (aunque tendria mucho mas sentido fuera, si no reconoce la frase en el dialogo, o como acumulativo del sentimiento de toda la conversacion)....

f

#c-11" class="content-link" style="color: rgb(14, 170, 116)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/3035206/order/11">#11
Microsoft LUIS no solamente no tiene contextos, es que no tiene NLG, es decir, su plataforma solamente es un NLU que dado un utterance te indica el intent, pero las respuestas las tienes que gestionar tú.

La gestión de diálogos en SaaS está bien para pequeñas empresas. En empresas grandes, los diálogos tienen más reglas de las que sabe gestionar un proveedor en la nube, muchas de ellas dependientes de sus sistemas de Core IT, con lo cual el manejador de diálogos suele ser botkit (Node) o Microsoft Bot Framework SDK (C#, Node, Java y Python).

He usado y uso productos como Watson, DialogFlow y LUIS. Llevo haciendo bots desde el año 97 (para IRC, bots de trivial, de cine, gestores de contenido, personalidades), haciendo Inteligencia Artificial desde el 95 (en aquel entonces con Matlab y C, a día de hoy mayormente python y Tensorflow), y en los últimos 3 años casi el 100% de mi tiempo dedicado a ello con un equipo de 8 personas, y 5 bots en producción y desarrollando 3 más. De uno de ellos tienes disponible la nota de prensa y el eco en diversos medios.

Si no conoces RASA, estoy algo extrañado entonces, porque llevan 2 años y pico muy activos en todas las conferencias importantes de chatbots, New York, San Francisco, Viena, Berlín.... Alex, su CEO, es una persona brillante y le he visto ya en 3 conferencias diferentes de chatbots a lo largo del mundo, aparte de haber tenido el placer de hablar con él en dos calls. Supongo que tampoco conocerás Snips que es su competidor directo pero de origen francés, y que entra fuerte porque apuesta por un interfaz amigable.

En cuanto a lo que pesan las reglas... Mi librería para frontend, minimizada y con 26 idiomas (en lugar de los 27 que soporto en backend, porque con chino hay un problema) pesa 7.84 MB. En 7.84MB va:
- 26 idiomas con sus tokenizers y stemmers.
- Brain.js
- Implementación de matemática de vectores, matrices y descenso de gradiente
- Implementación de Logistic Regression Classifier
- Implementación de Binary Relevance Neural Network
- Importador desde Excel
- Motor de búsqueda de similares dentro de strings utilizando una implementación propia de distancia de Levensthein más rápida que las existentes (para poder buscar named entities permitiendo un margen de error por parte del usuario).
- Un parser/evaluador de javascript para condiciones complejas de contexto
- Builtin Entity Extraction completo para Inglés, Francés, Español, Portugués y Japonés (completo significa que entiende "treinta y tres marcos suizos" como el número 33 y la moneda marcos suizos), y parcial para el resto de idiomas. Las entidades que extrae son: email, ip, hashtag, números de teléfono, URL, números, ordinales, porcentajes, dimensiones (tanto SMI como imperial), edades, monedas, fechas y duraciones. La comprensión de fechas permite incluso parciales y con intervalos: https://github.com/axa-group/nlp.js/blob/master/docs/builtin-entity-extraction.md#date-extraction
- Motor NER incluyendo Enum Named Entity, Regex Named Entity, Trim Named Entity y las builtin. Además este motor hace reducción de edges, es decir, si hay entidades en colisión es capaz de reducirlas a las realmente útiles que necesita el usuario.
- Motor de NLG con templating a partir de contexto, y con condiciones a partir de contexto: para el mismo intent basándose en condiciones de negocio puede elegir respuestas diferentes que se ajusten al momento de la conversación. Una de las variables que automáticamente se inyecta al contexto es el identificador de diálogo y paso de Microsoft Bot Framework SDK, de manera que si se hace un bot con esta tecnología en todo momento podemos saber en qué punto exacto de la conversación está: si el bot está pidiendo un número de bastidor y el usuario no sabe lo que es y pide ayuda, ese intent de ayuda devolverá frases distintas basadas en el identificador de diálogo y paso, si el diálogo del número de bastidor es "/askBastidor" por poner un ejemplo, sabrá la respuesta a decir que será diferente de la respuesta si el usuario pide ayuda en otros momentos del diálogo. El templating por su parte es que las frases de la respuesta pueden incluir variables que son sustituidas por los valores en el contexto. El contexto incluído no es solamente de conversación, puede contener datos extraídos de otros sistemas, que es una limitación que sí poseen los que son en nube, y que además me parece correcta la limitación: a partir del DNI de un usuario yo obtengo sus datos de Core IT porque quiero usarlos en la conversación, pero no tengo por qué andar mandándoselos a ningún sistema de terceros.
- Estimador de lenguaje: en función de la frase estima el lenguaje para derivarla al clasificador correcto entrenado para ese lenguaje.
- Sentiment Analysis para inglés, español, francés, italiano, alemán y holandes... lo cual implica todos los diccionarios de su palabras con sus valores AFINN o Senticon.
- Gestor de Slot Filling
- Gestor de contextos
- Recognizer compatible con Microsoft Bot Framework
...

Todo eso cabe en 7.84 megas... aunque acabo de fijarme de que no está completamente minimizado, estimo que podría caber lo mismo en menos de 5 megas, esta tarde me pondré a ver por qué no minimiza del todo.

Lo que no cabe ya en 7.84 MB es el backend y el frontend, pero caben en 48 MB comprimidos en una imagen docker, y desplegables totalmente gratis en Heroku+mLab con un simple click de un botón.