Sentiment Analysis of Spanish texts

Description

This model identifies the sentiments (neutral, positive or negative) in Spanish texts.

Predicted Entities

NEUTRAL, POSITIVE, NEGATIVE

Download Copy S3 URI

How to use

document = DocumentAssembler()\
    .setInputCol("text")\
    .setOutputCol("document")

embeddings = BertSentenceEmbeddings\
    .pretrained('labse', 'xx') \
    .setInputCols(["document"])\
    .setOutputCol("sentence_embeddings")

sentimentClassifier = ClassifierDLModel.pretrained("classifierdl_bert_sentiment", "es") \
  .setInputCols(["document", "sentence_embeddings"]) \
  .setOutputCol("class")

fr_sentiment_pipeline = Pipeline(stages=[document, embeddings, sentimentClassifier])

light_pipeline = LightPipeline(fr_sentiment_pipeline.fit(spark.createDataFrame([['']]).toDF("text")))

result1 = light_pipeline.annotate("Estoy seguro de que esta vez pasará la entrevista.")

result2 = light_pipeline.annotate("Soy una persona que intenta desayunar todas las mañanas sin falta.")

result3 = light_pipeline.annotate("No estoy seguro de si mi salario mensual es suficiente para vivir.")

print(result1["class"], result2["class"], sep = "\n")
val document = DocumentAssembler()
    .setInputCol("text")
    .setOutputCol("document")

val embeddings = BertSentenceEmbeddings
    .pretrained("labse", "xx")
    .setInputCols(Array("document"))
    .setOutputCol("sentence_embeddings")

val sentimentClassifier = ClassifierDLModel.pretrained("classifierdl_bert_sentiment", "es")
  .setInputCols(Array("document", "sentence_embeddings"))
  .setOutputCol("class")

val fr_sentiment_pipeline = new Pipeline().setStages(Array(document, embeddings, sentimentClassifier))

val light_pipeline = LightPipeline(fr_sentiment_pipeline.fit(spark.createDataFrame([['']]).toDF("text")))

val result1 = light_pipeline.annotate("Estoy seguro de que esta vez pasará la entrevista.")

val result2 = light_pipeline.annotate("Soy una persona que intenta desayunar todas las mañanas sin falta.")

val result3 = light_pipeline.annotate("No estoy seguro de si mi salario mensual es suficiente para vivir.")
import nlu
nlu.load("es.classify.sentiment.").predict("""No estoy seguro de si mi salario mensual es suficiente para vivir.""")

Results

['POSITIVE']
['NEUTRAL']
['NEGATIVE']

Model Information

Model Name: classifierdl_bert_sentiment
Compatibility: Spark NLP 3.3.0+
License: Open Source
Edition: Official
Input Labels: [sentence_embeddings]
Output Labels: [class]
Language: es

Data Source

https://github.com/charlesmalafosse/open-dataset-for-sentiment-analysis

Benchmarking

              precision    recall  f1-score   support

    NEGATIVE       0.73      0.81      0.77      1837
     NEUTRAL       0.80      0.71      0.75      2222
    POSITIVE       0.80      0.81      0.80      2187

    accuracy                           0.78      6246
   macro avg       0.77      0.78      0.77      6246
weighted avg       0.78      0.78      0.77      6246