Buod / Mga Pangunahing Punto
- Azure Batch Transcription API ay tumatanggap ng mga audio file na hanggang 2.5 oras (WAV/MP3/OGG/FLAC), pinoproseso ang mga ito nang asynchronously, at nagbabalik ng
recognizedPhrasesJSON array na may mganBestcandidate bawat parirala, mga marka ng kumpiyansa, inverse-text-normalised (ITN) na output, at opsyonal na diarisation ng tagapagsalita — hindi kailangan ng streaming connection (Microsoft Azure, 2024).- Ang mga neural acoustic model ng Microsoft ay nagbawas ng rate ng error ng salita ng humigit-kumulang 50% kumpara sa mga naunang baseline ng hidden Markov model (HMM) sa Switchboard conversational benchmark, na umaabot sa kapantay ng mga propesyonal na transcriber ng tao sa dataset na iyon sa ~5.1% WER (Xiong et al., Microsoft Research, 2016/2021 na update).
- Azure Text Analytics (na ngayon ay bahagi ng Azure AI Language) ay nagpoproseso ng teksto ng transcript sa pamamagitan ng pagkuha ng pangunahing parirala, pagkilala ng pinangalanang entity (NER), pagsusuri ng damdamin na may opinion mining, at pagtuklas ng wika — lahat sa isang
analyze_sentimentobegin_analyze_actionsna tawag gamit ang Python SDK.- CherryPy ay nagbibigay ng web layer: URL routing, multipart upload handling, pamamahala ng session, at Jinja2 template rendering sa isang minimal na Python process na maaaring tumakbo sa isang mababang halaga na VM nang walang overhead ng orchestration.
- Azure Translator NMT ay awtomatikong nakakakita ng source language at nagsasalin ng mga transcript sa alinman sa 135 target na wika, na nagbibigay-daan sa downstream na pagsusuri ng NLP sa parehong orihinal at isinalin na teksto sa loob ng parehong pipeline run.
Audio Analyser ⧉ ay isang open-source na Python application na nagkokonekta ng tatlong Azure Cognitive Services sa isang workflow: Batch Transcription para sa speech-to-text, Azure AI Language (Text Analytics) para sa NLP, at Azure Translator para sa multilingual na output. Ang web interface ay pinaglilingkuran ng CherryPy, at ang mga resulta ay maaaring itago sa JSON, plain text, o isang lokal na SQLite database.
Inilalarawan ng artikulong ito ang teknikal na arkitektura ng bawat yugto ng pipeline, ang mga kontrata ng Azure API, at ang mga pagpipilian sa disenyo na ginawa sa CherryPy layer.
Paano Gumagana ang Audio Analyser: Pangkalahatang-ideya ng Arkitektura #
Ang pipeline ay may limang magkakaibang yugto:
- Pag-upload — nagpapadala ang gumagamit ng audio file sa pamamagitan ng CherryPy web interface. Iniimbak ng CherryPy ang file sa isang pansamantalang direktoryo at nagbabalik ng job ID.
- Transcription — nagpapadala ang Audio Analyser ng file sa Azure Batch Transcription REST API. Dahil ang batch transcription ay asynchronous, ang application ay nagpo-poll sa job status endpoint sa mga pagitan at naghihintay para sa estado na
Succeededbago magpatuloy. - NLP — ang raw na teksto ng transcript ay ipinasa sa Azure AI Language para sa pagkuha ng pangunahing parirala, NER, pagsusuri ng damdamin, at pagtuklas ng wika.
- Pagsasalin (opsyonal) — kung may tinukoy na target na wika, ang transcript ay ipapadala sa Azure Translator, at ang pagsusuri ng NLP ay muling tatakbo sa isinalin na teksto.
- Output — ang mga resulta ay isinusulat sa napiling output format (JSON, TXT, o SQLite) at ire-render sa CherryPy web UI.
Ang mga runtime dependency lamang na nasa labas ng Python standard library ay azure-cognitiveservices-speech, azure-ai-textanalytics, azure-ai-translation-text, at cherrypy. Lahat ng Azure credentials ay binabasa mula sa mga environment variable.
Azure Cognitive Services: Ang Batch Transcription Engine #
Ang Azure Speech service batch transcription API (/speechtotext/v3.0/transcriptions) ay tumatanggap ng sanggunian sa isang audio file sa Azure Blob Storage at isang configuration JSON body. Inina-upload ng Audio Analyser ang lokal na file sa Blob Storage gamit ang isang pre-signed SAS URL, pagkatapos ay isinusumite ang trabaho ng transcription.
Isang minimal na payload ng pagsusumite ng trabaho:
{
"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"
}
}
Ang array na recognizedPhrases sa tugon ay naglalaman ng isang object bawat kinikilalang pahayag. Kasama sa bawat entry ang:
nBest[0].confidence— float sa pagitan ng 0 at 1nBest[0].lexical— mga raw na salita gaya ng sinabinBest[0].itn— inverse-text-normalised na anyo (mga numero, petsa, pera na pinalawak)nBest[0].display— na-format para sa pagbabasa, na may bantasspeaker— integer na speaker ID kapag pinagana ang diarisation
Ang fine-tuning ng Custom Speech ay available para sa domain-specific na bokabularyo. Ang pag-upload ng pronunciation lexicon o adaptation corpus (isang set ng mga text sentence na kinakatawan ng domain) ay nag-a-adjust ng language model at maaaring makabuluhang bawasan ang WER sa espesyalisadong nilalaman tulad ng mga term sa pananalapi o medikal na jargon.
Natural Language Processing gamit ang Azure AI Language #
Pagkatapos ng transcription, nagpapadala ang Audio Analyser ng display-form na transcript sa Azure AI Language sa pamamagitan ng azure-ai-textanalytics na Python SDK:
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)
Ang show_opinion_mining=True ay nagpapagana ng aspect-level sentiment: ang API ay nagbabalik hindi lamang ng document-level polarity kundi pati na rin ng mga tiyak na pares ng target–assessment (hal., target="kalidad ng audio", assessment="mahirap"). Ginagawa nitong kapaki-pakinabang ang output para sa pagtukoy ng mga kongkretong isyu sa pagsusuri ng tawag sa serbisyo ng customer.
Ang named entity recognition ay nag-uuri ng mga span bilang isa sa: Person, Organization, Location, Event, Product, DateTime, Quantity, IP, URL, Email, PersonType, Skill, Address, PhoneNumber.
Multilingual na Suporta sa pamamagitan ng Azure Translator #
Ang Azure Translator ay ginagamit pagkatapos ng pagtuklas ng wika kapag humingi ang gumagamit ng target na wika. Sinusuportahan ng serbisyo ang 135 na wika at diyalekto na may neural machine translation (NMT). Ginagamit ng Audio Analyser ang /translate REST endpoint na may autodetect bilang parameter na from, kaya hindi kailangan ng pagtukoy ng source language:
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"]
Pagkatapos ng pagsasalin, opsyonal na muling nagpapatakbo ang Audio Analyser ng Text Analytics NLP pass sa isinalin na teksto upang ang mga output ng pangunahing parirala at damdamin ay magagamit sa parehong source at target na wika.
Ang pagpili ng output format (JSON, TXT, SQLite) ay itinakda sa pagsisimula. Iniimbak ng SQLite output ang bawat session ng pagsusuri bilang isang row na may mga column para sa job ID, timestamp, source language, transcript, isinalin na transcript, mga marka ng damdamin, at mga pangunahing parirala bilang JSON blob — na nagbibigay-daan sa mga SQL query sa mga session.
CherryPy bilang Web Layer #
Nag-i-map ang CherryPy ng mga URL route sa mga pamamaraan ng Python gamit ang mga class-based na controller. Gumagamit ang Audio Analyser ng tatlong route:
| Route | Pamamaraan | Paglalarawan |
|---|---|---|
GET / |
index() |
Nire-render ang form ng pag-upload |
POST /analyse |
analyse() |
Tumatanggap ng multipart upload, nagti-trigger ng pipeline, nagbabalik ng job ID |
GET /results/<job_id> |
results() |
Nagpo-poll ng status ng trabaho; nire-render ang pahina ng resulta kapag kumpleto na |
Pinapanatiling maliit ng minimal na configuration ang laki ng server:
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)
Hawak ng estado ng session ang kasalukuyang job ID, napiling output format, at target na wika ng pagsasalin. Ang built-in na imbakan ng session ng CherryPy ay naka-back ng file bilang default, na hindi nangangailangan ng panlabas na cache layer.
Mga Madalas Itanong #
Anong mga format ng audio at laki ng file ang tinatanggap ng Audio Analyser? Sinusuportahan ng Azure Batch Transcription API ang mga file na WAV, MP3, OGG, at FLAC na hanggang 2.5 oras ang haba. Ang mga file na nasa labas ng hanay na ito ay dapat hatiin bago mag-upload. Tinatanggap ang mga stereo file; hindi kailangan ng conversion sa mono.
Paano gumagana ang speaker diarisation?
Ang pagtatakda ng diarizationEnabled: true sa kahilingan ng batch transcription ay nagpapaaktibo ng modelo ng paghihiwalay ng tagapagsalita ng Azure. Kasama sa bawat recognizedPhrase sa tugon ang isang integer na field na speaker. Tinutukoy ng modelo ang mga tagapagsalita sa pamamagitan ng mga acoustic na katangian at nagtatalaga ng mga pare-parehong ID sa loob ng isang session, ngunit hindi kinilala kung sino ang mga tagapagsalita nang walang hiwalay na hakbang sa pagpapalista ng profil ng boses.
Ang mga audio file ba ay napanatili pagkatapos ng transcription? Ang mga audio file ay ini-upload sa Azure Blob Storage na may isang maikling SAS URL at tinatanggal mula sa pansamantalang lokal na direktoryo pagkatapos makumpleto ang pag-upload. Ang pagpapanatili ng mga blob sa Azure Blob Storage ay nakasalalay sa patakaran ng lifecycle ng container; bilang default, hindi nagtatakda ang Audio Analyser ng tahasang patakaran ng pagtanggal, kaya inirerekumenda ang pag-configure ng maikling TTL rule (hal., tanggalin ang mga blob na mas matanda sa 1 araw) sa Azure portal para sa mga deployment sa produksyon.
Maaari bang patakbuhin ang pagsusuri ng NLP nang walang pagsasalin?
Oo. Ang pagsasalin ay isang opsyonal na yugto ng pipeline na kinokontrol ng --target-lang CLI flag o ang dropdown ng target na wika sa web UI. Kapag walang napiling target na wika, ang pipeline ay nagpapatakbo lamang ng speech-to-text at Text Analytics.
Mga Sanggunian #
- Microsoft. Batch transcription overview — Azure AI services. Microsoft Learn, 2024. https://learn.microsoft.com/en-us/azure/ai-services/speech-service/batch-transcription
- Xiong, W. et al. "Achieving Human Parity in Conversational Speech Recognition." Microsoft Research Technical Report, 2016; updated 2021. https://arxiv.org/abs/1610.05256
- Microsoft. What is Azure AI Language? Microsoft Learn, 2024. https://learn.microsoft.com/en-us/azure/ai-services/language-service/overview
- Microsoft. Azure AI Translator — Supported languages. Microsoft Learn, 2024. https://learn.microsoft.com/en-us/azure/ai-services/translator/language-support
Huling sinuri .
Huling sinuri .
