Sebastien Rousseau

Audio Analyser: Azure Speech, NLP, and Translation Pipeline

Azure-চালিত স্পিচ অ্যানালিটিক্স টুলের আর্কিটেকচার ও পাইপলাইন

6 মিনিট পঠন
Banner for: Audio Analyser: Azure Speech, NLP, and Translation Pipeline

নির্বাহী সারসংক্ষেপ / মূল বিষয়সমূহ

  • Azure Batch Transcription API ২.৫ ঘণ্টা পর্যন্ত অডিও ফাইল (WAV/MP3/OGG/FLAC) গ্রহণ করে, সেগুলো অ্যাসিঙ্ক্রোনাসভাবে প্রক্রিয়া করে এবং প্রতি বাক্যাংশে nBest প্রার্থী, কনফিডেন্স স্কোর, ইনভার্স-টেক্সট-নর্মালাইজড (ITN) আউটপুট এবং ঐচ্ছিক স্পিকার diarisation সহ recognizedPhrases JSON অ্যারে ফেরত দেয় — স্ট্রিমিং সংযোগ প্রয়োজন নেই (Microsoft Azure, 2024)।
  • Microsoft-এর নিউরাল অ্যাকোস্টিক মডেল Switchboard কথোপকথন বেঞ্চমার্কে আগের হিডেন মার্কোভ মডেল (HMM) বেসলাইনের তুলনায় ওয়ার্ড এরর রেট প্রায় ৫০% হ্রাস করেছে, সেই ডেটাসেটে ~৫.১% WER-এ পেশাদার মানব ট্রান্সক্রাইবারের সাথে সমতা অর্জন করেছে (Xiong et al., Microsoft Research, ২০১৬/২০২১ আপডেট)।
  • Azure Text Analytics (এখন Azure AI Language-এর অংশ) কী বাক্যাংশ নিষ্কাশন, নামিত সত্তা স্বীকৃতি (NER), ওপিনিয়ন মাইনিং সহ সেন্টিমেন্ট বিশ্লেষণ এবং ভাষা সনাক্তকরণের মাধ্যমে ট্রান্সক্রিপ্ট টেক্সট প্রক্রিয়া করে — Python SDK ব্যবহার করে একটি analyze_sentiment বা begin_analyze_actions কলে।
  • CherryPy ওয়েব লেয়ার প্রদান করে: URL রাউটিং, মাল্টিপার্ট আপলোড হ্যান্ডলিং, সেশন ম্যানেজমেন্ট এবং Jinja2 টেমপ্লেট রেন্ডারিং একটি ন্যূনতম Python প্রক্রিয়ায় যা অর্কেস্ট্রেশন ওভারহেড ছাড়াই একটি কম-খরচের VM-এ চালাতে পারে।
  • Azure Translator NMT স্বয়ংক্রিয়ভাবে সোর্স ভাষা সনাক্ত করে এবং ১৩৫টি টার্গেট ভাষার যেকোনো একটিতে ট্রান্সক্রিপ্ট অনুবাদ করে, একই পাইপলাইন রানে মূল এবং অনুবাদিত উভয় টেক্সটে ডাউনস্ট্রিম NLP বিশ্লেষণ সক্ষম করে।

Audio Analyser ⧉ একটি ওপেন-সোর্স Python অ্যাপ্লিকেশন যা তিনটি Azure Cognitive Services কে একটি ওয়ার্কফ্লোতে সংযুক্ত করে: স্পিচ-টু-টেক্সটের জন্য Batch Transcription, NLP-এর জন্য Azure AI Language (Text Analytics) এবং বহুভাষিক আউটপুটের জন্য Azure Translator। ওয়েব ইন্টারফেস CherryPy দ্বারা পরিবেশিত হয় এবং ফলাফল JSON, প্লেইন টেক্সট বা লোকাল SQLite ডেটাবেসে সংরক্ষিত হতে পারে।

এই নিবন্ধটি প্রতিটি পাইপলাইন স্তরের প্রযুক্তিগত আর্কিটেকচার, Azure API চুক্তি এবং CherryPy লেয়ারে করা ডিজাইন পছন্দগুলি বর্ণনা করে।

Audio Analyser কীভাবে কাজ করে: আর্কিটেকচার সংক্ষিপ্ত বিবরণ #

পাইপলাইনের পাঁচটি পৃথক স্তর রয়েছে:

  1. আপলোড — ব্যবহারকারী CherryPy ওয়েব ইন্টারফেসের মাধ্যমে একটি অডিও ফাইল সাবমিট করেন। CherryPy ফাইলটি একটি অস্থায়ী ডিরেক্টরিতে সংরক্ষণ করে এবং একটি জব ID ফেরত দেয়।
  2. ট্রান্সক্রিপশন — Audio Analyser Azure Batch Transcription REST API-তে ফাইলটি সাবমিট করে। ব্যাচ ট্রান্সক্রিপশন অ্যাসিঙ্ক্রোনাস হওয়ায়, অ্যাপ্লিকেশন বিরতিতে জব স্ট্যাটাস এন্ডপয়েন্ট পোল করে এবং এগিয়ে যাওয়ার আগে Succeeded অবস্থার জন্য অপেক্ষা করে।
  3. NLP — কী বাক্যাংশ নিষ্কাশন, NER, সেন্টিমেন্ট বিশ্লেষণ এবং ভাষা সনাক্তকরণের জন্য কাঁচা ট্রান্সক্রিপ্ট টেক্সট Azure AI Language-এ পাঠানো হয়।
  4. অনুবাদ (ঐচ্ছিক) — যদি একটি টার্গেট ভাষা নির্দিষ্ট করা হয়, ট্রান্সক্রিপ্ট Azure Translator-এ পাঠানো হয় এবং অনুবাদিত টেক্সটে NLP বিশ্লেষণ পুনরায় চালানো হয়।
  5. আউটপুট — ফলাফল নির্বাচিত আউটপুট ফরম্যাটে (JSON, TXT বা SQLite) লেখা হয় এবং CherryPy ওয়েব UI-তে রেন্ডার করা হয়।

Python স্ট্যান্ডার্ড লাইব্রেরির বাইরে একমাত্র রানটাইম নির্ভরতা হল: azure-cognitiveservices-speech, azure-ai-textanalytics, azure-ai-translation-text এবং cherrypy। সমস্ত Azure ক্রেডেনশিয়াল পরিবেশ ভেরিয়েবল থেকে পড়া হয়।

Azure Cognitive Services: ব্যাচ ট্রান্সক্রিপশন ইঞ্জিন #

Azure Speech service ব্যাচ ট্রান্সক্রিপশন API (/speechtotext/v3.0/transcriptions) Azure Blob Storage-এ একটি অডিও ফাইলের রেফারেন্স এবং একটি কনফিগারেশন JSON বডি গ্রহণ করে। Audio Analyser প্রি-সাইন্ড SAS URL ব্যবহার করে লোকাল ফাইলটি Blob Storage-এ আপলোড করে, তারপর ট্রান্সক্রিপশন জব সাবমিট করে।

একটি ন্যূনতম জব সাবমিশন পেলোড:

{
  "contentUrls": ["https://<account>.blob.core.windows.net/<container>/<file>.wav?<sas>"],
  "locale": "en-US",
  "displayName": "audio-analyser-job-001",
  "properties": {
    "diarizationEnabled": true,
    "wordLevelTimestampsEnabled": true,
    "punctuationMode": "DictatedAndAutomatic",
    "profanityFilterMode": "Masked"
  }
}

রেসপন্সে recognizedPhrases অ্যারে প্রতিটি স্বীকৃত উচ্চারণের জন্য একটি অবজেক্ট ধারণ করে। প্রতিটি এন্ট্রিতে রয়েছে:

ডোমেন-নির্দিষ্ট শব্দভান্ডারের জন্য Custom Speech ফাইন-টিউনিং পাওয়া যায়। একটি উচ্চারণ শব্দকোষ বা অভিযোজন কর্পাস (ডোমেনের প্রতিনিধিত্বকারী টেক্সট বাক্যের একটি সেট) আপলোড করা ভাষা মডেল সামঞ্জস্য করে এবং আর্থিক পরিভাষা বা চিকিৎসা জার্গনের মতো বিশেষায়িত সামগ্রীতে WER উল্লেখযোগ্যভাবে হ্রাস করতে পারে।

Azure AI Language দিয়ে প্রাকৃতিক ভাষা প্রক্রিয়াকরণ #

ট্রান্সক্রিপশনের পরে, Audio Analyser azure-ai-textanalytics Python SDK-এর মাধ্যমে ডিসপ্লে-ফর্ম ট্রান্সক্রিপ্ট Azure AI Language-এ পাঠায়:

from azure.ai.textanalytics import TextAnalyticsClient
from azure.core.credentials import AzureKeyCredential

client = TextAnalyticsClient(
    endpoint=os.environ["AZURE_LANGUAGE_ENDPOINT"],
    credential=AzureKeyCredential(os.environ["AZURE_LANGUAGE_KEY"])
)

documents = [{"id": "1", "language": detected_lang, "text": transcript}]

sentiment_result = client.analyze_sentiment(documents, show_opinion_mining=True)
for doc in sentiment_result:
    print(f"Sentiment: {doc.sentiment}")
    print(f"Scores: pos={doc.confidence_scores.positive:.2f} "
          f"neg={doc.confidence_scores.negative:.2f} "
          f"neu={doc.confidence_scores.neutral:.2f}")
    for sentence in doc.sentences:
        for opinion in sentence.mined_opinions:
            print(f"  Target: {opinion.target.text}, "
                  f"Assessment: {[a.text for a in opinion.assessments]}")

keyphrases_result = client.extract_key_phrases(documents)
entities_result  = client.recognize_entities(documents)

show_opinion_mining=True অ্যাস্পেক্ট-লেভেল সেন্টিমেন্ট সক্ষম করে: API শুধু ডকুমেন্ট-লেভেল পোলারিটি নয় বরং নির্দিষ্ট টার্গেট–অ্যাসেসমেন্ট জোড়াও ফেরত দেয় (যেমন, target="audio quality", assessment="poor")। এটি কাস্টমার সার্ভিস কল বিশ্লেষণে কংক্রিট সমস্যা চিহ্নিত করার জন্য আউটপুটকে উপযোগী করে তোলে।

নামিত সত্তা স্বীকৃতি স্প্যান গুলোকে এর মধ্যে একটি হিসেবে শ্রেণীবদ্ধ করে: Person, Organization, Location, Event, Product, DateTime, Quantity, IP, URL, Email, PersonType, Skill, Address, PhoneNumber

Azure Translator-এর মাধ্যমে বহুভাষিক সমর্থন #

Azure Translator ভাষা সনাক্তকরণের পরে তখন আহ্বান করা হয় যখন ব্যবহারকারী একটি টার্গেট ভাষা অনুরোধ করেন। সার্ভিস নিউরাল মেশিন ট্রান্সলেশন (NMT) সহ ১৩৫টি ভাষা ও উপভাষা সমর্থন করে। Audio Analyser from প্যারামিটার হিসেবে autodetect সহ /translate REST এন্ডপয়েন্ট ব্যবহার করে, তাই সোর্স-ভাষা নির্দিষ্টকরণ প্রয়োজন নেই:

import requests, uuid

url = "https://api.cognitive.microsofttranslator.com/translate"
params = {"api-version": "3.0", "to": target_lang}
headers = {
    "Ocp-Apim-Subscription-Key": os.environ["AZURE_TRANSLATOR_KEY"],
    "Ocp-Apim-Subscription-Region": os.environ["AZURE_TRANSLATOR_REGION"],
    "Content-type": "application/json",
    "X-ClientTraceId": str(uuid.uuid4())
}
body = [{"text": transcript}]
response = requests.post(url, params=params, headers=headers, json=body)
translated_text = response.json()[0]["translations"][0]["text"]
detected_language = response.json()[0]["detectedLanguage"]["language"]

অনুবাদের পরে, Audio Analyser ঐচ্ছিকভাবে অনুবাদিত টেক্সটে Text Analytics NLP পাস পুনরায় চালায় যাতে কী বাক্যাংশ এবং সেন্টিমেন্ট আউটপুট সোর্স এবং টার্গেট উভয় ভাষায় পাওয়া যায়।

আউটপুট ফরম্যাট নির্বাচন (JSON, TXT, SQLite) স্টার্টআপে সেট করা হয়। SQLite আউটপুট প্রতিটি বিশ্লেষণ সেশনকে জব ID, টাইমস্ট্যাম্প, সোর্স ভাষা, ট্রান্সক্রিপ্ট, অনুবাদিত ট্রান্সক্রিপ্ট, সেন্টিমেন্ট স্কোর এবং JSON blob হিসেবে কী বাক্যাংশের জন্য কলাম সহ একটি সারি হিসেবে সংরক্ষণ করে — সেশনে SQL কোয়েরি সক্ষম করে।

CherryPy ওয়েব লেয়ার হিসেবে #

CherryPy ক্লাস-ভিত্তিক কন্ট্রোলার ব্যবহার করে URL রুট গুলোকে Python মেথডে ম্যাপ করে। Audio Analyser তিনটি রুট ব্যবহার করে:

রুট মেথড বিবরণ
GET / index() আপলোড ফর্ম রেন্ডার করে
POST /analyse analyse() মাল্টিপার্ট আপলোড গ্রহণ করে, পাইপলাইন ট্রিগার করে, জব ID ফেরত দেয়
GET /results/<job_id> results() জব স্ট্যাটাস পোল করে; সম্পন্ন হলে রিজাল্ট পেজ রেন্ডার করে

ন্যূনতম কনফিগারেশন সার্ভার ফুটপ্রিন্ট ছোট রাখে:

import cherrypy

cherrypy.config.update({
    "server.socket_host": "0.0.0.0",
    "server.socket_port": 8080,
    "tools.sessions.on": True,
    "tools.sessions.timeout": 60
})
cherrypy.quickstart(AudioAnalyserApp(), "/", conf)

সেশন স্টেট বর্তমান জব ID, নির্বাচিত আউটপুট ফরম্যাট এবং টার্গেট ট্রান্সলেশন ভাষা ধারণ করে। CherryPy-এর বিল্ট-ইন সেশন স্টোরেজ ডিফল্টরূপে ফাইল-ব্যাকড, যার জন্য কোনো বাহ্যিক ক্যাশ লেয়ারের প্রয়োজন নেই।

প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী #

Audio Analyser কোন অডিও ফরম্যাট এবং ফাইল সাইজ গ্রহণ করে? Azure Batch Transcription API ২.৫ ঘণ্টা পর্যন্ত WAV, MP3, OGG এবং FLAC ফাইল সমর্থন করে। এই পরিসরের বাইরের ফাইলগুলো আপলোডের আগে বিভক্ত করা উচিত। স্টেরিও ফাইল গ্রহণযোগ্য; মোনো রূপান্তর প্রয়োজন নেই।

স্পিকার diarisation কীভাবে কাজ করে? ব্যাচ ট্রান্সক্রিপশন রিকোয়েস্টে diarizationEnabled: true সেট করা Azure-এর স্পিকার সেপারেশন মডেল সক্রিয় করে। রেসপন্সে প্রতিটি recognizedPhrase একটি speaker ইন্টিজার ফিল্ড অন্তর্ভুক্ত করে। মডেল অ্যাকোস্টিক বৈশিষ্ট্য দ্বারা স্পিকার শনাক্ত করে এবং একটি সেশনের মধ্যে সামঞ্জস্যপূর্ণ ID নির্ধারণ করে, কিন্তু আলাদা ভয়েস প্রোফাইল এনরোলমেন্ট পদক্ষেপ ছাড়া স্পিকারদের পরিচয় নির্ধারণ করে না।

ট্রান্সক্রিপশনের পরে অডিও ফাইলগুলো কি রাখা হয়? অডিও ফাইলগুলো শর্ট-লিভড SAS URL সহ Azure Blob Storage-এ আপলোড করা হয় এবং আপলোড সম্পন্ন হওয়ার পরে অস্থায়ী লোকাল ডিরেক্টরি থেকে মুছে ফেলা হয়। Azure Blob Storage-এ blob সংরক্ষণ কন্টেইনারের লাইফসাইকেল পলিসির উপর নির্ভর করে; ডিফল্টরূপে, Audio Analyser কোনো স্পষ্ট ডিলিশন পলিসি সেট করে না, তাই প্রোডাকশন ডিপ্লয়মেন্টের জন্য Azure পোর্টালে একটি সংক্ষিপ্ত TTL নিয়ম (যেমন, ১ দিনের বেশি পুরানো blob মুছুন) কনফিগার করার সুপারিশ করা হয়।

NLP বিশ্লেষণ কি অনুবাদ ছাড়াই চালানো যাবে? হ্যাঁ। অনুবাদ একটি ঐচ্ছিক পাইপলাইন স্তর যা --target-lang CLI ফ্ল্যাগ বা ওয়েব UI-তে টার্গেট ভাষা ড্রপডাউন দ্বারা নিয়ন্ত্রিত। যখন কোনো টার্গেট ভাষা নির্বাচিত নয়, পাইপলাইন শুধুমাত্র স্পিচ-টু-টেক্সট এবং Text Analytics চালায়।

তথ্যসূত্র #

  1. Microsoft. Batch transcription overview — Azure AI services. Microsoft Learn, 2024. https://learn.microsoft.com/en-us/azure/ai-services/speech-service/batch-transcription
  2. Xiong, W. et al. "Achieving Human Parity in Conversational Speech Recognition." Microsoft Research Technical Report, 2016; updated 2021. https://arxiv.org/abs/1610.05256
  3. Microsoft. What is Azure AI Language? Microsoft Learn, 2024. https://learn.microsoft.com/en-us/azure/ai-services/language-service/overview
  4. Microsoft. Azure AI Translator — Supported languages. Microsoft Learn, 2024. https://learn.microsoft.com/en-us/azure/ai-services/translator/language-support

সর্বশেষ পর্যালোচনা .

সর্বশেষ পর্যালোচনা .