Preguntas y respuestas inteligentes de video y audio con soporte multilingüe utilizando LLMs en Amazon SageMaker

Preguntas y respuestas inteligentes de video y audio multilingües con LLMs en Amazon SageMaker

Los activos digitales son representaciones visuales vitales de productos, servicios, cultura e identidad de marca para las empresas en un mundo cada vez más digital. Los activos digitales, junto con el comportamiento registrado del usuario, pueden facilitar la participación del cliente al ofrecer experiencias interactivas y personalizadas, permitiendo a las empresas conectarse con su público objetivo a un nivel más profundo. Descubrir y buscar de manera eficiente contenido específico dentro de los activos digitales es crucial para que las empresas optimicen los flujos de trabajo, agilicen la colaboración y entreguen contenido relevante al público adecuado. Según un estudio, para 2021, los videos ya representan el 81% de todo el tráfico de internet de los consumidores. Esta observación no sorprende, ya que el video y el audio son poderosos VoAGIs que ofrecen experiencias más inmersivas y atraen naturalmente al público objetivo a un nivel emocional más alto.

A medida que las empresas acumulan grandes volúmenes de activos digitales, se vuelve más desafiante organizarlos y gestionarlos de manera efectiva para maximizar su valor. Tradicionalmente, las empresas adjuntan metadatos, como palabras clave, títulos y descripciones, a estos activos digitales para facilitar la búsqueda y recuperación de contenido relevante. Pero esto requiere un sistema de gestión de activos digitales bien diseñado y esfuerzos adicionales para almacenar estos activos en primer lugar. En realidad, la mayoría de los activos digitales carecen de metadatos informativos que permitan una búsqueda eficiente de contenido. Además, a menudo es necesario realizar un análisis de diferentes segmentos del archivo completo y descubrir los conceptos que se abordan allí. Esto requiere mucho tiempo y esfuerzo manual.

La inteligencia artificial generativa, en particular en el ámbito del procesamiento y comprensión del lenguaje natural (NLP y NLU), ha revolucionado la forma en que comprendemos y analizamos el texto, lo que nos permite obtener información más profunda de manera eficiente y a gran escala. Los avances en los modelos de lenguaje grandes (LLM) han llevado a representaciones más ricas de los textos, lo que proporciona mejores capacidades de búsqueda para los activos digitales. Retrieval Augmented Generation (RAG), construido sobre LLM y técnicas avanzadas de prompts, es un enfoque popular para proporcionar respuestas más precisas basadas en información oculta en el almacén de activos digitales de la empresa. Aprovechando los modelos de incrustación de LLM y los indexadores y recuperadores potentes, RAG puede comprender y procesar consultas habladas o escritas y encontrar rápidamente la información más relevante en la base de conocimientos. Estudios anteriores han demostrado cómo se puede aplicar RAG para proporcionar una solución de preguntas y respuestas que se conecta con el conocimiento de dominio privado de una empresa. Sin embargo, entre todos los tipos de activos digitales, los activos de video y audio son los más comunes e importantes.

La solución de preguntas y respuestas basada en RAG para video/audio puede resolver potencialmente problemas empresariales de ubicación de materiales de capacitación y referencia que se presentan en forma de contenido no textual. Con etiquetas o metadatos limitados asociados a estos activos, la solución intenta hacer que los usuarios interactúen con el chatbot y obtengan respuestas a sus consultas, que podrían ser enlaces a entrenamiento de video específico (“Necesito un enlace para el entrenamiento de almacenamiento de datos de Amazon S3”), enlaces a documentos (“Necesito un enlace para aprender sobre aprendizaje automático”) o preguntas que se cubrieron en los videos (“Dime cómo crear un cubo S3”). La respuesta del chatbot podrá responder directamente la pregunta e incluir también los enlaces a los videos fuente con la marca de tiempo específica de los contenidos más relevantes para la solicitud del usuario.

En esta publicación, demostramos cómo utilizar el poder de RAG en la construcción de una solución de preguntas y respuestas para activos de video y audio en Amazon SageMaker.

Descripción general de la solución

El siguiente diagrama ilustra la arquitectura de la solución.

El flujo de trabajo consiste principalmente en las siguientes etapas:

  1. Convertir video a texto con un modelo de reconocimiento de voz a texto y alineación de texto con videos y organización. Almacenamos los datos en Amazon Simple Storage Service (Amazon S3).
  2. Habilitar la búsqueda inteligente de videos utilizando un enfoque RAG con LLM y LangChain. Los usuarios pueden obtener respuestas generadas por LLM y fuentes relevantes con marcas de tiempo.
  3. Construir un chatbot multifuncional utilizando LLM con SageMaker, donde se envuelven y despliegan las dos soluciones mencionadas anteriormente.

Para obtener una implementación detallada, consulte el repositorio de GitHub.

Prerrequisitos

Necesita una cuenta de AWS con un rol de AWS Identity and Access Management (IAM) con permisos para administrar los recursos creados como parte de la solución. Para obtener más detalles, consulte cómo crear una cuenta de AWS.

Si es la primera vez que trabaja con Amazon SageMaker Studio, primero debe crear un dominio de SageMaker. Además, es posible que deba solicitar un aumento de cuota del servicio para las instancias de procesamiento y alojamiento de SageMaker correspondientes. Para el procesamiento de datos de video, utilizamos una instancia de procesamiento de SageMaker ml.p3.2xlarge. Para alojar Falcon-40B, utilizamos una instancia de alojamiento de SageMaker ml.g5.12xlarge.

Convertir video a texto con un modelo de reconocimiento de voz a texto y un modelo de incrustación de oraciones

Para poder buscar a través de activos digitales de video o audio y proporcionar información contextual de los videos a los LLM, necesitamos convertir todo el contenido multimedia a texto y luego seguir los enfoques generales en PNL para procesar los datos de texto. Para hacer nuestra solución más flexible para manejar diferentes escenarios, proporcionamos las siguientes opciones para esta tarea:

  • Amazon Transcribe y Amazon Translate – Si cada archivo de video y audio solo contiene un idioma, recomendamos encarecidamente que elija Amazon Transcribe, que es un servicio administrado de AWS para transcribir archivos de audio y video. Si necesita traducirlos al mismo idioma, Amazon Translate es otro servicio administrado de AWS que admite traducción multilingüe.
  • Whisper – En casos de uso del mundo real, los datos de video pueden incluir varios idiomas, como videos de aprendizaje de idiomas extranjeros. Whisper es un modelo de reconocimiento de voz multitarea que puede realizar reconocimiento de voz multilingüe, traducción de voz e identificación de idioma. Puede usar un modelo Whisper para detectar y transcribir diferentes idiomas en datos de video, y luego traducir todos los diferentes idiomas a un idioma. Es importante que la mayoría de las soluciones RAG se ejecuten en la base de conocimientos con el mismo idioma. Aunque OpenAI proporciona la API de Whisper, para esta publicación, utilizamos el modelo Whisper de Hugging Face.

Ejecutamos esta tarea con un trabajo de procesamiento de Amazon SageMaker en datos existentes. Puede consultar data_preparation.ipynb para obtener los detalles de cómo ejecutar esta tarea.

Convertir datos de video a datos de audio

Debido a que Amazon Transcribe puede manejar tanto datos de video como de audio y el modelo Whisper solo puede aceptar datos de audio, para que ambas opciones funcionen, debemos convertir los datos de video a datos de audio. En el siguiente código, usamos VideoFileClip de la biblioteca moviepy para realizar este trabajo:

from moviepy.editor import VideoFileClip

video = VideoFileClip(video_path)
video.audio.write_audiofile(audio_path)

Transcribir datos de audio

Cuando los datos de audio estén listos, podemos elegir entre nuestras dos opciones de transcripción. Puede elegir la opción óptima según su propio caso de uso con los criterios que mencionamos anteriormente.

Opción 1: Amazon Transcribe y Amazon Translate

La primera opción es utilizar los servicios de inteligencia artificial de Amazon, como Amazon Transcribe y Amazon Translate, para obtener las transcripciones de los conjuntos de datos de video y audio. Puede consultar el siguiente ejemplo de GitHub al elegir esta opción.

Opción 2: Whisper

Un modelo Whisper puede manejar datos de audio de hasta 30 segundos de duración. Para manejar grandes datos de audio, adoptamos transformers.pipeline para ejecutar inferencia con Whisper. Al buscar clips de video relevantes o generar contenido con RAG, los marcadores de tiempo para los clips relevantes son las referencias importantes. Por lo tanto, activamos return_timestamps para obtener salidas con marcadores de tiempo. Al configurar el parámetro language en generate_kwargs, todos los diferentes idiomas en un archivo de video se transcriben y traducen al mismo idioma. stride_length_s es la longitud del paso a la izquierda y a la derecha de cada fragmento. Con este parámetro, podemos hacer que el modelo Whisper vea más contexto al hacer inferencia en cada fragmento, lo que conducirá a un resultado más preciso. Vea el siguiente código:

from transformers import pipeline
import torch

target_language = "en"
whisper_model = "whisper-large-v2"

device = "cuda:0" if torch.cuda.is_available() else "cpu"
pipe = pipeline(
    "automatic-speech-recognition",
    model=f"openai/{whisper_model}",
    device=device
)

generate_kwargs = {"task":"transcribe", "language":f"<|{target_language}|>"}
prediction = pipe(
    file_path,
    return_timestamps=True,
    chunk_length_s=30,
    stride_length_s=(5),
    generate_kwargs=generate_kwargs
)

La salida de pipe es un dato en formato de diccionario con elementos de text y chunks. text contiene el resultado transcrito completo, y chunks consiste en fragmentos con el marcador de tiempo y el resultado transcrito correspondiente (consulte la siguiente captura de pantalla). Utilizamos los datos en fragmentos para realizar un procesamiento adicional.

Como muestra la captura de pantalla anterior, se han cortado muchas frases y se han dividido en diferentes fragmentos. Para hacer que los fragmentos sean más significativos, necesitamos combinar las frases cortadas y actualizar las marcas de tiempo en el siguiente paso.

Organizar las frases

Utilizamos una regla muy simple para combinar las frases. Cuando el fragmento termina con un punto (.), no realizamos ningún cambio; de lo contrario, lo concatenamos con el siguiente fragmento. El siguiente fragmento de código explica cómo realizamos este cambio:

prev_chunk = None
new_chunks = []
for chunk in chunks:
    if prev_chunk:
        chunk['text'] = prev_chunk['text'] + chunk['text']
        chunk['timestamp'] = (prev_chunk['timestamp'][0], chunk['timestamp'][1])

    if not chunk['text'].endswith('.'):
        prev_chunk = chunk
    else:
        new_chunks.append(chunk)
        prev_chunk = None

En comparación con los fragmentos originales producidos por la conversión de audio a texto, podemos obtener frases completas que originalmente fueron cortadas.

Fragmentar las frases

El contenido de texto en los documentos normalmente se organiza por párrafos. Cada párrafo se centra en el mismo tema. Fragmentar por párrafo puede ayudar a incrustar los textos en vectores más significativos, lo que puede mejorar la precisión de recuperación.

A diferencia del contenido de texto normal en los documentos, las transcripciones del modelo de transcripción no están divididas por párrafos. Aunque hay algunas pausas en los archivos de audio, a veces no se pueden utilizar para dividir las frases en párrafos. Por otro lado, langchain proporciona la función de división de texto recursiva RecursiveCharacterTextSplitter, que puede mantener todo el contenido semánticamente relevante en el mismo fragmento. Debido a que necesitamos mantener las marcas de tiempo con los fragmentos, implementamos nuestro propio proceso de fragmentación. Inspirados en el artículo “Cómo fragmentar texto en párrafos usando Python”, fragmentamos las frases en función de la similitud entre las frases adyacentes con un enfoque de incrustación de frases. La idea básica es tomar las frases con la similitud más baja a las frases adyacentes como puntos de división. Utilizamos all-MiniLM-L6-v2 para la incrustación de frases. Puede consultar el artículo original para obtener una explicación de este enfoque. Hemos realizado algunos cambios menores en el código fuente original; consulte nuestro código fuente para obtener la implementación. La parte central de este proceso es la siguiente:

# Incrustar las frases
model_name = "all-minilm-l6-v2"
model = SentenceTransformer(model_name)
embeddings = model.encode(sentences_all)
# Crear matriz de similitudes
similarities = cosine_similarity(embeddings)

# Aplicamos nuestra función. Para frases largas, recomiendo usar 10 o más frases
minmimas = activate_similarities(similarities, p_size=p_size, order=order)

# Crear cadena vacía
split_points = [each for each in minmimas[0]]
text = ''

para_chunks = []
para_timestamp = []
start_timestamp = 0

for num, each in enumerate(sentences_all):
    current_timestamp = timestamps_all[num]
    
    if text == '' and (start_timestamp == current_timestamp[1]):
        start_timestamp = current_timestamp[0]
    
    if num in split_points:
        para_chunks.append(text)
        para_timestamp.append([start_timestamp, current_timestamp[1]])
        text = f'{each}. '
        start_timestamp = current_timestamp[1]
    else:
        text+=f'{each}. '

if len(text):
    para_chunks.append(text)
    para_timestamp.append([start_timestamp, timestamps_all[-1][1]])

Para evaluar la eficiencia de la fragmentación con incrustación de frases, realizamos comparaciones cualitativas entre diferentes mecanismos de fragmentación. La suposición subyacente en tales comparaciones es que si los textos fragmentados son más diferentes y separados semánticamente, se recuperará menos información contextual irrelevante para la pregunta y respuesta, por lo que la respuesta será más precisa y exacta. Al mismo tiempo, como se envía menos información contextual a los LLMs, el costo de inferencia también será menor, ya que los cargos aumentan con el tamaño de los tokens.

Visualizamos los dos primeros componentes de un PCA al reducir la alta dimensión a dos dimensiones. En comparación con la fragmentación recursiva, podemos ver que las distancias entre los vectores que representan diferentes fragmentos con incrustación de oraciones están más dispersas, lo que significa que los fragmentos están más separados semánticamente. Esto significa que cuando el vector de una consulta está cerca del vector de un fragmento, puede tener menos posibilidad de estar cerca de otros fragmentos. Una tarea de recuperación tendrá menos oportunidades de elegir información relevante de múltiples fragmentos semánticamente similares.

Cuando se completa el proceso de fragmentación, adjuntamos marcas de tiempo al nombre de archivo de cada fragmento, lo guardamos como un solo archivo y luego lo cargamos en un bucket de S3.

Habilitar la búsqueda inteligente de videos utilizando un enfoque basado en RAG con LangChain

Típicamente hay cuatro enfoques para construir una solución RAG para preguntas y respuestas con LangChain:

  • Usando la funcionalidad load_qa_chain, que alimenta toda la información a un LLM. Este no es un enfoque ideal dado el tamaño de la ventana de contexto y el volumen de datos de video y audio.
  • Usando la herramienta RetrievalQA, que requiere un separador de texto, un modelo de incrustación de texto y un almacén de vectores para procesar textos y recuperar información relevante.
  • Usando VectorstoreIndexCreator, que es un envoltorio de toda la lógica en el segundo enfoque. El separador de texto, el modelo de incrustación de texto y el almacén de vectores se configuran juntos dentro de la función al mismo tiempo.
  • Usando la herramienta ConversationalRetrievalChain, que agrega además la memoria del historial de chat a la solución de preguntas y respuestas.

Para este artículo, utilizamos el segundo enfoque para personalizar y elegir las mejores prácticas de ingeniería de manera explícita. En las siguientes secciones, describimos cada paso en detalle.

Para buscar el contenido relevante basado en las consultas de entrada del usuario, utilizamos la búsqueda semántica, que puede comprender mejor la intención detrás de una consulta y realizar una recuperación significativa. Primero utilizamos un modelo de incrustación preentrenado para incrustar todo el texto transcrito en un espacio vectorial. En el momento de la búsqueda, la consulta también se incrusta en el mismo espacio vectorial y se encuentran las incrustaciones más cercanas del corpus fuente. Puede implementar el modelo de incrustación preentrenado como se muestra en “Question answering using Retrieval Augmented Generation with foundation models in Amazon SageMaker JumpStart” para crear las incrustaciones para la búsqueda semántica. En nuestro artículo, adoptamos formas similares para crear una solución de búsqueda inteligente de videos utilizando un enfoque basado en RAG con la biblioteca de código abierto LangChain. LangChain es un marco de trabajo de código abierto para desarrollar aplicaciones impulsadas por modelos de lenguaje. LangChain proporciona una interfaz genérica para muchos LLM diferentes.

Primero implementamos un modelo de incrustación GPT-J 6B proporcionado por Amazon SageMaker JumpStart y el modelo de lenguaje Falcon-40B Instruct de Hugging Face para prepararnos para la solución. Cuando los puntos finales estén listos, seguimos pasos similares a los descritos en “Question answering using Retrieval Augmented Generation with foundation models in Amazon SageMaker JumpStart” para crear el modelo LLM y el modelo de incrustación para LangChain.

El siguiente fragmento de código muestra cómo crear el modelo LLM utilizando la clase langchain.llms.sagemaker_endpoint.SagemakerEndpoint y transformar la carga útil de solicitud y respuesta para el LLM en el ContentHandler:

from langchain.llms.sagemaker_endpoint import LLMContentHandler, SagemakerEndpoint

parameters = {
    "max_new_tokens": 500,
}

class ContentHandler(LLMContentHandler):
    content_type = "application/json"
    accepts = "application/json"

    def transform_input(self, prompt: str, model_kwargs={}) -> bytes:
        self.len_prompt = len(prompt)
        input_str = json.dumps({"inputs": prompt , "parameters": {**model_kwargs}})
        return input_str.encode("utf-8")

    def transform_output(self, output: bytes) -> str:
        response_json = output.read()
        res = json.loads(response_json)
        print(res)
        ans = res[0]['generated_text'][self.len_prompt:]
        return ans 

content_handler = ContentHandler()

sm_llm = SagemakerEndpoint(
    endpoint_name=_MODEL_CONFIG_["huggingface-falcon-40b"]["endpoint_name"],
    region_name=aws_region,
    model_kwargs=parameters,
    content_handler=content_handler,
) 

Cuando usamos un modelo de incrustación de SageMaker JumpStart, necesitamos personalizar la clase de incrustación de punto final de SageMaker LangChain y transformar la solicitud y respuesta del modelo para integrarse con LangChain. Cargue las transcripciones de video procesadas utilizando el cargador de documentos de LangChain y cree un índice.

Usamos el paquete DirectoryLoader en LangChain para cargar los documentos de texto en el cargador de documentos:

loader = DirectoryLoader("./data/demo-video-sagemaker-doc/", glob="*/.txt")
documents = loader.load()

A continuación, usamos los modelos de incrustación para crear las incrustaciones de los contenidos y almacenar las incrustaciones en una tienda de vectores FAISS para crear un índice. Usamos este índice para encontrar documentos relevantes que sean semánticamente similares a la consulta de entrada. Con la clase VectorstoreIndexCreator, solo necesita escribir unas pocas líneas de código para lograr esta tarea:

index_creator = VectorstoreIndexCreator(
    vectorstore_cls=FAISS,
    embedding=embeddings,
    text_splitter=CharacterTextSplitter(chunk_size=500, chunk_overlap=0),
)
index = index_creator.from_loaders([loader])

Ahora podemos usar el índice para buscar un contexto relevante y pasarlo al modelo LLM para generar una respuesta precisa:

index.query(question=question, llm=sm_llm)

Construir un chatbot multifuncional con SageMaker

Con LLM implementado en SageMaker, podemos construir un chatbot inteligente multifuncional para mostrar cómo estos modelos pueden ayudar a su empresa a construir aplicaciones avanzadas impulsadas por IA. En este ejemplo, el chatbot utiliza Streamlit para construir la interfaz de usuario y el marco de trabajo LangChain para encadenar diferentes componentes alrededor de LLMs. Con la ayuda de los LLM de texto a texto y de voz a texto implementados en SageMaker, este chatbot inteligente acepta entradas de archivos de texto y archivos de audio para que los usuarios puedan chatear con los archivos de entrada (acepta archivos de texto y audio) y construir aplicaciones sobre esto. El siguiente diagrama muestra la arquitectura del chatbot.

Cuando un usuario carga un archivo de texto en el chatbot, el chatbot coloca el contenido en el componente de memoria de LangChain y el usuario puede chatear con el documento cargado. Esta parte está inspirada en el siguiente ejemplo de GitHub que construye un chatbot de documentos con SageMaker. También agregamos una opción para permitir a los usuarios cargar archivos de audio. Luego, el chatbot invoca automáticamente el modelo de voz a texto alojado en el punto final de SageMaker para extraer el contenido de texto del archivo de audio cargado y agregar el contenido de texto a la memoria de LangChain. Por último, permitimos al usuario seleccionar la opción de utilizar la base de conocimientos al responder preguntas. Esta es la capacidad de RAG mostrada en el diagrama anterior. Hemos definido los puntos finales de SageMaker que se implementan en los cuadernos proporcionados en las secciones anteriores. Tenga en cuenta que debe proporcionar los nombres reales de los puntos finales que se muestran en su cuenta al ejecutar la aplicación de Streamlit. Puede encontrar los nombres de los puntos finales en la consola de SageMaker en Inference y Endpoints.

Falcon_endpoint_name = os.getenv("falcon_ep_name", default="falcon-40b-instruct-12xl")
whisper_endpoint_name = os.getenv('wp_ep_name', default="whisper-large-v2")
embedding_endpoint_name = os.getenv('embed_ep_name', default="huggingface-textembedding-gpt-j-6b")

Cuando no se selecciona la opción de base de conocimientos, utilizamos la cadena de conversación, donde agregamos el componente de memoria utilizando el ConversationBufferMemory proporcionado por LangChain, para que el bot pueda recordar el historial de conversación actual:

def load_chain():
    memory = ConversationBufferMemory(return_messages=True)
    chain = ConversationChain(llm=llm, memory=memory)
    return chain

chatchain = load_chain()

Utilizamos una lógica similar a la mostrada en la sección anterior para el componente RAG y agregamos la función de recuperación de documentos al código. Con fines de demostración, cargamos el texto transcrito almacenado en el almacenamiento local de SageMaker Studio como fuente de documentos. Puede implementar otras soluciones RAG utilizando las bases de datos de vectores según su elección, como Amazon OpenSearch Service, Amazon RDS, Amazon Kendra y más.

Cuando los usuarios utilizan la base de conocimientos para realizar una pregunta, el siguiente fragmento de código recupera los contenidos relevantes de la base de datos y proporciona contexto adicional para que el LLM responda la pregunta. Utilizamos el método específico proporcionado por FAISS, similarity_search_with_score, al buscar documentos relevantes. Esto se debe a que también puede proporcionar los metadatos y la puntuación de similitud del archivo fuente recuperado. La puntuación de distancia devuelta es la distancia L2. Por lo tanto, una puntuación más baja es mejor. Esto nos brinda más opciones para proporcionar más contexto a los usuarios, como proporcionar las marcas de tiempo exactas de los videos fuente que son relevantes para la consulta de entrada. Cuando el usuario selecciona la opción RAG desde la interfaz de usuario, el chatbot utiliza la función load_qa_chain proporcionada por LangChain para proporcionar las respuestas basadas en la indicación de entrada.

docs = docsearch.similarity_search_with_score(user_input)
contexts = []

for doc, score in docs:
    print(f"Contenido: {doc.page_content}, Metadatos: {doc.metadata}, Puntuación: {score}")
    if score <= 0.9:
        contexts.append(doc)
        source.append(doc.metadata['source'].split('/')[-1])
print(f"\n CONTEXTO DE ENTRADA:{contexts}")
prompt_template = """Utilice los siguientes fragmentos de contexto para responder la pregunta al final. Si no sabe la respuesta, simplemente diga que no lo sabe, no intente inventar una respuesta.:\n\n{context}\n\nPregunta: {question}\nRespuesta útil:"""
                
PROMPT = PromptTemplate(template=prompt_template, input_variables=["context", "question"])
chain = load_qa_chain(llm=llm, prompt=PROMPT)
result = chain({"input_documents": contexts, "question": user_input},
                return_only_outputs=True)["output_text"] 

if len(source) != 0:
    df = pd.DataFrame(source, columns=['fuente de conocimiento'])
    st.data_editor(df)

Ejecutar la aplicación del chatbot

Ahora estamos listos para ejecutar la aplicación Streamlit. Abra una terminal en SageMaker Studio y navegue hasta la carpeta del repositorio clonado de GitHub. Necesita instalar los paquetes de Python requeridos que se especifican en el archivo requirements.txt. Ejecute pip install -r requirements.txt para preparar las dependencias de Python.

Luego, ejecute el siguiente comando para actualizar los nombres de punto de conexión en las variables de entorno según los puntos de enlace implementados en su cuenta. Cuando ejecute el archivo chatbot.py, actualiza automáticamente los nombres de los puntos de enlace según las variables de entorno.

export falcon_ep_name=<el nombre del punto de enlace de Falcon implementado en su cuenta>
export wp_ep_name=<el nombre del punto de enlace de Whisper implementado en su cuenta>
export embed_ep_name=<el nombre del punto de enlace de incrustación implementado en su cuenta>
streamlit run app_chatbot/chatbot.py --server.port 6006 --server.maxUploadSize 6

Para acceder a la interfaz de usuario de Streamlit, copie su URL de SageMaker Studio y reemplace lab? con proxy/[NÚMERO DE PUERTO]/. Para esta publicación, especificamos el puerto del servidor como 6006, por lo que la URL debe verse así: https://<ID DE DOMINIO>.studio.<región>.sagemaker.aws/jupyter/default/proxy/6006/.

Reemplace ID DE DOMINIO y región con el valor correcto en su cuenta para acceder a la interfaz de usuario.

Chatear con su archivo de audio

En el panel Configuración de la conversación, elija Examinar archivos para seleccionar archivos de texto o audio locales para cargar en el chatbot. Si selecciona un archivo de audio, invocará automáticamente el punto de enlace de SageMaker de texto a voz para procesar el archivo de audio y presentar el texto transcrito en la consola, como se muestra en la siguiente captura de pantalla. Puede seguir haciendo preguntas sobre el archivo de audio y el chatbot podrá recordar el contenido del audio y responder a sus consultas basándose en el contenido del audio.

Usar la base de conocimientos para el Q&A

Cuando quieres responder preguntas que requieren conocimientos específicos del dominio o usar la base de conocimientos, selecciona Usar base de conocimientos. Esto permite que el chatbot recupere información relevante de la base de conocimientos construida anteriormente (la base de datos vectorial) para agregar contexto adicional a la respuesta a la pregunta. Por ejemplo, cuando hacemos la pregunta “¿cuál es la forma recomendada de personalizar por primera vez un modelo base?” al chatbot sin la base de conocimientos, el chatbot devuelve una respuesta similar a la siguiente captura de pantalla.

Cuando utilizamos la base de conocimientos para ayudar a responder esta pregunta, el chatbot devuelve una respuesta diferente. En el video de demostración, leemos el documento de SageMaker sobre cómo personalizar un modelo en SageMaker Jumpstart.

La salida también proporciona el nombre original del archivo de video con la marca de tiempo recuperada del texto correspondiente. Los usuarios pueden volver al archivo de video original y localizar los clips específicos en los videos originales.

Este ejemplo de chatbot demuestra cómo las empresas pueden utilizar diversos tipos de activos digitales para mejorar su base de conocimientos y brindar asistencia multifuncional a sus empleados para mejorar la productividad y la eficiencia. Puedes construir la base de datos de conocimientos a partir de documentos, conjuntos de datos de audio y video, e incluso conjuntos de datos de imágenes para consolidar todos los recursos juntos. Con SageMaker como una plataforma avanzada de ML, aceleras la ideación del proyecto a la velocidad de producción con la amplitud y profundidad de los servicios de SageMaker que cubren todo el ciclo de vida de ML.

Limpieza

Para ahorrar costos, elimina todos los recursos que desplegaste como parte del post. Puedes seguir la sección de limpieza del cuaderno proporcionado para eliminar los recursos programáticamente, o puedes eliminar cualquier punto de enlace de SageMaker que hayas creado a través de la consola de SageMaker.

Conclusión

El advenimiento de modelos generativos de IA impulsados por LLMs ha revolucionado la forma en que las empresas adquieren y aplican conocimientos a partir de la información. En este contexto, los activos digitales, incluido el contenido de video y audio, juegan un papel fundamental como representaciones visuales de productos, servicios e identidad de marca. La búsqueda y el descubrimiento eficientes de contenido específico dentro de estos activos es vital para optimizar flujos de trabajo, mejorar la colaboración y brindar experiencias personalizadas a la audiencia prevista. Con el poder de los modelos generativos de IA en SageMaker, las empresas pueden desbloquear todo el potencial de sus recursos de video y audio. La integración de los modelos generativos de IA capacita a las empresas para construir soluciones de búsqueda eficientes e inteligentes, permitiendo a los usuarios acceder a información relevante y contextual de sus activos digitales, y así maximizar su valor y fomentar el éxito empresarial en el panorama digital.

Para obtener más información sobre cómo trabajar con IA generativa en AWS, consulta el anuncio de nuevas herramientas para construir con IA generativa en AWS.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Eso es gracioso, pero los modelos de IA no entienden la broma.

Un equipo multi-institucional de científicos probó la capacidad de los modelos de inteligencia artificial para entend...

Inteligencia Artificial

Científicos imprimen en 3D folículos pilosos en piel cultivada en laboratorio

Un equipo liderado por científicos del Instituto Politécnico de Rensselaer ha impreso en tres dimensiones (3D) folícu...

Aprendizaje Automático

Acelerando el Acelerador Científico Acelera la Computación de Alto Rendimiento de CERN con GPUs y IA.

Nota del editor: Esto es parte de una serie que perfila a investigadores que avanzan en la ciencia con cómputo de alt...

Inteligencia Artificial

¿Pueden los robots cuadrúpedos de bajo costo dominar el parkour? Revelando un revolucionario sistema de aprendizaje para el movimiento ágil de robots

La búsqueda de hacer que los robots realicen tareas físicas complejas, como navegar por entornos desafiantes, ha sido...

Inteligencia Artificial

Google AI propone E3-TTS, una solución sencilla y eficiente de texto a voz basada en difusión para convertir texto en voz de manera fácil y completa.

En el aprendizaje automático, un modelo de difusión es un modelo generativo comúnmente utilizado para tareas de gener...