IA para Científicos Sociales

Sesión 4.2: LLMs como herramientas de investigación

Danilo Freire

Departament of Data and Decision Sciences
Emory University

LLMs como herramientas de investigación

Agenda de la sesión

Primera parte

  • Alucinaciones y cómo mitigarlas
  • RAG: Retrieval-Augmented Generation
  • Prompt engineering avanzado
  • Temperaturas y parámetros

Segunda parte

  • LLMs para tareas de investigación
  • Anotación automática de textos
  • Generación de datos sintéticos
  • Reproducibilidad y validación
  • APIs y el paquete ellmer

Alucinaciones

Cuando la IA inventa cosas

  • Alucinación: el LLM genera contenido fluido pero factualmente incorrecto
  • ¿Por qué ocurre? Porque los LLMs optimizan:

\[P(\text{siguiente token} | \text{contexto})\]

No:

\[P(\text{afirmación verdadera})\]

  • No tienen acceso a hechos: solo a patrones estadísticos del texto de entrenamiento
  • Tipos comunes:
    • Citas fabricadas: papers que no existen
    • Estadísticas inventadas: números que suenan plausibles
    • Hechos incorrectos: fechas, nombres, eventos erróneos

Fuente: Nielsen Norman Group


Tasas de alucinación por modelo

Caso real: el abogado y ChatGPT

  • 2023: dos abogados en Nueva York presentaron un escrito legal ante un tribunal federal
  • Citaron seis casos judiciales como precedentes
  • Problema: ninguno de esos casos existía
  • Los habían obtenido de ChatGPT sin verificar
  • El juez los sancionó con una multa de USD 5.000
  • Lección: los LLMs no son bases de datos
  • No “buscan” información: generan texto que parece plausible
  • Siempre verificar cualquier dato, cita o estadística generada por un LLM

El caso del abogado

Cómo reducir las alucinaciones

En el prompt

  • Temperatura baja (0-0,3)
  • Pedir que diga “no sé” cuando no está seguro
  • Few-shot: dar ejemplos del formato esperado
  • Chain-of-thought: obligar a razonar paso a paso
  • Pedir citas específicas y verificarlas manualmente
  • Instrucción explícita: “no inventes datos”

En la arquitectura

  • RAG (Retrieval-Augmented Generation): darle al modelo documentos reales como contexto
  • Grounding: conectar el modelo con fuentes de información verificadas
  • Verificación cruzada: usar múltiples modelos y comparar respuestas
  • Post-procesamiento: verificar automáticamente las afirmaciones generadas

Regla de oro: nunca confiar en la salida de un LLM sin verificación. Los LLMs son herramientas de borrador, no fuentes de verdad.

RAG: Retrieval-Augmented Generation

¿Qué es RAG?

  • RAG (Lewis et al., 2020): en lugar de confiar en la “memoria” del modelo, le damos documentos reales como contexto
  • El pipeline:
    1. El usuario hace una pregunta
    2. El sistema busca documentos relevantes en una base de conocimiento
    3. Los documentos se incluyen en el prompt
    4. El LLM genera una respuesta basada en esos documentos
  • Reduce alucinaciones porque el modelo debe basar sus respuestas en texto real
  • Más fácil de actualizar: cambiar los documentos, no reentrenar el modelo
  • Ya lo usan: ChatGPT con archivos, NotebookLM de Google, Perplexity AI

Pipeline de RAG

RAG para investigación en ciencias sociales

Casos de uso

  • Revisión de literatura: subir papers y preguntar sobre hallazgos
  • Análisis de documentos: subir leyes, informes o actas y hacer preguntas específicas
  • Codificación de datos: subir un codebook y pedir que clasifique respuestas abiertas
  • Preparación de clases: subir lecturas y generar preguntas de discusión

Herramientas accesibles

  • NotebookLM (Google): gratuito, sube PDFs y hace preguntas
  • ChatGPT con archivos: sube documentos y analiza
  • Claude: acepta documentos largos (hasta 750.000 palabras)
  • Desde R: ellmer permite enviar texto como contexto vía API

Limitación: RAG reduce pero no elimina las alucinaciones. El modelo puede “ignorar” el contexto o interpretar mal los documentos.

LLMs para tareas de investigación

Anotación automática de textos

  • Ayer usamos diccionarios y LDA para clasificar textos. Los LLMs pueden hacerlo mucho mejor
  • Anotación con LLMs: darle al modelo un texto y pedirle que lo clasifique según un esquema
  • Ventajas frente a métodos clásicos:
    • Entiende contexto y significado
    • Captura negaciones: “no es bueno” = negativo
    • Maneja ironía y lenguaje complejo
    • Funciona en múltiples idiomas
  • Estudios recientes muestran que GPT-4 y Claude tienen precisión comparable a anotadores humanos en muchas tareas (Gilardi, Alizadeh y Kubli, 2023, publicado en PNAS)
  • Costo: centavos por texto vs. dólares por anotador humano

Ejemplo de prompt para anotación

System: Eres un analista político.
Clasifica textos según el tema
principal. Temas posibles:
economía, educación, seguridad,
salud, medio ambiente.

Responde SOLO con el tema,
sin explicación.

User: "La inflación sigue siendo
un problema grave que afecta a
las familias más vulnerables."

Respuesta: economía

Generación de datos sintéticos

  • Datos sintéticos: datos generados por un LLM que imitan datos reales
  • Casos de uso en investigación:
    • Pilotos: probar un análisis antes de recoger datos reales
    • Aumentación: expandir datasets pequeños
    • Privacidad: generar datos que preserven patrones sin exponer individuos
    • Entrenamiento: crear ejemplos para entrenar clasificadores
  • Precauciones:
    • Los datos sintéticos reflejan los sesgos del modelo que los genera
    • No reemplazan datos reales para conclusiones sustantivas
    • Deben ser validados contra datos reales cuando sea posible
  • Útiles como complemento, no como sustituto

Ejemplo de prompt

Genera 10 respuestas simuladas
a una encuesta sobre confianza
en instituciones en Uruguay.

Cada respuesta debe incluir:
- edad (18-80)
- género (M/F)
- confianza_gobierno (1-4)
- confianza_justicia (1-4)
- comentario (1 oración)

Formato: CSV con encabezados.
Las respuestas deben reflejar
la diversidad demográfica real.

El paquete ellmer

  • ellmer: paquete de R para interactuar con LLMs desde R
  • Desarrollado por el equipo de Posit (los creadores de RStudio)
  • Soporta múltiples proveedores: OpenAI, Anthropic (Claude), Google (Gemini), Ollama (modelos locales)
  • Interfaz simple y consistente:
    • chat(): crear una sesión de chat
    • $chat(): enviar un mensaje y recibir respuesta
    • $extract_data(): extraer datos estructurados
  • Se integra con el tidyverse
  • Permite automatizar tareas de análisis de texto a escala
  • Documentación: https://ellmer.tidyverse.org/

Ejemplo básico

library(ellmer)

# Crear un chat con Claude
chat <- chat_claude(
  system_prompt = "Eres un analista
  político experto en América Latina.
  Responde en español."
)

# Enviar un mensaje
chat$chat("¿Cuáles son los principales
  desafíos democráticos en la región?")

# El modelo responde con texto
# que podemos procesar en R

Se necesita una API key del proveedor (OpenAI, Anthropic, etc.)

Prompt engineering avanzado

El framework PTCF

  • PTCF: Persona, Tarea, Contexto, Formato
  • Un buen prompt incluye los cuatro elementos:

Persona: ¿quién es el modelo?

Eres un investigador experto en ciencia
política latinoamericana con 20 años
de experiencia en análisis de discurso.

Tarea: ¿qué debe hacer?

Clasifica el siguiente texto según
su orientación ideológica.

Contexto: información necesaria

El texto proviene de un discurso
presidencial de 2023 en Uruguay.
Las categorías son: izquierda,
centro-izquierda, centro,
centro-derecha, derecha.

Formato: estructura de salida

Responde en JSON:
{"categoria": "...",
 "confianza": 0.0-1.0,
 "justificacion": "..."}

Zero-shot, few-shot y chain-of-thought

Zero-shot: sin ejemplos

Clasifica el sentimiento:
"La economía ha crecido un 5%"

Funciona para tareas simples y comunes.

Few-shot: con ejemplos

Ejemplos:
- "La inflación es alta" → negativo
- "El empleo mejoró" → positivo
- "Los datos son de 2023" → neutro

Clasifica:
"La pobreza ha disminuido" →

Mejora la precisión en tareas específicas.

Chain-of-thought (CoT)

Clasifica y explica paso a paso:

Texto: "A pesar de la crisis, el
gobierno logró reducir la pobreza"

Análisis:
1. "crisis" = contexto negativo
2. "logró reducir pobreza" = resultado positivo
3. "a pesar de" = contraste
4. El resultado supera al contexto

Clasificación: POSITIVO

CoT mejora el razonamiento en tareas complejas (Wei et al., 2022).

Temperatura y otros parámetros

Temperatura (0.0 - 2.0)

  • 0.0: determinístico, siempre elige el token más probable
  • 0.3: poca variación, bueno para análisis
  • 0.7: balance, bueno para escritura
  • 1.0+: muy creativo, impredecible

Para investigación: temperatura ≤ 0.3

Otros parámetros:

  • max_tokens: límite de tokens en respuesta
  • top_p: nucleus sampling (alternativa a temperatura)
  • presence_penalty: penaliza repetición

Recomendaciones por tarea:

Tarea Temperatura
Clasificación 0.0 - 0.1
Extracción de datos 0.0 - 0.2
Resumen 0.2 - 0.4
Análisis abierto 0.3 - 0.5
Escritura creativa 0.7 - 1.0
Brainstorming 0.8 - 1.2


Para replicabilidad, usar temperatura 0 y fijar una semilla (seed) si el API lo permite.

Extracción de datos estructurados

  • Pedir respuestas en formato estructurado facilita el procesamiento
  • Formatos comunes:
    • JSON: el más versátil
    • CSV: para tablas simples
    • XML: para estructuras jerárquicas
  • Ejemplo de extracción:
Extrae las entidades del texto en JSON:
{"personas": [...],
 "organizaciones": [...],
 "lugares": [...],
 "fechas": [...]}

Texto: "El presidente Lacalle Pou
se reunió con el FMI en Montevideo
el 15 de marzo de 2024."

Respuesta esperada:

{
  "personas": ["Lacalle Pou"],
  "organizaciones": ["FMI"],
  "lugares": ["Montevideo"],
  "fechas": ["15 de marzo de 2024"]
}


Tip: Incluir un ejemplo de formato en el prompt reduce errores de estructura.

ellmer tiene $extract_data() que valida el JSON automáticamente.

Reproducibilidad y validación

El problema de la reproducibilidad

  • Los LLMs plantean desafíos de reproducibilidad:
    • Los modelos se actualizan (GPT-4 de marzo ≠ GPT-4 de diciembre)
    • Temperatura > 0 introduce aleatoriedad
    • Las APIs pueden cambiar comportamiento
    • Los modelos cerrados son cajas negras
  • Buenas prácticas:
    • Documentar: modelo, versión, fecha, parámetros
    • Guardar los prompts exactos usados
    • Temperatura 0 cuando sea posible
    • Guardar las respuestas crudas
    • Considerar modelos abiertos (Llama) para máxima reproducibilidad

Documentación mínima:

modelo: gpt-4o-mini
version: 2024-07-18
fecha_ejecucion: 2026-04-10
temperatura: 0
max_tokens: 500
system_prompt: |
  Eres un clasificador...
seed: 42  # si está disponible

# Guardar en archivo:
# - prompts usados
# - respuestas completas
# - código de procesamiento

Sin esta documentación, el análisis no es reproducible.

Validación de resultados

Estrategias de validación:

  1. Muestra manual: revisar humana de N casos
    • ¿El LLM clasificó correctamente?
    • ¿Qué errores comete?
  2. Gold standard: comparar con datos etiquetados por expertos
    • Calcular accuracy, precision, recall, F1
  3. Comparación con métodos clásicos
    • ¿LLM vs. diccionario? ¿LLM vs. LDA?
    • Los LLMs no siempre ganan
  4. Múltiples modelos
    • Comparar GPT vs. Claude vs. Llama
    • Si coinciden, más confianza

Ejemplo de validación:

Dataset: 100 textos políticos
Gold standard: etiquetados por
              2 investigadores

Resultados:
- LLM accuracy: 87%
- Diccionario: 72%
- LDA + supervisión: 79%
- Inter-rater (humanos): 91%

Conclusión: LLM cercano a humanos,
supera métodos clásicos

Siempre reportar métricas de validación en publicaciones.

LLMs vs. métodos clásicos

Criterio LLMs Clásicos (TF-IDF, LDA)
Precisión Alta (contexto, negaciones) Moderada
Velocidad Lento (API calls) Muy rápido
Costo USD 0.01-0.10 por texto Gratis
Reproducibilidad Difícil (modelo cambia) Alta
Transparencia Caja negra Interpretable
Escalabilidad Costoso a gran escala Escala bien
Idiomas Multilingüe nativo Requiere recursos por idioma


Recomendación: usar LLMs para tareas donde la precisión importa más que el costo. Para grandes volúmenes, considerar híbridos: LLM para etiquetar subset → entrenar clasificador clásico.

El paquete ellmer

¿Qué es ellmer?

  • ellmer: paquete de R para interactuar con LLMs
  • Desarrollado por el equipo de Posit (los creadores de RStudio)
  • Interfaz unificada para múltiples proveedores:
    • OpenAI: GPT-4, GPT-4o-mini
    • Anthropic: Claude 3.5
    • Google: Gemini
    • Ollama: modelos locales (Llama, Mistral)
  • Se integra con el tidyverse
  • Documentación: https://ellmer.tidyverse.org/

Instalación:

install.packages("ellmer")

# Configurar API key
Sys.setenv(OPENAI_API_KEY = "sk-...")
# o
Sys.setenv(ANTHROPIC_API_KEY = "sk-ant-...")

Funciones principales:

  • chat_openai(): crear chat con OpenAI
  • chat_claude(): crear chat con Claude
  • $chat(): enviar mensaje
  • $extract_data(): extraer datos estructurados

Ejemplo básico con ellmer

library(ellmer)
library(tidyverse)

# Crear un chat con Claude
chat <- chat_claude(
  model = "claude-sonnet-4-20250514",
  system_prompt = "Eres un analista político experto en América Latina.
                   Responde de forma concisa en español."
)

# Enviar un mensaje
respuesta <- chat$chat("¿Cuáles son los principales desafíos
                        democráticos en Uruguay actualmente?")

# Ver la respuesta
cat(respuesta)

# El chat mantiene el historial
chat$chat("¿Y cómo se compara con Chile?")

Tip: crear un chat nuevo para cada tarea independiente. El historial acumulado puede sesgar las respuestas.

Extracción de datos estructurados

# Definir el esquema esperado
library(ellmer)

# Chat para clasificación
clasificador <- chat_openai(
  model = "gpt-4o-mini",
  system_prompt = "Clasifica textos políticos.
                   Responde SOLO en JSON válido."
)

# Usar extract_data para obtener estructura
resultado <- clasificador$extract_data(
  "La inflación sigue siendo un problema grave.",
  type = type_object(
    tema = type_string("Tema principal: economia/educacion/salud/seguridad/ambiente"),
    sentimiento = type_string("positivo/negativo/neutro"),
    confianza = type_number("Confianza de 0 a 1")
  )
)

# Resultado es una lista de R
resultado$tema        # "economia"
resultado$sentimiento # "negativo"
resultado$confianza   # 0.9

Resumen de la sesión

Conceptos clave:

  • Alucinaciones: los LLMs inventan información
  • RAG: darle documentos reales al modelo
  • PTCF: Persona, Tarea, Contexto, Formato
  • Temperatura baja para investigación
  • Datos estructurados: JSON para facilitar procesamiento

Buenas prácticas:

  • Validar contra gold standard
  • Documentar modelo, parámetros, prompts
  • Comparar con métodos clásicos
  • Considerar costo y escalabilidad
  • ellmer para usar LLMs desde R


En los laboratorios pondremos todo esto en práctica.

Próximos pasos

  • Laboratorio 4.3: Primeros pasos con ellmer
    • Configuración y chat básico
    • Clasificación de textos
    • Extracción estructurada
  • Laboratorio 4.4: Aplicaciones avanzadas
    • Análisis de sentimiento
    • Generación de datos sintéticos
    • Auditoría de sesgos
    • Comparación con métodos clásicos

Nos vemos en el laboratorio.

Nos vemos en el laboratorio