পাইথনে স্পীচ রিকগনিশনের পেছনের রহস্য উন্মোচন করুন। এই বিস্তৃত গাইডটি অত্যাবশ্যকীয় অডিও সিগন্যাল প্রক্রিয়াকরণ কৌশলগুলি অন্বেষণ করে। ডেভেলপার এবং ডেটা বিজ্ঞানীদের জন্য উপযুক্ত।
পাইথন স্পীচ রিকগনিশন: অডিও সিগন্যাল প্রক্রিয়াকরণের গভীরে ডুব
ভয়েস কমান্ডের ক্রমবর্ধমান আধিপত্যের বিশ্বে—আমাদের স্মার্টফোনকে দিকনির্দেশ জিজ্ঞাসা করা থেকে শুরু করে স্মার্ট হোম ডিভাইস নিয়ন্ত্রণ করা পর্যন্ত—স্বয়ংক্রিয় স্পীচ রিকগনিশন (এএসআর) প্রযুক্তি আমাদের দৈনন্দিন জীবনে নির্বিঘ্নে একত্রিত হয়েছে। কিন্তু আপনি কি কখনও একটু থেমে ভেবে দেখেছেন আপনি একটি কমান্ড বলার এবং আপনার ডিভাইসটি বোঝার মধ্যে কী ঘটে? এটা কোনো জাদু নয়; এটি কয়েক দশকের গবেষণার উপর ভিত্তি করে একটি অত্যাধুনিক প্রক্রিয়া, এবং এর ভিত্তি হলো অডিও সিগন্যাল প্রক্রিয়াকরণ।
কম্পিউটারের কাছে কাঁচা অডিও হলো একটি দীর্ঘ সারি সংখ্যার মতো, যা একটি প্রেসার ওয়েভ উপস্থাপন করে। এর মধ্যে কোনো অন্তর্নিহিত অর্থ নেই। যেকোনো এএসআর পাইপলাইনের গুরুত্বপূর্ণ প্রথম ধাপ হলো এই কাঁচা, দুর্বোধ্য ডেটাকে একটি কাঠামোগত উপস্থাপনায় রূপান্তরিত করা যা একটি মেশিন লার্নিং মডেল ব্যাখ্যা করতে পারে। এই রূপান্তরটিই হলো অডিও সিগন্যাল প্রক্রিয়াকরণের মূল।
এই গাইডটি পাইথন ডেভেলপার, ডেটা সায়েন্টিস্ট, মেশিন লার্নিং ইঞ্জিনিয়ার এবং ভয়েস প্রযুক্তির অভ্যন্তরীণ কাজকর্ম সম্পর্কে আগ্রহী যে কারো জন্য। আমরা শব্দের ভৌত প্রকৃতি থেকে মেল-ফ্রিকোয়েন্সি সেপস্ট্রাল কোয়েফিসিয়েন্টস (এমএফসিসি) এর মতো অত্যাধুনিক বৈশিষ্ট্য ভেক্টর তৈরি পর্যন্ত একটি যাত্রা শুরু করব। ধারণাগুলিকে সহজবোধ্য করতে এবং হাতে-কলমে ব্যবহারিক উদাহরণ প্রদানের জন্য আমরা পাইথনের শক্তিশালী বৈজ্ঞানিক লাইব্রেরি ব্যবহার করব।
শব্দের প্রকৃতি বোঝা
শব্দ প্রক্রিয়াকরণের আগে, আমাদের প্রথমে বুঝতে হবে এটি কী। এর মূলে, শব্দ হলো একটি যান্ত্রিক তরঙ্গ—বায়ু, জল বা কঠিন পদার্থের মতো মাধ্যমের মধ্য দিয়ে সঞ্চালিত চাপের একটি স্পন্দন। যখন আমরা কথা বলি, তখন আমাদের ভোকাল কর্ডগুলো কম্পিত হয়, যা এই চাপের তরঙ্গ তৈরি করে এবং মাইক্রোফোনে পৌঁছায়।
একটি সাউন্ড ওয়েভের মূল বৈশিষ্ট্য
- অ্যাম্পলিটিউড: এটি শব্দের তীব্রতা বা লাউডনেসের সাথে সম্পর্কিত। একটি ওয়েভফর্মে, এটি তরঙ্গের উচ্চতা। উচ্চতর শিখর মানে জোরে শব্দ।
- ফ্রিকোয়েন্সি: এটি শব্দের পিচ নির্ধারণ করে। এটি প্রতি সেকেন্ডে তরঙ্গের চক্রের সংখ্যা, যা হার্টজ (Hz) এ পরিমাপ করা হয়। উচ্চ ফ্রিকোয়েন্সি মানে উচ্চ পিচ।
- টিম্বার: এটি একটি শব্দের গুণমান বা চরিত্র যা বিভিন্ন ধরণের শব্দ উৎপাদনকে আলাদা করে, যেমন কণ্ঠ এবং বাদ্যযন্ত্র। এটি একই লাউডনেসে একই নোট বাজালেও কেন একটি ট্রাম্পেটের শব্দ বেহালার চেয়ে আলাদা শোনায়। টিম্বার হলো একটি শব্দের হারমোনিক কন্টেন্টের ফল।
অ্যানালগ থেকে ডিজিটাল: রূপান্তর প্রক্রিয়া
একটি মাইক্রোফোন অ্যানালগ প্রেসার ওয়েভকে একটি অ্যানালগ বৈদ্যুতিক সংকেতে রূপান্তরিত করে। তবে, একটি কম্পিউটার বিচ্ছিন্ন ডিজিটাল ডেটাতে কাজ করে। অ্যানালগ সংকেতকে ডিজিটালে রূপান্তর করার প্রক্রিয়াটিকে ডিজিটাইজেশন বা স্যাম্পলিং বলা হয়।
- স্যাম্পলিং রেট: এটি প্রতি সেকেন্ডে নেওয়া অডিও সংকেতের নমুনার (স্ন্যাপশট) সংখ্যা। উদাহরণস্বরূপ, সিডি-গুণমানের অডিওর স্যাম্পলিং রেট 44,100 Hz (বা 44.1 kHz), অর্থাৎ প্রতি সেকেন্ডে 44,100টি নমুনা নেওয়া হয়। নাইকুইস্ট-শ্যানন স্যাম্পলিং উপপাদ্য অনুসারে, সঠিকভাবে একটি সংকেত পুনর্গঠন করতে, স্যাম্পলিং হার অবশ্যই সংকেতে উপস্থিত সর্বোচ্চ ফ্রিকোয়েন্সির কমপক্ষে দ্বিগুণ হতে হবে। যেহেতু মানুষের শোনার পরিসীমা প্রায় 20 kHz পর্যন্ত, তাই 44.1 kHz স্যাম্পলিং হার যথেষ্ট। স্পীচের জন্য, 16 kHz এর হার প্রায়শই স্ট্যান্ডার্ড, কারণ এটি মানুষের কণ্ঠের ফ্রিকোয়েন্সি পরিসীমা পর্যাপ্তভাবে কভার করে।
- বিট ডেপথ: এটি প্রতিটি নমুনার অ্যাম্পলিটিউড উপস্থাপন করতে ব্যবহৃত বিটের সংখ্যা নির্ধারণ করে। একটি উচ্চতর বিট ডেপথ বৃহত্তর ডায়নামিক পরিসীমা (সবচেয়ে শান্ত এবং সবচেয়ে জোরে সম্ভাব্য শব্দের মধ্যে পার্থক্য) প্রদান করে এবং কোয়ান্টাইজেশন নয়েজ হ্রাস করে। স্পীচের জন্য সাধারণ একটি 16-বিট ডেপথ, 65,536 (2^16) স্বতন্ত্র অ্যাম্পলিটিউড মানের জন্য অনুমতি দেয়।
এই প্রক্রিয়ার ফলস্বরূপ সংখ্যার একটি এক-মাত্রিক অ্যারে (বা ভেক্টর), যা বিচ্ছিন্ন সময়ের ব্যবধানে সাউন্ড ওয়েভের অ্যাম্পলিটিউড উপস্থাপন করে। এই অ্যারেটি হলো কাঁচামাল যা নিয়ে আমরা পাইথনে কাজ করব।
অডিও প্রক্রিয়াকরণের জন্য পাইথন ইকোসিস্টেম
পাইথনের লাইব্রেরির একটি সমৃদ্ধ ইকোসিস্টেম রয়েছে যা জটিল অডিও প্রক্রিয়াকরণ কাজগুলিকে সহজ করে তোলে। আমাদের উদ্দেশ্যে, কয়েকটি মূল খেলোয়াড় আলাদা।
- Librosa: এটি সঙ্গীত এবং অডিও বিশ্লেষণের জন্য সর্বাপেক্ষা গুরুত্বপূর্ণ পাইথন প্যাকেজ। এটি অডিও লোড করা, ভিজ্যুয়ালাইজ করা এবং সবচেয়ে গুরুত্বপূর্ণভাবে, বিভিন্ন ধরণের বৈশিষ্ট্য বের করার জন্য উচ্চ-স্তরের বিমূর্ততা প্রদান করে।
- SciPy: বৈজ্ঞানিক পাইথন স্ট্যাকের ভিত্তি SciPy-এর `scipy.signal` এবং `scipy.fft` মডিউলগুলি ফিল্টারিং এবং ফুরিয়ার ট্রান্সফর্ম সহ সিগন্যাল প্রক্রিয়াকরণের কাজগুলির জন্য শক্তিশালী, নিম্ন-স্তরের সরঞ্জাম সরবরাহ করে।
- NumPy: পাইথনে সংখ্যাসূচক গণনার জন্য মৌলিক প্যাকেজ। যেহেতু অডিওকে সংখ্যার একটি অ্যারে হিসাবে উপস্থাপন করা হয়, তাই আমাদের ডেটাতে দক্ষতার সাথে গাণিতিক ক্রিয়াকলাপ সম্পাদনের জন্য NumPy অপরিহার্য।
- Matplotlib & Seaborn: এগুলি ডেটা ভিজ্যুয়ালাইজেশনের জন্য স্ট্যান্ডার্ড লাইব্রেরি। অডিও ডেটা সম্পর্কে আমাদের ধারণা তৈরি করতে আমরা ওয়েভফর্ম এবং স্পেকট্রোগ্রাম প্লট করতে এগুলি ব্যবহার করব।
প্রথম দেখা: অডিও লোড করা এবং ভিজ্যুয়ালাইজ করা
আসুন একটি সাধারণ কাজ দিয়ে শুরু করি: একটি অডিও ফাইল লোড করা এবং এর ওয়েভফর্ম ভিজ্যুয়ালাইজ করা। প্রথমে, নিশ্চিত করুন যে আপনার প্রয়োজনীয় লাইব্রেরি ইনস্টল করা আছে:
pip install librosa numpy matplotlib
এখন, আসুন একটি অডিও ফাইল (যেমন, একটি `.wav` ফাইল) লোড করার এবং এটি দেখতে কেমন তা দেখার জন্য একটি স্ক্রিপ্ট লিখি।
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
# Define the path to your audio file
# For a global audience, using a generic path is better
audio_path = 'path/to/your/audio.wav'
# Load the audio file
# y is the time series (the audio waveform as a NumPy array)
# sr is the sampling rate
y, sr = librosa.load(audio_path)
# Let's see the shape of our data
print(f"Waveform shape: {y.shape}")
print(f"Sampling rate: {sr} Hz")
# Visualize the waveform
plt.figure(figsize=(14, 5))
librosa.display.waveshow(y, sr=sr)
plt.title('Audio Waveform')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.grid(True)
plt.show()
আপনি যখন এই কোডটি চালাবেন, তখন আপনি সময়ের সাথে অডিওর অ্যাম্পলিটিউডের একটি প্লট দেখতে পাবেন। এই টাইম-ডোমেইন উপস্থাপনাটি স্বজ্ঞাত, তবে এটি স্পষ্টভাবে আমাদের ফ্রিকোয়েন্সি কন্টেন্ট সম্পর্কে কিছু বলে না, যা স্পীচ বোঝার জন্য অত্যাবশ্যক।
প্রি-প্রসেসিং পাইপলাইন: অডিও পরিষ্কার এবং স্বাভাবিক করা
বাস্তব বিশ্বের অডিও এলোমেলো। এতে ব্যাকগ্রাউন্ড নয়েজ, নীরবতার সময়কাল এবং ভলিউমের পরিবর্তন রয়েছে। "আবর্জনা ইন, আবর্জনা আউট" নীতিটি মেশিন লার্নিংয়ের ক্ষেত্রে বিশেষভাবে সত্য। প্রি-প্রসেসিং হলো আমাদের বৈশিষ্ট্য নিষ্কাশন শক্তিশালী এবং সামঞ্জস্যপূর্ণ কিনা তা নিশ্চিত করার জন্য অডিও পরিষ্কার এবং স্ট্যান্ডার্ডাইজ করার গুরুত্বপূর্ণ পদক্ষেপ।
১. নরমালাইজেশন
অডিও ফাইলের ভলিউম স্তর ব্যাপকভাবে আলাদা হতে পারে। জোরে রেকর্ডিংয়ের উপর প্রশিক্ষিত একটি মডেল শান্ত রেকর্ডিংয়ের উপর খারাপ পারফর্ম করতে পারে। নরমালাইজেশন অ্যাম্পলিটিউড মানগুলিকে একটি সামঞ্জস্যপূর্ণ পরিসরে স্কেল করে, সাধারণত -1.0 এবং 1.0 এর মধ্যে। একটি সাধারণ পদ্ধতি হলো পিক নরমালাইজেশন, যেখানে আপনি পুরো সংকেতকে এর সর্বোচ্চ পরম অ্যাম্পলিটিউড দ্বারা ভাগ করেন।
# Peak normalization
max_amplitude = np.max(np.abs(y))
if max_amplitude > 0:
y_normalized = y / max_amplitude
else:
y_normalized = y # Avoid division by zero for silent audio
print(f"Original max amplitude: {np.max(np.abs(y)):.2f}")
print(f"Normalized max amplitude: {np.max(np.abs(y_normalized)):.2f}")
২. রিস্যাম্পলিং
একটি এএসআর মডেল আশা করে যে এর সমস্ত ইনপুটের একই স্যাম্পলিং হার থাকবে। তবে, অডিও ফাইলগুলি বিভিন্ন হার সহ বিভিন্ন উৎস থেকে আসতে পারে (যেমন, 48 kHz, 44.1 kHz, 22.05 kHz)। স্পীচ রিকগনিশন কাজের জন্য আমাদের অবশ্যই সেগুলিকে একটি লক্ষ্য হারে রিস্যাম্পল করতে হবে, প্রায়শই 16 kHz।
target_sr = 16000
if sr != target_sr:
y_resampled = librosa.resample(y=y, orig_sr=sr, target_sr=target_sr)
print(f"Resampled waveform shape: {y_resampled.shape}")
sr = target_sr # Update the sampling rate variable
else:
y_resampled = y
৩. ফ্রেমিং এবং উইন্ডোইং
স্পীচ হলো একটি গতিশীল, অ-স্থিতিশীল সংকেত; সময়ের সাথে সাথে এর পরিসংখ্যানগত বৈশিষ্ট্য (যেমন ফ্রিকোয়েন্সি কন্টেন্ট) পরিবর্তিত হয়। উদাহরণস্বরূপ, 'sh' শব্দের উচ্চ-ফ্রিকোয়েন্সি কন্টেন্ট রয়েছে, যেখানে 'o' স্বরধ্বনির নিম্ন-ফ্রিকোয়েন্সি কন্টেন্ট রয়েছে। একবার পুরো অডিও ক্লিপ বিশ্লেষণ করলে এই বিবরণগুলি একসাথে মিশে যাবে।
এটি পরিচালনা করার জন্য, আমরা ফ্রেমিং নামক একটি কৌশল ব্যবহার করি। আমরা অডিও সংকেতকে ছোট, ওভারল্যাপিং ফ্রেমে বিভক্ত করি, সাধারণত 20-40 মিলিসেকেন্ড দীর্ঘ। প্রতিটি ছোট ফ্রেমে, আমরা ধরে নিতে পারি যে সংকেতটি প্রায় স্থির, যা ফ্রিকোয়েন্সি বিশ্লেষণের জন্য উপযুক্ত করে তোলে।
যাইহোক, কেবল সংকেতকে ফ্রেমে কাটলে প্রান্তগুলিতে তীক্ষ্ণ ডিসকন্টিনিউটি তৈরি হয়, যা ফ্রিকোয়েন্সি ডোমেনে অবাঞ্ছিত আর্টিফ্যাক্ট প্রবর্তন করে (একটি ঘটনাকে স্পেকট্রাল লিক্যাজ বলা হয়)। এটি প্রশমিত করতে, আমরা প্রতিটি ফ্রেমে একটি উইন্ডো ফাংশন (যেমন, হামিং, হ্যানিং বা ব্ল্যাকম্যান উইন্ডো) প্রয়োগ করি। এই ফাংশনটি ফ্রেমের অ্যাম্পলিটিউডকে শুরু এবং শেষে শূন্যে সরু করে, রূপান্তরগুলিকে মসৃণ করে এবং আর্টিফ্যাক্ট হ্রাস করে।
যখন আমরা একটি শর্ট-টাইম ফুরিয়ার ট্রান্সফর্ম (এসটিএফটি) করি, তখন লিব্রোসা স্বয়ংক্রিয়ভাবে ফ্রেমিং এবং উইন্ডোইং পরিচালনা করে, যা আমরা পরবর্তীতে আলোচনা করব।
সময় থেকে ফ্রিকোয়েন্সি: ফুরিয়ার ট্রান্সফর্মের শক্তি
ওয়েভফর্ম আমাদের দেখায় যে সময়ের সাথে সাথে অ্যাম্পলিটিউড কীভাবে পরিবর্তিত হয়, তবে স্পীচের জন্য, আমরা প্রতিটি মুহূর্তে কী ফ্রিকোয়েন্সি উপস্থিত রয়েছে সে সম্পর্কে আরও আগ্রহী। এখানেই ফুরিয়ার ট্রান্সফর্ম কাজে আসে। এটি একটি গাণিতিক সরঞ্জাম যা সময় ডোমেইন থেকে তার উপাদান ফ্রিকোয়েন্সি উপাদানগুলিতে একটি সংকেতকে ভেঙে দেয়।
এটিকে একটি প্রিজমের মতো ভাবুন। একটি প্রিজম সাদা আলোর একটি রশ্মি (একটি টাইম-ডোমেইন সংকেত) নেয় এবং এটিকে রঙের একটি রংধনুর মধ্যে বিভক্ত করে (ফ্রিকোয়েন্সি-ডোমেইন উপাদান)। ফুরিয়ার ট্রান্সফর্ম শব্দের জন্য একই কাজ করে।
শর্ট-টাইম ফুরিয়ার ট্রান্সফর্ম (এসটিএফটি)
যেহেতু স্পীচের ফ্রিকোয়েন্সি কন্টেন্ট সময়ের সাথে পরিবর্তিত হয়, তাই আমরা পুরো সংকেতে কেবল একটি ফুরিয়ার ট্রান্সফর্ম প্রয়োগ করতে পারি না। পরিবর্তে, আমরা শর্ট-টাইম ফুরিয়ার ট্রান্সফর্ম (এসটিএফটি) ব্যবহার করি। এসটিএফটি হলো:
- সংকেতকে ছোট, ওভারল্যাপিং ফ্রেমে বিভক্ত করা (ফ্রেমিং)।
- প্রতিটি ফ্রেমে একটি উইন্ডো ফাংশন প্রয়োগ করা (উইন্ডোইং)।
- প্রতিটি উইন্ডোড ফ্রেমে ডিসক্রিট ফুরিয়ার ট্রান্সফর্ম (ডিএফটি) গণনা করা। ফাস্ট ফুরিয়ার ট্রান্সফর্ম (এফএফটি) হলো ডিএফটি গণনা করার জন্য একটি অত্যন্ত দক্ষ অ্যালগরিদম।
এসটিএফটির ফলাফল হলো একটি জটিল-মূল্যের ম্যাট্রিক্স যেখানে প্রতিটি কলাম একটি ফ্রেম উপস্থাপন করে এবং প্রতিটি সারি একটি ফ্রিকোয়েন্সি বিন উপস্থাপন করে। এই ম্যাট্রিক্সের মানগুলির ম্যাগনিটিউড আমাদের প্রতিটি সময়ে প্রতিটি ফ্রিকোয়েন্সির তীব্রতা বলে।
ফ্রিকোয়েন্সি ভিজ্যুয়ালাইজ করা: স্পেকট্রোগ্রাম
এসটিএফটির আউটপুট ভিজ্যুয়ালাইজ করার সবচেয়ে সাধারণ উপায় হলো একটি স্পেকট্রোগ্রাম। এটি একটি 2D প্লট যেখানে:
- X-অক্ষ: সময়
- Y-অক্ষ: ফ্রিকোয়েন্সি
- রঙ/তীব্রতা: একটি নির্দিষ্ট সময়ে একটি নির্দিষ্ট ফ্রিকোয়েন্সির অ্যাম্পলিটিউড (বা শক্তি)।
একটি স্পেকট্রোগ্রাম একটি শক্তিশালী সরঞ্জাম যা আমাদের শব্দকে "দেখতে" দেয়। আমরা কেবল এটি দেখে স্বরবর্ণ, ব্যঞ্জনবর্ণ এবং স্পীচের ছন্দ সনাক্ত করতে পারি। আসুন লিব্রোসা দিয়ে একটি তৈরি করি।
# We'll use the resampled audio from the previous step
y_audio = y_resampled
# STFT parameters
# n_fft is the window size for the FFT. A common value is 2048.
# hop_length is the number of samples between successive frames. Determines the overlap.
# win_length is the length of the window function. Usually same as n_fft.
n_fft = 2048
hop_length = 512
# Perform STFT
stft_result = librosa.stft(y_audio, n_fft=n_fft, hop_length=hop_length)
# The result is complex. We take the magnitude and convert to decibels (dB) for visualization.
D = librosa.amplitude_to_db(np.abs(stft_result), ref=np.max)
# Display the spectrogram
plt.figure(figsize=(14, 5))
librosa.display.specshow(D, sr=sr, hop_length=hop_length, x_axis='time', y_axis='log')
plt.colorbar(format='%+2.0f dB')
plt.title('Spectrogram (log frequency scale)')
plt.xlabel('Time (s)')
plt.ylabel('Frequency (Hz)')
plt.show()
এই ভিজ্যুয়ালাইজেশন স্পীচের সমৃদ্ধ স্পেকট্রাল টেক্সচার প্রকাশ করে। উজ্জ্বল অনুভূমিক ব্যান্ডগুলিকে ফর্ম্যান্ট বলা হয়, যা নির্দিষ্ট ফ্রিকোয়েন্সিগুলির চারপাশে অ্যাকোস্টিক শক্তির ঘনত্ব। বিভিন্ন স্বরধ্বনিগুলির মধ্যে পার্থক্য করার জন্য ফর্ম্যান্টগুলি গুরুত্বপূর্ণ।
উন্নত বৈশিষ্ট্য নিষ্কাশন: মেল-ফ্রিকোয়েন্সি সেপস্ট্রাল কোয়েফিসিয়েন্টস (এমএফসিসি)
যদিও স্পেকট্রোগ্রাম একটি দুর্দান্ত উপস্থাপনা, তবে এএসআরের জন্য এটির দুটি সমস্যা রয়েছে:
- পারসেপচুয়াল অসঙ্গতি: ফ্রিকোয়েন্সি অক্ষটি লিনিয়ার। যাইহোক, মানুষের শ্রবণশক্তি তা নয়। আমরা লগারিদমিক স্কেলে পিচ উপলব্ধি করি; আমরা উচ্চ ফ্রিকোয়েন্সির চেয়ে কম ফ্রিকোয়েন্সিতে পরিবর্তনের প্রতি অনেক বেশি সংবেদনশীল। উদাহরণস্বরূপ, 100 Hz এবং 200 Hz এর মধ্যে পার্থক্য 10,000 Hz এবং 10,100 Hz এর মধ্যে পার্থক্যের চেয়ে অনেক বেশি লক্ষণীয়।
- উচ্চ মাত্রিকতা এবং পারস্পরিক সম্পর্ক: স্পেকট্রোগ্রামে প্রচুর ডেটা রয়েছে এবং সংলগ্ন ফ্রিকোয়েন্সি বিনগুলি প্রায়শই অত্যন্ত পারস্পরিক সম্পর্কযুক্ত থাকে। এটি কিছু মেশিন লার্নিং মডেলের জন্য কার্যকরভাবে শেখা কঠিন করে তুলতে পারে।
মেল-ফ্রিকোয়েন্সি সেপস্ট্রাল কোয়েফিসিয়েন্টস (এমএফসিসি) এই সমস্যাগুলি সমাধানের জন্য ডিজাইন করা হয়েছিল। এগুলি ঐতিহ্যবাহী এএসআরের জন্য স্বর্ণ-মান বৈশিষ্ট্য এবং আজও একটি শক্তিশালী ভিত্তি হিসাবে রয়ে গেছে। এমএফসিসি তৈরির প্রক্রিয়াটি মানব শ্রবণশক্তির দিকগুলিকে অনুকরণ করে।
মেল স্কেল
পারসেপচুয়াল সমস্যা সমাধানের জন্য, আমরা মেল স্কেল ব্যবহার করি। এটি পিচের একটি পারসেপচুয়াল স্কেল যা শ্রোতারা একে অপরের থেকে সমান দূরত্বে বিচার করে। এটি প্রায় 1 kHz এর নিচে রৈখিক এবং এর উপরে লগারিদমিক। মানুষের উপলব্ধির সাথে আরও ভালভাবে সামঞ্জস্য করার জন্য আমরা হার্টজ থেকে মেল স্কেলে ফ্রিকোয়েন্সি রূপান্তর করি।
এমএফসিসি গণনা পাইপলাইন
অডিও সংকেত থেকে কীভাবে এমএফসিসি গণনা করা হয় তার একটি সরলীকৃত ধাপে ধাপে বিবরণ এখানে দেওয়া হলো:
- ফ্রেমিং ও উইন্ডোইং: এসটিএফটির মতোই।
- এফএফটি ও পাওয়ার স্পেকট্রাম: প্রতিটি ফ্রেমের জন্য এফএফটি গণনা করুন এবং তারপরে পাওয়ার স্পেকট্রাম গণনা করুন (স্কয়ার্ড ম্যাগনিটিউড)।
- মেল ফিল্টারব্যাঙ্ক প্রয়োগ করুন: এটি মূল পদক্ষেপ। পাওয়ার স্পেকট্রামে ত্রিভুজাকার ফিল্টারগুলির একটি সেট (একটি ফিল্টারব্যাঙ্ক) প্রয়োগ করা হয়। এই ফিল্টারগুলি নিম্ন ফ্রিকোয়েন্সিতে রৈখিকভাবে এবং উচ্চ ফ্রিকোয়েন্সিতে লগারিদমিকভাবে স্থানান্তরিত হয়, যা মেল স্কেলকে অনুকরণ করে। এই পদক্ষেপটি বিভিন্ন ফ্রিকোয়েন্সি বিন থেকে শক্তিকে মেল-স্কেল বিনের একটি ছোট সংখ্যায় একত্রিত করে, যা মাত্রিকতা হ্রাস করে।
- লগারিদম নিন: ফিল্টারব্যাঙ্ক শক্তির লগারিদম নিন। এটি লাউডনেসের মানব উপলব্ধি অনুকরণ করে, যা লগারিদমিকও।
- ডিসক্রিট কোসাইন ট্রান্সফর্ম (ডিসিটি): লগ ফিল্টারব্যাঙ্ক শক্তিতে ডিসিটি প্রয়োগ করুন। ডিসিটি এফএফটির মতোই কিন্তু শুধুমাত্র বাস্তব সংখ্যা ব্যবহার করে। এখানে এর উদ্দেশ্য হলো ফিল্টারব্যাঙ্ক শক্তিকে ডি-কোরিলেট করা। ফলস্বরূপ ডিসিটি কোয়েফিসিয়েন্টগুলি অত্যন্ত কমপ্যাক্ট এবং প্রয়োজনীয় স্পেকট্রাল তথ্য ধারণ করে।
ফলস্বরূপ কোয়েফিসিয়েন্টগুলি হলো এমএফসিসি। সাধারণত, আমরা শুধুমাত্র প্রথম 13-20টি কোয়েফিসিয়েন্ট রাখি, কারণ সেগুলিতে স্পীচ ধ্বনিগুলির জন্য সর্বাধিক প্রাসঙ্গিক তথ্য থাকে, যেখানে উচ্চতর কোয়েফিসিয়েন্টগুলি প্রায়শই শব্দ বা সূক্ষ্ম বিবরণ উপস্থাপন করে যা স্পীচ কন্টেন্টের জন্য কম প্রাসঙ্গিক।
পাইথনে এমএফসিসি গণনা করা
সৌভাগ্যবশত, লিব্রোসা একটি একক ফাংশন কলের মাধ্যমে এই জটিল প্রক্রিয়াটিকে অবিশ্বাস্যভাবে সহজ করে তোলে।
# Calculate MFCCs
# n_mfcc is the number of MFCCs to return
n_mfcc = 13
mfccs = librosa.feature.mfcc(y=y_audio, sr=sr, n_fft=n_fft, hop_length=hop_length, n_mfcc=n_mfcc)
print(f"MFCCs shape: {mfccs.shape}")
# Visualize the MFCCs
plt.figure(figsize=(14, 5))
librosa.display.specshow(mfccs, sr=sr, hop_length=hop_length, x_axis='time')
plt.colorbar(label='MFCC Coefficient Value')
plt.title('MFCCs')
plt.xlabel('Time (s)')
plt.ylabel('MFCC Coefficient Index')
plt.show()
আউটপুট হলো একটি 2D অ্যারে যেখানে প্রতিটি কলাম একটি ফ্রেম এবং প্রতিটি সারি একটি এমএফসিসি কোয়েফিসিয়েন্ট। এই কমপ্যাক্ট, পারসেপচুয়ালি প্রাসঙ্গিক এবং ডি-কোরিলেটেড ম্যাট্রিক্স একটি মেশিন লার্নিং মডেলের জন্য নিখুঁত ইনপুট।
সবকিছু একসাথে রাখা: একটি ব্যবহারিক কর্মপ্রবাহ
আসুন আমরা যা শিখেছি তা একটি একক, পুনরায় ব্যবহারযোগ্য ফাংশনে একত্রিত করি যা একটি অডিও ফাইল পাথ নেয় এবং প্রক্রিয়াজাত এমএফসিসি বৈশিষ্ট্যগুলি ফেরত দেয়।
import librosa
import numpy as np
def extract_features_mfcc(audio_path):
"""Extracts MFCC features from an audio file.
Args:
audio_path (str): Path to the audio file.
Returns:
np.ndarray: A 2D array of MFCC features (n_mfcc x n_frames).
"""
try:
# 1. Load the audio file
y, sr = librosa.load(audio_path, duration=30) # Load first 30 seconds
# 2. Resample to a standard rate (e.g., 16 kHz)
target_sr = 16000
if sr != target_sr:
y = librosa.resample(y=y, orig_sr=sr, target_sr=target_sr)
sr = target_sr
# 3. Normalize the audio
max_amp = np.max(np.abs(y))
if max_amp > 0:
y = y / max_amp
# 4. Extract MFCCs
# Common parameters for speech
n_fft = 2048
hop_length = 512
n_mfcc = 13
mfccs = librosa.feature.mfcc(
y=y,
sr=sr,
n_fft=n_fft,
hop_length=hop_length,
n_mfcc=n_mfcc
)
# (Optional but recommended) Feature scaling
# Standardize features to have zero mean and unit variance
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
mfccs_scaled = scaler.fit_transform(mfccs.T).T
return mfccs_scaled
except Exception as e:
print(f"Error processing {audio_path}: {e}")
return None
# --- Example Usage ---
audio_file = 'path/to/your/audio.wav'
features = extract_features_mfcc(audio_file)
if features is not None:
print(f"Successfully extracted features with shape: {features.shape}")
# This 'features' array is now ready to be fed into a machine learning model.
এমএফসিসি ছাড়িয়ে: অন্যান্য গুরুত্বপূর্ণ অডিও বৈশিষ্ট্য
যদিও এমএফসিসি একটি শক্তিশালী এবং বহুল ব্যবহৃত বৈশিষ্ট্য, তবে অডিও প্রক্রিয়াকরণের ক্ষেত্রটি বিশাল। ডিপ লার্নিংয়ের উত্থানের সাথে সাথে অন্যান্য বৈশিষ্ট্য, কখনও কখনও সরল বৈশিষ্ট্যগুলি অত্যন্ত কার্যকর প্রমাণিত হয়েছে।
- লগ-মেল স্পেকট্রোগ্রাম: এটি ডিসিটির ঠিক আগে এমএফসিসি গণনার মধ্যবর্তী পদক্ষেপ। আধুনিক কনভোল্যুশনাল নিউরাল নেটওয়ার্কগুলি (সিএনএন) স্থানিক প্যাটার্ন শিখতে চমৎকার। একটি সিএনএন-এ পুরো লগ-মেল স্পেকট্রোগ্রাম ফিড করে, মডেলটি প্রাসঙ্গিক সম্পর্কগুলি নিজেই শিখতে পারে, কখনও কখনও ম্যানুয়ালি ডি-কোরিলেটেড এমএফসিসিকে ছাড়িয়ে যায়। আধুনিক, এন্ড-টু-এন্ড এএসআর সিস্টেমে এটি একটি খুব সাধারণ পদ্ধতি।
- জিরো-ক্রসিং রেট (জেডসিআর): এটি সেই হার যে হারে সংকেত চিহ্ন পরিবর্তন করে (ধনাত্মক থেকে ঋণাত্মক বা এর বিপরীতে)। এটি সংকেতের নয়েজিনেস বা ফ্রিকোয়েন্সি কন্টেন্টের একটি সরল পরিমাপ। 's' বা 'f'-এর মতো আনভয়েসড শব্দের স্বরবর্ণের মতো ভয়েসড শব্দের চেয়ে অনেক বেশি জেডসিআর রয়েছে।
- স্পেকট্রাল সেন্ট্রয়েড: এটি স্পেকট্রামের "ভর কেন্দ্র" সনাক্ত করে। এটি একটি শব্দের উজ্জ্বলতার পরিমাপ। একটি উচ্চ স্পেকট্রাল সেন্ট্রয়েড আরও উচ্চ-ফ্রিকোয়েন্সি কন্টেন্ট সহ একটি উজ্জ্বল শব্দের সাথে সঙ্গতিপূর্ণ।
- ক্রোমা বৈশিষ্ট্য: এগুলি এমন বৈশিষ্ট্য যা 12টি স্ট্যান্ডার্ড পিচ ক্লাসের প্রতিটিতে (C, C#, D, ইত্যাদি) শক্তি উপস্থাপন করে। যদিও প্রাথমিকভাবে সঙ্গীত বিশ্লেষণের জন্য ব্যবহৃত হয় (যেমন, কর্ড রিকগনিশন), এগুলি টোনাল ভাষাগুলিতে বা সুর বিশ্লেষণ করার জন্য দরকারী হতে পারে।
উপসংহার এবং পরবর্তী পদক্ষেপ
আমরা শব্দের মৌলিক পদার্থবিদ্যা থেকে অত্যাধুনিক, মেশিন-পঠনযোগ্য বৈশিষ্ট্য তৈরি পর্যন্ত যাত্রা করেছি। মূল বিষয় হলো অডিও সিগন্যাল প্রক্রিয়াকরণ হলো রূপান্তরের একটি প্রক্রিয়া—একটি কাঁচা, জটিল ওয়েভফর্ম নেওয়া এবং এটিকে পদ্ধতিগতভাবে একটি কমপ্যাক্ট, অর্থপূর্ণ উপস্থাপনায় পাতন করা যা স্পীচের জন্য গুরুত্বপূর্ণ বৈশিষ্ট্যগুলিকে তুলে ধরে।
আপনি এখন বুঝতে পেরেছেন যে:
- ডিজিটাল অডিও হলো একটি অবিচ্ছিন্ন সাউন্ড ওয়েভের বিচ্ছিন্ন উপস্থাপনা, যা এর স্যাম্পলিং হার এবং বিট ডেপথ দ্বারা সংজ্ঞায়িত করা হয়।
- একটি শক্তিশালী সিস্টেম তৈরি করার জন্য নরমালাইজেশন এবং রিস্যাম্পলিং-এর মতো প্রি-প্রসেসিং পদক্ষেপগুলি অত্যন্ত গুরুত্বপূর্ণ।
- ফুরিয়ার ট্রান্সফর্ম (এসটিএফটি) হলো সময় ডোমেইন থেকে ফ্রিকোয়েন্সি ডোমেইনের প্রবেশদ্বার, যা স্পেকট্রোগ্রাম দ্বারা ভিজ্যুয়ালাইজ করা হয়।
- এমএফসিসি হলো একটি শক্তিশালী বৈশিষ্ট্য সেট যা মেল স্কেল ব্যবহার করে মানব শ্রবণ উপলব্ধি অনুকরণ করে এবং ডিসিটি ব্যবহার করে তথ্যকে ডি-কোরিলেট করে।
উচ্চ-মানের বৈশিষ্ট্য নিষ্কাশন হলো সেই ভিত্তি যার উপর সমস্ত সফল স্পীচ রিকগনিশন সিস্টেম তৈরি করা হয়। যদিও আধুনিক এন্ড-টু-এন্ড ডিপ লার্নিং মডেলগুলি কালো বাক্সের মতো মনে হতে পারে, তবে সেগুলি মূলত অভ্যন্তরীণভাবে এই ধরণের রূপান্তর করতে শিখছে।
এখান থেকে কোথায় যাবেন?
- পরীক্ষা করুন: এই গাইডের কোডটি বিভিন্ন অডিও ফাইল দিয়ে ব্যবহার করুন। একজন পুরুষের কণ্ঠস্বর, একজন মহিলার কণ্ঠস্বর, একটি গোলমাল রেকর্ডিং এবং একটি পরিষ্কার রেকর্ডিং চেষ্টা করুন। ওয়েভফর্ম, স্পেকট্রোগ্রাম এবং এমএফসিসি কীভাবে পরিবর্তিত হয় তা পর্যবেক্ষণ করুন।
- উচ্চ-স্তরের লাইব্রেরিগুলি অন্বেষণ করুন: দ্রুত অ্যাপ্লিকেশন তৈরি করার জন্য, Google-এর `SpeechRecognition`-এর মতো লাইব্রেরিগুলি একটি সহজে ব্যবহারযোগ্য API প্রদান করে যা আপনার জন্য সমস্ত সিগন্যাল প্রক্রিয়াকরণ এবং মডেলিং পরিচালনা করে। চূড়ান্ত ফলাফল দেখার এটি একটি দুর্দান্ত উপায়।
- একটি মডেল তৈরি করুন: এখন যেহেতু আপনি বৈশিষ্ট্যগুলি বের করতে পারেন, তাই পরবর্তী যৌক্তিক পদক্ষেপ হলো সেগুলিকে একটি মেশিন লার্নিং মডেলে ফিড করা। টেনসরফ্লো/কেরাস বা পাইটর্চ ব্যবহার করে একটি সাধারণ কীওয়ার্ড-স্পটিং মডেল দিয়ে শুরু করুন। আপনি একটি সাধারণ নিউরাল নেটওয়ার্কে ইনপুট হিসাবে আপনার তৈরি করা এমএফসিসি ব্যবহার করতে পারেন।
- ডেটা সেটগুলি আবিষ্কার করুন: একটি বাস্তব এএসআর মডেলকে প্রশিক্ষণ দেওয়ার জন্য, আপনার প্রচুর ডেটা দরকার। বিখ্যাত ওপেন-সোর্স ডেটাসেটগুলি যেমন LibriSpeech, Mozilla Common Voice, অথবা TED-LIUM অন্বেষণ করুন যে বড় আকারের অডিও ডেটা দেখতে কেমন।
অডিও এবং স্পীচের জগত একটি গভীর এবং আকর্ষণীয় ক্ষেত্র। সিগন্যাল প্রক্রিয়াকরণের নীতিগুলি আয়ত্ত করে, আপনি ভয়েস-সক্ষম প্রযুক্তির পরবর্তী প্রজন্ম তৈরির দরজা খুলে দিয়েছেন।