library_name: transformers
tags: []
阿拉伯文本自动标注音标
该模型经过训练,可为阿拉伯文本添加音标(Tashkeel),从而提升可读性和发音准确性。它还可用于其他任务的数据合成训练模型,如文本转语音、语言建模等。
模型详情
本模型基于Google的FLAN-T5小模型,并在阿拉伯语标注数据集上训练而成。
分词器则基于该数据集的子集进行训练。
使用方法
通过以下代码可为阿拉伯文本添加音标:
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()
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 = [
"قل هو نبأ عظيم أنتم عنه معرضون",
"إنما يخشى الله من عباده العلماء",
"والله غالب على أمره ولكن أكثر الناس لا يعلمون",
"وعلم ءادم الأسماء كلها ثم عرضهم على الملائكة فقال أنبؤوني بأسماء هؤلاء إن كنتم صادقين",
"وإذ قال موسى لقومه يا قوم لم تؤذونني وقد تعلمون أني رسول الله إليكم",
"ولله يسجد ما في السماوات وما في الارض من دابة والملاءكة وهم لا يستكبرون",
"الذي أحسن كل شيء خلقه وبدأ خلق الإنسان من طين",
]
hadith_texts = [
"إن الله لا ينظر إلى صوركم وأموالكم ولكن ينظر إلى قلوبكم وأعمالكم",
"عن أبي ذر جندب بن جنادة، وأبي عبدالرحمن معاذ بن جبل رضي الله عنهما، عن رسول الله ﷺ، قال: اتق الله حيثما كنت وأتبع السيئة الحسنة تمحها، وخالق الناس بخلق حسن . رواه الترمذي وقال: حديث حسن.",
"المسلم من سلم المسلمون من لسانه ويده",
"المؤمن القوي خير وأحب إلى الله من المؤمن الضعيف ، وفي كل خير.",
]
arabic_texts = [
"إنما الأمم الأخلاق ما بقيت فإن هم ذهبت أخلاقهم ذهبوا",
"يعد من أكبر علماء الأندلس وأكبر علماء الإسلام تصنيفًا وتأليفًا بعد الطبري، وهو إمام حافظ. فقيه ظاهري، ومجدد القول به، بل محيي المذهب بعد زواله في الشرق. ومتكلم وأديب وشاعر ونسّابة وعالم برجال الحديث وناقد محلل بل وصفه البعض بالفيلسوف كما عد من أوائل من قال بكروية الأرض، كما كان وزير سياسي لبني أمية، سلك طريق نبذ التقليد وتحرير الأتباع، قامت عليه جماعة من المالكية وشـُرد عن وطنه. توفي لاحقاً في منزله في أرض أبويه منت ليشم المعروفة بمونتيخار حالياً، وهي عزبة قريبة من ولبة. وأصل جده يزيد فارسي، أسلم وأول من دخل منهم بلاد المغرب، وكانت بلدهم قرطبة فولد ابن حزم بها في سلخ نهاية رمضان من سنة أربع وثمانين وثلاثمائة."
]
texts = [
("古兰经文本", quran_texts),
("圣训文本", hadith_texts),
("阿拉伯文本", arabic_texts)
]
for title, texts in texts:
print(f"=============== {title} ===============")
for text in texts:
vocalized_result = vocalize_text(text, model, tokenizer)
print(f"输入: \n{text}")
print("="*10)
print(f"预测结果: \n{vocalized_result}")
print("="*10)
输出示例:
=============== 古兰经文本 ===============
输入:
قل هو نبأ عظيم أنتم عنه معرضون
==========
预测结果:
قُلْ هُوَ نَبَأٌ عَظِيمٌ أَنْتُمْ عَنْهُ مُعْرِضُونَ
==========
输入:
إنما يخشى الله من عباده العلماء
==========
预测结果:
إِنَّمَا يَخْشَى ٱللَّهَ مِنْ عِبَادِهِ ٱلْعُلَمَآءُ
==========
(后续输出示例省略...)
如示例所示,模型整体准确,但偶有误差,例如将وَعَلَّمَ
误标为وَعَلِّمْ
,或将وَ فِي كُلٍّ خَيْرٌ
误标为وَفِي كُلِّ خَيْرٍ
。
默认情况下,上述vocalize_text()
函数使用束搜索解码(num_beams=4
)。如需采用采样方式,可设置do_sample=True
并调整temperature
参数(取值0至1)。
局限性
如数据集卡片所述,该数据集主要包含宗教古典阿拉伯文本(约90%),因此模型对现代标准阿拉伯语或方言的处理可能不够完美。