Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import torch
- from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
- device = "cuda" if torch.cuda.is_available() else "CPU"
- model_name1 = "mhdank/t5-paraphrase_finetuned"
- model1 = AutoModelForSeq2SeqLM.from_pretrained(model_name1)
- tokenizer1 = AutoTokenizer.from_pretrained(model_name1)
- def generate_paraphrase1(text, max_length=128, num_return_sequences=1, num_beams=5):
- # Tokenize input
- inputs = tokenizer1(text, return_tensors="pt", truncation=True, padding="max_length", max_length=max_length).to(device)
- # Generate paraphrase
- outputs = model1.generate(
- **inputs,
- max_length=max_length,
- num_return_sequences=num_return_sequences,
- num_beams=num_beams
- )
- # Decode and return results
- paraphrased_texts = [tokenizer1.decode(output, skip_special_tokens=True) for output in outputs]
- return paraphrased_texts
- english_to_bangla = {
- 'b': 'বি',
- 'c': 'সি',
- 'd': 'ডি',
- 'l': 'এল',
- 'm': 'এম',
- 'n': 'এন',
- 'p': 'পি',
- 'q': 'কিউ',
- 'x': 'এক্স',
- 'y': 'ওয়াই'
- }
- named_entities = [
- "বিকাশ", # Mobile Financial Service
- "নগদ", # Mobile Financial Service
- "বিপিডিবি", # Bangladesh Power Development Board
- "ডেসকো", # Dhaka Electric Supply Company
- "পল্লী বিদ্যুৎ", # Rural Electrification Board
- "রবি", # Telecom Operator
- "গ্রামীণফোন", # Telecom Operator
- "সোনালী ব্যাংক", # State-Owned Bank
- "জনতা ব্যাংক", # State-Owned Bank
- "দারাজ" # E-commerce Platform
- ]
- # Sample sentences for testing
- sample_sentences = [
- # ওয়াইআমার চলতি মাসের বিদ্যুৎ বিল কত?",
- " বিকাশ দিয়ে বিদ্যুৎ বিল পরিশোধ করা যাবে কি?",
- "নগদ এর মাধ্যমে বিদ্যুৎ বিল দিতে চাই ।",
- # "ডেসকো বিল পেমেন্টের রশিদ কোথায় পাবো?",
- "বিপিডিবি বিল জমা দিয়েছি, কিন্তু সংযোগ চালু হয়নি ।",
- # "প্রিপেইড মিটার রিচার্জ করা যাবে কোন মাধ্যমে?",
- # "আমার বিদ্যুৎ বিল পেমেন্টের ট্রানজেকশন নম্বর হারিয়ে গেছে, এখন কি করবো?",
- # "পল্লী বিদ্যুৎ বিল অনলাইনে পরিশোধ করা যাবে কি?",
- # "বিকাশে বিল জমা দেওয়ার পর কতক্ষণ সময় লাগে আপডেট হতে?",
- # "পেয়নিয়ার এর মাধ্যমে বিল পরিশোধ করা যাবে কি?",
- # "নতুন বিদ্যুৎ সংযোগের আবেদন করতে হলে কি করতে হবে?",
- # "ডেসকো সংযোগের জন্য কি কি কাগজপত্র লাগবে?",
- # "বিপিডিবি নতুন সংযোগের জন্য কত টাকা লাগে?",
- # "পল্লী বিদ্যুৎ সংযোগের জন্য আবেদন কোথায় করবো?",
- # "সংযোগের অগ্রগতি জানতে কাকে যোগাযোগ করবো?",
- # "নতুন সংযোগ পেতে কতদিন সময় লাগে?",
- # "সংযোগ বাতিল করতে হলে কি প্রক্রিয়া অনুসরণ করতে হবে?",
- # "কমার্শিয়াল সংযোগের আবেদন করতে হলে কি আলাদা প্রক্রিয়া আছে?",
- # "বিদ্যুৎ সংযোগের নামে ঠিকানা পরিবর্তন করা যাবে কি?",
- # "মিটার রিডিং ভুল হলে কোথায় অভিযোগ করবো?",
- # "আমার এলাকায় কখন বিদ্যুৎ আসবে?",
- # "বিদ্যুৎ চলে গেছে, অভিযোগ কোথায় জানাবো?",
- # "আজকের লোডশেডিং শিডিউল কোথায় পাবো?",
- # "বিদ্যুৎ বিভ্রাটের কারণে ফ্রিজ নষ্ট হয়েছে, ক্ষতিপূরণের জন্য কোথায় অভিযোগ জানাবো?",
- # "পল্লী বিদ্যুৎ এলাকায় লোডশেডিং কতক্ষণ থাকবে?",
- # "ডেসকো বিদ্যুৎ বিভ্রাটের অভিযোগ কোথায় জানানো যায়?",
- # "বিদ্যুৎ না থাকলে কোন নম্বরে কল করবো?",
- # "লোডশেডিং প্রতিরোধে কি ব্যবস্থা নেয়া হচ্ছে?",
- # "বিপিডিবি এর জরুরি হটলাইন নম্বর কত?",
- # "পল্লী বিদ্যুতে বিদ্যুৎ ফিরে আসতে কত সময় লাগে?",
- # "ডেসকো এর বিরুদ্ধে অভিযোগ কিভাবে দায়ের করবো?",
- # "বিল বেশি এসেছে, কোথায় জানাবো?",
- # "পল্লী বিদ্যুৎ মিটারের বিল ভুল হলে কার সাথে যোগাযোগ করবো?",
- # "বিদ্যুৎ লাইনের তার ছিঁড়ে গেছে, দ্রুত সমাধানের জন্য কোথায় কল করবো?"
- ]
- # # Example sentences
- # sentences = [
- # "বিকাশ দিয়ে নগদ বিদ্যুৎ বিল পরিশোধ করা যাবে কি?",
- # "আমি ডেসকো, পল্লী বিদ্যুৎ, এবং বিপিডিবি এর মাধ্যমে বিদ্যুৎ সংযোগ নেবো, এবং বিল পরিশোধ করতে বিকাশ অথবা নগদ ব্যবহার করব।",
- # # "নগদ এর মাধ্যমে বিদ্যুৎ বিল দিতে চাই ।",
- # # "বিপিডিবি বিল জমা দিয়েছি, কিন্তু সংযোগ চালু হয়নি ।"
- # ]
- import re
- def replace_named_entities(sentence):
- replacements = []
- placeholder_map = {} # To map each entity to its unique placeholder
- # Iterate through the named entities
- for idx, entity in enumerate(named_entities):
- if entity in sentence:
- # Use a unique placeholder for each entity
- placeholder = list(english_to_bangla.values())[idx % len(english_to_bangla)]
- # Ensure that the entity is replaced with its corresponding placeholder
- sentence = sentence.replace(entity, placeholder)
- replacements.append(f"{placeholder} : {entity}")
- return sentence, replacements
- def restore_named_entities(paraphrases, replacements):
- restored_paraphrases = []
- for para in paraphrases:
- restored_para = para # Start with the original paraphrase
- for replacement in replacements:
- placeholder, original_entity = replacement.split(" : ")
- # Replace only standalone placeholders 'বি' and not attached to other words
- # We use lookahead and lookbehind assertions to ensure the placeholder is surrounded by spaces or punctuation
- restored_para = re.sub(rf'(?<!\w){re.escape(placeholder)}(?!\w)', original_entity, restored_para)
- restored_paraphrases.append(restored_para)
- return restored_paraphrases
- # Processing each sentence
- for sentence in sample_sentences:
- print("-" * 50)
- print(f"🔹 Original: {sentence}")
- replaced_sentence, replacements = replace_named_entities(sentence)
- # print(f"🔹 Replaced Sentence: {replaced_sentence}")
- # print(f"🔹 Replacements: {replacements}")
- paraphrases = generate_paraphrase1(replaced_sentence, num_return_sequences=3)
- # Restoring original named entities in paraphrases
- paraphrases = restore_named_entities(paraphrases, replacements)
- for i, para in enumerate(paraphrases, 1):
- print(f" ✅ Paraphrase {i}: {para}")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement