Sebastien Rousseau

AZURE COGNITIVE SERVICES

Audio Analyser: ไปป์ไลน์ Azure Speech, NLP และการแปลภาษา

สถาปัตยกรรมและไปป์ไลน์ของเครื่องมือวิเคราะห์เสียงพูดที่ทำงานบน Azure

7 นาทีในการอ่าน
Banner for: Audio Analyser: ไปป์ไลน์ Azure Speech, NLP และการแปลภาษา

บทสรุปผู้บริหาร / ประเด็นสำคัญ

  • 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: ภาพรวมสถาปัตยกรรม

ไปป์ไลน์ประกอบด้วยห้าขั้นตอนที่แยกจากกัน:

  1. อัปโหลด ผู้ใช้ส่งไฟล์เสียงผ่านส่วนติดต่อเว็บของ CherryPy จากนั้น CherryPy จะจัดเก็บไฟล์ไว้ในไดเรกทอรีชั่วคราวและคืนค่า job ID
  2. ถอดเสียง Audio Analyser ส่งไฟล์ไปยัง Azure Batch Transcription REST API เนื่องจากการถอดเสียงแบบ batch เป็นแบบอะซิงโครนัส แอปพลิเคชันจึง poll ปลายทางสถานะงานเป็นระยะและรอสถานะ Succeeded ก่อนดำเนินการต่อ
  3. NLP ข้อความถอดเสียงดิบจะถูกส่งไปยัง Azure AI Language เพื่อสกัดวลีสำคัญ ทำ NER วิเคราะห์ความรู้สึก และตรวจจับภาษา
  4. การแปล (เลือกได้) หากมีการระบุภาษาปลายทาง ข้อความถอดเสียงจะถูกส่งไปยัง Azure Translator และการวิเคราะห์ NLP จะถูกรันซ้ำบนข้อความที่แปลแล้ว
  5. เอาต์พุต ผลลัพธ์จะถูกเขียนลงในรูปแบบเอาต์พุตที่เลือก (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 ในการตอบกลับมีอ็อบเจกต์หนึ่งรายการต่อหนึ่งข้อความที่รู้จำได้ แต่ละรายการประกอบด้วย:

การปรับแต่ง 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 เท่านั้น

เอกสารอ้างอิง

  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

ทบทวนล่าสุด .

เผยแพร่บทความนี้ซ้ำ

คัดลอกรูปแบบสำหรับ 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.