LINE Developer Day 2019 — Speech Source Separation

Mike Phulsuksombati
LINE Developers Thailand
6 min readDec 4, 2019

--

สวัสดีครับ ผมได้มีโอกาสได้ฟัง talk ของคุณ Masahito Togami จาก LINE Research Lab ที่ LINE Developer Day 2019 ที่ Tokyo ซึ่งผมว่าเป็น talk ที่ nerd ที่สุด talk นึงในงานนี้เลยทีเดียว nerd ขนาดไหน ผมจะลองแชร์ให้ทุกคนๆฟังดูนะครับ 🤓

Masahito Togami, LINE Research Lab

LINE Research Lab

LINE Research Lab ตั้งมาช่วง April 2018 เพื่อทำวิจัย fundamental research ที่จะมา support business ด้านต่างๆของ LINE ซึ่งตอนนี้งานวิจัยจะเน้นด้าน AI/ML เป็นหลัก โดย Togami-san เป็นคน lead ด้าน Signal & Speech Processing

งานที่ Togami-san นำมาพูดใน talk นี่คือ Speech Source Separation (SSS)

Speech Source Separation

Speech Source Separation (SSS) คือการแยก source signals ที่เราสนใจออกจาก mixed-signal เช่น สมมติว่าเรามีเสียงผู้ชาย (Source 1) และผู้หญิง (Source 2) กำลังคุยปนกันอยู่ (Mixture) เราต้องการที่จะแยก signals ให้ได้เสียงผู้ชาย (Estimated source 1) และเสียงของผู้หญิง (Estimated source 2) แยกกันไป

credit: Audio Source Separation exploiting NMF-based Generic Source Spectral Model

โดย application หลักๆ ของ SSS ที่ LINE จะนำมาใช้ก็คือ Clova นั่นเอง

SSS จะช่วยให้ AI speaker สามารถทำงานได้ในสภาพที่แวดล้อมที่มีเสียงรบกวนมากได้ โดย SSS จะแยกเสียงของ user ออกจากเสียงรบกวนอื่นๆเพื่อให้ได้ clean signal เพื่อนำมา process ต่อนั่นเอง

ก่อนอื่นเรามาทำความเข้าใจกันก่อนว่า speech signal มันมีหน้าตายังไง

Spectrogram

Top: 2D speech signal, Bottom: Specogram of the speech signal

Spectrogram เป็น 3D visual representation ของ frequency ในสัญญาณเสียง (speech signal) ซึ่งจะประกอบด้วย

  • Time (s) ที่ x-axis
  • Frequency (Hz) ที่ y-axis
  • Amplitude (dB) ที่ z-axis

โดยการที่จะสร้าง Spectrogram สามารถทำได้ง่ายๆโดยการนำ 2D signal มาทำ Fourier Transform เพื่อแยก frequencies ต่างๆออกมานั่นเอง

ถ้าอยากเห็น Spectrogram แบบ 3D สามารถลองเข้าไปเล่นได้ที่นี่

ถ้าเรามอง Spectrogram แบบ discrete จะเห็นว่ามันเป็น matrix ที่มี row index ด้วย frequency และ column index ด้วย time โดยมี i,j-th entry เป็น amplitude นั่นเอง

ให้ X เป็น spectrogram ของ mixed-signal ซึ่งเกิดจาก speaker 2 คนที่มี spectrogram เป็น S₁ และ S₂ ตามลำดับ (X = S₁ + S₂) โจทย์ของ SSS ก็คือการหา estimation ของ S₁ และ S₂ ที่ใกล้เคียงกับของจริงที่สุดนั่นเอง

มาลองดูวิธี Speech Source Separation แบบต่างๆกันครับ

Speech Source Separation with Statistical Modeling

Blind Source Separation

Blind Source Separation คือการแยก source signal ออกจาก mixed signal โดยที่ไม่ใช้ข้อมูลเกี่ยวกับ source signal หรือ mixing process เลย (นอกจากตัว signal เอง) มาช่วยในการ separation เลย โดยจะมีแนวทางหลักๆ 2 แนวคือ

  • Spatial Model
  • Component Analysis

Spatial Model

Spatial model เป็นการนำข้อมูล location ของ speaker เข้ามาช่วยในการทำ separation

ให้ x เป็น entry นึงของ M จาก microphone และ s₁, s₂ เป็น entry นึงของ S₁ และ S₂ ตามลำดับ ถ้าเรามี microphone ตัวเดียว การที่เราจะหา estimation ของ s₁ และ s₂ จาก x = s₁ + s₂ จะมี infinite way ที่เป็นไปได้ เพราะเป็น underdetermined system ดังนั้นเราจำเป็นที่จะต้องมีข้อมูลเพิ่มเติมเพื่อจะ estimate s₁ และ s₂ ให้ได้

Binaural Information

สมมติว่าเรามี microphone 2 ตัว ดังภาพ สังเกตว่าเสียงจาก speaker ไปยัง microphone ตัวใกล้กว่าจะถึงก่อนและดังกว่าและเสียงที่ไปยัง microphone ตัวไกลกว่า ดังนั้นเราสามารถใช้ข้อมูลนี้เพื่อมาช่วย estimate s₁, s₂ ได้

ให้ x₁, x₂ เป็น mixed-signal จาก microphone 1 และ 2 ตามลำดับ และ aᵢⱼ เป็น spatial information จาก microphone i กับ speaker j (เช่น ความดัง หรือ time delay) เราสามารถเขียน

  • x₁ = (a₁₁)s₁ + (a₁₂)s₂
  • x₂ = (a₂₁)s₁ + (a₂₂)s₂

หรือในรูป x = As ซึ่งสามารถหา s ได้โดย s = A⁻¹x โดย A จะเรียกว่า spatial covariance matrix

โดยการหา spatial covariance matrix ก็สามารถทำได้หลายวิธี แต่หลักๆจะเป็นการ estimate จาก X₁, X₂ ด้วย maximum likelihood estimator (MLE) โดยใช้ rank ของ A เป็น constraint เช่น rank-1 หรือ full-rank เป็นต้น

Component Analysis

วิธีนี้อยู่บน assumption ว่าเสียงของ speaker แต่ละคนมี characteristic ที่แตกต่างกันอย่างชัดเจน ดังนั้นถ้าเราแยก mixed-signal เป็น sources ที่มี characteristic ต่างกันมาก (เช่น orthogonal กัน) เราก็จะได้ estimation ที่ใกล้เคียงกับ source ของจริง ซึ่ง Togami-san แนะนำ 2 วิธี คือ

ที่ผ่านมาก็เป็น conventional model สำหรับ Speech Source Separation นะครับ มาลองดูการนำ Deep Neural Network เข้ามาใช้กับ SSS บ้าง

Speech Source Separation with Deep Neural Network

วิธีนี้จะใช้ Deep Neural Network (DNN) ในการทำ Time-Frequency Masking (TF-masking) ซึ่งเป็นการ classify ว่า entry ไหนบน spectrogram มาจาก source ไหน (เช่น ตามรูปข้างล่าง 1 = music signal และ 0 = voice signal)

Binary TF-masking

หลังจากได้ TF-masking ก็จะนำ spatial information มาเพื่อช่วยลด noise ที่เกิดขึ้นจาก DNN โดยจะนำ TF-masking เข้ามาผ่าน Minimum Variance Distortionless Response (MVDR) Beamformers และ Gain Adjustment เพื่อให้ได้ source signal ที่ clean ขึ้น

สิ่งที่คุณ Togami-san สนใจต่อไปก็คือ

Is it optimum to learn DNN without consideration of spatial model and separation part?

เราสามารถ train DNN ที่ capture เรื่อง spatial model และ separation model ไปพร้อมกันได้หรือไม่? จึงนำมาสู่หัวข้อต่อไปคือการรวม spatial model และ separation model เข้ามาใน DNN เลย (deeply integrated approach)

Speech Source Separation with Deeply Integrated Multi-channel

เรื่องนี้เป็น direction หลักด้าน speech ของ LINE Research Lab ในปี 2019 นี้เลยซึ่งทีมของ Togami-san จัดไป 9 conferences เลยทีเดียว!

1. DNN training to maximize output speech quality after speech source separation

งานนี้เป็นการนำ Source separation model และ Spatial model estimation เข้ามาเป็น structure ของ DNN ด้วยแล้ว train ทั้งหมดด้วย Back Propagation ทีเดียว สิ่งที่ Togami-san เสนอคือการเปลี่ยน loss function จากที่ทั่วไปใช้คือ L₂ loss เป็น Multi-Channel Itakura-Saito Distance (MISD) ซึ่งจะทำให้ได้ speech quality จากการ separation ที่ดีกว่า

จะเห็นได้ว่างานนี้เป็นการต่อยอดจากของเดิม โดยช่วงแรกใช้ DNN structure เดิมเพื่อแยก TF-masking เสร็จแล้วผ่าน Covariance Estimation (Spatial Model) แล้วผ่าน Multi-channel Wiener Filtering (Source separation model) เพื่อ clean signal แต่ที่น่าสนใจคือการนำ parameter ต่างๆ ของ covariance estimation และ Wiener filtering มาทำเป็น iterative parameter optimization ด้วย Back Propagation ซึ่งสามารถติดตามต่อได้ที่ paper ของ Togami-san ครับ

2. Insertion of speech source separation into DNN structure as a spatial constraint

งานนี้ก็เป็นการต่อยอดจากงานที่แล้วนะครับ แทนที่จะนำ Multi-channel Wiener Filtering (MWF) ที่ใช้ทำ separation มาใช้ใน layer สุดท้าย Togami-san ลองนำ MWF layer มาแทรกระหว่าง BLSTM (Bidirectional Long Short-Term Memory) 2 layer โดยผลออกมาว่าได้ source signal ที่ clean กว่าการใช้ MWF ใน layer สุดท้าย

การทำ MWF insertion จะช่วยเพิ่ม consistency ของ embedding ไม่ให้ BLSTM มัน overfit ไปกับ signal เกิน ซึ่งถ้าสนใจสามารถติดตามต่อได้ที่ paper ของ Togami-san เช่นเคยครับ

3. Unsupervised DNN training with speech source separation based on non-DNN statistical speech source modeling

Togami-san เจอปัญหาที่ว่าการที่จะได้ oracle clean signal มาเพื่อใช้ train DNN ใน นั้นมันยากมาก งั้นเราลอง train DNN ด้วย pseudo clean signal ที่ได้จาก Non-DNN model แทนดูจะเป็นยังไงแล้วลองมาเทียบ separation ที่ได้กับ oracle clean signal จริงๆว่าต่างกันมากไหม โดย Non-DNN model ที่ใช้ จะได้ separation มาแบบ unsupervised ด้วย Local Gaussian Modeling (LGM)

โดย loss function ที่ Togami-san ใช้ก็คือ Kullback-Leibler divergence (KL-divergence) เพราะต้องการเปรียบเทียบ posterior PDF จาก LGM และ DNN

ผลออกมาว่า source ที่ออกมา clean กว่าการใช้ Non-DNN model (ที่ไม่ต้องใช้ clean oracle signal มา train เหมือนกัน)

สามารถไปตามต่อที่ paper ของ Togami-san ได้เหมือนเคยครับ

Conclusion

เป็นยังไงบ้างครับ ผมว่า Speech Source Separation เป็นโจทย์ที่สวยเลยทีเดียว และก็ต้องใช้ความรู้หลายๆด้านเข้ามาประกอบกันเลยนะครับ ทั้งด้าน signal processing และ machine learning และก็มี application impact มากจริงๆที่จะทำให้ speech application ต่างๆ (เช่น AI speaker) สามารถทำงานได้ในสภาพแวดล้อมที่มีเสียงรบกวนมากได้

DNN ก็เริ่มเข้ามาเป็นพระเอกของวงการนี้ จาก result ที่ดีในการสร้าง clean source signal แต่ยังไงก็ตาม conventional non-DNN model (แบบ unsupervised) ก็ยังสำคัญเพราะกลับมาในรูปแบบการ integrate model พวกนี้ให้เป็น layer ใน DNN และยังสามารถนำมาใช้เป็น pseudo clean signal generator เพื่อนำมาใช้ train DNN ได้

ถ้าสงสัยอะไรหรือต้องการให้ผมอธิบายอะไรเพิ่มเติม comment ทิ้งไว้ได้เลยครับ 🙂

Slide

--

--