Transformers documentation
DAC
نُشر هذا النموذج في أوراق HF في 11 يونيو 2023، وأُضيف إلى مكتبة Hugging Face Transformers في 19 أغسطس 2024.
DAC
نظرة عامة
قُدِّم نموذج DAC في Descript Audio Codec: High-Fidelity Audio Compression with Improved RVQGAN بواسطة Rithesh Kumar وPrem Seetharaman وAlejandro Luebs وIshaan Kumar وKundan Kumar.
يُعدّ نموذج Descript Audio Codec (DAC) أداةً قوية لضغط بيانات الصوت، مما يجعله كفاءةً عاليةً في التخزين والنقل. فعن طريق ضغط صوت بتردد 44.1 KHz إلى رموز (tokens) باستخدام عرض نطاق لا يتجاوز 8kbps، يتيح نموذج DAC معالجةً صوتيةً عالية الجودة مع تقليل بصمة البيانات بشكل كبير. وهذا مفيدٌ بشكل خاص في السيناريوهات التي يكون فيها عرض النطاق محدودًا أو مساحة التخزين ثمينة، كما هو الحال في تطبيقات البث المباشر، والاجتماعات عن بُعد، وأرشفة مجموعات البيانات الصوتية الكبيرة.
المستخلص من الورقة البحثية هو كالتالي:
تم استخدام نماذج اللغة بنجاح لنمذجة الإشارات الطبيعية، مثل الصور والكلام والموسيقى. يُعدّ نموذج الضغط العصبي عالي الجودة مكوّنًا رئيسيًا في هذه النماذج، إذ يمكنه ضغط الإشارات الطبيعية عالية الأبعاد إلى رموز منفصلة ذات أبعاد أقل. وفي هذا السياق، نطرح خوارزمية ضغط صوتي عصبي عالمية عالية الدقة تحقق ضغطًا بنسبة ~90x للصوت بتردد 44.1 KHz إلى رموز بعرض نطاق يبلغ 8kbps فقط. نحقق ذلك من خلال دمج التطورات في توليد الصوت عالي الدقة مع تقنيات تكميم متجهي أفضل من مجال الصور، إلى جانب تحسينات على خسائر الخصومة وإعادة البناء. نضغط جميع المجالات (الكلام، البيئة، الموسيقى، إلخ) باستخدام نموذج عالمي واحد، مما يجعله قابلًا للتطبيق على نطاق واسع في النمذجة التوليدية لجميع الأصوات. نقارن بخوارزميات الضغط الصوتي المنافسة، ونجد أن منهجيتنا تتفوق عليها بشكل كبير. نوفر اختبارات استنفاد شاملة لكل خيار تصميمي، بالإضافة إلى أكواد مفتوحة المصدر وأوزان النماذج المدربة. نأمل أن تُمهّد أعمالنا الطريق للجيل القادم من نمذجة الصوت عالي الدقة.
تمت مساهمة هذا النموذج من قِبل Kamil Akesbi. يمكن العثور على الكود الأصلي هنا.
هيكل النموذج
يتكوّن نموذج Descript Audio Codec (DAC) من ثلاث مراحل متميزة:
- نموذج المُشفِّر: يقوم هذا الممرّض بضغط الصوت المُدخل، مما يقلّل حجمه مع الاحتفاظ بالمعلومات الأساسية.
- نموذج مُكمِّم المتجهات المتبقية (RVQ): يعمل بالتوازي مع المُشفِّر، حيث يُكمِّم الرموز الكامنة للصوت، مما يُحسّن الضغط ويضمن إعادة بناء عالية الجودة.
- نموذج المُفكِّك: يعيد هذا المرحلية النهائية بناء الصوت من شكله المضغوط، مستعيدًا إياه إلى حالة تشبه المدخل الأصلي بشكل وثيق.
مثال على الاستخدام
فيما يلي مثال سريع على كيفية ترميز وفك ترميز صوت باستخدام هذا النموذج:
from datasets import Audio, load_dataset
from transformers import AutoProcessor, DacModel
librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
model = DacModel.from_pretrained("descript/dac_16khz", device_map="auto")
processor = AutoProcessor.from_pretrained("descript/dac_16khz")
librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=processor.sampling_rate))
audio_sample = librispeech_dummy[-1]["audio"]["array"]
inputs = processor(raw_audio=audio_sample, sampling_rate=processor.sampling_rate, return_tensors="pt").to(model.device)
encoder_outputs = model.encode(inputs["input_values"])
# Get the intermediate audio codes
audio_codes = encoder_outputs.audio_codes
# Reconstruct the audio from its quantized representation
audio_values = model.decode(encoder_outputs.quantized_representation)
# or the equivalent with a forward pass
audio_values = model(inputs["input_values"]).audio_valuesDacConfig
فئة transformers.DacConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneencoder_hidden_size: int = 64downsampling_ratios: list[int] | tuple[int, ...] = (2, 4, 8, 8)decoder_hidden_size: int = 1536n_codebooks: int = 9codebook_size: int = 1024codebook_dim: int = 8quantizer_dropout: float | int = 0.0commitment_loss_weight: float = 0.25codebook_loss_weight: float = 1.0sampling_rate: int = 16000 )
المعاملات
- encoder_hidden_size (
int، اختياري، القيمة الافتراضية64) — أبعاد التمثيلات المخفية. - downsampling_ratios (
list[int], اختياري، القيمة الافتراضية[2, 4, 8, 8]) — النسب المستخدمة لتقليل حجم البيانات في المُشفِّر. تُستخدم هذه النسب بالترتيب العكسي لزيادة حجم البيانات في المُفكِّك. - decoder_hidden_size (
int, اختياري، القيمة الافتراضية1536) — أبعاد التمثيلات المخفية. - n_codebooks (
int، اختياري، القيمة الافتراضية9) — عدد كُتُب الرموز المتوازية التي يستخدمها النموذج. - codebook_size (
int، اختياري، القيمة الافتراضية1024) — عدد كتيّبات الرموز المتوازية التي يستخدمها النموذج. - codebook_dim (
int، اختياري، القيمة الافتراضية8) — أبعاد متجه التضمين لكل كتاب رموز. - quantizer_dropout (
bool, اختياري، القيمة الافتراضية 0) — ما إذا كان سيتم تطبيق dropout على المُكمِّم (quantizer). - commitment_loss_weight (
float, اختياري، القيمة الافتراضية 0.25) — وزن حد خسارة الالتزام في دالة خسارة VQVAE. - codebook_loss_weight (
float، اختياري، القيمة الافتراضية 1.0) — وزن حد خسارة كود الكتاب (codebook loss) في دالة خسارة VQVAE. - sampling_rate (
int، اختياري، القيمة الافتراضية16000) — معدل أخذ العينات الذي يجب أن تُرقَم به ملفات الصوت، ويُعبَّر عنه بالهرتز (Hz).
هذه فئة الإعدادات المخزنة لإعدادات نموذج DacModel. تُستخدم لاستحداث نموذج Dac وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ descript/dac_16khz
ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.
مثال:
>>> from transformers import DacModel, DacConfig
>>> # Initializing a "descript/dac_16khz" style configuration
>>> configuration = DacConfig()
>>> # Initializing a model (with random weights) from the "descript/dac_16khz" style configuration
>>> model = DacModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configDacFeatureExtractor
فئة transformers.DacFeatureExtractor
< source >( feature_size: int = 1sampling_rate: int = 16000padding_value: float = 0.0hop_length: int = 512**kwargs )
المعاملات
- feature_size (
int، اختياري، القيمة الافتراضية 1) — أبعاد الميزة للميزات المستخرجة. استخدم 1 للمono و2 لـ stereo. - sampling_rate (
int, اختياري، القيمة الافتراضية 16000) — معدل أخذ العينات الذي يجب أن تُرقَم به الموجة الصوتية، ويُعبَّر عنه بالهرتز (Hz). - padding_value (
float، اختياري، القيمة الافتراضية 0.0) — القيمة المستخدمة للتعبئة. - hop_length (
int، اختياري، القيمة الافتراضية 512) — طول التداخل بين النوافذ المتتالية.
ينشئ مستخرج ميزات Dac.
يرث مستخرج الميزات هذا من SequenceFeatureExtractor الذي يحتوي على معظم الطرق الرئيسية. ينبغي للمستخدمين الرجوع إلى هذه الفئة الأصلية لمزيد من المعلومات حول تلك الطرق.
__call__
< source >( raw_audio: numpy.ndarray | list[float] | list[numpy.ndarray] | list[list[float]]padding: bool | str | transformers.utils.generic.PaddingStrategy | None = Nonetruncation: bool | None = Falsemax_length: int | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = Nonesampling_rate: int | None = None )
المعاملات
- raw_audio (
np.ndarray،list[float]،list[np.ndarray]،list[list[float]]) — التسلسل أو الدفعة من التسلسلات المراد معالجتها. يمكن أن يكون كل تسلسل مصفوفة numpy، أو قائمة من قيم float، أو قائمة من مصفوفات numpy، أو قائمة من قوائم قيم float. يجب أن تكون المصفوفة numpy من الشكل(num_samples,)للصوت أحادي القناة (feature_size = 1)، أو(2, num_samples)للصوت ثنائي القناة (feature_size = 2). - padding (
bool,strأو PaddingStrategy, اختياري, الافتراضي هوTrue) — اختر استراتيجية لحشو التسلسلات المُعادَة (وفقًا لجانب الحشو وفهرس الحشو الخاص بالنموذج) من بين الخيارات التالية:Trueأو'longest': يتم ملء التسلسلات حتى أطول تسلسل في الدفعة (أو لا يتم أي ملء إذا تم تقديم تسلسل واحد فقط).'max_length': يتم ملء النص حتى الطول الأقصى المحدد عبر الحجةmax_lengthأو حتى الطول الأقصى المقبول لإدخال النموذج إذا لم تُقدَّم تلك الحجة.Falseأو'do_not_pad'(الافتراضي): لا يوجد حشو (أي، يمكن إخراج دفعة تحتوي على تسلسلات بطول مختلف).
- truncation (
bool، اختياري، القيمة الافتراضيةFalse) — يفعّل القصّ لقطع تسلسلات الإدخال الأطول منmax_lengthإلىmax_length. - max_length (
int، اختياري) — الحد الأقصى لطول القائمة المُعادَة وطول الحشو بشكل اختياري (انظر أعلاه). - return_tensors (
strأو TensorType, اختياري, الافتراضي هو 'pt') — إذا تم تعيينه، فسيُرجع تينسورات بدلاً من قائمة من الأعداد الصحيحة في بايثون. القيم المقبولة هي:'pt': إرجاع كائناتtorch.Tensorمن PyTorch.'np': إرجاع كائناتnp.ndarrayمن نوع Numpy.
- sampling_rate (
int, اختياري) — معدل أخذ العينات الذي تم به أخذ عينات مدخلaudio. يُوصى بشدة بتمريرsampling_rateعند استدعاء الأمامي لمنع الأخطاء الصامتة.
الطريقة الرئيسية لتحويل السلسلة أو السلاسل إلى ميزات وتجهيزها للنموذج.
DacModel
فئة transformers.DacModel
< source >( config: DacConfig )
المعاملات
- config (DacConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج DAC (Descript Audio Codec).
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
decode
< source >( quantized_representation: typing.Optional[torch.Tensor] = Noneaudio_codes: typing.Optional[torch.Tensor] = Nonereturn_dict: bool | None = None ) → DacDecoderOutput or tuple(torch.Tensor)
المعاملات
- quantized_representation (
torch.Tensorمن الشكل(batch_size, dimension, time_steps)، اختياري) — تمثيل مستمر مُكمَّم للإدخال. - audio_codes (
torch.Tensorمن الشكل(batch_size, num_codebooks, time_steps)، اختياري) — مؤشرات كُتُب الرموز (codebook indices) لكل كُتُب رموز، وتمثل التمثيل المنفصل المُكمَّم للإدخال. يجب تقديم هذا المعامل إذا كنت ترغب في فك الترميز مباشرةً من رموز الصوت (حيث سيحل محل quantized_representation). - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاعDacDecoderOutputبدلاً من tuple عادي.
يعيد
DacDecoderOutput أو tuple(torch.Tensor)
DacDecoderOutput أو مجموعة (tuple) من
torch.Tensor (إذا تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة
تعتمد على الإعداد (DacConfig) والمدخلات.
- audio_values (
torch.Tensorمن الشكل(batch_size, input_length)، اختياري) — قيم الصوت المُفكّكة، المُستخرجة باستخدام جزء المُفكّك في Dac.
encode
< source >( input_values: Tensorn_quantizers: int | None = Nonereturn_dict: bool | None = None ) → DacEncoderOutput or tuple(torch.Tensor)
المعاملات
- input_values (
torch.Tensor of shape(batch_size, 1, time_steps)`) — بيانات الصوت المدخلة للتشفير، - n_quantizers (
int، اختياري) — عدد مُكمّسات (quantizers) المطلوب استخدامه. إذا كانت القيمة None، فسيتم استخدام جميع المُكمّسات. القيمة الافتراضية هي None. - return_dict (
bool، اختياري) — ما إذا كان يجب إرجاع ModelOutput بدلاً من tuple عادي.
يعيد
DacEncoderOutput أو tuple(torch.Tensor)
DacEncoderOutput أو مجموعة (tuple) من
torch.Tensor (إذا تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة
تعتمد على الإعداد (DacConfig) والمدخلات.
- loss (
torch.Tensor، اختياري) — الخسارة من نموذج المُشفِّر، وتتكون من المزيج الموزون لخسارتَي الالتزام وكتاب الرموز. - quantized_representation (
torch.Tensorof shape(batch_size, dimension, time_steps), اختياري) — تمثيل مستمر مُكمَّم للمدخل. - audio_codes (
torch.Tensorمن الشكل(batch_size, num_codebooks, time_steps)، اختياري) — فهارس كودبوك لكل كودبوك (تمثيل منفصل مُكمَّم للإدخال). - projected_latents (
torch.Tensorof shape(batch_size, num_codebooks * dimension, time_steps), اختياري) — الكامنات المُسقطَة (تمثيل مستمر للمدخل قبل التكميم).
forward
< source >( input_values: Tensorn_quantizers: int | None = Nonereturn_dict: bool | None = None ) → DacOutput or tuple(torch.Tensor)
المعاملات
- input_values (
torch.Tensorمن الشكل(batch_size, 1, time_steps)) — بيانات الصوت المراد ترميزها. - n_quantizers (
int، اختياري) — عدد مُكمّسات (quantizers) التي يجب استخدامها. إذا كانتNone، تُستخدم جميع المُكمّسات. القيمة الافتراضية هيNone. - return_dict (
bool، اختياري) — ما إذا كان يجب إرجاع ModelOutput بدلاً من tuple عادي.
يعيد
DacOutput أو tuple(torch.Tensor)
DacOutput أو مجموعة (tuple) من
torch.Tensor (في حال تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة
تعتمد على الإعداد (DacConfig) والمدخلات.
تتجاوز طريقة DacModel الخاصة بالتقديم (forward) الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.
- loss (
torch.Tensor، اختياري) — الخسارة من نموذج المُشفِّر، وتتكون من المزيج الموزون لخسارتَي الالتزام وكتاب الرموز. - audio_values (
torch.Tensorمن الشكل(batch_size, input_length)) — بيانات الصوت المُعاد بناؤها. - quantized_representation (
torch.Tensorof shape(batch_size, dimension, time_steps)) — تمثيل مستمر مُكمَّم للإدخال. - audio_codes (
torch.LongTensorمن الشكل(batch_size, num_codebooks, time_steps)) — فهارس كودبوك لكل كودبوك (تمثيل منفصل مُكمَّم للإدخال). - projected_latents (
torch.Tensorof shape(batch_size, num_codebooks * dimension, time_steps)) — الكامنات المُساقطة (تمثيل مستمر للمدخل قبل التكميم).
أمثلة:
>>> from datasets import load_dataset, Audio
>>> from transformers import DacModel, AutoProcessor
>>> librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> model = DacModel.from_pretrained("descript/dac_16khz")
>>> processor = AutoProcessor.from_pretrained("descript/dac_16khz")
>>> librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=processor.sampling_rate))
>>> audio_sample = librispeech_dummy[-1]["audio"]["array"]
>>> inputs = processor(raw_audio=audio_sample, sampling_rate=processor.sampling_rate, return_tensors="pt")
>>> encoder_outputs = model.encode(inputs["input_values"])
>>> # Get the intermediate audio codes
>>> audio_codes = encoder_outputs.audio_codes
>>> # Reconstruct the audio from its quantized representation
>>> audio_values = model.decode(encoder_outputs.quantized_representation)
>>> # or the equivalent with a forward pass
>>> audio_values = model(inputs["input_values"]).audio_values