در بخش قبلی، با اصول اولیه پردازش صوت با هوش مصنوعی آشنا شدیم و یاد گرفتیم چگونه با استفاده از کتابخانههای Datasets و Transformers، یکی از محبوبترین ابزارهای هوش مصنوعی صوتی، با مجموعه دادههای صوتی کار کنیم. در این مسیر، مفاهیمی مانند نرخ نمونهبرداری، دامنه، عمق بیت، شکل موج و اسپکتروگرامها را بررسی کردیم و دیدیم چگونه دادهها را برای استفاده در مدلهای از پیش آموزشدیده صوتی (pretrained audio models) آماده کنیم. در این مرحله قصد داریم به بررسی وظایف خاصی که مدلهای Transformers در حوزه پردازش صوت انجام میدهند بپردازیم.
دستهبندی صوتی(Audio classification): یکی از وظایف حیاتی پردازش صوت ، طبقهبندی آسان کلیپهای صوتی به دستههای مختلفاست؛ مثلاً تشخیص صدای پارس سگ یا میوی گربه، یا تعیین سبک موسیقی یک آهنگ.
تشخیص خودکار گفتار (ASR): این مورد را زیاد شنیدین و یک از کاربردهایی است که از قدیم ایام با دستیارهای صوتی گوشی های موبایل با آن آشنا هستید، بله تبدیل کلیپهای صوتی به متن بهصورت خودکار؛ مثلاً تبدیل صدای یک نفر به متن «امروز حالت چطوره؟».
تفکیک گویندگان (Speaker Diarization): یکی از پیچیده ترین وظایف پردازش صوت تشخیص گوینده اصلی در بین گویندگان یا نویزهای موجود در فایل صوتی است. با Transformers میتوانید تشخیص دهید در هر لحظه کدام گوینده در حال صحبت است. مثلاً تفکیک بین «آلیس» و «باب» در یک مکالمه.
تبدیل متن به گفتار (TTS): تبدیل یک متن به صوت انسانی بدون نیاز به گوینده، در این کاربرد شما می توانید هر متنی را به صوت با لهجه و زبان مدنظر خود تبدیل کنید یکی از کاربردهایی که برای تولیدکنندگان محتوا بسیار ارزشمند است.
در درس های آینده، یاد میگیرید چطور با استفاده از تابع pipeline() در Transformers از مدلهای از پیش آموزشدیده (pretrain) برای برخی از این وظایف استفاده کنید؛ بهطور خاص، برای دستهبندی صوتی، تشخیص گفتار، و تولید صوت.
طبقهبندی صوت با استفاده از pipeline
اگر تاکنون با داده های عظیم در سایر پردازش های هوش مصنوعی رو به رو بوده باشید یا مدل های با نظارت یا بدون نظارت را در هر حوزه ای به کاربرده باشید، با مفاهیمی مانند برچسب یا لیبل داده آشنا هستید. در اینجا نیز طبقهبندی صوت به معنای نسبت دادن یک یا چند برچسب به یک فایل صوتی بر اساس محتوای آن است. این برچسبها میتوانند مربوط به دستههای مختلف صدا مانند موسیقی، گفتار یا نویز باشند، یا دستههای خاصتر مثل صدای پرندگان یا صدای موتور خودرو.
به این ترتیب ما هر شکل موج را با محتوای آن مرتبط کردیم تا داده های صوتی برای پردازش با مدل های هوش مصنوعی، قاعده ای قابل تشخیص داشته باشند. قبل از اینکه وارد جزئیات عملکرد محبوبترین مدلهای ترنسفورمر صوتی شویم و قبل از تنظیم دقیق مدل دلخواه، بیایید ببینیم چگونه میتوانید فقط با چند خط کد و با استفاده از کتابخانه Transformers از یک مدل از پیش آموزشدیده (pretrain) برای طبقهبندی صوت استفاده کنید.
بیایید از همان مجموعه داده MINDS-14 که در بخش قبلی بررسی کردید استفاده کنیم. اگر یادتان باشد، MINDS-14 شامل ضبطهایی از افرادی است که به یک سیستم بانکداری الکترونیکی به زبانها و لهجههای مختلف سوال میپرسند و برای هر ضبط یک دستهبندی خاص (intent_class) مشخص شده است. ما میتوانیم این ضبطها را بر اساس هدف تماس طبقهبندی کنیم.
همانطور که قبلاً گفتیم، ابتدا زیرمجموعه داده en-AU را بارگذاری میکنیم تا pipeline را امتحان کنیم، و سپس نرخ نمونهبرداری آن را به ۱۶ کیلوهرتز افزایش میدهیم که مورد نیاز اکثر مدلهای گفتار است. به مقاله آشنایی با کتابخانه Datasets در پردازش های هوش مصنوعی داده های صوتی مراجعه کنید.
کد مربوط به استفاده از پایپ لاین:
from datasets import load_dataset
from datasets import Audio
minds = load_dataset(“PolyAI/minds14″, name=”en-AU”, split=”train”)
minds = minds.cast_column(“audio”, Audio(sampling_rate=16_000))
با بارگذاری متد pipeline از کتابخانه transformers می توان از audio-classification استفاده کنیم. کلاس audio-classification فرآیند دسته بندی صوت را بهینه تر می کند. در این مثال، ما به مدلی نیاز داریم که مخصوص تشخیص هدف صحبتها (intent classification) و روی مجموعه داده MINDS-14 آموزش دیده باشد. خوشبختانه یک مدل آماده در Hub هاگین فیس وجود دارد که همین کار را انجام میدهد! حالا بیایید با استفاده از تابع pipeline() آن مدل را بارگذاری کنیم:
from transformers import pipeline
classifier = pipeline(
“audio-classification”,
model=”anton-l/xtreme_s_xlsr_300m_minds14″,
)
pipeline انتظار دارد که دادههای صوتی بهصورت آرایه NumPy وارد شوند. خبر خوب! اینکه همه مراحل پیشپردازش دادههای صوتی خام بهطور خودکار و راحت توسط همین pipeline انجام میشود. حالا بیایید یک ردیف یا صوت از مجموعه داده ها را انتخاب کنیم ( قبلا هم این کار رو در دروس گذشته انجام دادیم حتما به خاطر دارید):
example = minds[0]
اگر ساختار مجموعه داده را به خاطر داشته باشید، داده صوتی خام بهصورت آرایه NumPy در مسیر [“audio”][“array”] ذخیره شده است. حالا کافی است همان را مستقیماً به مدل طبقهبندیکننده بدهیم:
classifier(example[“audio”][“array”])
خروجی کد
[
{“score”: 0.9631525278091431, “label”: “pay_bill”},
{“score”: 0.02819698303937912, “label”: “freeze”},
{“score”: 0.0032787492964416742, “label”: “card_issues”},
{“score”: 0.0019414445850998163, “label”: “abroad”},
{“score”: 0.0008378693601116538, “label”: “high_value_payment”},
]
مدل با اطمینان بالا تشخیص داده که تماسگیرنده قصد داشته درباره پرداخت قبض خود اطلاعات کسب کند( در واقع مدل این ت خاص را در دسته پرداخت قبض یا صورت الحساب کلاس بندی کرده اما آیا واقعا این صوت همچین برچسبی دارد؟). حالا بیایید ببینیم برچسب واقعی (واقعیترین هدف تماس) برای این نمونه چه بوده است:
نگاهی به برچسب واقعی داده صوتی:
id2label = minds.features[“intent_class”].int2str
id2label(example[“intent_class”])
خروجی:
“pay_bill”
عالیه! برچسب اصلی و برچسب به دست آمده از مدل طبقه بندی ما یکی هستند. اما آیا همیشه و برای تمام داده های صوتی که ما داریم مدل های pretrain برای طبقه بندی درست وجود دارند؟ مسلما خیر، این موضوع در داده های شخص سازی شده بیشتر هم هست. در این حالت از fine-tune کردن مدل ها استفاده میکنیم. در ادامه این بخش هایآموزشی پردازش صوت به این موضوع هم میپردازیم. پس نگران نباشید و درسنامه ها را دنبال کنید. در س بعدی به یکی از رایجترین وظایف در پردازش گفتار نگاهی بیندازیم: تشخیص خودکار گفتار (ASR).
درس قبل: مزایای و نحوه استفاده از stream mode در پردازش صوت
درس بعدی: تشخیص خودکار گفتار (ASR) – زمان انتشار هفته آینده