IA para Científicos Sociales

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

Danilo Freire

Department of Data and Decision Sciences
Emory University

LLMs como herramientas de investigación

Repaso de la sesión 4.1

El mecanismo (lo que vimos)

  • Un LLM predice el próximo token, no la verdad
  • Procesa texto como subpalabras (tokens BPE)
  • Usa atención para ponderar qué contexto importa
  • Los embeddings son contextuales: la misma palabra cambia de vector según el entorno
  • La escala (parámetros, datos, cómputo) produce emergencia: capacidades nuevas que aparecen solo a partir de cierto tamaño

La consecuencia (donde quedamos)

  • El modelo optimiza \(P(\text{token} \mid \text{contexto})\), no \(P(\text{verdad})\)
  • Por eso alucina: genera contenido fluido pero falso
  • Casos teaser: el abogado de Nueva York con seis casos fantasma y otros ejemplos de alucinación

Nota

Ahora: lo que el mecanismo nos pide. Aprender cuatro defensas para usar LLMs con responsabilidad en investigación

Agenda de la sesión

El problema y las defensas

  • El problema central + caso completo del abogado
  • Defensa 1: buenos prompts
  • Defensa 2: salida estructurada
  • Defensa 3: grounding con RAG
  • Defensa 4: validación y reproducibilidad

Aplicación y herramientas

  • Aplicaciones en investigación social
  • LLMs vs métodos clásicos
  • Cómo correr LLMs desde R:
    • OpenRouter (API agregadora, tier gratuito)
    • Ollama (modelos locales)
    • El paquete ellmer

El problema central

LLMs: potentes pero no confiables sin más

  • Los LLMs son excelentes generadores de texto plausible
  • También son pésimas fuentes de verdad sin verificación
  • En investigación social esto importa especialmente:
    • Trabajamos con hechos (eventos, fechas, citas, estadísticas)
    • Necesitamos reproducibilidad para que otros validen
    • Nuestros lectores confían en lo que publicamos
  • Un LLM que inventa un nombre, una fecha o una cita no es solo molesto: arruina la investigación

El problema:

Por un lado, los LLMs nos permiten hacer en minutos lo que antes llevaba semanas (anotar miles de textos, extraer entidades, sintetizar literatura)

Por otro, confiar en su salida sin defensas produce errores que se ven exactamente igual que los aciertos

Esta clase es sobre cómo aprovechar lo primero sin caer en lo segundo 😅

Caso completo: el abogado y los seis casos fantasma

  • Mata vs. Avianca Inc., Tribunal del Distrito Sur de Nueva York, 2023
  • El demandante (Roberto Mata) alegaba lesiones por un carrito de servicio en un vuelo
  • Sus abogados pidieron a ChatGPT precedentes legales para apoyar el caso
  • El modelo generó seis casos completos:
    • Nombres de partes (Varghese v. China Southern Airlines)
    • Tribunales y jurisdicciones
    • Números de expediente
    • Citas con páginas exactas
    • Argumentos detallados
  • Los seis eran completamente ficticios
  • Los abogados los presentaron sin verificar

Nota

Cuando el abogado le preguntó a ChatGPT si los casos eran reales, el modelo le respondió que sí. Una alucinación encubre a otra.

Tipos de alucinación

  • Fabricación: el modelo inventa datos, nombres, fechas o eventos que no existen
  • Citas falsas: papers académicos, libros, números de expediente con apariencia real pero inventados
  • Sicofancia (sycophancy): el modelo acuerda con la premisa del usuario aunque sea falsa (“Sí, claro, ese estudio existe…”)
  • Atribuciones erróneas: asigna una frase a un autor que nunca la dijo
  • Confabulación silenciosa: cuando no sabe algo, llena el vacío con texto plausible en lugar de admitir ignorancia

Nota

Las cuatro defensas que veremos atacan distintas alucinaciones. Ninguna defensa por sí sola las elimina todas. Es un problema estructural del mecanismo, no un bug

Una cita falsa

Bertoni, L. y Salgado, M. (2021). “Participación electoral y transferencias condicionadas en el Cono Sur”. Latin American Politics and Society, 63(2), 88-114. doi:10.1017/lap.2021.14

  • El formato es impecable: revista real, volumen, páginas y un DOI con estructura válida
  • Los autores, el artículo y el DOI no existen
  • Verificarla toma 30 segundos: peguen el DOI en doi.org o el título entre comillas en Google Scholar

Para investigación, “bajo” no es “aceptable”: una cita inventada en un paper es una cita inventada

Defensa 1: Buenos prompts

Anatomía de un buen prompt: PTCF

  • Un buen prompt reduce la varianza de la respuesta hacia lo que quieren. Mismo modelo y mismo input: distintos prompts dan resultados muy distintos
  • Es prompt engineering. Sus cuatro componentes son el framework PTCF:
    • Persona: ¿quién es el modelo? (“Sos un analista político…”)
    • Tarea: ¿qué tiene que hacer? (“Clasificá la orientación ideológica…”)
    • Contexto: lo que necesita saber (categorías, origen del texto)
    • Formato: estructura de salida (JSON con campos definidos)
  • No siempre hacen falta los cuatro: usen los que apliquen
  • Fuente: Google (2024)

Mala práctica común

Prompt: “Analiza este texto.”

Problema: ¿analizar qué? ¿sentimiento? ¿tema? El modelo elige por ustedes

Buena práctica

Prompt: “Sos un analista político con experiencia en discurso latinoamericano. Clasificá el sentimiento del siguiente texto como positivo, negativo o neutro. Responde en JSON con campos sentimiento y justificacion.”

Mismo modelo, output mucho más útil

System prompts: el rol persistente

  • El system prompt se envía antes de cualquier mensaje del usuario
  • Establece reglas que valen para toda la conversación: rol, restricciones, formato
  • Es la forma más efectiva de obtener comportamiento consistente cuando procesan muchos documentos

Ejemplo para anotación sistemática

Sos un asistente de codificación para
investigación en ciencias sociales en
América Latina.

Reglas:
- Respondé siempre en español
- Si no estás seguro, decilo explícitamente
- No inventes datos ni estadísticas
- No agregues comentarios fuera del JSON
- Formato: JSON estricto, sin texto antes o después

System prompts

Fuente: GitHub - System Prompts and Models of AI Tools

Nota

El system prompt es invisible para el modelo en el sentido de que no lo cita, pero condiciona todas las respuestas. Es la forma más limpia de fijar el comportamiento

Zero-shot vs few-shot

Zero-shot: sin ejemplos

Clasificá el sentimiento de
este texto como positivo,
negativo o neutro:

"La economía creció un 5%
pero el desempleo subió."

Funciona para tareas simples y bien definidas. Lo que vimos en la Sesión 4.1 como emergencia hace esto posible

Bueno para empezar y baseline

Nota

Pista: few-shot funciona porque el modelo aprende del patrón del prompt mismo. Es la capacidad emergente que vimos en la sesión anterior (in-context learning)

Few-shot: con ejemplos

Ejemplos:
- "La inflación es alta" → negativo
- "El empleo mejoró" → positivo
- "Los datos son de 2023" → neutro
- "Cayó la pobreza pero subió
  la deuda" → mixto

Clasificá:
"El crecimiento fue moderado" →

Mejora la precisión al mostrar el formato y los matices (Brown et al., 2020; Min et al., 2022)

Tres a cinco ejemplos suelen ser óptimos

Ojo: ejemplos mal elegidos o sesgados pueden empeorar el resultado. La calidad importa más que la cantidad

Chain-of-thought: pensar paso a paso

La técnica

Pedir al modelo que razone explícitamente antes de responder

Antes de clasificar, razoná paso a paso:

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

Razonamiento:
1. "crisis" es contexto negativo
2. "logró reducir la pobreza" es resultado positivo
3. "a pesar de" indica contraste
4. El resultado supera al contexto

Clasificación: POSITIVO

Modelos de razonamiento (o-series, DeepSeek R1, extended thinking) ya hacen CoT internamente: a veces conviene elegir uno en vez de escribir los pasos a mano

Por qué funciona

  • El modelo distribuye el “esfuerzo” en varios tokens
  • Captura mejor negaciones, ironías y contrastes
  • Mejora notablemente las tareas de razonamiento (Wei et al., 2022)

Cuándo usarlo

  • Razonamiento numérico
  • Clasificación con varios matices
  • Cualquier tarea donde “la primera reacción” del modelo no basta

Costo: respuestas más largas → más tokens → más caro. Vale la pena para tareas complejas

Temperatura, creatividad y consistencia

  • La temperatura controla qué tanto el modelo se aparta del token más probable (Holtzman et al., 2020; Renze y Guven, 2024)
  • Va típicamente de 0 a 1
  • Para investigación, casi siempre temperatura baja:
    • Análisis y clasificación: 0,0 - 0,2
    • Resumen factual: 0,2 - 0,4
    • Análisis abierto con creatividad: 0,3 - 0,5
    • Escritura creativa: 0,7 - 1,0
  • Temperatura 0 no garantiza determinismo absoluto en APIs comerciales (cambios entre versiones, sampling en GPU), pero se acerca
  • Para máxima reproducibilidad: usar modelos locales con seed fijo

Recomendaciones rápidas

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,0

Para investigación reproducible: temperatura 0 siempre que se pueda

Defensa 2: Salida estructurada

Pedir JSON

  • El problema de la salida en prosa: imposible de parsear consistentemente
    • El modelo a veces empieza con “Claro, aquí está mi análisis…”
    • A veces incluye comentarios fuera del JSON
    • A veces cambia el orden de las claves
  • La solución: pedir una estructura fija, idealmente JSON
  • JSON es legible para humanos y parseable por R con jsonlite

Nota

Incluir un ejemplo de la estructura esperada en el prompt reduce drásticamente los errores de formato

Ejemplo: extracción de entidades

Extraé 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"]
}

Tipos estrictos: ir más allá de “JSON, por favor”

  • Pedir “JSON” en texto plano no garantiza que el modelo lo respete
  • A veces lo viola: agrega comas finales, mezcla mayúsculas, cambia tipos
  • Mejor: usar APIs que fuerzan un tipo durante la generación
    • Structured Output de OpenAI: garantiza que la salida cumpla un esquema JSON
    • Tool calling de Anthropic: el modelo “llama” a funciones con tipos
    • Tipos de ellmer: el paquete R abstrae estas funcionalidades
  • Ventaja: su código R recibe una estructura validada, no texto a parsear
  • Lo aplicaremos en los labs (con ellmer y quallmer)

Adelanto: tipos en ellmer

library(ellmer)

clasificador <- chat_openrouter(...)

clasificador$chat_structured(
  "La inflación es preocupante.",
  type = type_object(
    sentimiento = type_string(
      "positivo/negativo/neutro"
    ),
    confianza = type_number(
      "Confianza de 0 a 1"
    )
  )
)

Resultado: una lista R lista para usar, sin parsear texto. Más información en https://ellmer.tidyverse.org/articles/structured-data.html

Defensa 3: Grounding con RAG

El modelo no sabe lo que no entrenó

  • Los LLMs tienen conocimiento congelado en su fecha de corte de entrenamiento
  • No saben:
    • Eventos posteriores al entrenamiento
    • Sus documentos privados o internos
    • Su corpus específico de investigación
  • Pero el modelo igual intenta responder, y ahí aparece la alucinación

Ejemplo típico

Preguntar a un LLM sobre un artículo académico que el usuario tiene como PDF:

  • El modelo no lo conoce
  • Pero puede inventar citas, autores y conclusiones

La solución

  • En lugar de confiar en lo que el modelo “recuerda”, le damos los documentos relevantes en el prompt y le pedimos que base la respuesta en ellos
  • Eso se llama RAG: Retrieval-Augmented Generation
  • Combina la fluidez del LLM con la precisión de sus datos

RAG: buscar primero, generar después

  • RAG (Lewis et al., 2020): pipeline en cuatro pasos
    1. La usuaria hace una pregunta
    2. El sistema busca los documentos relevantes en una base de conocimiento (usando embeddings)
    3. Los documentos se incluyen en el contexto del prompt
    4. El LLM genera una respuesta basada en esos documentos específicos
  • La búsqueda usa los mismos embeddings que vimos en la Sesión 4.1
  • Reduce alucinaciones porque el modelo tiene texto real para apoyarse
  • Más fácil de actualizar: cambiar los documentos no requiere reentrenar
  • Ya lo usan: ChatGPT con archivos, NotebookLM de Google, Perplexity, Claude con PDFs

Pipeline de RAG

Cuándo (y cuándo no) usar RAG

Sí usar RAG cuando

  • Su corpus es grande (cientos o miles de documentos)
  • Necesitan actualizar la base de conocimiento sin reentrenar
  • Necesitan trazabilidad: ¿de qué documento salió esta afirmación?
  • Trabajan con dominio muy específico (papers, leyes, transcripciones)
  • Quieren que el modelo cite fuentes reales

No necesitás RAG cuando

  • El documento entra en el prompt directamente (ventanas de 200K+ tokens permiten artículos completos)
  • La tarea es de razonamiento general, no de recuperación factual
  • La tarea es creativa (escribir, brainstormear)
  • No tienen base de conocimiento estable: quieren que el modelo use su entrenamiento

Nota

A veces “RAG” es exagerado. Si su PDF entra en el contexto, pueden pegarlo directamente.

Defensa 4: Validación y reproducibilidad

Validación: comparar con gold standard

  • Antes de usar un LLM para anotar todo su corpus, valídenlo en una muestra
  • El procedimiento estándar:
    1. Anoten a mano 50 a 200 documentos
    2. Pasen los mismos documentos por el LLM
    3. Compárenlos con métricas de clasificación: precisión y recall (día 2), más F1 y kappa de Cohen (las veremos en el lab 8)
    4. Si la calidad es aceptable, escalen al corpus completo
  • Si dos anotadores humanos hacen la mitad cada uno, pueden calcular acuerdo entre humanos y comparar con el acuerdo LLM-humano

¿Qué es “aceptable”?

Depende de la tarea. Algunos benchmarks:

  • LLM kappa ≥ 0,7 vs gold standard o cercano al acuerdo interhumano

Ejemplo de tabla de validación

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

         | Accuracy | F1
---------|----------|------
LLM      | 0,87     | 0,85
Dicción. | 0,72     | 0,68
LDA+sup. | 0,79     | 0,76
Humano   | 0,91     | 0,89

Conclusión: LLM cerca de humanos,
supera métodos clásicos.

Sin esta tabla, es difícil defender el uso del LLM en una publicación

Reproducibilidad: documentar todo

  • Los LLMs son un desafío para la reproducibilidad
  • Razones:
    • Los modelos se actualizan (GPT-4 de marzo ≠ GPT-4 de diciembre)
    • Las APIs pueden cambiar comportamiento silenciosamente
    • Temperatura > 0 introduce aleatoriedad
    • Los modelos cerrados son cajas negras
  • Buenas prácticas:
    • Documentar modelo exacto, versión, fecha
    • Guardar los prompts completos usados
    • Usar temperatura 0 cuando se pueda
    • Guardar las respuestas crudas, no solo lo procesado
    • Para máxima reproducibilidad: modelo local con versión fija

Documentación mínima

modelo: anthropic/claude-opus-4-8
version: "2026-04-01"
provider: openrouter
fecha_ejecucion: 2026-04-10
temperatura: 0
max_tokens: 500
system_prompt: |
  Sos un clasificador...
seed: 42  # si la API lo permite

archivos_guardados:
  - prompts_usados.json
  - respuestas_crudas.json
  - codigo_procesamiento.R

Sin esto, el análisis no es replicable

Aplicaciones en investigación

Anotación automática de texto

  • El uso más común en ciencias sociales: clasificar texto a escala
  • Ayer usamos diccionarios, TF-IDF y LDA. Los LLMs hacen lo mismo con mejor calidad en muchas tareas:
    • Capturan contexto y significado, no solo palabras
    • Manejan negaciones (“no es bueno” = negativo)
    • Manejan ironía y sarcasmo mejor que diccionarios
    • Funcionan multilingüe sin reentrenar
  • Evidencia: Gilardi, Alizadeh y Kubli (2023) muestran que ChatGPT supera a anotadores de crowdsourcing (MTurk) en varias tareas de clasificación de tweets
  • Costo: centavos por texto vs. dólares por anotador humano

Ejemplo de prompt completo

System: Sos un analista político. Clasificá
textos según el tema principal. Temas
posibles: economia, educacion, seguridad,
salud, medio ambiente.

Respondé 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: economia

En un lab veremos cómo procesar mil textos así, con ellmer y quallmer

Generación de datos sintéticos

  • Datos sintéticos: datos generados por un LLM que imitan datos reales
  • Casos legítimos en investigación:
    • Pilotos: probar un análisis antes de recoger datos reales
    • Aumentación: expandir datasets pequeños cuando es difícil obtener más datos
    • Privacidad: generar datos que preserven patrones sin exponer individuos
    • Entrenamiento: crear ejemplos para entrenar clasificadores
  • Precauciones serias:
    • 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 se pueda

Ejemplo de prompt

Generá 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.

Útiles como complemento, no como sustituto

LLMs vs métodos clásicos

Criterio Diccionarios TF-IDF + clasificador LLM (zero-shot) LLM (few-shot)
Precisión Baja Moderada Alta Muy alta
Velocidad Muy rápida Rápida Lenta Lenta
Costo Gratis Gratis USD/1000 textos USD/1000 textos
Datos etiquetados No Sí (cientos) No 3-10 ejemplos
Reproducibilidad Alta Alta Difícil Difícil
Transparencia Total Moderada Caja negra Caja negra
Idiomas Uno por uno Uno por uno Multilingüe Multilingüe
Negación/ironía Pobre Pobre Buena Muy buena


Recomendación: para volúmenes grandes y tareas comunes, considerar híbridos. Usar el LLM para etiquetar un subconjunto y entrenar un clasificador clásico con esas etiquetas. Mejor calidad que diccionarios, mucho más barato que LLM en todo el corpus

Cómo correr todo esto desde R

Tres alternativas para acceder a LLMs

Opción Ventajas Limitaciones Cuándo usarla
OpenRouter Una API key para docenas de modelos; tier gratuito; sin tarjeta para empezar Rate limits en modelos :free; depende de un agregador externo Empezar, prototipos, volúmenes pequeños
Ollama (local) Cero costo; los datos no salen de su máquina; versión exacta queda fija Necesita 8+ GB de RAM; modelos chicos son menos potentes Privacidad, reproducibilidad, corpus grande
APIs comerciales (OpenAI, Anthropic) Mejor calidad disponible; respuestas rápidas Tarjeta de crédito; pago por uso; caja negra Cuando la institución cubre el costo o el proyecto lo justifica


Con ellmer pueden cambiar de proveedor sin reescribir su código. En los labs lo vemos paso a paso

ellmer: interfaz unificada para R

  • ellmer (ellmer.tidyverse.org) es el paquete oficial de Posit para hablar con LLMs desde R
  • Una sola interfaz para todos los proveedores:
    • chat_openrouter(), chat_ollama(), chat_openai(), chat_anthropic(), chat_google_gemini()
  • Funciones principales:
    • chat$chat(): enviar un mensaje
    • chat$chat_structured(): extraer datos con tipos validados (las defensas 1 y 2 en una sola llamada)
    • chat$tokens(): contar tokens usados
  • Trabaja bien con purrr::map() para procesar muchos textos en pipeline

Más detalles en los Laboratorios 7 y 8

El patrón mínimo

library(ellmer)

chat <- chat_openrouter(
  model = "nvidia/nemotron-3-super-120b-a12b:free",
  system_prompt = "Sos un analista político..."
)

# Texto libre
chat$chat("Resumí este texto...")

# Extracción tipada (defensa 2)
chat$chat_structured(
  "La economía está en crisis.",
  type = type_object(
    tema        = type_string(),
    sentimiento = type_string(),
    confianza   = type_number()
  )
)

Cambiar chat_openrouter por chat_ollama y el resto del código sigue igual

Anticipo del día 5: instalar Ollama

  • Mañana corremos un LLM en su propia computadora con Ollama, sin API ni tarjeta
  • Tres pasos, una sola vez:
    1. Descargar Ollama: ollama.com/download (Windows, macOS, Linux)
    2. Bajar el modelo del curso:
    ollama pull granite4.1:3b
    1. Probarlo en la terminal:
    ollama run granite4.1:3b
  • granite4.1:3b ocupa ~2,1 GB y corre con 8 GB de RAM

Háganlo antes de la clase

La descarga puede tardar varios minutos según la conexión. Si la dejan para el laboratorio, pierden tiempo de práctica

Nota

Pista: granite4.1:3b es el modelo más chico de su familia. Si su laptop no puede correrlo, no hay problema: el laboratorio también puede seguirse con OpenRouter, como en los labs 7 y 8

Lo mismo que hoy hacemos con ellmer en la nube, mañana lo haremos en local

Resumen: las cuatro defensas

Lo que aprendimos hoy

  • Defensa 1: buenos prompts (PTCF, system prompts, few-shot, CoT, temperatura baja)
  • Defensa 2: salida estructurada (JSON con tipos estrictos)
  • Defensa 3: grounding con RAG (cuando su corpus no entra en el contexto)
  • Defensa 4: validación contra gold standard + reproducibilidad

Herramientas

  • OpenRouter para empezar sin tarjeta
  • Ollama para modelos locales y privacidad
  • ellmer como interfaz unificada

Regla de oro

Nota

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


Ninguna defensa por sí sola es suficiente. Las cuatro juntas hacen el trabajo más confiable

Próximos pasos

  • Laboratorio 7: primeros pasos con ellmer
    • Configurar ellmer con OpenRouter
    • Chat, system prompts y clasificación (zero-shot y few-shot)
    • Comparación con LDA del día 3
  • Laboratorio 8: codificación cualitativa con quallmer
    • Definir un codebook y codificar textos a escala
    • Validar contra etiquetas humanas (accuracy, kappa)
    • Comparar modelos y auditar sesgos


Mañana cerramos con modelos locales, ética y regulación

Nos vemos en el laboratorio 🤓