region:us
---
dataset_info:
  features:
  - name: text
    dtype: 'null'
  - name: inputs
    struct:
    - name: 1-instruction
      dtype: string
    - name: 2-input
      dtype: string
    - name: 3-output
      dtype: string
  - name: prediction
    list:
    - name: label
      dtype: string
    - name: score
      dtype: float64
  - name: prediction_agent
    dtype: 'null'
  - name: annotation
    dtype: 'null'
  - name: annotation_agent
    dtype: 'null'
  - name: vectors
    struct:
    - name: input
      sequence: float64
    - name: instruction
      sequence: float64
    - name: output
      sequence: float64
  - name: multi_label
    dtype: bool
  - name: explanation
    dtype: 'null'
  - name: id
    dtype: string
  - name: metadata
    struct:
    - name: tr-flag-1-instruction
      dtype: bool
    - name: tr-flag-2-input
      dtype: bool
    - name: tr-flag-3-output
      dtype: bool
  - name: status
    dtype: string
  - name: event_timestamp
    dtype: timestamp[us]
  - name: metrics
    dtype: 'null'
  splits:
  - name: train
    num_bytes: 985217294
    num_examples: 51942
  download_size: 651888026
  dataset_size: 985217294
---
# Dataset Card for "somos-clean-alpaca-es"

Este conjunto de datos es una traducción del dataset Clean Alpaca al Español y sirve como referencia para el esfuerzo colaborativo de limpieza y mejora del dataset durante el [Hackathon Somos NLP 2023](https://somosnlp.org/hackathon). *Nota: No es necesario participar en el hackathon para contribuir a esta tarea.*

Cuantas más personas y equipos participen mayor será la calidad del dataset final y por lo tanto también del LLM que entrenemos, ¡únete!

Te explicamos como participar:

> **[Video explicativo (10 mins) | Daniel @Argilla](https://www.youtube.com/watch?v=Q-2qsvOEgnA)**

> **[Artículo "Ayuda a mejorar los LLM de AI en español en 7 sencillos pasos" | Carlos @Platzi](https://platzi.com/blog/ayuda-a-mejorar-los-llm-en-espanol-en-7-sencillos-pasos/)**

Estamos a tu disponibilidad en el **[canal #alpaca-es](https://discord.com/invite/my8w7JUxZR)** del servidor de Discord de Somos NLP.


## 🔥 El reto

A continuación se describen los pasos y normas para participar:

1. Se debe utilizar este conjunto de datos como punto de partida y mantener tanto los `ids` como la estructura. Esto es así para poder realizar tareas posteriores de validación cruzada y mejoras programáticas del dataset final.
2. Se trata de un dataset en formato compatible con Argilla. Cada equipo o persona que quiera participar, puede trabajar con su propia instancia de Argilla. Una forma fácil de empezar es duplicar el Space que hemos creado para el reto. En la sección de abajo encontrarás como hacerlo.
3. Argilla se puede utilizar para validar y etiquetar manualmente y usando búsquedas y similitud semántica desde la UI. Para ello se pondrán ejemplos de uso del lenguaje de búsqueda en esta página, pero se recomienda consultar [la guía de uso](https://docs.argilla.io/en/latest/guides/query_datasets.html).
4. La validación humana es necesaria para garantizar la calidad final pero se pueden realizar también limpiezas programáticas para aquellos casos en los que sea más eficiente. En cualquier caso, para el éxito del experimento se deberán utilizar las etiquetas propuestas, aunque se modifique programáticamente el dataset.
5. No se deben borrar registros del dataset, si un registro es inválido se deberá indicar en la etiqueta (por ejemplo `BAD INPUT`) o con el status `discard`.
6. Antes de empezar a anotar, es necesario leer la [guía de anotación](guia-de-anotacion.md) al completo.

El resultado del reto será un dataset por persona o equipo que contenga el dataset original etiquetado parcialmente, y opcionalmente otras versiones/subconjuntos del dataset con los datos corregidos, mejorados o aumentados. En estos casos es conveniente mantener un dataset a parte con los ids originales.

Al finalizar combinaremos todas las versiones etiquetadas para conseguir un dataset de calidad.

## ✅ Cómo empezar a etiquetar

Para etiquetar el dataset tienes que:

1. Lanzar tu Argilla Space siguiendo [este link](https://huggingface.co/spaces/somosnlp/somos-alpaca-es?duplicate=true). Esto te guiará para crear una instancia de Argilla en el Hub que cargará automaticamente el dataset (ver captura de pantalla abajo). **IMPORTANTE**: que el Space sea Public para poder leer los datos etiquetados desde Python. El proceso de carga puede tardar hasta 10 minutos, puedes consultar los logs para comprobar que se están cargando los datos.
2. **IMPORTANTE:** Si se quiere sincronizar los datos validados con el Hub para no perder las anotaciones si se reinicia el Space, hay que configurar dos secrets (en Settings del Space): `HF_TOKEN` que es [vuestro token de escritura](https://huggingface.co/settings/tokens), y `HUB_DATASET_NAME` que es el dataset donde queréis guardarlo, importante incluir la organizacion o persona seguido de un / y el nombre del dataset. Por ejemplo `juanmartinez/somos-clean-alpaca-es-validations` o `miempresa/somos-clean-alpaca-es-validations`.
3. El usuario y contraseña es `argilla` / `1234`. Mientras se carga tu Argilla Space con el dataset puedes aprovechar para leer las guías de anotación. 
4. Aunque en principio se va sincronizar el dataset anotado, recomendamos que abras Colab o un notebook en local y que guardes el dataset periodicamente en un dataset del Hub (puede ser en tu espacio personal o tu organización). Para ello recomendamos leer el apartado como guardar el dataset en el Hub.

Se recomienda mirar el log del Space para ver si hay errores a la hora de configurar los Secret `HF_TOKEN` y `HUB_DATASET_NAME`.
![Duplicar Space](duplicar-space.png)

## 🚀 Desplegar Argilla localmente o en un servidor cloud
Para equipos que tengan el tiempo y quieran desplegar una versión con más capacidad de computación y estabilidad que Spaces, [aquí hay una guía explicativa](https://docs.argilla.io/en/latest/getting_started/installation/deployments/deployments.html).
Una vez instalada, se deben subir los datos con [este notebook](https://colab.research.google.com/drive/1KyikSFeJe6_lQNs-9cHveIOGM99ENha9#scrollTo=jbfdRoRVXTW6).

## ✍️ Guías de anotación

Antes de empezar a anotar, es necesario leer la [guía de anotación](guia-de-anotacion.md) al completo.

## 💾 IMPORTANTE: Guardar el dataset en el Hub periodicamente

Aunque se ha configurado el Space para que se sincronice con un dataset del Hub a vuestra elección, para tener más seguridad se recomienda guardar una copia del dataset en el Hub ejecutando el siguiente código. Es necesario hacer login con Python usando `from huggingface_hub import notebook_login` o añadir el token directamente al hacer el push_to_hub:

```python
import argilla as rg

# usar rg.init() para definir la API_URL (la direct URL de tu Space de Argilla) y API_KEY
rg.init(
    api_url="https://tu-space-de-argilla.hf.space",
    api_key="team.apikey"
)

# Leer dataset con validaciones de Argilla
rg_dataset = rg.load("somos-clean-alpaca-es-team", query="status:Validated")

# Transformar a formato datasets
dataset = rg_dataset.to_datasets()

# Publicar en el Hub, puedes usar cualquier nombre de dataset que elijas
dataset.push_to_hub("somos-clean-alpaca-es", token="TU TOKEN WRITE EN SETTINGS HUB. NO NECESARIO SI HAS HECHO LOGIN") 
```

Una vez hecho esto se puede recuperar el dataset y volver a cargar en Argilla con el notebook de "Cómo cargar el dataset en Argilla".

## 🔎 Ejemplos de consultas y trucos para etiquetar

Se recomienda comenzar explorando y etiquetando el dataset de manera secuencial para entender la estructura e ir identificando patrones.

Una vez hecho esto se recomienda combinarlo con las siguientes herramientas:

### Utilizar el buscador
Tanto con palabras clave, como con expresiones regulares, y wildcards y expresiones booleanas, ver [la guía de uso](https://docs.argilla.io/en/latest/guides/query_datasets.html).

Un aspecto interesante es la capacidad de buscar solo en determinados campos. Para ello, hay que utilizar la siguiente sintaxis `inputs.nombre_del_campo:"consulta"`:

Por ejemplo: `inputs.1-instruction:"Crear una página"` encontraría todos aquellos registros con este texto en la instrucción.

Además, esto se puede combinar con expresiones booleanas para buscar en varios campos: `inputs.1-instruction:"Crear una página" AND inputs.3-output:"html"`

Otro ejemplos:

Encontrar frases de instrucción en Inglés: `inputs.1-instruction:Edit the following sentence` encuentra más de 100 instrucciones inválidas.

### Find similar
Cuando encontramos patrones interesantes o erróneos en un registro y campo, podemos usar el botón find similar para encontrar ejemplos similares gracias al uso de similarity search usando embeddings.

### Etiquetado en lote (bulk)
Si encontramos un patrón muy claro, podemos revisar los ejemplos más rápido y anotarlos en bloque usando la barra superior, debajo del buscador. Si hay mucho ejemplos se puede aumentar el número de registros por página. Se recomienda en cualquier caso revisar los ejemplos.

## ✨ Hackathon Somos NLP 2023
- No es necesario participar en el hackathon para unirse a esta tarea colaborativa.
- Los equipos que participen en el hackathon pueden utilizar su versión etiquetada de este dataset para su proyecto.
- Las versiones etiquetadas de este dataset serán elegibles para ganar la mención de honor al mejor dataset etiquetado.

## 🙌 Agradecimientos
Muchas gracias
a `versae` del proyecto BERTIN por la traducción del dataset,
a `dvilasuero` y `nataliaElv` de Argilla por crear la documentación y resolver todas las dudas de las personas participantes,
a `alarcon7a` de Platzi por escribir el artículo de blog, y
a `mariagrandury` de Somos NLP por coordinar e integrar el reto en el hackathon.

Al combinar las versiones y crear el dataset final mencionaremos a todas las personas que hayan participado en este esfuerzo 🤗  