در این آموزش، یاد میگیریم که چطور میتونیم یک برنامه با کمک مدلهای هوش مصنوعی درست کنیم که قادر باشه هویت یک شخص رو تشخیص بده! شاید هر روز در شبکههای اجتماعی خود، برنامه و ابزارهای هوش مصنوعی متعددی رو میبینید که کارهای جالبی میکنند؛ از رنگی کردن تصویر گرفته تا ساخت عکس با پرامت یا حتی یه چت بات مثل ChatGPT! در این مقاله از سایت کد اکسپلور، یاد میگیریم که چطور با استفاده از مدلهای از پیش آموزشدیده، یک برنامه بسازیم که بتونه هویت گوینده رو تشخیص بده. چون این آموزش رو به چند پارت تقسیم میکنیم، در این پارت اول فقط بیس اصلی برنامه رو درست میکنیم و در پارتهای بعد، برنامه رو کاملتر میکنیم.
پیش نیازها
- دسترسی به گوگل کلب (Google Colab) یا سیستم خودتون (البته اگه کارت گرافیک مناسبی دارید!)
- آگاهی نسبی به پایتون و هوش مصنوعی
قدم اول
در ابتدا نیاز دارید که کتابخانههای لازم رو نصب کنید. دو دستور زیر رو در یه سلول Jupyter Notebook وارد کنید و اجرا کنید. مطمئن بشید که خروجی موفقیتآمیزه!
!pip install git+https://github.com/speechbrain/speechbrain.git@develop !pip install pydub
قدم دوم
کتابخانههای موردنیاز رو وارد برنامه کنید:
import torchaudio from speechbrain.inference.speaker import EncoderClassifier from speechbrain.inference.speaker import SpeakerRecognition from pydub import AudioSegment
قدم سوم(اختیاری)
اگر صدایی که ضبط میکنید فرمت wav نیست، میتونید با این کد صدای مورد نظرتون رو به فرمت wav تبدیل کنید. برای معرفی هویت به مدل، یک نمونه از صدای اون شخص نیازه. اگر تعداد صداها زیاد باشه، میتونید یک فولدر از صداها رو داشته باشید و یک حلقه روی همهی اونها بزنید.
همچنین بخوانید: آغاز تست رایگان چتبات هوش مصنوعی Grok توسط X
نکته: اگر در Google Colab این کد رو اجرا میکنید، فایلهای صوتی رو باید در Google Drive آپلود کنید و دسترسی به درایو رو در Colab فعال کنید!
# Load the .m4p file audio = AudioSegment.from_file("/content/test3.m4a", format="m4a") # Note: Use "m4a" format for pydub # Export as .wav audio.export("/content/output3.wav", format="wav")
قدم چهارم
در این مرحله، مدل خودتون رو دانلود میکنید و سیگنال صدای موردنظر رو (که در قدم سوم تبدیل به wav کردید) Encode و Embed میکنید تا مدل بتونه ویژگیهای منحصر به فرد صدای گوینده مثل لحن، تون، و پیچ رو به دست بیاره.
اصطلاح Embedding
Embedding یا امضای صوتی، یک نمایش عددی از صدای هر فرده که ویژگیهای منحصربهفرد اون مثل لحن، تون و پیچ رو خلاصه میکنه. این وکتورهای embedding به مدل کمک میکنن که صدای هر فرد رو از بقیه تشخیص بده؛ دقیقا مثل اثر انگشت یا امضای اختصاصی، این وکتورها صدای هر فرد رو منحصر بهفرد نشون میده تا مدل بتونه شباهت یا تفاوت رو تشخیص بده.
classifier = EncoderClassifier.from_hparams(source="speechbrain/spkrec-ecapa-voxceleb") signal, fs =torchaudio.load('/content/output.wav') embeddings = classifier.encode_batch(signal)
قدم پنجم و خروجی
بعد از Embed کردن نمونهها، وقت مقایسه رسیده! یک صدای دیگه از یک فرد دیگه ضبط کنید و با صدای نمونه مقایسه کنید. خروجی شامل Score و Prediction خواهد بود که نتیجهی مقایسه رو برمیگردونه. اگر مقدار tensor([True])
برگردونه، مدل تشخیص میده که هر دو صدا متعلق به یک شخص هستن. Score هم سنجش شباهت دو صدای Embed شده و نمونهی جدیده که هر چه این عدد به ۱ نزدیکتر باشه، مدل از شباهت بیشتر مطمئن هست.
اصطلاح Score
نمره شباهت یا Score عددی هست که میزان شباهت دو صدا رو نشون میده. هر چی این نمره به ۱ نزدیکتر باشه، مدل بیشتر مطمئن میشه که هر دو صدا متعلق به یک نفر هستن. این عدد بر اساس فاصلهی بین وکتورهای embedding دو صدا محاسبه میشه؛ هرچی فاصله کمتر باشه، شباهت بیشتره!
verification = SpeakerRecognition.from_hparams(source="speechbrain/spkrec-ecapa-voxceleb", savedir="pretrained_models/spkrec-ecapa-voxceleb") # Different Speakers score, prediction = verification.verify_files("/content/output.wav", "/content/another.wav")
دیگه چی؟
از اونجایی که این مقاله، میتونه بهبودهایی داشته باشه و برای جلوگیری از سنگین شدنش، تصمیم داریم تا مقاله و این آموزش رو در پارتهای بعدی کاملتر کنیم. در پارتهای بعدی یاد میگیریم که:
- پیش پردازش صوت ( مثل حذف نویز و نرمالسازی)
- تاثیر زبان و لهجه ( در واقع Fine Tune کردن با دیتاست خودمون)
- ورودی های 16kHz برای مدل
- اضافه (Voice Activity Detection)VAD
- اضافه کردن افراد مختلف و مشخص شدن هویت گوینده بین چندین حالت منطقی
صحبت آخر
در این پارت به صورت کلی یاد گرفتیم چطور با کمک مدلهای آماده، برنامهی تشخیص هویت افراد از طریق صدای اونها رو بسازیم. از نصب کتابخانهها تا کدی که مدل بتونه ویژگیها و الگوهای صوتی یه فرد رو تشخیص بده، رو بررسی کردیم. حالا میتونید یه ویس جدید به مدل بدید و شباهت رو مقایسه کنید و ببینید که آیا هر دو صدا از یک شخص هستن یا نه!
اگه پیشنهادی دارید یا مشکلی در کدها میبینید یا حتی بخشی رو متوجه نشدید، حتما کامنت بزارید. مدلها هم در اولین Epoch، تمام اطلاعات رو یاد نگرفتن!