Skip to main content

Generative AI to Summarize the Urdu Text

Generative AI is like a creative machine, using data to dream up new things! It can write poems, paint pictures, even compose music. Imagine: feeding it words and getting a story back, or showing it a sketch and having it design a building! It's still young, but its potential is mind-blowing.

To generate the summary for the Urdu language, I have trained an LLM model. Here are the steps you can follow to train your own Generative AI model for summarization.

Install required packages.

pip install transformers[torch] datasets==2.14.5 evaluate rouge_score --quiet

Import necessary libraries.

from datasets import load_dataset
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, GenerationConfig, TrainingArguments, Trainer
import torch
import time
import evaluate
import pandas as pd
import numpy as np
Load Dataset
huggingface_dataset_name = "mirfan899/usummary"

dataset = load_dataset(huggingface_dataset_name)

Load pretrained LLM model
model_name='bigscience/mt0-small'

original_model = AutoModelForSeq2SeqLM.from_pretrained(model_name, torch_dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained(model_name)

Test zero shot inference on LLM
dialogue =  "سرکاری عمارتوں پر قبضے کا واقعہ اس وقت پیش آیا ہے جب ایک روز قبل ہی روس کی حمایت کرنے والوں اور یوکرین کے نئے رہنما کے حمایتوں کے درمیان تصادم ہوا حکام کے مطابق کرائمیا کے دارالحکومت سمفروپول میں مسلح افراد نے سرکاری عمارتوں پر قبضہ کر کے روسی جھنڈا لہرا دیا ہے۔ مقامی حکومت کا کہنا ہے کہ وہ مسلح افراد کے ساتھ مذاکرات کر رہی ہے۔ سرکاری عمارتوں پر قبضے کا واقعہ اس وقت پیش آیا ہے جب ایک روز قبل ہی روس کی حمایت کرنے والوں اور یوکرین کے نئے رہنما کے حمایتوں کے درمیان تصادم ہوا۔ خیال رہے کہ یوکرین میں روسی زبان بولنے والے متعدد افراد نے یانوکووچ کی برطرفی اور ملک میں یورپ کی جانب جھکاؤ رکھنے والی انتظامیہ لانے کی مخالفت کی تھی۔ دوسری جانب روس بھی یوکرین میں ہونے والی تبدیلیوں کی وجہ سے ناراض ہے، تاہم وزیرِ خارجہ سرگے لاوروف کا کہنا ہے کہ ان کا ملک یوکرین کے معاملات میں مداخلت نہیں کرے گا۔ سرگے لاوروف نے منگل کو ماسکو میں میڈیا سے بات کرتے ہوئے کہا دوسرے ممالک یوکرین کی صورتِ حال سے فائدہ اٹھانے کی کوشش نہ کریں تاہم ان کا یہ بھی کہنا تھا کہ روس یوکرین میں عدم مداخلت کی پالیسی پر کاربند رہے گا۔ یوکرین میں کئی ماہ تک جاری رہنے والے عوامی احتجاج کے بعد سنیچر کو پارلیمان کے اراکین نے صدر یانوکووچ کے مواخذے کے لیے ووٹ ڈالا تھا۔ یوکرین میں حکومت مخالف مظاہرے گذشتہ سال نومبر میں اس وقت شروع ہوئے تھے جب صدر یانوکووچ نے یورپی یونین کے ساتھ ایک تجارتی معاہدے کو مسترد کرتے ہوئے روس کے ساتھ تجارتی معاہدے کو ترجیح دی تھی۔ ان پرتشدد مظاہروں کے نتیجے میں درجنوں افراد ہلاک ہو گئے تھے۔"
summary = "یوکرین کے حکام کا کہنا ہے کہ روسی اکثریت والے کرائمیا میں مسلح افراد نے سرکاری عمارتوں پر قبضہ کر لیا ہے جس کے بعد سکیورٹی فورسز کو الرٹ کر دیا گیا ہے۔"

prompt = f"""
Summarize the following news article:

{dialogue}

Summary:
"""

inputs = tokenizer(prompt, return_tensors='pt')
output = tokenizer.decode(
    original_model.generate(
        inputs["input_ids"], 
        max_new_tokens=200,
    )[0], 
    skip_special_tokens=True
)

dash_line = '-'.join('' for x in range(100))
print(dash_line)
print(f'INPUT PROMPT:\n{prompt}')
print(dash_line)
print(f'BASELINE HUMAN SUMMARY:\n{summary}\n')
print(dash_line)
print(f'MODEL GENERATION - ZERO SHOT:\n{output}')

Here is output

---------------------------------------------------------------------------------------------------
INPUT PROMPT:

Summarize the following news article:

سرکاری عمارتوں پر قبضے کا واقعہ اس وقت پیش آیا ہے جب ایک روز قبل ہی روس کی حمایت کرنے والوں اور یوکرین کے نئے رہنما کے حمایتوں کے درمیان تصادم ہوا حکام کے مطابق کرائمیا کے دارالحکومت سمفروپول میں مسلح افراد نے سرکاری عمارتوں پر قبضہ کر کے روسی جھنڈا لہرا دیا ہے۔ مقامی حکومت کا کہنا ہے کہ وہ مسلح افراد کے ساتھ مذاکرات کر رہی ہے۔ سرکاری عمارتوں پر قبضے کا واقعہ اس وقت پیش آیا ہے جب ایک روز قبل ہی روس کی حمایت کرنے والوں اور یوکرین کے نئے رہنما کے حمایتوں کے درمیان تصادم ہوا۔ خیال رہے کہ یوکرین میں روسی زبان بولنے والے متعدد افراد نے یانوکووچ کی برطرفی اور ملک میں یورپ کی جانب جھکاؤ رکھنے والی انتظامیہ لانے کی مخالفت کی تھی۔ دوسری جانب روس بھی یوکرین میں ہونے والی تبدیلیوں کی وجہ سے ناراض ہے، تاہم وزیرِ خارجہ سرگے لاوروف کا کہنا ہے کہ ان کا ملک یوکرین کے معاملات میں مداخلت نہیں کرے گا۔ سرگے لاوروف نے منگل کو ماسکو میں میڈیا سے بات کرتے ہوئے کہا دوسرے ممالک یوکرین کی صورتِ حال سے فائدہ اٹھانے کی کوشش نہ کریں تاہم ان کا یہ بھی کہنا تھا کہ روس یوکرین میں عدم مداخلت کی پالیسی پر کاربند رہے گا۔ یوکرین میں کئی ماہ تک جاری رہنے والے عوامی احتجاج کے بعد سنیچر کو پارلیمان کے اراکین نے صدر یانوکووچ کے مواخذے کے لیے ووٹ ڈالا تھا۔ یوکرین میں حکومت مخالف مظاہرے گذشتہ سال نومبر میں اس وقت شروع ہوئے تھے جب صدر یانوکووچ نے یورپی یونین کے ساتھ ایک تجارتی معاہدے کو مسترد کرتے ہوئے روس کے ساتھ تجارتی معاہدے کو ترجیح دی تھی۔ ان پرتشدد مظاہروں کے نتیجے میں درجنوں افراد ہلاک ہو گئے تھے۔

Summary:

---------------------------------------------------------------------------------------------------
BASELINE HUMAN SUMMARY:
یوکرین کے حکام کا کہنا ہے کہ روسی اکثریت والے کرائمیا میں مسلح افراد نے سرکاری عمارتوں پر قبضہ کر لیا ہے جس کے بعد سکیورٹی فورسز کو الرٹ کر دیا گیا ہے۔

---------------------------------------------------------------------------------------------------
MODEL GENERATION - ZERO SHOT:
روسی حکومت نے روسی زبان بولنے والے متعدد افراد کو روسی جھنڈا لہرا دیا ہے۔

Train the model
max_length = 512
def tokenize_function(example):
    start_prompt = "Summarize the following news article.\n\n"
    end_prompt = "\n\nSummary: "
    prompt = [start_prompt + dialogue + end_prompt for dialogue in example["summary"]]
    example['input_ids'] = tokenizer(prompt, padding='max_length', truncation=True, max_length=max_length, return_tensors="pt").input_ids
    example['labels'] = tokenizer(example["summary"], padding='max_length', truncation=True, max_length=max_length, return_tensors="pt").input_ids
    
    return example


tokenized_datasets = dataset.map(tokenize_function, batched=True)
tokenized_datasets = tokenized_datasets.remove_columns(['id', 'url', "title", 'text', 'summary'])

training_args = TrainingArguments(
    "umts",
    evaluation_strategy="epoch",
    save_strategy="epoch",
    learning_rate=1e-5,
    num_train_epochs=4,
    weight_decay=0.01,
    push_to_hub=False,
    save_total_limit=1,
    per_device_train_batch_size=4,
    per_device_eval_batch_size=4
    
)

trainer = Trainer(
    model=original_model,
    args=training_args,
    train_dataset=tokenized_datasets['train'],
    eval_dataset=tokenized_datasets['validation']
)
trainer.train()

It will take a few hours to train the model. After training, you can use your model for testing.


from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, GenerationConfig, TrainingArguments, Trainer

model_name='mirfan899/umts'

original_model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

dialogue =  "سرکاری عمارتوں پر قبضے کا واقعہ اس وقت پیش آیا ہے جب ایک روز قبل ہی روس کی حمایت کرنے والوں اور یوکرین کے نئے رہنما کے حمایتوں کے درمیان تصادم ہوا حکام کے مطابق کرائمیا کے دارالحکومت سمفروپول میں مسلح افراد نے سرکاری عمارتوں پر قبضہ کر کے روسی جھنڈا لہرا دیا ہے۔ مقامی حکومت کا کہنا ہے کہ وہ مسلح افراد کے ساتھ مذاکرات کر رہی ہے۔ سرکاری عمارتوں پر قبضے کا واقعہ اس وقت پیش آیا ہے جب ایک روز قبل ہی روس کی حمایت کرنے والوں اور یوکرین کے نئے رہنما کے حمایتوں کے درمیان تصادم ہوا۔ خیال رہے کہ یوکرین میں روسی زبان بولنے والے متعدد افراد نے یانوکووچ کی برطرفی اور ملک میں یورپ کی جانب جھکاؤ رکھنے والی انتظامیہ لانے کی مخالفت کی تھی۔ دوسری جانب روس بھی یوکرین میں ہونے والی تبدیلیوں کی وجہ سے ناراض ہے، تاہم وزیرِ خارجہ سرگے لاوروف کا کہنا ہے کہ ان کا ملک یوکرین کے معاملات میں مداخلت نہیں کرے گا۔ سرگے لاوروف نے منگل کو ماسکو میں میڈیا سے بات کرتے ہوئے کہا دوسرے ممالک یوکرین کی صورتِ حال سے فائدہ اٹھانے کی کوشش نہ کریں تاہم ان کا یہ بھی کہنا تھا کہ روس یوکرین میں عدم مداخلت کی پالیسی پر کاربند رہے گا۔ یوکرین میں کئی ماہ تک جاری رہنے والے عوامی احتجاج کے بعد سنیچر کو پارلیمان کے اراکین نے صدر یانوکووچ کے مواخذے کے لیے ووٹ ڈالا تھا۔ یوکرین میں حکومت مخالف مظاہرے گذشتہ سال نومبر میں اس وقت شروع ہوئے تھے جب صدر یانوکووچ نے یورپی یونین کے ساتھ ایک تجارتی معاہدے کو مسترد کرتے ہوئے روس کے ساتھ تجارتی معاہدے کو ترجیح دی تھی۔ ان پرتشدد مظاہروں کے نتیجے میں درجنوں افراد ہلاک ہو گئے تھے۔"
summary = "یوکرین کے حکام کا کہنا ہے کہ روسی اکثریت والے کرائمیا میں مسلح افراد نے سرکاری عمارتوں پر قبضہ کر لیا ہے جس کے بعد سکیورٹی فورسز کو الرٹ کر دیا گیا ہے۔"

prompt = f"""
مندرجہ ذیل متن کا خلاصہ کریں۔

{dialogue}

خلاصہ:
"""

inputs = tokenizer(prompt, return_tensors='pt')
output = tokenizer.decode(
    original_model.generate(
        inputs["input_ids"], 
        max_new_tokens=200,
    )[0], 
    skip_special_tokens=True
)

dash_line = '-'.join('' for x in range(100))
print(dash_line)
print(f'INPUT PROMPT:\n{prompt}')
print(dash_line)
print(f'BASELINE HUMAN SUMMARY:\n{summary}\n')
print(dash_line)
print(f'MODEL GENERATION - ZERO SHOT:\n{output}')
Here is output

---------------------------------------------------------------------------------------------------
INPUT PROMPT:

مندرجہ ذیل متن کا خلاصہ کریں۔

سرکاری عمارتوں پر قبضے کا واقعہ اس وقت پیش آیا ہے جب ایک روز قبل ہی روس کی حمایت کرنے والوں اور یوکرین کے نئے رہنما کے حمایتوں کے درمیان تصادم ہوا حکام کے مطابق کرائمیا کے دارالحکومت سمفروپول میں مسلح افراد نے سرکاری عمارتوں پر قبضہ کر کے روسی جھنڈا لہرا دیا ہے۔ مقامی حکومت کا کہنا ہے کہ وہ مسلح افراد کے ساتھ مذاکرات کر رہی ہے۔ سرکاری عمارتوں پر قبضے کا واقعہ اس وقت پیش آیا ہے جب ایک روز قبل ہی روس کی حمایت کرنے والوں اور یوکرین کے نئے رہنما کے حمایتوں کے درمیان تصادم ہوا۔ خیال رہے کہ یوکرین میں روسی زبان بولنے والے متعدد افراد نے یانوکووچ کی برطرفی اور ملک میں یورپ کی جانب جھکاؤ رکھنے والی انتظامیہ لانے کی مخالفت کی تھی۔ دوسری جانب روس بھی یوکرین میں ہونے والی تبدیلیوں کی وجہ سے ناراض ہے، تاہم وزیرِ خارجہ سرگے لاوروف کا کہنا ہے کہ ان کا ملک یوکرین کے معاملات میں مداخلت نہیں کرے گا۔ سرگے لاوروف نے منگل کو ماسکو میں میڈیا سے بات کرتے ہوئے کہا دوسرے ممالک یوکرین کی صورتِ حال سے فائدہ اٹھانے کی کوشش نہ کریں تاہم ان کا یہ بھی کہنا تھا کہ روس یوکرین میں عدم مداخلت کی پالیسی پر کاربند رہے گا۔ یوکرین میں کئی ماہ تک جاری رہنے والے عوامی احتجاج کے بعد سنیچر کو پارلیمان کے اراکین نے صدر یانوکووچ کے مواخذے کے لیے ووٹ ڈالا تھا۔ یوکرین میں حکومت مخالف مظاہرے گذشتہ سال نومبر میں اس وقت شروع ہوئے تھے جب صدر یانوکووچ نے یورپی یونین کے ساتھ ایک تجارتی معاہدے کو مسترد کرتے ہوئے روس کے ساتھ تجارتی معاہدے کو ترجیح دی تھی۔ ان پرتشدد مظاہروں کے نتیجے میں درجنوں افراد ہلاک ہو گئے تھے۔

خلاصہ:

---------------------------------------------------------------------------------------------------
BASELINE HUMAN SUMMARY:
یوکرین کے حکام کا کہنا ہے کہ روسی اکثریت والے کرائمیا میں مسلح افراد نے سرکاری عمارتوں پر قبضہ کر لیا ہے جس کے بعد سکیورٹی فورسز کو الرٹ کر دیا گیا ہے۔

---------------------------------------------------------------------------------------------------
MODEL GENERATION - ZERO SHOT:
روسی زبان بولنے والے افراد نے سرکاری عمارتوں پر قبضہ کر روسی جھنڈا لہرا دیا ہے۔

Comments

Popular posts from this blog

Urdu Tokenization using SpaCy

SpaCy is an NLP library which supports many languages. It’s fast and has DNNs build in for performing many NLP tasks such as POS and NER. It has extensive support and good documentation. It is fast and provides GPU support and can be integrated with Tensorflow, PyTorch, Scikit-Learn, etc. SpaCy provides the easiest way to add any language support. A new language can be added by simply following Adding Languages article. I’ve added the Urdu language with dictionary-based lemmatization, lexical support and stop words( Urdu ). Here is how you can use the tokenizer for the Urdu language. First, install SpaCy . $ pip install spacy Now import spacy and create a blank object with support of Urdu language. I’m using blank because there is no proper model available for Urdu yet, but tokenization support available. import spacy nlp = spacy.blank('ur') doc = nlp(" کچھ ممالک ایسے بھی ہیں جہاں اس برس روزے کا دورانیہ 20 گھنٹے تک ہے۔") print("Urdu Tokeniza

Text Summarization for Urdu: Part 1

 Text Summarization is an important task for large documents to get the idea of the document. There are two main summarization techniques used in NLP for text summarization. Extractive Text Summarization :  This approach's name is self-explanatory. Most important sentences or phrases are extracted from the original text and a short summary provided with these important sentences. See the figure for the explanation. Abstractive Text Summarization : This approach uses more advanced deep learning techniques to generate new sentences by learning from the original text. It is a complex task and requires heavy computing power such as GPU. Let's dive into the code for generating the text summary. I'm using Arabic as a parameter because the contributor did an excellent job of handling a lot of things like stemming, Urdu characters support, etc. from summa.summarizer import summarize text = """ اسلام آباد : صدر مملکت ڈاکٹر عارف علوی بھی کورونا وائرس کا شکار ہوگئے۔ سما

How to build Urdu language model in SpaCy

Urdu alphabets SpaCy is the most commonly used NLP library for building NLP and chatbot apps. The Urdu language does not have resources for building chatbot and NLP apps. Most of the tools are proprietary or data is licensed. After adding the support for the Urdu language, I'm going to show you how to build an Urdu model which can be used for multiple applications such as word and sentence similarity, chatbots, knowledgebase, etc. Follow the steps to build the model. Step 1: Build word frequencies for Urdu. I've created a script that can be used to build word frequencies. There are multiple resources available for building word frequencies, you can choose whatever you want but the format should be like this. frequency document_id word Here is the script I'm using to build word frequencies for SpaCy. from __future__ import unicode_literals import string import codecs import glob from collections import Counter import re import plac from multiprocessing