File size: 13,496 Bytes
60e1260 fa35876 1884736 60e1260 1884736 ce6be78 1884736 62eb507 1884736 096ae71 1884736 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
---
library_name: transformers
tags: []
---
# تَشْكِيلُ النُّصُوصِ الْعَرَبِيَّةِ تِلْقَائِياً
This model is trained to add tashkeel (Arabic diacritics) to Arabic text, enhancing readability and pronunciation. It may be also helpful for data synthesis training models on other tasks, such as text-to-speech, language modeling, and more.
## Model Details
The model is based on the [Google's FLAN-T5 small model](https://huggingface.co/google/flan-t5-small) trained on [Arabic Tashkeel Dataset](https://huggingface.co/datasets/Abdou/arabic-tashkeel-dataset).
The tokenizer is trained on a subset of the same dataset.
## How to Use
You can use this model to add tashkeel to Arabic text by using the following code:
```python
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
import torch
model_path = "Abdou/arabic-tashkeel-flan-t5-small"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForSeq2SeqLM.from_pretrained(model_path)
def vocalize_text(text, model, tokenizer, max_length=256, num_beams=4, temperature=0.2, do_sample=False):
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
model.eval()
# Tokenize the input text
inputs = tokenizer(text, return_tensors="pt", max_length=max_length, truncation=True, padding="max_length")
inputs = {k: v.to(device) for k, v in inputs.items()}
with torch.no_grad():
if do_sample:
outputs = model.generate(
**inputs,
max_length=max_length,
do_sample=True,
temperature=temperature,
)
else:
outputs = model.generate(
**inputs,
max_length=max_length,
num_beams=num_beams,
early_stopping=True
)
return tokenizer.decode(outputs[0], skip_special_tokens=True)
# Quran texts
quran_texts = [
"قل هو نبأ عظيم أنتم عنه معرضون",
"إنما يخشى الله من عباده العلماء",
"والله غالب على أمره ولكن أكثر الناس لا يعلمون",
"وعلم ءادم الأسماء كلها ثم عرضهم على الملائكة فقال أنبؤوني بأسماء هؤلاء إن كنتم صادقين",
"وإذ قال موسى لقومه يا قوم لم تؤذونني وقد تعلمون أني رسول الله إليكم",
"ولله يسجد ما في السماوات وما في الارض من دابة والملاءكة وهم لا يستكبرون",
"الذي أحسن كل شيء خلقه وبدأ خلق الإنسان من طين",
]
# Hadith texts
hadith_texts = [
"إن الله لا ينظر إلى صوركم وأموالكم ولكن ينظر إلى قلوبكم وأعمالكم",
"عن أبي ذر جندب بن جنادة، وأبي عبدالرحمن معاذ بن جبل رضي الله عنهما، عن رسول الله ﷺ، قال: اتق الله حيثما كنت وأتبع السيئة الحسنة تمحها، وخالق الناس بخلق حسن . رواه الترمذي وقال: حديث حسن.",
"المسلم من سلم المسلمون من لسانه ويده",
"المؤمن القوي خير وأحب إلى الله من المؤمن الضعيف ، وفي كل خير.",
]
# some Arabic texts
arabic_texts = [
"إنما الأمم الأخلاق ما بقيت فإن هم ذهبت أخلاقهم ذهبوا",
"يعد من أكبر علماء الأندلس وأكبر علماء الإسلام تصنيفًا وتأليفًا بعد الطبري، وهو إمام حافظ. فقيه ظاهري، ومجدد القول به، بل محيي المذهب بعد زواله في الشرق. ومتكلم وأديب وشاعر ونسّابة وعالم برجال الحديث وناقد محلل بل وصفه البعض بالفيلسوف كما عد من أوائل من قال بكروية الأرض، كما كان وزير سياسي لبني أمية، سلك طريق نبذ التقليد وتحرير الأتباع، قامت عليه جماعة من المالكية وشـُرد عن وطنه. توفي لاحقاً في منزله في أرض أبويه منت ليشم المعروفة بمونتيخار حالياً، وهي عزبة قريبة من ولبة. وأصل جده يزيد فارسي، أسلم وأول من دخل منهم بلاد المغرب، وكانت بلدهم قرطبة فولد ابن حزم بها في سلخ نهاية رمضان من سنة أربع وثمانين وثلاثمائة."
]
texts = [
("Quran Texts", quran_texts),
("Hadith Texts", hadith_texts),
("Arabic Texts", arabic_texts)
]
for title, texts in texts:
print(f"=============== {title} ===============")
for text in texts:
vocalized_result = vocalize_text(text, model, tokenizer)
print(f"Input: \n{text}")
print("="*10)
print(f"Prediction: \n{vocalized_result}")
print("="*10)
```
**Output:**
```plaintext
=============== Quran Texts ===============
Input:
قل هو نبأ عظيم أنتم عنه معرضون
==========
Prediction:
قُلْ هُوَ نَبَأٌ عَظِيمٌ أَنْتُمْ عَنْهُ مُعْرِضُونَ
==========
Input:
إنما يخشى الله من عباده العلماء
==========
Prediction:
إِنَّمَا يَخْشَى ٱللَّهَ مِنْ عِبَادِهِ ٱلْعُلَمَآءُ
==========
Input:
والله غالب على أمره ولكن أكثر الناس لا يعلمون
==========
Prediction:
وَٱللَّهُ غَالِبٌ عَلَىٰٓ أَمْرِهِۦ وَلَٰكِنَّ أَكْثَرَ ٱلنَّاسِ لَا يَعْلَمُونَ
==========
Input:
وعلم ءادم الأسماء كلها ثم عرضهم على الملائكة فقال أنبؤوني بأسماء هؤلاء إن كنتم صادقين
==========
Prediction:
وَعَلِّمْ ءَادَمَ ٱلْأَسْمَآءَ كُلَّهَا ثُمَّ عَرَضَهُمْ عَلَى ٱلْمَلاَئِكَةِ فَقَالَ أَنبَؤُونِي بِأَسْمَاءِ هَٰٓؤُلَآءِ إِن كُنتُمْ صَادِقِينَ
==========
Input:
وإذ قال موسى لقومه يا قوم لم تؤذونني وقد تعلمون أني رسول الله إليكم
==========
Prediction:
وَإِذْ قَالَ مُوسَىٰ لِقَوْمِهِ يَا قَوْمِ لِمَ تُؤْذُونَنِي وَقَدْ تَعْلَمُونَ أَنِّي رَسُولُ اللَّهِ إِلَيْكُمْ
==========
Input:
ولله يسجد ما في السماوات وما في الارض من دابة والملاءكة وهم لا يستكبرون
==========
Prediction:
وَلِلَّهِ يَسْجُدُ مَا فِي السَّمَاوَاتِ وَمَا فِي الْارْضِ مِنْ دَابَّةٍ وَالْمَلَائِكَةُ وَهُمْ لَا يَسْتَكْبِرُونَ
==========
Input:
الذي أحسن كل شيء خلقه وبدأ خلق الإنسان من طين
==========
Prediction:
الَّذِي أَحْسَنَ كُلَّ شَيْءٍ خَلْقَهُ وَبَدَأَ خَلْقَ الْإِنْسَانِ مِنْ طِينٍ
==========
=============== Hadith Texts ===============
Input:
إن الله لا ينظر إلى صوركم وأموالكم ولكن ينظر إلى قلوبكم وأعمالكم
==========
Prediction:
إِنَّ اللَّهَ لَا يَنْظُرُ إِلَىٰ صُوَرِكُمْ وَأَمْوَالِكُمْ وَلَكِنْ يَنْظُرُ إِلَىٰ قُلُوبِكُمْ وَأَعْمَالِكُمْ
==========
Input:
عن أبي ذر جندب بن جنادة، وأبي عبدالرحمن معاذ بن جبل رضي الله عنهما، عن رسول الله ﷺ، قال: اتق الله حيثما كنت وأتبع السيئة الحسنة تمحها، وخالق الناس بخلق حسن . رواه الترمذي وقال: حديث حسن.
==========
Prediction:
عَنْ أَبِي ذَرٍّ جُنْدُبِ بْنِ جُنَادَةَ، وَأَبِي عَبْدِالرَّحْمَنِ مُعَاذِ بْنِ جَبَلٍ رَضِيَ اللَّهُ عَنْهُمَا، عَنْ رَسُولِ اللَّهِ صَلَّى اللَّهُ عَلَيْهِ وَسَلَّمَ، قَالَ: اتَّقِ اللَّهَ حَيْثُمَا كُنْتَ وَأَتْبِعِ السَّيِّئَةَ الْحَسَنَةَ تَمْحُهَا، وَخَالِقِ النَّاسَ بِخُلُقٍ حَسَنٍ . رَوَاهُ التِّرْمِذِيُّ وَقَالَ: حَدِيثٌ حَسَنٌ.
==========
Input:
المسلم من سلم المسلمون من لسانه ويده
==========
Prediction:
الْمُسْلِمُ مَنْ سَلِمَ الْمُسْلِمُونَ مِنْ لِسَانِهِ وَيَدِهِ
==========
Input:
المؤمن القوي خير وأحب إلى الله من المؤمن الضعيف ، وفي كل خير.
==========
Prediction:
الْمُؤْمِنُ الْقَوِيُّ خَيْرٌ وَأَحَبُّ إِلَى اللَّهِ مِنَ الْمُؤْمِنِ الضَّعِيفِ ، وَفِي كُلِّ خَيْرٍ.
==========
=============== Arabic Texts ===============
Input:
إنما الأمم الأخلاق ما بقيت فإن هم ذهبت أخلاقهم ذهبوا
==========
Prediction:
إِنَّمَا الأُمَمُ الأَخْلاقُ مَا بَقِيَتْ فَإِنْ هُمْ ذَهَبَتْ أَخْلاقُهُمْ ذَهَبُوا
==========
Input:
يعد من أكبر علماء الأندلس وأكبر علماء الإسلام تصنيفًا وتأليفًا بعد الطبري، وهو إمام حافظ. فقيه ظاهري، ومجدد القول به، بل محيي المذهب بعد زواله في الشرق. ومتكلم وأديب وشاعر ونسّابة وعالم برجال الحديث وناقد محلل بل وصفه البعض بالفيلسوف كما عد من أوائل من قال بكروية الأرض، كما كان وزير سياسي لبني أمية، سلك طريق نبذ التقليد وتحرير الأتباع، قامت عليه جماعة من المالكية وشـُرد عن وطنه. توفي لاحقاً في منزله في أرض أبويه منت ليشم المعروفة بمونتيخار حالياً، وهي عزبة قريبة من ولبة. وأصل جده يزيد فارسي، أسلم وأول من دخل منهم بلاد المغرب، وكانت بلدهم قرطبة فولد ابن حزم بها في سلخ نهاية رمضان من سنة أربع وثمانين وثلاثمائة.
==========
Prediction:
يُعَدُّ مِنْ أَكْبَرِ عُلَمَاءِ الْأَنْدَلُسِ وَأَكْبَرِ عُلَمَاءِ الْإِسْلَامِ تَصْنِيفًا وَتَأْلِيفًا بَعْدَ الطَّبَرِيِّ، وَهُوَ إِمَامٌ حَافِظٌ. فَقِيهٌ ظَاهِرِيٌّ، وَمُجَدِّدُ الْقَوْلِ بِهِ، بَلْ مُحْيِي الْمَذْهَبِ بَعْدَ زَوَالِهِ فِي الشَّرْقِ. وَمُتَكَلِّمٌ وَأَدِيبٌ وَشَاعِرٌ وَنَسَّابَةٌ وَعَالِمٌ بِرِجَالِ الْحَدِيثِ وَنَاقِدٌ مُحَلَّلٌ بَلْ وَصَفَهُ الْبَعْضُ بِالْفَيْلَسُوفِ كَمَا عُدَّ مِنْ أَوَائِلِ مَنْ قَالَ بِكُرَوِيَّةِ الْأَرْضِ، كَمَا كَانَ وَزِيرٌ سِيَاسِيٌّ لِبَنِي أُمَيَّةَ، سَلَكَ طَرِيقَ نَبْذِ التَّقْلِيدِ وَتَحْرِيرَ الْأَتْبَاعِ، قَامَتْ عَلَيْهِ جَمَاعَةٌ مِنَ الْمَالِكِيَّةِ وَشَـرُّدٌ عَنْ وَطَنِهِ. تُوُفِّيَ لَاحِقًا فِي مَنْزِلِهِ فِي أَرْضِ أَبَوَيْهِ مُنْتَ لِيَشُمَّ الْمَعْرُوفَةَ بِمُونتِيخَارٍ حَالِيًّا، وَهِيَ عَزْبَةٌ قَرِيبَةٌ مِنْ وَلُبَّةٍ. وَأَصْلُ جَدِّهِ يَزِيدُ فَارِسِيٌّ، أَسْلَمَ وَأَوَّلُ مَنْ دَخَلَ مِنْهُمْ بِلَادَ الْمَغْرِبِ، وَكَانَتْ بَلَدُهُمْ قُرْطُبَةَ فَوُلِدَ ابْنُ حَزْمٍ بِهَا فِي سَلْخِ نِهَايَةِ رَمَضَانَ مِنْ سَنَةِ أَرْبَعٍ وَثَمَانِينَ وَثَلَاثِمِائَةٍ.
==========
```
As you can see, the model is mostly accurate, but may make some mistakes, like `وَعَلِّمْ` instead of `وَعَلَّمَ` or `وَفِي كُلِّ خَيْرٍ` instead of `وَ فِي كُلٍّ خَيْرٌ`.
By default, the above `vocalize_text()` function is using Beam Search decoding (`num_beams=4`), you can use sampling by setting `do_sample=True` and `temperature` to a value between 0 and 1.
## Limitations
As mentioned in the [dataset card](https://huggingface.co/datasets/Abdou/arabic-tashkeel-dataset), the dataset is largely religious classical Arabic texts (~90%), so the model may not be perfect for Modern Standard Arabic or dialects.
|