บทสรุปผู้บริหาร / ประเด็นสำคัญ
- Azure Batch Transcription API รับไฟล์เสียงยาวได้สูงสุด 2.5 ชั่วโมง (WAV/MP3/OGG/FLAC) ประมวลผลแบบอะซิงโครนัส และคืนค่าอาร์เรย์ JSON
recognizedPhrasesที่มีผู้สมัครnBestต่อวลี คะแนนความเชื่อมั่น เอาต์พุตแบบ inverse-text-normalised (ITN) และการแยกผู้พูด (diarisation) แบบเลือกได้ โดยไม่ต้องใช้การเชื่อมต่อสตรีมมิง (Microsoft Azure, 2024)- โมเดลอะคูสติกนิวรัลของ Microsoft ลดอัตราความผิดพลาดของคำ (word error rate) ลงประมาณ 50% เมื่อเทียบกับเบสไลน์ hidden Markov model (HMM) รุ่นก่อนหน้าบนเกณฑ์มาตรฐานการสนทนา Switchboard โดยทำได้เทียบเท่ากับผู้ถอดเสียงมืออาชีพที่เป็นมนุษย์บนชุดข้อมูลดังกล่าวที่ประมาณ 5.1% WER (Xiong et al., Microsoft Research, อัปเดตปี 2016/2021)
- Azure Text Analytics (ปัจจุบันเป็นส่วนหนึ่งของ Azure AI Language) ประมวลผลข้อความถอดเสียงผ่านการสกัดวลีสำคัญ การรู้จำชื่อเอนทิตี (NER) การวิเคราะห์ความรู้สึกพร้อม opinion mining และการตรวจจับภาษา ทั้งหมดในการเรียกใช้
analyze_sentimentหรือbegin_analyze_actionsเพียงครั้งเดียวด้วย Python SDK- CherryPy ทำหน้าที่เป็นชั้นเว็บ ได้แก่ การกำหนดเส้นทาง URL การจัดการอัปโหลดแบบ multipart การจัดการเซสชัน และการเรนเดอร์เทมเพลต Jinja2 ในกระบวนการ Python ขนาดเล็กที่รันบน VM ต้นทุนต่ำเพียงเครื่องเดียวได้โดยไม่มีภาระด้าน orchestration
- Azure Translator NMT ตรวจจับภาษาต้นทางโดยอัตโนมัติ และแปลข้อความถอดเสียงเป็นภาษาปลายทางได้ 135 ภาษา ทำให้สามารถวิเคราะห์ NLP ปลายน้ำได้ทั้งกับข้อความต้นฉบับและข้อความที่แปลแล้วภายในการรันไปป์ไลน์เดียวกัน
Audio Analyser ⧉ คือแอปพลิเคชัน Python โอเพนซอร์สที่เชื่อมบริการ Azure Cognitive Services สามตัวเข้าเป็นเวิร์กโฟลว์เดียว ได้แก่ Batch Transcription สำหรับ speech-to-text, Azure AI Language (Text Analytics) สำหรับ NLP และ Azure Translator สำหรับเอาต์พุตหลายภาษา ส่วนติดต่อผู้ใช้เว็บให้บริการโดย CherryPy และผลลัพธ์สามารถบันทึกลงในไฟล์ JSON, ข้อความธรรมดา หรือฐานข้อมูล SQLite ภายในเครื่องได้
บทความนี้อธิบายสถาปัตยกรรมทางเทคนิคของแต่ละขั้นในไปป์ไลน์ สัญญา API ของ Azure และการตัดสินใจด้านการออกแบบในชั้น CherryPy
การทำงานของ Audio Analyser: ภาพรวมสถาปัตยกรรม #
ไปป์ไลน์ประกอบด้วยห้าขั้นตอนที่แยกจากกัน:
- อัปโหลด ผู้ใช้ส่งไฟล์เสียงผ่านส่วนติดต่อเว็บของ CherryPy จากนั้น CherryPy จะจัดเก็บไฟล์ไว้ในไดเรกทอรีชั่วคราวและคืนค่า job ID
- ถอดเสียง Audio Analyser ส่งไฟล์ไปยัง Azure Batch Transcription REST API เนื่องจากการถอดเสียงแบบ batch เป็นแบบอะซิงโครนัส แอปพลิเคชันจึง poll ปลายทางสถานะงานเป็นระยะและรอสถานะ
Succeededก่อนดำเนินการต่อ - NLP ข้อความถอดเสียงดิบจะถูกส่งไปยัง Azure AI Language เพื่อสกัดวลีสำคัญ ทำ NER วิเคราะห์ความรู้สึก และตรวจจับภาษา
- การแปล (เลือกได้) หากมีการระบุภาษาปลายทาง ข้อความถอดเสียงจะถูกส่งไปยัง Azure Translator และการวิเคราะห์ NLP จะถูกรันซ้ำบนข้อความที่แปลแล้ว
- เอาต์พุต ผลลัพธ์จะถูกเขียนลงในรูปแบบเอาต์พุตที่เลือก (JSON, TXT หรือ SQLite) และเรนเดอร์ในเว็บ UI ของ CherryPy
ดีเพนเดนซีขณะรันเพียงอย่างเดียวที่อยู่นอกไลบรารีมาตรฐานของ Python คือ azure-cognitiveservices-speech, azure-ai-textanalytics, azure-ai-translation-text และ cherrypy ข้อมูลรับรอง (credentials) ของ Azure ทั้งหมดจะถูกอ่านจากตัวแปรสภาพแวดล้อม
Azure Cognitive Services: เอนจินถอดเสียงแบบ Batch #
API การถอดเสียงแบบ batch ของบริการ Azure Speech (/speechtotext/v3.0/transcriptions) รับการอ้างอิงไปยังไฟล์เสียงใน Azure Blob Storage และบอดี JSON สำหรับกำหนดค่า Audio Analyser จะอัปโหลดไฟล์ภายในเครื่องไปยัง Blob Storage โดยใช้ SAS URL ที่ลงนามล่วงหน้า จากนั้นจึงส่งงานถอดเสียง
เพย์โหลดการส่งงานขั้นต่ำ:
{
"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 ในการตอบกลับมีอ็อบเจกต์หนึ่งรายการต่อหนึ่งข้อความที่รู้จำได้ แต่ละรายการประกอบด้วย:
nBest[0].confidenceค่า float ระหว่าง 0 ถึง 1nBest[0].lexicalคำดิบตามที่พูดnBest[0].itnรูปแบบ inverse-text-normalised (ขยายตัวเลข วันที่ และสกุลเงิน)nBest[0].displayจัดรูปแบบเพื่อการอ่าน พร้อมเครื่องหมายวรรคตอนspeakerรหัสผู้พูดแบบจำนวนเต็มเมื่อเปิดใช้ diarisation
การปรับแต่ง Custom Speech พร้อมใช้งานสำหรับคำศัพท์เฉพาะโดเมน การอัปโหลด lexicon การออกเสียงหรือ corpus การปรับตัว (ชุดประโยคข้อความที่เป็นตัวแทนของโดเมน) จะปรับโมเดลภาษาและสามารถลด WER บนเนื้อหาเฉพาะทาง เช่น ศัพท์การเงินหรือศัพท์แสงทางการแพทย์ ได้อย่างมีนัยสำคัญ
การประมวลผลภาษาธรรมชาติด้วย Azure AI Language #
หลังการถอดเสียง Audio Analyser จะส่งข้อความถอดเสียงในรูปแบบ display ไปยัง Azure AI Language ผ่าน Python SDK azure-ai-textanalytics:
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 เปิดใช้การวิเคราะห์ความรู้สึกระดับ aspect โดย API จะคืนค่าไม่เพียงขั้วความรู้สึกระดับเอกสาร แต่รวมถึงคู่ target–assessment ที่เฉพาะเจาะจง (เช่น target="audio quality", assessment="poor") ทำให้เอาต์พุตมีประโยชน์ในการระบุปัญหาที่เป็นรูปธรรมในการวิเคราะห์สายบริการลูกค้า
การรู้จำชื่อเอนทิตีจะจำแนก span เป็นหนึ่งในประเภทต่อไปนี้: Person, Organization, Location, Event, Product, DateTime, Quantity, IP, URL, Email, PersonType, Skill, Address, PhoneNumber
การรองรับหลายภาษาผ่าน Azure Translator #
Azure Translator จะถูกเรียกใช้หลังการตรวจจับภาษาเมื่อผู้ใช้ร้องขอภาษาปลายทาง บริการนี้รองรับ 135 ภาษาและสำเนียงด้วย neural machine translation (NMT) Audio Analyser ใช้ปลายทาง REST /translate โดยกำหนด autodetect เป็นพารามิเตอร์ from จึงไม่จำเป็นต้องระบุภาษาต้นทาง:
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 สามารถเลือกรันการประมวลผล NLP ของ Text Analytics ซ้ำบนข้อความที่แปลแล้ว เพื่อให้ได้เอาต์พุตวลีสำคัญและความรู้สึกทั้งในภาษาต้นทางและภาษาปลายทาง
การเลือกรูปแบบเอาต์พุต (JSON, TXT, SQLite) ถูกกำหนดตอนเริ่มต้นทำงาน เอาต์พุต SQLite จะจัดเก็บแต่ละเซสชันการวิเคราะห์เป็นแถวหนึ่งแถว โดยมีคอลัมน์สำหรับ job ID, ตราประทับเวลา, ภาษาต้นทาง, ข้อความถอดเสียง, ข้อความถอดเสียงที่แปลแล้ว, คะแนนความรู้สึก และวลีสำคัญในรูปแบบ JSON blob ทำให้สามารถ query แบบ SQL ข้ามหลายเซสชันได้
CherryPy ในฐานะชั้นเว็บ #
CherryPy แม็ปเส้นทาง URL ไปยังเมธอด Python โดยใช้คอนโทรลเลอร์แบบคลาส Audio Analyser ใช้สามเส้นทาง:
| เส้นทาง | เมธอด | คำอธิบาย |
|---|---|---|
GET / |
index() |
แสดงฟอร์มอัปโหลด |
POST /analyse |
analyse() |
รับอัปโหลดแบบ multipart เรียกไปป์ไลน์ และคืนค่า job ID |
GET /results/<job_id> |
results() |
poll สถานะงาน แล้วเรนเดอร์หน้าผลลัพธ์เมื่อเสร็จสิ้น |
การกำหนดค่าขั้นต่ำช่วยให้ footprint ของเซิร์ฟเวอร์มีขนาดเล็ก:
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)
สถานะเซสชันเก็บ job ID ปัจจุบัน รูปแบบเอาต์พุตที่เลือก และภาษาปลายทางสำหรับการแปล ที่จัดเก็บเซสชันในตัวของ CherryPy ใช้ไฟล์เป็นฐานโดยค่าเริ่มต้น จึงไม่ต้องใช้ชั้นแคชภายนอก
คำถามที่พบบ่อย #
Audio Analyser รองรับรูปแบบเสียงและขนาดไฟล์แบบใด? Azure Batch Transcription API รองรับไฟล์ WAV, MP3, OGG และ FLAC ที่มีความยาวสูงสุด 2.5 ชั่วโมง ไฟล์ที่อยู่นอกช่วงนี้ควรถูกแบ่งก่อนอัปโหลด ระบบรับไฟล์สเตอริโอ และไม่จำเป็นต้องแปลงเป็นโมโน
การแยกผู้พูด (diarisation) ทำงานอย่างไร?
การตั้งค่า diarizationEnabled: true ในคำขอถอดเสียงแบบ batch จะเปิดใช้โมเดลแยกผู้พูดของ Azure แต่ละ recognizedPhrase ในการตอบกลับจะมีฟิลด์จำนวนเต็ม speaker โมเดลจะระบุผู้พูดจากลักษณะทางอะคูสติกและกำหนดรหัสที่สอดคล้องกันภายในเซสชัน แต่จะไม่ระบุว่าผู้พูดเป็นใครหากไม่มีขั้นตอนลงทะเบียนโปรไฟล์เสียงแยกต่างหาก
ไฟล์เสียงถูกเก็บไว้หลังการถอดเสียงหรือไม่? ไฟล์เสียงจะถูกอัปโหลดไปยัง Azure Blob Storage ด้วย SAS URL ที่มีอายุสั้น และถูกลบออกจากไดเรกทอรีภายในเครื่องชั่วคราวหลังจากอัปโหลดเสร็จสิ้น การเก็บรักษา blob ใน Azure Blob Storage ขึ้นอยู่กับนโยบายวงจรชีวิตของคอนเทนเนอร์ โดยค่าเริ่มต้น Audio Analyser จะไม่ตั้งนโยบายการลบอย่างชัดเจน ดังนั้นจึงแนะนำให้กำหนดกฎ TTL แบบสั้น (เช่น ลบ blob ที่เก่ากว่า 1 วัน) ในพอร์ทัล Azure สำหรับการนำไปใช้งานจริง
สามารถรันการวิเคราะห์ NLP โดยไม่แปลได้หรือไม่?
ได้ การแปลเป็นขั้นตอนไปป์ไลน์ที่เลือกได้ ควบคุมด้วยแฟล็ก CLI --target-lang หรือเมนูดร็อปดาวน์ภาษาปลายทางในเว็บ UI เมื่อไม่ได้เลือกภาษาปลายทาง ไปป์ไลน์จะรันเฉพาะ speech-to-text และ Text Analytics เท่านั้น
เอกสารอ้างอิง #
- 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
ทบทวนล่าสุด .
เผยแพร่บทความนี้ซ้ำ
คัดลอกรูปแบบสำหรับ Medium
# Audio Analyser: ไปป์ไลน์ Azure Speech, NLP และการแปลภาษา — Sebastien Rousseau > Originally published at [https://sebastienrousseau.com/th/2024-01-29-kan-wikhro-siang-praeplian-lae-khwam-khaochai-ai/](https://sebastienrousseau.com/th/2024-01-29-kan-wikhro-siang-praeplian-lae-khwam-khaochai-ai/) Audio Analyser ใช้โมเดลนิวรัล speech-to-text ของ Azure Cognitive Services, NLP จาก Text Analytics และ CherryPy เพื่อแปลงไฟล์บันทึกเสียงให้เป็นข้อความถอดเสียงที่ค้นหาได้ พร้อมคะแนนความรู้สึก การสกัดคำสำคัญ และการแปลหลายภาษา Read the full article on sebastienrousseau.com: https://sebastienrousseau.com/th/2024-01-29-kan-wikhro-siang-praeplian-lae-khwam-khaochai-ai/
คัดลอกรูปแบบสำหรับ Mastodon
Audio Analyser: ไปป์ไลน์ Azure Speech, NLP และการแปลภาษา — Sebastien Rousseau Audio Analyser ใช้โมเดลนิวรัล speech-to-text ของ Azure Cognitive Services, NLP จาก Text Analytics และ CherryPy เพื่อแปลงไฟล์บันทึกเสียงให้เป็นข้อความถอดเสียงที่ค้นหาได้ พร้อมคะแนนความรู้สึก การสกัดคำสำคัญ และการแปลหลายภาษา https://sebastienrousseau.com/th/2024-01-29-kan-wikhro-siang-praeplian-lae-khwam-khaochai-ai/
คัดลอกที่จัดรูปแบบสำหรับ LinkedIn
Audio Analyser: ไปป์ไลน์ Azure Speech, NLP และการแปลภาษา — Sebastien Rousseau Audio Analyser ใช้โมเดลนิวรัล speech-to-text ของ Azure Cognitive Services, NLP จาก Text Analytics และ CherryPy เพื่อแปลงไฟล์บันทึกเสียงให้เป็นข้อความถอดเสียงที่ค้นหาได้ พร้อมคะแนนความรู้สึก การสกัดคำสำคัญ และการแปลหลายภาษา. นี่คือประเด็นเชิงกลยุทธ์ที่สำคัญ: - การทำงานของ Audio Analyser: ภาพรวมสถาปัตยกรรม. ไปป์ไลน์ประกอบด้วยห้าขั้นตอนที่แยกจากกัน:. - Azure Cognitive Services: เอนจินถอดเสียงแบบ Batch. API การถอดเสียงแบบ batch ของบริการ Azure Speech (/speechtotext/v3.0/transcriptions) รับการอ้างอิงไปยังไฟล์เสียงใน Azure Blob Storage และบอดี JSON สำหรับกำหนดค่า Audio Analyser จะอัปโหลดไฟล์ภายในเครื่องไปยัง Blob… - การประมวลผลภาษาธรรมชาติด้วย Azure AI Language. หลังการถอดเสียง Audio Analyser จะส่งข้อความถอดเสียงในรูปแบบ display ไปยัง Azure AI Language ผ่าน Python SDK azure-ai-textanalytics:. - การรองรับหลายภาษาผ่าน Azure Translator. Azure Translator จะถูกเรียกใช้หลังการตรวจจับภาษาเมื่อผู้ใช้ร้องขอภาษาปลายทาง บริการนี้รองรับ 135 ภาษาและสำเนียงด้วย neural machine translation (NMT) Audio Analyser ใช้ปลายทาง REST /translate โดยกำหนด autodetect… แนวทางขององค์กรของคุณในการรับมือกับความท้าทายที่ระบุไว้ในบทความนี้คืออะไร? → https://sebastienrousseau.com/th/2024-01-29-kan-wikhro-siang-praeplian-lae-khwam-khaochai-ai/ #AzureCognitiveServices #SpeechToText #โมเดลอะคูสติกนิวรัล #AzureTextAnalytics #การประมวลผลภาษาธรรมชาติ Sebastien Rousseau | CC-BY-4.0
อ้างอิงบทความนี้
Audio Analyser: ไปป์ไลน์ Azure Speech, NLP และการแปลภาษา — Sebastien Rousseau
Audio Analyser ใช้โมเดลนิวรัล speech-to-text ของ Azure Cognitive Services, NLP จาก Text Analytics และ CherryPy เพื่อแปลงไฟล์บันทึกเสียงให้เป็นข้อความถอดเสียงที่ค้นหาได้ พร้อมคะแนนความรู้สึก การสกัดคำสำคัญ และการแปลหลายภาษา
BibTeX
@online{rousseau2024audio,
author = {Rousseau, Sebastien},
title = {{Audio Analyser: ไปป์ไลน์ Azure Speech, NLP และการแปลภาษา — Sebastien Rousseau}},
year = {2024},
url = {https://sebastienrousseau.com/th/2024-01-29-kan-wikhro-siang-praeplian-lae-khwam-khaochai-ai/},
urldate = {2024}
}RIS
TY - GEN AU - Rousseau, Sebastien TI - Audio Analyser: ไปป์ไลน์ Azure Speech, NLP และการแปลภาษา — Sebastien Rousseau PY - 2024 UR - https://sebastienrousseau.com/th/2024-01-29-kan-wikhro-siang-praeplian-lae-khwam-khaochai-ai/ ER -
Vancouver
Rousseau S. Audio Analyser: ไปป์ไลน์ Azure Speech, NLP และการแปลภาษา — Sebastien Rousseau. sebastienrousseau.com. 2024 Jan 29. Available from: https://sebastienrousseau.com/th/2024-01-29-kan-wikhro-siang-praeplian-lae-khwam-khaochai-ai/
Chicago
Rousseau, Sebastien. "Audio Analyser: ไปป์ไลน์ Azure Speech, NLP และการแปลภาษา — Sebastien Rousseau." sebastienrousseau.com. January 29, 2024. https://sebastienrousseau.com/th/2024-01-29-kan-wikhro-siang-praeplian-lae-khwam-khaochai-ai/.
APA
Rousseau, S. (2024, January 29). Audio Analyser: ไปป์ไลน์ Azure Speech, NLP และการแปลภาษา — Sebastien Rousseau. sebastienrousseau.com. https://sebastienrousseau.com/th/2024-01-29-kan-wikhro-siang-praeplian-lae-khwam-khaochai-ai/
เผยแพร่บทความนี้ซ้ำ
Audio Analyser: ไปป์ไลน์ Azure Speech, NLP และการแปลภาษา — Sebastien Rousseau
Audio Analyser ใช้โมเดลนิวรัล speech-to-text ของ Azure Cognitive Services, NLP จาก Text Analytics และ CherryPy เพื่อแปลงไฟล์บันทึกเสียงให้เป็นข้อความถอดเสียงที่ค้นหาได้ พร้อมคะแนนความรู้สึก การสกัดคำสำคัญ และการแปลหลายภาษา
บทความนี้เผยแพร่ภายใต้สัญญาอนุญาต Creative Commons Attribution 4.0 International. การเผยแพร่ซ้ำต้องระบุที่มาเป็น URL ต้นฉบับ
Audio Analyser: ไปป์ไลน์ Azure Speech, NLP และการแปลภาษา — Sebastien Rousseau Audio Analyser ใช้โมเดลนิวรัล speech-to-text ของ Azure Cognitive Services, NLP จาก Text Analytics และ CherryPy เพื่อแปลงไฟล์บันทึกเสียงให้เป็นข้อความถอดเสียงที่ค้นหาได้ พร้อมคะแนนความรู้สึก การสกัดคำสำคัญ และการแปลหลายภาษา Originally published at https://sebastienrousseau.com/th/2024-01-29-kan-wikhro-siang-praeplian-lae-khwam-khaochai-ai/ by Sebastien Rousseau. Licensed under CC-BY-4.0.
