Explorando las Tecnologías del Habla: Potenciando el Desarrollo de Aplicaciones para Android con Interfaces Conversacionales y de Voz
Seguramente ya has chateado con ChatGPT o tienes algún asistente de voz, como Bixby. Pero ¿alguna vez has intentado dar capacidades similares a tus propias apps?
En los últimos años, hemos presenciado un creciente interés en las interfaces conversacionales, y su impacto en la forma en que interactuamos con la tecnología. Es cada vez más evidente que comprender y utilizar estas tecnologías, también llamadas tecnologías del habla, puede marcar la diferencia al crear experiencias más intuitivas, naturales y accesibles para los usuarios.
El presente y futuro de la interacción es multimodal, donde no solo podremos interactuar a través de la pantalla, sino que unimos diferentes modos de interacción como la voz. Así, nos adaptaremos a cualquier contexto de nuestros usuarios, ya que habrá situaciones donde sea más apropiado utilizar la voz, otras donde sea más conveniente escribir y otras simplemente mirar o tocar en la pantalla. Ante esta complejidad, la creación de experiencias basadas en el lenguaje natural y la voz está evolucionando rápidamente gracias a los últimos avances en Inteligencia Artificial.
En este artículo, exploraremos los puntos clave relacionados con la implementación de interfaces de voz y conversacionales en el desarrollo de aplicaciones para Android. Descubriremos cómo aprovechar las tecnologías del habla para potenciar nuestras aplicaciones y brindar a los usuarios una experiencia fluida y natural.
Cómo convertir la voz humana en información procesable
Dentro del amplio campo de las tecnologías del habla, el Reconocimiento Automático de Voz (ASR, por sus siglas en inglés) desempeña un papel crucial en la comprensión de la voz humana. Esta tecnología permite a las aplicaciones Android convertir el habla en texto, transcribiendo lo que decimos, lo que resulta fundamental para habilitar comandos de voz, búsquedas por voz y muchas otras funcionalidades relacionadas.
Utilizar un ASR tiene ventajas para nuestros usuarios. En primer lugar, permite al usuario dar información hablando de una forma más rápida y conveniente que escribiendo. Además, las aplicaciones ofrecen una experiencia más accesible para usuarios con dificultades para escribir o con discapacidades visuales.
Cuando se trata de implementar servicios de ASR, existen diversas opciones. Una posibilidad es crear un servicio propio, lo que implica desarrollar y entrenar modelos de reconocimiento de voz personalizados. Esto puede ser beneficioso para aplicaciones con necesidades específicas, con idiomas o dialectos concretos, o con vocabularios especializados, pero a su vez puede ser altamente costoso.
Lo más sencillo para el desarrollo en Android es directamente acudir al API nativa de Android y en particular al paquete “android.speech” y su interfaz RecognitionListener. Esta sería la opción más directa y útil para comprender comandos de voz sencillos dentro de nuestra aplicación, pero en cambio, a día de hoy, no es la mejor opción si queremos procesar grabaciones de voz algo más largas.
Para muchos desarrolladores, la integración de APIs de terceros resulta más práctica y eficiente, sobre todo si consideramos útil mantener el audio grabado y poder disponer a la vez de su transcripción. Existen varias opciones populares y fáciles de integrar, como OpenAI Speech-to-Text, Google Cloud Speech-to-Text o Microsoft Azure Speech-to-Text, entre otros. Estas APIs proporcionan funcionalidades avanzadas, como detección de idioma, reconocimiento en tiempo real y soporte multilingüe, facilitando enormemente la implementación de ASR en aplicaciones Android.
Si tuviéramos que recomendar un API a día de hoy, elegimos el API de OpenAI, ya que está basado en Whisper, un modelo Open Source con unos resultados espectaculares en términos de calidad, incluyendo puntuación, y que además permite traducción directa entre idiomas.
Por último, si te van los retos y prefieres no llamar a ningún API externo, podrías intentar utilizar directamente en Android ese mismo modelo Whisper de OpenAI optimizado para el sistema operativo. Echa un vistazo al proyecto Whisper.cpp.
La clave para interpretar las intenciones de los usuarios.
Si tenemos un chatbot en nuestra aplicación, o si venimos de transcribir la voz a texto, necesitamos ser capaces de interpretar qué quiere decir dicho texto. Para poder interpretarlo e inferir la intención del usuario para convertirlo en una acción dentro de nuestra app, necesitamos acudir a tecnologías de comprensión de lenguaje natural (NLU por sus siglas en inglés). Esta tecnología permite a las aplicaciones Android comprender y analizar el lenguaje humano a partir de un texto de manera más sofisticada, lo que resulta esencial para crear interfaces de voz y conversacionales más inteligentes y receptivas.
Como imaginarás, tratar el lenguaje humano es tremendamente complejo por la ambigüedad del mismo y del proceso comunicativo. Por suerte, tenemos a nuestra disposición herramientas que nos pueden ayudar a conseguir buenos resultados en poco tiempo.
Para muchos desarrolladores, la opción más eficiente y confiable es utilizar APIs de terceros especializadas en NLU. Algunas de las APIs populares y eficientes incluyen Dialogflow (de Google Cloud) y el servicio de Reconocimiento del lenguaje conversacional (de Microsoft Azure). Estas APIs proporcionan herramientas y modelos preentrenados que facilitan la implementación de NLU en cualquier aplicación, permitiendo la interpretación de intenciones, el análisis de sentimientos y la extracción de entidades, entre otras funcionalidades avanzadas.
¿Prefieres herramientas Open-source o utilizar tu propio servicio? Si es así, prueba Spacy para levantar tu propio NLU o herramientas como Rasa, que además también te permitirá gestionar conversaciones.
Conversaciones fluidas
La Gestión del Diálogo de Conversaciones es un componente esencial para mejorar las interacciones de los chatbots por escrito y las conversaciones de voz. Esta tecnología permite mantener una conversación coherente y fluida con los usuarios, brindando respuestas relevantes y contextualmente adecuadas.
Para implementar una gestión del diálogo efectiva en aplicaciones Android, es importante considerar algunos consejos. En primer lugar, es esencial diseñar un flujo de conversación intuitivo, anticipando las posibles preguntas y respuestas de los usuarios. Además, se recomienda utilizar técnicas de aprendizaje automático y procesamiento del lenguaje natural para comprender el contexto y adaptar las respuestas de manera inteligente.
Para aquellos desarrolladores que deseen crear su propia lógica de gestión del diálogo, es posible desarrollar algoritmos personalizados que consideren el estado de la conversación, las preferencias del usuario y otros factores relevantes. Esto proporciona un mayor nivel de control y personalización, especialmente para aplicaciones con requerimientos específicos.
Sin embargo, para aquellos que prefieren opciones más rápidas y versátiles, existen APIs de terceros populares y confiables que ofrecen funcionalidades avanzadas de gestión del diálogo. Algunas opciones destacadas incluyen las ya mencionadas Rasa y Dialogflow (de Google) y el servicio de Reconocimiento del lenguaje conversacional de Microsoft Azure. Estas APIs permiten la creación de diálogos estructurados, la gestión de flujos de conversación complejos y la integración con múltiples canales de comunicación, facilitando enormemente el desarrollo de chatbots con capacidades de gestión de diálogo.
Llegados a este punto, quizá estés pensando algo como: “los chatbots hasta ahora han sido poco originales y no entendían casi nada de lo que se les preguntaba… hasta que ha llegado ChatGPT”. En parte tienes razón, vamos a ver cómo podrías comenzar a sacar partido a estas nuevas tecnologías:
Crea respuestas coherentes y atractivas con la generación de lenguaje natural
La Generación del Lenguaje Natural (NLG) es una tecnología que permite crear respuestas coherentes y naturales. Con NLG, las aplicaciones pueden generar texto de manera inteligente y contextualmente relevante, proporcionando respuestas fluidas y convincentes a los usuarios.
La generación de respuestas contextualmente relevante es de vital importancia para brindar una buena experiencia de usuario. Al considerar el contexto de la conversación, como la historia previa y las preguntas anteriores, se puede crear una respuesta que sea coherente y proporcione información relevante. Esto hace que la interacción con la aplicación sea más agradable y natural para el usuario.
Además, es posible desarrollar modelos de NLG personalizados para adaptarse a las necesidades específicas de una aplicación. Estos modelos se pueden entrenar utilizando técnicas de aprendizaje automático y grandes conjuntos de datos, lo que permite una generación de respuestas altamente personalizada y precisa. Esto es especialmente valioso para aplicaciones con requerimientos especiales o vocabularios específicos.
Las últimas técnicas se basan en LLMs (Large Language Models), que son sistemas de inteligencia artificial que tienen la habilidad de procesar y generar datos secuenciales, como texto o código. Esto significa que pueden entender y crear contenido de forma cercana a como lo hace un ser humano. El entrenamiento de modelos personalizados es altamente costoso, pero existen APIs de terceros confiables y eficientes que facilitan la integración de la generación de respuestas. Algunas opciones, que te resultarán conocidas, son las APIs de OpenAI: ChatGPT y GPT-4. Estas APIs ofrecen funcionalidades avanzadas, como generación de texto en diferentes idiomas, traducción, y control de estilo.
La ventaja fundamental de utilizar sistemas basados en LLMs es que, si buscas resolver preguntas, un LLM te da la posibilidad de resolver desde la comprensión del texto hasta la generación de respuesta, por lo que podrás simplificar mucho el desarrollo. Eso sí, a fecha de este artículo, el estado de estas tecnologías está algo inmaduro y en constante evolución, por lo que te invito a seguir investigando.
Si quieres comenzar a crear soluciones con LLMs y tecnologías open-source, te recomiendo echar un vistazo al framework LangChain, que te permitirá construir tu propio servicio conversacional para integrarlo en tus apps, integrando una gran cantidad de tecnologías diferentes y modelos de lenguaje.
Síntesis de voz para una experiencia auditiva única
Para cerrar el círculo de una conversación de voz, nos falta un único paso: convertir el texto de la respuesta en sonido de voz. La Síntesis del Habla o Text-to-Speech (TTS en inglés) es una tecnología que permite convertir texto en habla, creando experiencias auditivas cada vez más agradables, enriqueciendo la interacción con los usuarios.
Incorporar TTS en aplicaciones Android conlleva una serie de beneficios significativos. En primer lugar, permite una mayor accesibilidad al proporcionar opciones de salida de audio para usuarios con discapacidades visuales o dificultades de lectura. Además, brinda una experiencia más inmersiva y conveniente, ya que los usuarios pueden escuchar el contenido mientras realizan otras tareas o están en movimiento.
Cuando se trata de desarrollar servicios de TTS personalizados, existen diferentes opciones. Una posibilidad es utilizar motores de síntesis de voz disponibles en el sistema operativo Android, que ofrecen una amplia variedad de voces y opciones de configuración. Estos motores proporcionan una integración nativa y son adecuados para aplicaciones con requisitos estándar. El API de Android dispone de un paquete “android.speech.tts” que te permitirá utilizar voces sintéticas del sistema operativo en unas pocas líneas de código.
Sin embargo, para aquellos que buscan opciones más avanzadas o con requisitos específicos, existen APIs de terceros que ofrecen servicios de TTS fáciles de usar y con una buena calidad de voz. Algunas sugerencias populares incluyen Google Text-to-Speech, Microsoft TTS, o Eleven Labs. Estas APIs proporcionan una amplia gama de voces y funcionalidades adicionales, como control de estilos, entonación y velocidad, para personalizar la salida de voz según las necesidades de la aplicación.
Si quieres crear una experiencia única, teniendo una personalidad y una voz única para tu aplicación o marca, lo más recomendable sería tener tu propia voz, identificando de manera unívoca a tu servicio o marca. Para ello, hay varios servicios que te ofrecen esa posibilidad, pudiendo clonar tu propia voz, pero deberás tener en cuenta que estarás cediendo tus datos personales a esas empresas. Por otro lado, existen productos como Fonos, donde puedes solicitar la creación de una voz de manera personalizada y siempre teniendo el control de tus datos. Además, también puedes utilizar toolkits open-source para entrenar tus propios modelos de voz con los últimos algoritmos y técnicas del estado-del-arte. Te recomiendo Coqui TTS si tienes curiosidad.
Decidiendo cómo aplicar todo esto en mi aplicación
Veamos unas recomendaciones basadas en casos para que explores cómo aplicar estas tecnologías en tu App Android:
Quiero que el usuario pueda introducir texto largo, como notas o comentarios, usando su voz:
Modo simple:
Emplea el API nativo de reconocimiento de voz de Android.
Modo avanzado:
Llama al API de Whisper y obtendrás transcripciones de muy alta calidad.
Quiero crear un chatbot dentro de mi app para resolver dudas:
Modo simple:
Si tienes un dominio de conocimiento muy concreto, el conjunto de herramientas de Dialogflow, Microsoft Bot Framework o Rasa, te permitirán crear un chatbot avanzado.
Modo avanzado:
Integra tu base de conocimiento con un LLM utilizando LangChain para dar respuestas a las preguntas de una manera muy natural.
Quiero que cuando un usuario pida algo a Google Assistant mi app se abra y resuelva su problema:
Sencillo, gracias a las App Actions que puso Google a disposición de los desarrolladores. Solo tendrás que preocuparte por entender qué intenciones pueden tener tus usuarios y vincularlas con las funcionalidades de tu aplicación.
Ya tengo contenido en mi app y solo quiero que también pueda ser escuchado:
Modo simple:
Llama al API de TTS nativo de Android para que lea el texto de tu contenido.
Modo avanzado:
Llama a un API externo con voces neurales de alta calidad para obtener el sonido desde tu contenido en texto.
Tengo amplia experiencia como developer, y quiero intentar crear mi propio asistente de voz:
Desarrollo de app Android comunicando con APIs propias basadas en Whisper para ASR, LangChain para integrar LLM “fine-tuneado”, y TTS neural con creación de una personalizada mediante Coqui TTS.
Conclusión
Como has podido ver a lo largo de este artículo, el campo de las tecnologías del habla es amplio y complejo, y pueden utilizarse en una gran variedad de casos en el desarrollo de aplicaciones Android, brindando experiencias más intuitivas, accesibles y atractivas para los usuarios. La combinación de ASR, NLU, gestión del diálogo, generación de lenguaje natural y TTS permite crear aplicaciones con interfaces conversacionales y de voz más sofisticadas y personalizadas. Tanto las opciones nativas de Android como las APIs de terceros ofrecen soluciones prácticas y eficientes para aprovechar estas tecnologías en el desarrollo de aplicaciones para Android. Te animo a aprovechar estas tecnologías, con las que puedes diferenciar tus aplicaciones, crear experiencias excepcionales y estar a la vanguardia de la innovación en el campo de la interacción humano-máquina y la inteligencia artificial.
Carlos Muñoz-Romero
CEO at Monoceros Labs