Saltar al contenido principal

馃煛 Codigo como Razonamiento

Los Modelos de Lenguaje Asistidos por Programa (PAL, por sus siglas en ingl茅s) son otro ejemplo de un sistema MRKL. Cuando se les hace una pregunta, los PAL son capaces de escribir c贸digo que resuelve esa pregunta. Env铆an el c贸digo a un tiempo de ejecuci贸n program谩tico para obtener el resultado. El funcionamiento de PAL es en contraposici贸n al de CoT; el razonamiento intermedio de PAL es c贸digo, mientras que el de CoT es lenguaje natural.

Ejemplo de PAL (Gao et al.)

Una cosa importante a tener en cuenta es que PAL en realidad entrelaza el lenguaje natural (NL) y el c贸digo. En la imagen anterior, en azul est谩n el razonamiento en lenguaje natural que PAL genera. Aunque no se muestra en la imagen, PAL en realidad genera '#' antes de cada l铆nea de razonamiento NL, para que sean interpretados como comentarios por el tiempo de ejecuci贸n program谩tico.

Ejemplo

Veamos un ejemplo de PAL resolviendo una pregunta de matem谩ticas. Utilizo un prompt de 3 disparos, que es una versi贸n simplificada de este1.

Para esto, usar茅 langchain, un paquete de Python para encadenar la funcionalidad de LLM. Primero, se necesitan algunas instalaciones:

!pip install langchain==0.0.26
!pip install openai
from langchain.llms import OpenAI
import os
os.environ["OPENAI_API_KEY"] = "sk-YOUR_KEY_HERE"

Luego, podemos crear una instancia de GPT-3 davinci-002 (se hace una llamada a la API cuando usamos este objeto)

llm = OpenAI(model_name='text-davinci-002', temperature=0)

Aqu铆 est谩 el prompt de tres disparos:

MATH_PROMPT = '''
Q: Hab铆a nueve computadoras en la sala de servidores. Cada d铆a se instalaron cinco computadoras m谩s, de lunes a jueves. 驴Cu谩ntas computadoras hay ahora en la sala de servidores?

# Soluci贸n en Python:
"""Hab铆a nueve computadoras en la sala de servidores. Cada d铆a se instalaron cinco computadoras m谩s, de lunes a jueves. 驴Cu谩ntas computadoras hay ahora en la sala de servidores?"""
computadoras_iniciales = 9
computadoras_por_dia = 5
num_dias = 4 # 4 d铆as entre lunes y jueves
computadoras_agregadas = computadoras_por_dia * num_dias
computadoras_totales = computadoras_iniciales + computadoras_agregadas
resultado = computadoras_totales
return resultado


Q: Shawn tiene cinco juguetes. Para Navidad, recibi贸 dos juguetes de su mam谩 y dos juguetes de su pap谩. 驴Cu谩ntos juguetes tiene ahora?

# Soluci贸n en Python:
"""Shawn tiene cinco juguetes. Para Navidad, recibi贸 dos juguetes de su mam谩 y dos juguetes de su pap谩. 驴Cu谩ntos juguetes tiene ahora?
toys_initial = 5
mom_toys = 2
dad_toys = 2
total_received = mom_toys + dad_toys
total_toys = toys_initial + total_received
result = total_toys


P: Jason ten铆a 20 chupetines. Le dio algunos chupetines a Denny. Ahora Jason tiene 12 chupetines. 驴Cu谩ntos chupetines le dio Jason a Denny?

# Soluci贸n en Python:
"""Jason ten铆a 20 chupetines. Le dio algunos chupetines a Denny. Ahora Jason tiene 12 chupetines. 驴Cu谩ntos chupetines le dio Jason a Denny?"""
jason_lollipops_initial = 20
jason_lollipops_after = 12
denny_lollipops = jason_lollipops_initial - jason_lollipops_after
result = denny_lollipops

P: {pregunta}

# Soluci贸n en Python:
'''

Ahora podemos pasar la pregunta combinada a GPT-3.

llm_out = llm(MATH_PROMPT.format(question=question))
print(llm_out)

La salida es:

"""Emma tom贸 un vuelo de 60 minutos a Seattle. Luego tom贸 un viaje en tren de 2 horas a Portland, y luego un viaje en autob煤s de 30 minutos a Vancouver. 驴Cu谩nto tiempo le llev贸 llegar a Vancouver?"""
plane_ride = 60
train_ride = 2 * 60 # 2 horas en minutos
bus_ride = 30
total_time = plane_ride + train_ride + bus_ride
result = total_time

Finalmente, podemos pasar este c贸digo a un entorno de Python para obtener la respuesta:

exec(llm_out)
print(result)

La salida es 210, que es correcta.

Vea el cuaderno de Jupyter para este ejemplo aqu铆. here.

M谩s

Consulte tambi茅n el ejemplo de colab de PAL..


  1. Gao, L., Madaan, A., Zhou, S., Alon, U., Liu, P., Yang, Y., Callan, J., & Neubig, G. (2022).