Transformers » JSON Lines
JSON Lines

Un JSONL (o JSON Lines) es un formato de archivo en el que cada línea es un objeto JSON independiente. Se usa comúnmente para almacenar y procesar grandes cantidades de datos de forma eficiente, especialmente en tareas de machine learning o procesamiento de lenguaje natural.

📄 Ejemplo de archivo .jsonl

{"texto": "Hola", "traduccion": "Hello"}

{"texto": "¿Cómo estás?", "traduccion": "How are you?"}

{"texto": "Buenos días", "traduccion": "Good morning"}

🔍 ¿En qué se diferencia de un .json?

  1. JSON estándar: es todo un bloque de datos, por ejemplo un array con muchos objetos.
    [

    {"a": "1"}

    {"a": "2"}

    ]
  2. JSONL: es línea por línea, más fácil de leer en streaming o línea por línea.

    {"a": "1"}

    {"a": "2"}

✅ ¿Cuándo es útil usar JSONL?

  1. Datos grandes: JSONL permite procesar línea por línea sin tener que cargar todo el archivo en memoria.
  2. Entrenamiento con transformers o modelos tipo GPT: Frameworks como OpenAI, Hugging Face, etc., suelen aceptar JSONL para datasets personalizados.
  3. Etiquetado supervisado: Es cómodo para tareas como clasificación, traducción, resumen, etc.
  4. Facilita debugging: Podés inspeccionar fácilmente cada ejemplo individual.

❌ ¿Cuándo NO es necesario?

  1. Si estás trabajando con imágenes, arrays NumPy o datos tabulares, quizás prefieras otros formatos como:
    1. .csv (para datos tabulares)
    2. .npy o .npz (para arrays NumPy)
    3. .tfrecord (en TensorFlow)
    4. Carpetas con imágenes y etiquetas en .json por separado

📦 ¿Dónde se usa?

  1. Entrenamiento de modelos como los de OpenAI, Hugging Face, etc.
  2. Datasets para tareas como traducción, clasificación, preguntas y respuestas, generación de texto, etc.
  3. Logs estructurados.

🤔 ¿Que pasa si no lo uso?

Si por ejemplo usas un .json con un array gigante:

[

{objeto 1}

{objeto 2}

{objeto 3}

...

{objeto N}

]

Para leer este archivo, la mayoría de las bibliotecas lo cargan entero en memoria. Si tenés, por ejemplo, 10 GB de datos, eso puede consumir toda la RAM y hacer que tu PC se ponga lenta o que se cuelgue.

🔨 ¿Cómo funciona?

Como cada línea es un JSON independiente:

{"input": ..., "output": ...}

{"input": ..., "output": ...}

{"input": ..., "output": ...}

Podés leer el archivo línea por línea, y así procesar solo un lote a la vez sin necesidad de cargar todo el archivo en memoria. A este proceso tambien se lo llama Streaming de Datos.

🧐 Ejemplo

Si quieres entrenar un generador de texto y tienes un .jsonl con 1 millón de ejemplos donde cada ejemplo tiene el formato {"input": ..., "output": ...}, con streaming de datos, podés ir leyendo de a lotes. Simplemente tomas un lote de N ejemplos (en este caso son 32), lo procesas y repites el proceso hasta haber procesado todos los ejemplos.

Conclusiones

JSON Lines es un formato muy práctico, eficiente y flexible para trabajar con grandes volúmenes de registros independientes. No reemplaza a un JSON tradicional cuando se necesita representar estructuras de datos completas en un solo documento, pero es ideal para tareas de procesamiento incremental, streaming y Big Data.

Hemos llegado al final de este artículo. Espero que te halla resultado útil y que hallas disfrutado leyéndolo tanto como yo disfrute escribiéndolo 😁.