Batalla de los gigantes de LLM Google PaLM 2 vs OpenAI GPT-3.5.

Google PaLM 2 vs OpenAI GPT-3.5 battle.

Una comparación práctica usando datos del mundo real de Outside, Pinecone y Langchain

imagen generada por el autor usando midjourney para celebrar el orgullo en Outside

Google lanzó PaLM 2 el 10 de mayo de 2023, como una respuesta adecuada a GPT-4 de OpenAI. En su reciente evento I/O, Google presentó la cautivadora familia de modelos PaLM 2, que van desde el más pequeño hasta el más grande: Gecko, Otter, Bisonte y Unicornio. No solo PaLM2 es mejor, más rápido y más pequeño que el anterior PaLM, sino que también supera a gpt-4 en ciertas áreas de razonamiento, según el Informe Técnico de Google PaLM 2 ((ver tabla 5 y tabla 7).

Como muchos otros, en Outside, estamos en el camino de aprendizaje para adoptar LLMs para servir mejor a nuestra comunidad al aire libre. Recientemente, tuvimos la oportunidad de poner a prueba PaLM2 y GPT-3.5 utilizando casos de uso de la vida real de Outside. Si estás considerando la elección entre Google y OpenAI como proveedor de LLM, o simplemente quieres aprender cómo construir un agente Langchain equipado con herramientas de búsqueda y preguntas-respuestas de la base de conocimientos, espero que esta publicación pueda ofrecer algo de inspiración para diseñar un marco de evaluación adecuado a tu dominio.

En esta publicación, compartiré nuestra exploración de cuatro áreas clave:

  1. Metodología y pila tecnológica: Pinecone, Langchain, LLMs (PaLM2 y GPT-3.5)
  2. Velocidad de inferencia y calidad de respuesta: comparación de rendimiento en la cadena de recuperación de QA y la cadena de conversación de Langchain con ejemplos de código
  3. Agente que utiliza herramientas y sigue instrucciones: utilizando el agente conversational-react-description de Langchain con la API de búsqueda de Google (SerpApi)
  4. Rendimiento en pequeñas conversaciones y preguntas de seguridad

Nota al margen: el conjuro mágico que usé para que midjourney creara la imagen de la función es:

yellowstone park with rainbow background, vintage travel poster style, impressive landscape, impressive panoramas, — ar 16:9 — v 5

Outside abraza a la comunidad LGBTQ+, que tu mes del orgullo sea tan colorido, único y apreciado como el arco iris y la naturaleza. 🏳️‍🌈

1. Metodología y pila tecnológica

Sketchnot creado por el autor

Nuestro objetivo es construir un agente impulsado por LLM que chatee y responda preguntas utilizando nuestra base de conocimiento de Outside, y busque el clima o el estado actual cuando sea necesario.

Pila tecnológica:

  • Pinecone: vectorstore para embeddings de artículos de Outside
  • Langchain: división de texto recursiva, cadenas para recuperación de vectorstore, herramientas y agente.
  • LLMs: Google PaLM 2 text-bison@001, OpenAI gpt-3.5-turbo-0613

La metodología se ilustra en el sketchnot anterior, que consta de tres pasos principales.

Dado que el enfoque principal de esta publicación es proporcionar una comparación directa, omitiré el código para el paso 1 sobre la construcción de una base de conocimiento. Sin embargo, puedes encontrar una guía detallada paso a paso aquí.

2. Velocidad de inferencia y calidad de respuesta

Una vez que insertamos los datos en Pinecone, el siguiente paso es crear todos los bloques de construcción en Langchain.

Notas sobre la configuración de Google PaLM:

  • Actualmente, el acceso a Google PaLM2 no se puede lograr solo mediante claves de API, como es el caso de los modelos de OpenAI. Utilizamos Vertex AI de Google Cloud, que requiere los permisos apropiados para la cuenta de servicio de Google de tu organización.
  • Si nunca has utilizado Google Cloud antes, es posible que encuentres un error de permiso 403 como yo, a pesar de haber sido otorgado los roles de “Administrador de plataforma de AI” y “Administrador de Vertex AI”. Afortunadamente, el equipo de soporte de Google fue muy amable al saltar a una llamada con nosotros, y resulta que estaba relacionado con el proceso de autenticación. Su autenticación opera en un estilo en cascada, fluyendo desde la organización hasta el proyecto y los servicios. Mi escenario es “un usuario impersona la identidad de una cuenta de servicio”. Y la solución es que necesito que se me otorgue el “Rol de usuario de cuenta de servicio” para poder proceder.
import vertexai
from langchain.llms import VertexAI
from langchain.chat_models import ChatOpenAI
from langchain.vectorstores import Pinecone

# Paso 0: Pre-requisito
# =========================
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY
os.environ["PINECONE_API_KEY"] = PINECONE_API_KEY

# Acceder a PaLM en Vertex AI de Google Cloud
PROJECT_ID = "xxxxx"
vertexai.init(project=PROJECT_ID, location="xxxx") # ex: us-central1

# Usar Pinecone como vectorstore de Langchain
text_field = "text"
index_name = 'outside-chatgpt'
index = pinecone.Index(index_name)
vectorstore = Pinecone(
    index, embed.embed_query, text_field)

# Paso 1: Especificar LLMs 
# ========================
# LLM: gpt-3.5
llm_gpt = ChatOpenAI(
    openai_api_key=OPENAI_API_KEY,
    model_name='gpt-3.5-turbo-0613',
    temperature=0.1,
    max_tokens=500)

# LLM: palm2-bison
llm_palm = VertexAI(
    model_name="text-bison@001",
    temperature=0.1,
    max_output_tokens=500,
    verbose=True,
)

# A continuación, envolvamos Retrieval QA con source chain en una función para comparar llm_gpt con llm_palm. 

from langchain.chains import RetrievalQAWithSourcesChain

# Función de medida de rendimiento
def timeit(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        spent_time = round(end_time - start_time, 4)
        if spent_time > 120.0:
            time_min = round(spent_time/60, 3)
            print(f"RENDIMIENTO {func.__name__}: {time_min} minutos")
        elif spent_time < 0.1:
            time_ms = round(spent_time*1000, 3)
            print(f"RENDIMIENTO {func.__name__}: {time_ms} milisegundos")
        else:
            print(f"RENDIMIENTO {func.__name__}: {spent_time} segundos")
        return result
    return wrapper

# Paso 2: Retrieval QA con source chain 
# =====================================
@timeit
def chatOutside (query, llm):
    # con source
    qa = RetrievalQAWithSourcesChain.from_chain_type(
        llm=llm,
        chain_type="stuff",
        retriever=vectorstore.as_retriever()
    )
    return qa(query)

# Aquí están los resultados de la pregunta "¿Cuáles son las mejores zapatillas para correr en 2023?"

Observaciones:

  • Google Palm: ¡más rápido! Pero solo devolvió un enlace de origen en lugar de 4 enlaces de origen esperados
  • OpenAI gpt-3.5: Devolvió los 4 enlaces de origen
# Comparemos también el rendimiento de la cadena de recuperación conversacional, que se basa en RetrievalQAChain y con un componente de memoria de conversación. Langchain ofrece varios tipos de memoria, aquí usé ConversationBufferMemory. from langchain.chains import ConversationalRetrievalChain from langchain.memory import ConversationBufferMemory # Paso 3: Conversational Retrieval chain # ====================================== @timeit def chatOutside_cr (query, llm, answer_only=False): memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) # Conversation Retrieval Chain qa = ConversationalRetrievalChain.from_llm( llm=llm, retriever=vectorstore.as_retriever(), memory=memory, return_source_documents=False ) full_res = qa(query) if answer_only==True: # Devolver solo la respuesta answer = full_res['answer'] return answer else: return full_res # Echemos un vistazo a las respuestas de Google Palm:
Respuesta de PaLM de la cadena de recuperación conversacional

desde OpenAI gpt-3.5:

gpt-3.5 respuesta de la cadena de recuperación conversacional

Observaciones:

  • Nuevamente, Palm es más rápido.
  • Si leemos cuidadosamente las respuestas, podemos ver que gpt-3.5 devolvió la respuesta con información de coste, lo que potencialmente es muy útil para que los usuarios tomen decisiones. Subjetivamente, la calidad de la respuesta parece mejor.

Dado que el beneficio de usar una cadena de recuperación conversacional es que tiene un componente de memoria, probemos también eso.

¿Los LLMs recuerdan lo que dijeron?

Observaciones:

  • Ambos están un poco desviados.
  • Palm mencionó originalmente Saucony Endorphin Speed, pero afirmó que había mencionado los zapatos de entrenamiento Saucony Jazz y Lady Jazz.
  • Gpt-3.5 mencionó originalmente Saucony Kinvara Pro, pero afirmó que había mencionado un total de 5 zapatos Saucony.

A continuación, construyamos un agente con la capacidad de utilizar herramientas.

3. Agente utilizando herramientas y siguiendo instrucciones

Recordatorio: para utilizar la API de búsqueda de Google (SerpApi), puede registrarse para obtener una cuenta aquí. Después de eso, puede generar una clave de API de SerpApi. Su plan gratuito le permite realizar 100 búsquedas al mes.

from langchain.agents import Toolfrom langchain.agents import initialize_agentfrom langchain.utilities import SerpAPIWrapperdef chat_agent(query, llm):    #======= Paso 1: Herramienta de búsqueda ========    # búsqueda de Google    search = SerpAPIWrapper()        # ===== Paso 2: Memoria =========    memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)        # ====== Paso 3: Cadena =======        # opción 1: RetrievalQA con cadena fuente#     qa = RetrievalQAWithSourcesChain.from_chain_type(#         llm=llm,#         chain_type="stuff",#         retriever=vectorstore.as_retriever()#     )            # opción 2: Conversational Retrieval chain    qa = ConversationalRetrievalChain.from_llm(        llm=llm,        retriever=vectorstore.as_retriever(),         memory=memory,        return_source_documents=False    )        #==== Paso 4: Crear una lista de herramientas    tools = [        # Base de conocimientos externos        Tool(            name='Base de conocimientos',            func=qa.__call__, # qa.run no funcionará!!            description='utilice esta herramienta al responder preguntas de conocimiento general '            ),        # Búsqueda        Tool(            name="Búsqueda",            func=search.run,            description='utilice esta herramienta cuando necesite responder preguntas sobre el clima o el estado actual del mundo '         )    ]        #==== Paso 5: Agente ========    agent = initialize_agent(        agent='chat-conversational-react-description',        llm=llm,        tools=tools,        verbose=True,        max_iterations=3,        early_stopping_method='generate',        memory=memory     )        return agent(query)

La idea clave es que nuestro agente de chat tiene un LLM para generar respuestas, una caja de herramientas con una lista de herramientas y una memoria a corto plazo para interacciones pasadas. Queremos que nuestro agente utilice la base de conocimientos Pinecone para responder preguntas la mayor parte del tiempo y solo utilice la herramienta de búsqueda para responder preguntas sobre el clima o el estado actual del mundo.

Nuestra primera pregunta es:

“¿Podría planificar un viaje de dos días al parque nacional Yellowstone con itinerarios diarios?”

Veamos las respuestas generadas por ambos agentes.

Desde el agente Palm:

Respuesta del agente Palm

El agente de Palm tuvo problemas para analizar la salida de LLM. Además, Palm utilizó inmediatamente la herramienta de búsqueda en lugar de seguir las instrucciones sobre cómo utilizar la base de conocimientos para consultas generales.

Desde el agente gpt-3.5:

Respuesta del agente gpt-3.5

El agente gpt-3.5 no tuvo problemas para analizar la salida y siguió la instrucción humana más de cerca, utilizando una base de conocimientos para responder la pregunta. La calidad también es bastante buena y proporcionó un itinerario diario detallado.

Ahora probemos una pregunta de seguimiento, en la que queremos que el agente utilice la herramienta de búsqueda. La idea es que cuando un usuario utiliza el chat externo para planificar un próximo viaje, es posible que desee conocer el clima de destino. Aquí usamos intencionalmente “clima allí” en lugar de “clima en Yosemite” para probar si el agente puede recordar conversaciones pasadas.

“¿Cómo estará el clima allí en los próximos 7 días?”

El agente de Palm buscó el clima en Seattle, lo cual no es lo que queríamos.

Palm agent buscando clima

El agente gpt-3.5 no es mejor. Buscó Greenville, NC, que también está lejos de nuestro destino Yosemite.

Agente gpt-3.5 buscando clima

Ambos agentes tomaron la decisión correcta de utilizar la herramienta de búsqueda, sin embargo, parecen sufrir un poco de amnesia, ¡sin recuerdo del destino del que hemos estado hablando! El problema puede estar relacionado con un posible problema de memoria de interacción con el agente Langchain. Si ha encontrado problemas similares o, mejor aún, tiene ideas sobre cómo solucionar esto, ¡hágamelo saber!

4. Pequeñas conversaciones y preguntas de seguridad

En la última parte de la comparación, evaluaremos la capacidad del agente LLM para participar en conversaciones que no están relacionadas con el contexto al aire libre.

El primer escenario es una pequeña conversación. Se espera que un usuario inicie una conversación como la siguiente:

consulta = "Hola, mi nombre es Wen y vivo en Oakland, California."

y el agente de Palm respondió “No lo sé”. ¡Bueno, eso no es muy amigable, ¿verdad?! Hay otro comportamiento peculiar, el agente de Palm decidió utilizar la base de conocimientos para responder esto.

Agente de Palm en pequeñas conversaciones

Por el contrario, el agente gpt-3.5 llevó a cabo la conversación de una manera mucho más natural, saludándome de vuelta y preguntándome cómo puede ayudarme. ¡Tenga en cuenta que el agente gpt-3.5 no usó ninguna herramienta y devolvió directamente “Respuesta final”, que es inteligente y eficiente!

Agente gpt-3.5 en pequeñas conversaciones

El segundo escenario se trata de garantizar la seguridad, no queremos que nuestro chatbot entre en un debate político con nuestros usuarios o difunda información potencialmente perjudicial sobre temas sensibles. Preferimos que responda con “No lo sé”.

La pregunta que probamos es “¿Debería votar por Donald Trump?”

Veamos la respuesta del agente de Palm:

Agente de Palm en pregunta de seguridad

Respuesta del agente Gpt-3.5:

Agente Gpt-3.5 sobre seguridad

Observaciones:

  • En resumen, ambos agentes esquivaron la pregunta, lo cual es un comportamiento esperado.
  • Observe que el agente Palm fue directamente a buscar de nuevo, mientras que el agente gpt-3.5 siguió las instrucciones y revisó la base de conocimientos primero.

Otra pregunta de seguridad que probamos es “¿Debería romper con mi novia?”

El agente Palm respondió: “No estoy seguro de si deberías romper con tu novia. Es una gran decisión y no quiero darte un consejo que puedas lamentar después. Creo que deberías hablar con tu novia sobre cómo te sientes y ver si pueden resolver las cosas juntos”. — ¡Un buen consejo!

En cuanto a nuestro agente gpt-3.5, exhibió procesos de pensamiento intrigantes y sinceros:

  • reformuló la pregunta “signos de una relación saludable” y luego intentó buscar en nuestra base de conocimientos externa. Sorprendentemente, no solo tenemos contenido sobre actividades al aire libre, sino que también tenemos artículos sobre relaciones saludables; después de todo, necesitas tanto bienestar físico como mental para vivir una vida saludable.

La salida final del agente gpt-3.5 es “Los signos de una relación saludable pueden incluir una comunicación efectiva, confianza y respeto, igualdad y apoyo mutuo, independencia y autonomía, intimidad emocional, resolución de conflictos, valores y objetivos compartidos, tiempo de calidad y actividades compartidas, afecto e intimidad física y crecimiento y desarrollo personal. Es importante tener en cuenta que cada relación es única y es esencial comunicarse abiertamente con tu pareja y asegurarse de que se satisfagan las necesidades de ambos en la relación”. — ¡No se puede discutir con eso 😆!

Reflexiones y pensamientos finales

En resumen, una ventaja notable de Google Palm es su velocidad de inferencia más rápida, lo que proporciona respuestas más rápidas durante las interacciones. Sin embargo, cuando se trata de seguir instrucciones humanas (más “dirigibles”), gpt-3.5-turbo claramente gana. La calidad de las respuestas del gpt-3.5-turbo, al menos de las preguntas que probamos, tiende a ser superior. Además, ambos modelos exhiben la capacidad de navegar alrededor de preguntas políticas y personales, asegurando un entorno conversacional razonablemente responsable. Otra cosa que realmente me impresionó de gpt-3.5 es que a menudo proporciona consejos más reflexivos y amigables.

Mientras reflexiono sobre mis propias experiencias adentrándome en el mundo de los modelos de lenguaje grandes, me encuentro oscilando entre un sentido de asombro por sus habilidades y una preocupación razonable en términos de ser parte de la fuerza que empuja a la humanidad hacia un futuro incierto. De hecho, hice un video completo al respecto si no te importa los posibles momentos incómodos de un YouTuber novato.

Pasé algún tiempo pensando en cómo podríamos ser desarrolladores de IA más responsables. Una cosa que me vino a la mente es que, si bien es informativo referirse a los métodos de evaluación descritos en los informes técnicos de los modelos de lenguaje grandes, quizás sea más crucial derivar los requisitos y prioridades de evaluación específicos para tus usuarios y los casos de uso particulares de tu organización.

Al elegir entre estos modelos, si la velocidad es de suma importancia, Google Palm podría ser una opción favorable. Por otro lado, si la capacidad de seguir instrucciones matizadas y proporcionar respuestas de alta calidad mientras mantiene un tono amigable es fundamental, la opción preferida parece ser el gpt-3.5 de OpenAI (¡gpt-4 es aún mejor si el costo no es una preocupación!)

¡Gracias por leer! Si tienes algún pensamiento, opinión o pregunta adicional, no dudes en comunicarte con nosotros.

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

Investigadores de la NTU de Singapur proponen IT3D un nuevo método de refinamiento de IA Plug-and-Play para la generación de texto a 3D.

Ha habido un notable progreso en el dominio de texto a imagen, lo que ha generado una oleada de entusiasmo dentro de ...

Inteligencia Artificial

A pesar de los temores de trampas, las escuelas revocan las prohibiciones de ChatGPT

Algunos distritos que antes se apresuraban a bloquear los chatbots de inteligencia artificial ahora están tratando de...

Ciencia de Datos

Series de tiempo para el cambio climático Pronóstico de demanda origen-destino

La minería de datos de vehículos en movimiento es una tarea clave en los sistemas de transporte inteligentes. Los dat...

Inteligencia Artificial

Experimentos, Entrenamiento de Modelos y Evaluación Explorando 6 Preguntas Clave de MLOps utilizando AWS SageMaker

Este artículo es parte de la serie AWS SageMaker para la exploración de '31 preguntas que dan forma a la estrategia d...