Skip to content

sentiment analysis (análisis de sentimiento)

Open In Colab

Pipeline de Módulo Único: sentiment (Análisis de Sentimiento)

🇺🇸 English version of this document

Este documento presenta una guía de cómo ensamblar y consumir un pipeline de módulo único que solo incluye un módulo sentiment (análisis de sentimiento). Se divide en las siguientes secciones:

Monta tu Pipeline

Primero crea un pipeline de módulo único con un módulo sentiment (análisis de sentimiento).

Usa el método create_pipeline para esto, incluyendo solamente una referencia de módulo sentiment en el argumento module_chain.

# crea un pipeline con un solo módulo sentiment
pipeline = krixik.create_pipeline(name="unico_sentiment_1", module_chain=["sentiment"])

Formato de Entrada Requerido

El módulo sentiment (análisis de sentimiento) recibe entradas con formato JSON. Las entradas JSON deben respetar esta estructura.

Antes de procesar un archivo de entrada—uno válido para este pipeline—examínalo con el siguiente código:

# examina el contenido de un archivo de entrada válido
with open(data_dir + "input/valido.json") as f:
    print(json.dumps(json.load(f), indent=2))
[
  {
    "snippet": "I love this movie and i would watch it again and again!"
  },
  {
    "snippet": "Operating profit totaled EUR 9.4 mn, down from EUR 11.7 mn in 2004."
  }
]

Como Usar el Modelo Predeterminado

Ahora procesa el archivo usando el modelo predeterminado del módulo sentiment (análisis de sentimiento): distilbert-base-uncased-finetuned-sst-2-english.

Dado que este es el modelo predeterminado, no hace falta que especifiques qué modelo quieres usar a través del argumento opcional modules del método process.

# procesa el archivo con el modelo predeterminado
process_output = pipeline.process(
    local_file_path=data_dir + "input/valido.json",  # la ruta de archivo inicial en la que yace el archivo de entrada
    local_save_directory=data_dir + "output",  # el directorio local en el que se guardará el archivo de salida
    expire_time=60 * 30,  # data de este proceso se eliminará del sistema Krixik en 30 minutos
    wait_for_process=True,  # espera que el proceso termine antes de devolver control del IDE al usuario
    verbose=False,  # no mostrar actualizaciones de proceso al ejecutar el código
)

La salida del proceso se reproduce con el siguiente código. Para aprender más sobre cada componente de esta salida, revisa la documentación del método process.

Dado que la salida de este modelo/módulo es un archivo JSON, la salida también se incluye en el objeto (esto solo ese el caso para salidas JSON). Además, el archivo de salida se ha guardado en la ubicación indicada bajo process_output_files. El file_id del archivo procesado es el prefijo del nombre del archivo de salida en esta ubicación.

# nítidamente reproduce la salida de este proceso
print(json.dumps(process_output, indent=2))
{
  "status_code": 200,
  "pipeline": "single_sentiment_1",
  "request_id": "c83bf64d-11c4-4e23-b3ad-26e126596b54",
  "file_id": "b29385f1-b570-4ad6-b6a4-70ddff919a32",
  "message": "SUCCESS - output fetched for file_id b29385f1-b570-4ad6-b6a4-70ddff919a32.Output saved to location(s) listed in process_output_files.",
  "warnings": [],
  "process_output": [
    {
      "snippet": "I love this movie and i would watch it again and again!",
      "positive": 1.0,
      "negative": 0.0,
      "neutral": 0.0
    },
    {
      "snippet": "Operating profit totaled EUR 9.4 mn, down from EUR 11.7 mn in 2004.",
      "positive": 0.021,
      "negative": 0.979,
      "neutral": 0.0
    }
  ],
  "process_output_files": [
    "../../../data/output/b29385f1-b570-4ad6-b6a4-70ddff919a32.json"
  ]
}

Para confirmar que todo salió como esperabas, carga el archivo de process_output_files:

# carga la salida del proceso del archivo
with open(process_output["process_output_files"][0]) as f:
    print(json.dumps(json.load(f), indent=2))
[
  {
    "snippet": "I love this movie and i would watch it again and again!",
    "positive": 1.0,
    "negative": 0.0,
    "neutral": 0.0
  },
  {
    "snippet": "Operating profit totaled EUR 9.4 mn, down from EUR 11.7 mn in 2004.",
    "positive": 0.021,
    "negative": 0.979,
    "neutral": 0.0
  }
]

Como Usar un Modelo No-Predeterminado

Para usar un modelo no-predeterminado como distilbert-base-multilingual-cased-sentiments-student, debes especificarlo a través del argumento opcional modules al usar el método process:

# procesa el archivo con un modelo no-predeterminado
process_output = pipeline.process(
    local_file_path=data_dir + "input/valido.json",  # todos los argumentos (salvo modules) son iguales que antes
    local_save_directory=data_dir + "output",
    expire_time=60 * 30,
    wait_for_process=True,
    verbose=False,
    modules={
        "sentiment": {"model": "distilbert-base-multilingual-cased-sentiments-student"}
    },  # especifica un modelo no-predeterminado para este proceso
)

La salida del proceso se reproduce con el siguiente código.

Dado que la salida de este modelo/módulo es un archivo JSON, la salida también se incluye en el objeto (esto solo ese el caso para salidas JSON). Además, el archivo de salida se ha guardado en la ubicación indicada bajo process_output_files. El file_id del archivo procesado es el prefijo del nombre del archivo de salida en esta ubicación.

# nítidamente reproduce la salida de este proceso
print(json.dumps(process_output, indent=2))
{
  "status_code": 200,
  "pipeline": "single_sentiment_1",
  "request_id": "051f2ace-d374-4cf2-ae7d-bd8dd528e839",
  "file_id": "bd95c63c-c826-4e91-af07-6da37bd5bea6",
  "message": "SUCCESS - output fetched for file_id bd95c63c-c826-4e91-af07-6da37bd5bea6.Output saved to location(s) listed in process_output_files.",
  "warnings": [],
  "process_output": [
    {
      "snippet": "I love this movie and i would watch it again and again!",
      "positive": 0.973,
      "negative": 0.01,
      "neutral": 0.017
    },
    {
      "snippet": "Operating profit totaled EUR 9.4 mn, down from EUR 11.7 mn in 2004.",
      "positive": 0.476,
      "negative": 0.321,
      "neutral": 0.202
    }
  ],
  "process_output_files": [
    "../../../data/output/bd95c63c-c826-4e91-af07-6da37bd5bea6.json"
  ]
}