Parler-TTS هو نموذج خفيف الوزن لتحويل النص إلى كلام (TTS) يمكنه إنشاء خطاب صوتي طبيعي عالي الجودة بأسلوب متحدث معين (الجنس، درجة الصوت، أسلوب التحدث، إلخ). إنه استنساخ للعمل من ورقة توجيه اللغة الطبيعية لتحويل النص إلى كلام عالي الدقة مع التعليقات التوضيحية الاصطناعية بقلم دان ليث وسيمون كينج، من Stability AI وجامعة إدنبرة على التوالي.
على عكس نماذج TTS الأخرى، يعد Parler-TTS إصدارًا مفتوح المصدر بالكامل . يتم إصدار جميع مجموعات البيانات والمعالجة المسبقة وكود التدريب والأوزان علنًا بموجب ترخيص متساهل، مما يمكّن المجتمع من البناء على عملنا وتطوير نماذج تحويل النص إلى كلام (TTS) القوية الخاصة بهم.
يحتوي هذا المستودع على كود الاستدلال والتدريب الخاص بـ Parler-TTS. وهو مصمم لمرافقة مستودع البيانات-الكلام لشرح مجموعة البيانات.
مهم
08/08/2024: نحن فخورون بإطلاق نقطتي تفتيش Parler-TTS جديدتين:
تم تدريب نقاط التفتيش هذه على 45 ألف ساعة من بيانات الكتب الصوتية.
بالإضافة إلى ذلك، تم تحسين التعليمات البرمجية من أجل إنشاء أسرع بكثير: لقد أضفنا التوافق مع SDPA وFlash Attention 2، بالإضافة إلى القدرة على تجميع النموذج.
يتمتع Parler-TTS بتبعيات خفيفة الوزن ويمكن تثبيتها في سطر واحد:
pip install git+https://github.com/huggingface/parler-tts.git
سيحتاج مستخدمو Apple Silicon إلى تشغيل أمر متابعة للاستفادة من إصدار PyTorch (2.4) الليلي لدعم bfloat16:
pip3 install --pre torch torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu
نصيحة
يمكنك تجربتها مباشرة في عرض توضيحي تفاعلي هنا!
يعد استخدام Parler-TTS أمرًا بسيطًا مثل "bonjour". ما عليك سوى تثبيت المكتبة مرة واحدة:
pip install git+https://github.com/huggingface/parler-tts.git
تم تدريب Parler-TTS على توليد الكلام بميزات يمكن التحكم فيها من خلال مطالبة نصية بسيطة، على سبيل المثال:
import torch
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
import soundfile as sf
device = "cuda:0" if torch . cuda . is_available () else "cpu"
model = ParlerTTSForConditionalGeneration . from_pretrained ( "parler-tts/parler-tts-mini-v1" ). to ( device )
tokenizer = AutoTokenizer . from_pretrained ( "parler-tts/parler-tts-mini-v1" )
prompt = "Hey, how are you doing today?"
description = "A female speaker delivers a slightly expressive and animated speech with a moderate speed and pitch. The recording is of very high quality, with the speaker's voice sounding clear and very close up."
input_ids = tokenizer ( description , return_tensors = "pt" ). input_ids . to ( device )
prompt_input_ids = tokenizer ( prompt , return_tensors = "pt" ). input_ids . to ( device )
generation = model . generate ( input_ids = input_ids , prompt_input_ids = prompt_input_ids )
audio_arr = generation . cpu (). numpy (). squeeze ()
sf . write ( "parler_tts_out.wav" , audio_arr , model . config . sampling_rate )
ولضمان اتساق المتحدثين عبر الأجيال، تم تدريب نقطة التفتيش هذه أيضًا على 34 متحدثًا، يتميزون بالاسم. تشمل القائمة الكاملة للمتحدثين المتاحين: لورا، غاري، جون، ليا، كارين، ريك، بريندا، ديفيد، إيلين، جوردان، مايك، يان، جوي، جيمس، إريك، لورين، روز، ويل، جايسون، آرون، ناعومي، أليسا، باتريك، جيري، تينا، جينا، بيل، توم، كارول، باربرا، ريبيكا، آنا، بروس، إميلي.
للاستفادة من هذا، ما عليك سوى تعديل وصف النص الخاص بك لتحديد مكبر الصوت الذي ستستخدمه: Jon's voice is monotone yet slightly fast in delivery, with a very close recording that almost has no background noise.
يمكنك استبدال "Jon" بأي من الأسماء الواردة في القائمة أعلاه للاستفادة من خصائص المتحدث المختلفة. يتمتع كل متحدث بصفات صوتية فريدة يمكن الاستفادة منها لتناسب احتياجاتك الخاصة. للحصول على معلومات أكثر تفصيلاً حول أداء مكبر الصوت مع تناسق الصوت، يرجى الرجوع إلى دليل الاستدلال.
import torch
from parler_tts import ParlerTTSForConditionalGeneration
from transformers import AutoTokenizer
import soundfile as sf
device = "cuda:0" if torch . cuda . is_available () else "cpu"
model = ParlerTTSForConditionalGeneration . from_pretrained ( "parler-tts/parler-tts-mini-v1" ). to ( device )
tokenizer = AutoTokenizer . from_pretrained ( "parler-tts/parler-tts-mini-v1" )
prompt = "Hey, how are you doing today?"
description = "Jon's voice is monotone yet slightly fast in delivery, with a very close recording that almost has no background noise."
input_ids = tokenizer ( description , return_tensors = "pt" ). input_ids . to ( device )
prompt_input_ids = tokenizer ( prompt , return_tensors = "pt" ). input_ids . to ( device )
generation = model . generate ( input_ids = input_ids , prompt_input_ids = prompt_input_ids )
audio_arr = generation . cpu (). numpy (). squeeze ()
sf . write ( "parler_tts_out.wav" , audio_arr , model . config . sampling_rate )
نصائح :
لقد قمنا بإعداد دليل استدلالي لجعل عملية التوليد أسرع. فكر في SDPA وtorch.compile والبث المباشر!
يحتوي مجلد التدريب على كافة المعلومات اللازمة لتدريب أو تحسين نموذج Parler-TTS الخاص بك. يتكون من:
مهم
TL;DR: بعد اتباع خطوات التثبيت، يمكنك إعادة إنتاج وصفة تدريب Parler-TTS Mini v1 باستخدام سطر الأوامر التالي:
accelerate launch ./training/run_parler_tts_training.py ./helpers/training_configs/starting_point_v1.json
مهم
يمكنك أيضًا اتباع دليل الضبط الدقيق هذا في مثال مجموعة بيانات مكبر الصوت الأحادي.
تعتمد هذه المكتبة على عدد من عمالقة المصادر المفتوحة، الذين نود أن نعرب لهم عن خالص شكرنا لتوفير هذه الأدوات!
شكر خاص ل:
إذا وجدت هذا المستودع مفيدًا، فيرجى التفكير في الاستشهاد بهذا العمل وأيضًا بمقالة Stability AI الأصلية:
@misc{lacombe-etal-2024-parler-tts,
author = {Yoach Lacombe and Vaibhav Srivastav and Sanchit Gandhi},
title = {Parler-TTS},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/huggingface/parler-tts}}
}
@misc{lyth2024natural,
title={Natural language guidance of high-fidelity text-to-speech with synthetic annotations},
author={Dan Lyth and Simon King},
year={2024},
eprint={2402.01912},
archivePrefix={arXiv},
primaryClass={cs.SD}
}
نرحب بالمساهمات، حيث يوفر المشروع العديد من الإمكانيات للتحسين والاستكشاف.
وهي أننا نبحث عن طرق لتحسين الجودة والسرعة: