Sentiment Analysis for Urdu (IMDB Review dataset)

Description

Analyse sentiment in reviews by classifying them as positive, negative or neutral. This model is trained using urduvec_140M_300d word embeddings. The word embeddings are then converted to sentence embeddings before feeding to the sentiment classifier which uses a DL architecture to classify sentences.

Predicted Entities

positive , negative , neutral.

Open in Colab Download Copy S3 URI

How to use

Use as part of an nlp pipeline with the following stages: DocumentAssembler, SentenceDetector, Tokenizer, WordEmbeddingsModel, SentenceEmbeddings.

...
word_embeddings = WordEmbeddingsModel()\
.pretrained('urduvec_140M_300d', 'ur')\
.setInputCols(["document",'token'])\
.setOutputCol("word_embeddings")
embeddings = SentenceEmbeddings() \
.setInputCols(["document", "word_embeddings"]) \
.setOutputCol("sentence_embeddings") \
.setPoolingStrategy("AVERAGE")
classifier = SentimentDLModel.pretrained('sentimentdl_urduvec_imdb', 'ur' )\
.setInputCols(['document', 'token', 'sentence_embeddings']).setOutputCol('sentiment')
nlp_pipeline = Pipeline(stages=[document_assembler, tokenizer, embeddings, sentence_embeddings, classifier])
light_pipeline = LightPipeline(nlp_pipeline.fit(spark.createDataFrame([['']]).toDF("text")))
annotations = light_pipeline.fullAnnotate(["مجھے واقعی یہ شو سند ہے۔ یہی وجہ ہے کہ مجھے حال ہی میں یہ جان کر مایوسی ہوئی ہے کہ جارج لوپیز ایک ",
"بالکل بھی اچھ ،ی کام نہیں کیا گیا ، پوری فلم صرف گرڈج تھی اور کہیں بھی بے ترتیب لوگوں کو ہلاک نہیں"])
...
val word_embeddings = WordEmbeddingsModel()
.pretrained('urduvec_140M_300d', 'ur')
.setInputCols(Array("document",'token'))
.setOutputCol("word_embeddings")
val embeddings = SentenceEmbeddings() 
.setInputCols(Array("document", "word_embeddings")) 
.setOutputCol("sentence_embeddings")
.setPoolingStrategy("AVERAGE")
val classifier = SentimentDLModel.pretrained('sentimentdl_urduvec_imdb', 'ur' )
.setInputCols(Array('document', 'token', 'sentence_embeddings')).setOutputCol('sentiment')
val pipeline = new Pipeline().setStages(Array(document_assembler, tokenizer, embeddings, sentence_embeddings, classifier))
val result = pipeline.fit(Seq.empty["مجھے واقعی یہ شو سند ہے۔ یہی وجہ ہے کہ مجھے حال ہی میں یہ جان کر مایوسی ہوئی ہے کہ جارج لوپیز ایک ",
"بالکل بھی اچھ ،ی کام نہیں کیا گیا ، پوری فلم صرف گرڈج تھی اور کہیں بھی بے ترتیب لوگوں کو ہلاک نہیں"].toDS.toDF("text")).transform(data)
import nlu

text = ["مجھے واقعی یہ شو سند ہے۔ یہی وجہ ہے کہ مجھے حال ہی میں یہ جان کر مایوسی ہوئی ہے کہ جارج لوپیز ایک ", "بالکل بھی اچھ ،ی کام نہیں کیا گیا ، پوری فلم صرف گرڈج تھی اور کہیں بھی بے ترتیب لوگوں کو ہلاک نہیں"]
urdusent_df = nlu.load('ur.sentiment').predict(text, output_level='sentence')
urdusent_df

Results


|    | document                                                                                                 | sentiment     |
|---:|---------------------------------------------------------------------------------------------------------:|--------------:|
|  0 |مجھے واقعی یہ شو سند ہے۔ یہی وجہ ہے کہ مجھے حال ہی میں یہ جان کر مایوسی ہوئی ہے کہ جارج لوپیز ایک  | positive      |
|  1 |بالکل بھی اچھ ،ی کام نہیں کیا گیا ، پوری فلم صرف گرڈج تھی اور کہیں بھی بے ترتیب لوگوں کو ہلاک نہیں  | negative      |

Model Information

Model Name: sentimentdl_urduvec_imdb
Compatibility: Spark NLP 2.7.0+
License: Open Source
Edition: Official
Input Labels: [sentence_embeddings]
Output Labels: [sentiment]
Language: ur
Dependencies: urduvec_140M_300d

Data Source

This models in trained using data from https://www.kaggle.com/akkefa/imdb-dataset-of-50k-movie-translated-urdu-reviews

Benchmarking

loss: 2428.622 - acc: 0.8181 - val_acc: 80.0