যে সমস্যার সমাধান করে
কথ্য ভাষা, কোড-সুইচিং বা স্বল্প-সম্পদের ভাষা নিয়ে কাজ করা গবেষকরা যথেষ্ট স্বাভাবিক, কথোপকথনমূলক ডেটা খুঁজে পেতে হিমশিম খান। অনেক ভিডিওতে ক্যাপশন নেই, আর যেগুলোতে আছে সেগুলোতে বিভিন্ন মানের মানুষের ও স্বয়ংক্রিয় উৎস মেশানো। টিমগুলোর দরকার একটি সামঞ্জস্যপূর্ণ পাইপলাইন যা অনেক ভাষা সামলায় এবং প্রতিটি ট্রান্সক্রিপ্ট কোথা থেকে এসেছে তা লিপিবদ্ধ করে।
প্রথম ভার্সনে কী কী রাখবেন
- প্রতি ভিডিওর উপলব্ধ ক্যাপশন ভাষা শনাক্তকরণ
- ক্যাপশন নেই এমন ভিডিওর জন্য 99টি ভাষায় AI স্পিচ রিকগনিশন
- ভাষা মিশিয়ে বলা বক্তব্যের জন্য কোড-সুইচিং সাপোর্ট
- অ্যালাইনমেন্টের জন্য শব্দ-স্তরের টাইমস্ট্যাম্প
- প্রতিটি ট্রান্সক্রিপ্টের ভাষা ও ক্যাপশনের উৎসের মেটাডেটা
ধাপে ধাপে কীভাবে বানাবেন
- 01
উপযুক্ত ভিডিও খুঁজুন
আপনার টার্গেট ভাষা থাকে বলে জানা চ্যানেল বা প্লেলিস্ট রিজলভ করুন এবং কোন ক্যাপশন ট্র্যাক আছে দেখতে /transcripts/{video_id}/languages কল করুন।
- 02
যেখানে আছে ক্যাপশন ব্যবহার করুন
যেখানে ম্যানুয়াল ক্যাপশন আছে সেগুলো আনুন, কারণ সাধারণত সেগুলোই সবচেয়ে নির্ভুল।
- 03
স্পিচ রিকগনিশন দিয়ে ফাঁক পূরণ করুন
ক্যাপশন নেই এমন ভিডিওর জন্য ভাষা নির্ধারণ করে বা স্বয়ংক্রিয় শনাক্তকরণ দিয়ে ASR রিকোয়েস্ট করুন, এবং মিশ্র ভাষার বক্তব্যের জন্য codeSwitching চালু করুন।
- 04
অ্যালাইনমেন্ট ডেটাসহ সংরক্ষণ করুন
শব্দ-স্তরের টাইমস্ট্যাম্পের জন্য format.words রিকোয়েস্ট করুন এবং টেক্সটের পাশাপাশি প্রতিটি ট্রান্সক্রিপ্টের ভাষা ও উৎস সংরক্ষণ করুন।
স্টার্টার কোড
এই আইডিয়াটি "রেসিপি 3: পুরো প্লেলিস্ট একসাথে নলেজ বেসে লোড করুন" প্যাটার্নের ওপর তৈরি। নিজের চ্যানেল, প্রম্পট ও স্টোরেজ বসিয়ে নিন।
import requests
API = "https://www.youtubetranscript.dev/api/v2"
HEADERS = {"Authorization": "Bearer yt_sk_live_YOUR_KEY"}
playlist = requests.post(f"{API}/playlists/resolve", headers=HEADERS,
json={"playlist_url": "https://www.youtube.com/playlist?list=PLAYLIST_ID",
"limit": 100}).json()
ids = [v["video_id"] for v in playlist["items"]]
batch = requests.post(f"{API}/batch", headers=HEADERS, json={
"video_ids": ids,
"format": {"timestamp": True, "paragraphs": True},
}).json()
# Large batches run async: poll GET /batch/{batch_id} until status is "completed"
for r in batch.get("results", []):
if r["status"] == "completed":
for p in r["data"]["transcript"].get("paragraphs") or []:
store(video_id=r["video_id"], start=p["start"], text=p["text"]) # your vector DBকেন বানানো মূল্যবান
ল্যাব ও AI টিমগুলো এমন ভাষায় মূল্যায়ন ও গবেষণা ডেটা পায় যা অন্যভাবে সংগ্রহ করা ব্যয়বহুল। নির্দিষ্ট ভাষা বা ক্ষেত্রের পরিচ্ছন্ন, ভালোভাবে নথিভুক্ত ডেটাসেট মডেল নির্মাতাদের কাছেও মূল্যবান।
যে ভুলগুলো এড়াবেন
- স্বয়ংক্রিয় ক্যাপশনকে চূড়ান্ত সত্য ধরে নেওয়া: উৎস চিহ্নিত করুন এবং একটি নমুনা হাতে যাচাই করুন।
- মেটাডেটা ছাড়া উপভাষা মিশিয়ে ফেলা: চ্যানেল ও অঞ্চল লিপিবদ্ধ করুন যাতে ফলাফল ব্যাখ্যা করা যায়।
- লাইসেন্সিং উপেক্ষা করা: কোনো ডেটাসেট পুনর্বিতরণের আগে প্ল্যাটফর্মের শর্ত ও কপিরাইট দেখে নিন।
এই আইডিয়া নিয়ে প্রশ্ন
স্পিচ রিকগনিশন কতগুলো ভাষা সাপোর্ট করে?
AI স্পিচ রিকগনিশন 99টি ভাষা সাপোর্ট করে, স্বয়ংক্রিয় ভাষা শনাক্তকরণ এবং মিশ্র ভাষার বক্তব্যের জন্য ঐচ্ছিক কোড-সুইচিংসহ।
শব্দ-স্তরের টাইমস্ট্যাম্প কি পাওয়া যায়?
হ্যাঁ। প্রতিটি শব্দের টাইমিং পেতে format.words রিকোয়েস্ট করুন, যা অ্যালাইনমেন্ট ও ধ্বনিতাত্ত্বিক গবেষণায় কাজে লাগে।
YouTube থেকে তৈরি ডেটাসেট কি পুনর্বিতরণ করা যায়?
তা YouTube-এর শর্তাবলী, কপিরাইট আইন ও আপনার প্রতিষ্ঠানের নীতির ওপর নির্ভর করে। অনেক গবেষক ট্রান্সক্রিপ্টের বদলে ভিডিও ID ও কোড শেয়ার করেন।