feat(pages): applications section translated

pull/128/head
Aitor García Rey 1 year ago
parent 5ba02b5266
commit 9a9ee84d5b
No known key found for this signature in database
GPG Key ID: 754FDEDB50060BBF

@ -0,0 +1,5 @@
{
"pal": "Modelos de lenguaje asistidos por programas",
"generating": "Generación de datos",
"workplace_casestudy": "Caso de estudio de clasificación de trabajo de graduados"
}

@ -0,0 +1,45 @@
# Generación de Datos
Los LLM tienen fuertes capacidades para generar texto coherente. El uso de estrategias de prompt efectivas puede dirigir al modelo a producir respuestas mejores, consistentes y más factuales. Los LLM también pueden ser especialmente útiles para generar datos, lo cual es realmente útil para realizar todo tipo de experimentos y evaluaciones. Por ejemplo, podemos usarlo para generar muestras rápidas para un clasificador de sentimientos así:
*Prompt:*
```
Produce 10 ejemplos para análisis de sentimientos. Los ejemplos se categorizan como positivos o negativos. Produce 2 ejemplos negativos y 8 ejemplos positivos. Usa este formato para los ejemplos:
Q: <oración>
A: <sentimiento>
```
*Salida*
```
Q: ¡Acabo de recibir las mejores noticias!
A: Positivo
Q: ¡Acabamos de recibir un aumento en el trabajo!
A: Positivo
Q: Estoy muy orgulloso de lo que logré hoy.
A: Positivo
Q: ¡Estoy teniendo el mejor día de mi vida!
A: Positivo
Q: Realmente estoy deseando el fin de semana.
A: Positivo
Q: ¡Acabo de recibir el mejor regalo de mi vida!
A: Positivo
Q: Estoy tan feliz en este momento.
A: Positivo
Q: Me siento tan afortunado de tener una familia increíble.
A: Positivo
Q: El clima afuera está tan triste.
A: Negativo
Q: Acabo de recibir algunas noticias terribles.
A: Negativo
```
Esto es muy útil. De hecho, usamos este ejemplo para una prueba diferente en otra sección de las guías.

@ -0,0 +1,106 @@
# PAL (Modelos de lenguaje asistidos por programa)
import { Callout, FileTree } from 'nextra-theme-docs'
import {Screenshot} from 'components/screenshot'
import PAL from '../../img/pal.png'
[Gao et al., (2022)](https://arxiv.org/abs/2211.10435) presenta un método que utiliza LLMs para leer problemas en lenguaje natural y generar programas como pasos intermedios de razonamiento. Llamado modelos de lenguaje asistidos por programa (PAL), difiere del prompting en cadena de pensamiento en que, en lugar de utilizar texto libre para obtener una solución, desplaza el paso de la solución a un tiempo de ejecución programático, como un intérprete de Python."
<Screenshot src={PAL} alt="PAL" />
Image Source: [Gao et al., (2022)](https://arxiv.org/abs/2211.10435)
Veamos un ejemplo utilizando LangChain y OpenAI GPT-3. Estamos interesados en desarrollar una aplicación simple que sea capaz de interpretar la pregunta formulada y proporcionar una respuesta aprovechando el intérprete de Python.
Específicamente, estamos interesados en crear una funcionalidad que permita el uso del LLM para responder preguntas que requieren comprensión de fechas. Proporcionaremos al LLM una indicación que incluye algunos ejemplos adoptados de [aquí](https://github.com/reasoning-machines/pal/blob/main/pal/prompt/date_understanding_prompt.py).
Estos son los imports que necesitamos:
```python
import openai
from datetime import datetime
from dateutil.relativedelta import relativedelta
import os
from langchain.llms import OpenAI
from dotenv import load_dotenv
```
Configuremos primeros algunas cosas:
```python
load_dotenv()
# API configuration
openai.api_key = os.getenv("OPENAI_API_KEY")
# for LangChain
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
```
Configuremos la instancia del modelo
```python
llm = OpenAI(model_name='text-davinci-003', temperature=0)
```
Configuremos el prompt y la pregunta:
```python
question = "Today is 27 February 2023. I was born exactly 25 years ago. What is the date I was born in MM/DD/YYYY?"
DATE_UNDERSTANDING_PROMPT = """
# Q: 2015 is coming in 36 hours. What is the date one week from today in MM/DD/YYYY?
# If 2015 is coming in 36 hours, then today is 36 hours before.
today = datetime(2015, 1, 1) - relativedelta(hours=36)
# One week from today,
one_week_from_today = today + relativedelta(weeks=1)
# The answer formatted with %m/%d/%Y is
one_week_from_today.strftime('%m/%d/%Y')
# Q: The first day of 2019 is a Tuesday, and today is the first Monday of 2019. What is the date today in MM/DD/YYYY?
# If the first day of 2019 is a Tuesday, and today is the first Monday of 2019, then today is 6 days later.
today = datetime(2019, 1, 1) + relativedelta(days=6)
# The answer formatted with %m/%d/%Y is
today.strftime('%m/%d/%Y')
# Q: The concert was scheduled to be on 06/01/1943, but was delayed by one day to today. What is the date 10 days ago in MM/DD/YYYY?
# If the concert was scheduled to be on 06/01/1943, but was delayed by one day to today, then today is one day later.
today = datetime(1943, 6, 1) + relativedelta(days=1)
# 10 days ago,
ten_days_ago = today - relativedelta(days=10)
# The answer formatted with %m/%d/%Y is
ten_days_ago.strftime('%m/%d/%Y')
# Q: It is 4/19/1969 today. What is the date 24 hours later in MM/DD/YYYY?
# It is 4/19/1969 today.
today = datetime(1969, 4, 19)
# 24 hours later,
later = today + relativedelta(hours=24)
# The answer formatted with %m/%d/%Y is
today.strftime('%m/%d/%Y')
# Q: Jane thought today is 3/11/2002, but today is in fact Mar 12, which is 1 day later. What is the date 24 hours later in MM/DD/YYYY?
# If Jane thought today is 3/11/2002, but today is in fact Mar 12, then today is 3/1/2002.
today = datetime(2002, 3, 12)
# 24 hours later,
later = today + relativedelta(hours=24)
# The answer formatted with %m/%d/%Y is
later.strftime('%m/%d/%Y')
# Q: Jane was born on the last day of Feburary in 2001. Today is her 16-year-old birthday. What is the date yesterday in MM/DD/YYYY?
# If Jane was born on the last day of Feburary in 2001 and today is her 16-year-old birthday, then today is 16 years later.
today = datetime(2001, 2, 28) + relativedelta(years=16)
# Yesterday,
yesterday = today - relativedelta(days=1)
# The answer formatted with %m/%d/%Y is
yesterday.strftime('%m/%d/%Y')
# Q: {question}
""".strip() + '\n'
```
```python
llm_out = llm(DATE_UNDERSTANDING_PROMPT.format(question=question))
print(llm_out)
```
```python
exec(llm_out)
print(born)
```
Esto producirá la siguiente salida: `02/27/1998`

@ -0,0 +1,57 @@
# Caso de estudio de clasificación de trabajo de graduados
[Clavié et al., 2023](https://arxiv.org/abs/2303.07142) proporcionan un caso de estudio sobre la ingeniería de prompts aplicada a un caso de uso de clasificación de texto a mediana escala en un sistema de producción. Utilizando la tarea de clasificar si un trabajo es un verdadero "trabajo básico", adecuado para un recién graduado, o no, evaluaron una serie de técnicas de ingeniería de prompts y reportaron sus resultados utilizando GPT-3.5 (`gpt-3.5-turbo`).
El trabajo muestra que los LLM superan a todos los demás modelos probados, incluyendo una base de referencia extremadamente fuerte en DeBERTa-V3. `gpt-3.5-turbo` también supera notablemente a las variantes más antiguas de GPT3 en todas las métricas clave, pero requiere un análisis adicional de la salida ya que su capacidad para mantenerse en una plantilla parece ser peor que las otras variantes.
Los hallazgos clave de su enfoque de ingeniería de prompts son:
- Para tareas como esta, donde no se requiere conocimiento experto, CoT con pocos ejemplos dio peores resultados que la generación sin ejemplos en todos los experimentos.
- El impacto del prompt en la obtención del razonamiento correcto es enorme. Simplemente pedir al modelo que clasifique un trabajo dado da como resultado una puntuación F1 de 65.6, mientras que el modelo de ingeniería posterior al prompt logra una puntuación F1 de 91.7.
- Intentar forzar al modelo a mantenerse en una plantilla disminuye el rendimiento en todos los casos (este comportamiento desaparece en las primeras pruebas con GPT-4, que son posteriores al documento).
- Muchas modificaciones pequeñas tienen un gran impacto en el rendimiento.
- Las tablas a continuación muestran las modificaciones completas probadas.
- Dar instrucciones adecuadas y repetir los puntos clave parece ser el factor más importante para el rendimiento.
- Algo tan simple como dar al modelo un nombre (humano) y referirse a él como tal aumentó la puntuación F1 en 0.6 puntos.
### Modificaciones the prompt probadas
| Nombre corto | Descripción |
|--------------|-----------------------------------------------------------------------------------------------------|
| Baseline | Proporciona una descripción del trabajo y pregunta si es adecuada para un graduado. |
| CoT | Da algunos ejemplos de clasificación precisa antes de realizar la consulta. |
| Zero-CoT | Pide al modelo que razone paso a paso antes de proporcionar su respuesta. |
| rawinst | Da instrucciones sobre su papel y la tarea agregando al mensaje del usuario. |
| sysinst | Da instrucciones sobre su papel y la tarea como mensaje del sistema. |
| bothinst | Divide las instrucciones con el papel como mensaje del sistema y la tarea como mensaje del usuario. |
| mock | Da instrucciones sobre la tarea burlándose de una discusión donde las reconoce. |
| reit | Refuerza los elementos clave en las instrucciones repitiéndolos. |
| strict | Pide al modelo que responda siguiendo estrictamente una plantilla dada. |
| loose | Pide que solo se proporcione la respuesta final siguiendo una plantilla dada. |
| right | Pide al modelo que llegue a la conclusión correcta. |
| info | Proporciona información adicional para abordar fallas de razonamiento comunes. |
| name | Da al modelo un nombre con el que nos referimos a él en la conversación. |
| pos | Proporciona retroalimentación positiva al modelo antes de hacer la consulta. |
### Impacto de rendimiento de todas las modificaciones de prompt
| | Precision | Recall | F1 | Apego a la Plantilla |
|----------------------------------------|---------------|---------------|---------------|------------------------|
| _Baseline_ | _61.2_ | _70.6_ | _65.6_ | _79%_ |
| _CoT_ | _72.6_ | _85.1_ | _78.4_ | _87%_ |
| _Zero-CoT_ | _75.5_ | _88.3_ | _81.4_ | _65%_ |
| _+rawinst_ | _80_ | _92.4_ | _85.8_ | _68%_ |
| _+sysinst_ | _77.7_ | _90.9_ | _83.8_ | _69%_ |
| _+bothinst_ | _81.9_ | _93.9_ | _87.5_ | _71%_ |
| +bothinst+mock | 83.3 | 95.1 | 88.8 | 74% |
| +bothinst+mock+reit | 83.8 | 95.5 | 89.3 | 75% |
| _+bothinst+mock+reit+strict_ | _79.9_ | _93.7_ | _86.3_ | _**98%**_ |
| _+bothinst+mock+reit+loose_ | _80.5_ | _94.8_ | _87.1_ | _95%_ |
| +bothinst+mock+reit+right | 84 | 95.9 | 89.6 | 77% |
| +bothinst+mock+reit+right+info | 84.9 | 96.5 | 90.3 | 77% |
| +bothinst+mock+reit+right+info+name | 85.7 | 96.8 | 90.9 | 79% |
| +bothinst+mock+reit+right+info+name+pos| **86.9** | **97** | **91.7** | 81% |
El apego a la plantilla se refiere a qué tan frecuentemente el modelo responde en el formato deseado.
Loading…
Cancel
Save