Chuyển đến nội dung chính

Convolution Augmented Transformer (Conformer) trong ASR và TTS

Conformer Chú ý: Mọi người nên tìm hiểu kỹ về Transformer và Multi-head Self Attention trước khi đọc bài này. Câu hỏi cho người đọc: Có cần thiết áp dụng Macron-style và Relative Position Encoding cho Conformer trong các bài toán xử lý tiếng nói hay không? ASR Conformer Trước khi đi vào phần chính, chúng ta sẽ lướt qua xem hướng tiếp cận đang cho hiệu quả cao nhất trong nhận dạng tiếng nói, RNN-Transducer và những biến thể cải tiến của nó. Mô hình chung của một Neural RNN-Transducer được biểu diễn trong hình 1. Hình 1: Neural Transducer [1] Trong đó, Predictor và Encoder có thể được xây dựng bởi nhiều kiến trúc khác nhau như RNNs, LSTM hay Transformer để đưa ra các biểu diễn trung gian của các chuỗi đầu vào. Với Predictor là biểu diễn của chuỗi văn bản (label), và Encoder là biểu diễn của chuỗi audio-frame. Cùng với Predictor và Encoder, RNN-T loss được sử dụng để cực đại hóa tổng xác suất của mọi alignment giữa audio đầu vào và văn bản đầu ra, từ đó giúp cho mô hình học được alignme

Convolution Augmented Transformer (Conformer) trong ASR và TTS

Conformer

Chú ý: Mọi người nên tìm hiểu kỹ về Transformer và Multi-head Self Attention trước khi đọc bài này.

Câu hỏi cho người đọc: Có cần thiết áp dụng Macron-style và Relative Position Encoding cho Conformer trong các bài toán xử lý tiếng nói hay không?

ASR Conformer

Trước khi đi vào phần chính, chúng ta sẽ lướt qua xem hướng tiếp cận đang cho hiệu quả cao nhất trong nhận dạng tiếng nói, RNN-Transducer và những biến thể cải tiến của nó. Mô hình chung của một Neural RNN-Transducer được biểu diễn trong hình 1.

Hình 1: Neural Transducer [1]

Trong đó, Predictor và Encoder có thể được xây dựng bởi nhiều kiến trúc khác nhau như RNNs, LSTM hay Transformer để đưa ra các biểu diễn trung gian của các chuỗi đầu vào. Với Predictor là biểu diễn của chuỗi văn bản (label), và Encoder là biểu diễn của chuỗi audio-frame. Cùng với Predictor và Encoder, RNN-T loss được sử dụng để cực đại hóa tổng xác suất của mọi alignment giữa audio đầu vào và văn bản đầu ra, từ đó giúp cho mô hình học được alignment tốt nhất giữa văn bản và âm thanh.

Các kết quả nghiên cứu của [1], [2], [3] và nhiều tác giả khác cho thấy trong nhận dạng tiếng nói thì Transformer Transducer models có sai số Word Error Rate (WER) thấp hơn hẳn so với so với các model RNN-Transducer trước đây dùng LSTM, RNNs,... Transformer Transducer hay các kiến trúc dựa trên Transformer khác đều rất mạnh trong việc lấy các thông tin toàn cục (global context). Tuy nhiên Transformer lại không thực sự mạnh trong việc khai thác các thông tin cục bộ và mối quan hệ giữa chúng (local connection), những thông tin này cũng rất quan trọng trong xử lý tiếng nói. Do đó, Convolutional neural network (CNN) được xem xét để bổ trợ cho Transformer vì có khả năng thu thập các thông tin, đặc trưng cục bộ rất tốt (Local information). Conformer [4] (Convolution-augmented Transformer) đã được đề xuất để tận dụng sức mạnh toàn cục của Transformer trong khi vẫn lấy được thông tin cục bộ thông qua mô đun Convolution. Ta sẽ đi sâu về kiến trúc của mô đun này trong các phần tiếp theo.

Conformer Block

Bên trong Encoder của Transducer các khối Transformer được thay bằng các khối Conformer, mỗi khối bao gồm bốn mô đun: Một mô đun Feed-forward, một mô đun Multi-headed Self-Attention, một mô đun Convolution và mô đun Feed-forward thứ hai. Kiến trúc của một khối Conformer được biểu diễn trong Hình 2.

Hình 2: Conformer Block Architecture [4]

Phỏng theo ý tưởng của Macron-Net (Macron style), thay vì chỉ dùng một mô đun Feed Forward (FFN), Conformer Block sử dụng hai half-step FFN kẹp trước và sau mô đun Multi-headed Self-Attention (MHSA) và mô đun Convolution (Conv). Biểu diễn toán học của một Conformer Block [4] như sau:

Trong đó  hệ số ½ trước mỗi FFN thể hiện trọng số half-step residual của Macron style. Trong bài báo gốc của Conformer [4] có nói rằng việc áp dụng Macron style đem lại “Cải thiện lớn” (Significant improvement) về tỷ lệ số từ nhận dạng sai (wer) so với việc chỉ sử dụng một FFN duy nhất, tuy nhiên kết quả thử nghiệm trong phần Ablation Studies (Table 3 và Table 5) lại không cho thấy cái sự “Cải thiện lớn” đó, việc áp dụng Macron style không cải thiện so với việc sử dụng một FFN (trong Transformer) với hầu hết các bài đánh giá, chỉ cải thiện 0.2% wer so với khi không dùng FFN trong test_other, vì vậy phần cải tiến của việc áp dụng Macron style đang được đặt dấu hỏi, trong khi nó sẽ làm tăng chi phí tính toán.

Trên đây là tổng quát các mô đun và cách ghép nối các mô đun của một Conformer block, phần tiếp theo chúng ta sẽ đi cụ thể vào từng mô đun.

Multi-headed Self Attention Module with Relative Positional Encoding

Multi-headed Self Attention (MHSA) trong Conformer có sử dụng  một công nghệ từ Transformer-XL [5], đó là Relative Positional Encoding. Để cho các công thức trong phần này cũng sẽ được thay đổi một chút để phù hợp với bài Transformer gốc và các bản mã nguồn công cộng trong thực tế, trong khi vẫn giữ đúng bản chất toán học.

Relative Positional Encoding được sử dụng để biểu diễn các thông tin về vị trí tương đối của các phần tử trong chuỗi thay cho Absolute Positional Encoding (biểu diễn thông tin về vị trí tuyệt đối của phần tử) . Câu hỏi đặt ra là tại sao cần thay Absolute Position Encoding bằng Relative Position Encoding?

Trong Transformer-XL, bài toán đặt ra là với chuỗi đầu vào rất dài cần được chia thành các chuỗi con để xử lý lần lượt. Khi đó nếu sử dụng Absolute Positional Encoding sẽ phát sinh vấn đề đó là giá trị biểu diễn thông tin vị trí của các phần tử trong các chuỗi con sẽ giống nhau. Ví dụ vị trí của phần từ đầu tiên của chuỗi con thứ nhất và chuỗi con thứ 2 đều là “0”, điều này gây ra nhầm lẫn nghiêm trọng. Do đó Relative Positional Encoding mang thông tin về vị trí tương đối giữa các phần tử được sinh ra để thay thế khi tính Attention Score (trọng số chú ý của các phần tử). Ngoài ra, Relative Positional Encoding được tích hợp trực tiếp vào Attention Score chứ không phải là cộng vào chuỗi đầu vào như Transformer gốc.

Với Transformer gốc, đầu ra của mô đun MHSA khi sử dụng sẽ được tính như sau:

Trong đó E là đầu vào content embedding (có thể là word embedding chẳng hạn, hoặc đầu ra của attention layer trước,…) của MHSA, f là hàm biến đổi MHSA, Ui là absolute positional embedding tương ứng với vị trí i∈{1,…,L}, L là chiều dài của chuỗi đầu vào. Phân tích sâu hơn trong MHSA, query  q và key k được tính như sau:

Trong đó Wq, Wk là các ma trận tham số, x là chuỗi đầu vào. Khi đó Attention Score giữa query qvà key kđược phân tách ra như sau:

Ở công thức cuối cùng (công thức Attention thứ 3), Attention Score được chia làm bốn cấu phần tương ứng (a), (b), (c), (d). Trong đó (b), (c), (d) nhận đầu vào chứa Umang thông tin về absolute positional encoding. Ý tưởng chính của Relative Positional Encoding là sử dụng khoảng cách tương đối về vị trí giữa query qvà key kđể model có thể biết được cần chú ý vào đâu và thu thập thông tin như thế nào. Trong thực tế, một ma trận sinusoid encoding [6] R ∈ ℝ^(L_max×d) được sử dụng để lưu trữ thông tin về khoảng cách tương đối giữa các phần tử trong chuỗi, hàng thứ i của ma trận chứa thông tin về khoảng các tương đối của vị trí i với các vị trí của các phần tử trong chuỗi đầu vào. Để thay thế các thông tin về vị trí tuyệt đối trong Attention Score bằng các thông tin về vị trí tương đối, các thay đổi sau được thực hiện:

  1. Đầu tiên thì để hiện thực hóa việc thay thế thông tin về vị trí tuyệt đối, các giá trị Utrong cấu phần (b), (d) được thay bằng Ri-j chứa các thông tin về khoảng cách tương đối giữa i và j.
  2. Theo cơ chế của Self-Attention, khi xem xét vị trí i thì query qi là giống nhau với mọi kj, do đó, giá trị “bias” của sự chú ý đối với các vị trí query khác nhau nên được giữ nguyên. “Bias” của query trong công thức Attention thứ 2 là WqUi và giá trị này phụ thuộc vào vị trí i, do đó để giữ giá trị “bias” của query không thay đổi theo vị trí thì trong công thức Attention score cuối cùng: WqUi ở hai cấu phần (c) và (d) lần lượt được thay bằng hai ma trận tham số u,v ∈ ℝ^d.
  3. Cuối cùng, Wk được chia tách thành Wk,E và Wk,R để tạo ra các véc tơ key độc lập chứa thông tin về nội dung của chuỗi đầu vào và vị trí tương đối.

Attention Score sau khi thực hiện các thay đổi trên được tính bởi công thức mới dưới đây:

Như các bạn thấy, trong công thức cuối toàn bộ giá trị biểu diễn vị trí tuyệt đối đã được thay bằng các giá trị biểu diễn vị trí tương đổi giữa ij.

Discussion

Tác giả của Transformer-XL có nói rằng Relative Positional Encoding technique nên được áp dụng cùng với phương pháp “Recurrence with State Reuse” (chia chuỗi dài thành các chuỗi con) mà họ đề xuất thì mới có hiệu quả với các chuỗi rất dài, và giải quyết vấn đề giới hạn độ dài chuỗi mà các phương pháp trước đó gặp phải. Thêm nữa, trong Conformer tác giả chỉ cho thấy sự cải thiện lớn giữa việc dùng Relative Positional Encoding và không sử dụng, mà không nói đến sự khác biệt về kết quả giữa việc sử dụng Relative Positional Encoding và Absolute Positional Encoding. Vậy nên có một số câu hỏi được đặt ra như sau: 
  1. Trong bài toán ASR, đầu vào không bị chia thành các chuỗi con nên không gây ra vấn đề với Absolute Positional Encoding khi chuyển từ chuỗi con này qua chuỗi con khác như trong Transformer-XL. Vậy việc áp dụng Relative Positional Encoding có thực sự tốt hơn Absolute Positional Encoding không? Đặc biệt là khi áp dụng Absolute Positional Encoding vào từng khối trong Encoder.
  2. Trong trường hợp streaming ta chia chuỗi đầu vào thành các chuỗi con, ta cũng có thể cộng phần bù vị trí của chuỗi con trong chuỗi lớn vào vị trí của từng phần tử trong chuỗi con đó khi tính Absolute Positional Encoding, như vậy có thể giải quyết vấn đề nêu trên.
  3. Bài báo chưa có đánh giá kỹ về sự khác biệt khi sử dụng Relative Positional Rncoding. Do đó rất cần các bạn thử nghiệm và đánh giá việc dùng Absolute Positional Encoding encoding vào từng đầu vào của MHSA trong Conformer, và sử dụng phần bù trong bài toán streaming ASR.
Theo quan điểm cá nhân mình cho rằng sử dụng Relative Positional Encoding có một lợi điểm là giúp mô hình học các mối tương quan tương đối giữa các phần tử dễ hơn. Ví dụ với câu: "I am Nguyen Van Thinh, I am Dog" thì:
  • Với Absolute Positional Encoding, mối quan hệ giữa "I" và "am" ở trong câu thứ nhất và câu thứ 2 là khác nhau vì mang hai giá trị về vị trí khác nhau: "0" "1" và ""5" "6". Trong khi về bản chất việc "I" đi cùng với "am" không phụ thuộc vào vị trí của câu trong đoạn.
  • Ngược lại với Relative Positional Encoding, mối quan hệ giữa "I" và "am" là tương đối và không thay đổi theo vị trí của câu trong đoạn. Do đó nó có thể học được tốt hơn ở điểm này.

Convolution Module

Convolution mô đun có thể coi là mô đun đem lại sự cải thiện lớn nhất về độ chính xác trong Conformer, thông qua việc khai thác các thông tin tương quan cục bộ, cũng như cách sắp xếp vị trí tương đối mô đun này với mô đun MHSA trong Conformer Block. Dựa trên ý tưởng của Gating Mechanism, mô đun Convolution được xây dựng với phần lõi bắt đầu bằng một GLU layer, 1D Depthwise Convolution Layer và theo sau bởi môt BatchNorm để giúp mô hình học “sâu” hơn, phần cuối của lõi là một Swish Activation (Hiện tại có thể thay thế bằng Mish Activation). Kẹp bên ngoài phần lõi là hai layer Pointwise Convolution. Ngoài ra một Layernorm được sử dụng ở đầu vào và Dropout layer được sử dụng ở cuối. Kiến trúc của mô đun Convolution được thể hiện trên Hình 3.

Hình 3: Kiến trúc của mô đun Convolution [4]

Việc đưa mô đun Convolution vào hỗ trợ cho MHSA trong Transformer đúng là rất quan trọng, tuy nhiên đưa như thế nào và đặt ở đâu cũng quan trọng không kém. Ablation Study 3.4.2 trong [4] cho thấy rằng việc đặt mô đun Convolution phía trước MHSA cũng làm giảm độ chính xác hệ thống.

Feed Forward Module

Hình 4: Kiến trúc của mô đun Feed Forward

Mô đun Feed Forward trong Conformer được phát triển lên từ mô đun feed forward trong Transformer ASR [4]. Trong đó kiến trúc chi tiết của mô đun này được thể hiện trong hình 4, trong đó một LayerNorm được đặt trước LinearLayer đầu tiên, sau Linear layer thì Swish Activation và Dropout được sử dụng để giúp “regularizing” model. Ngoài ra một residual connection giữa đầu vào và đầu ra của layer này cũng được sử dụng để giúp model học được sâu hơn.

TTS Conformer

Trong các mô hình tổng hợp tiếng nói dạng Non-Autoregressive, những model mạnh mẽ trong việc mô hình hóa từng đơn vị, và có tốc độ tính toán rất nhanh vì việc tính toán frame hiện tại không dựa trên kết quả của các frames trước đó. Tuy nhiên tồn tại một khoảng trống lớn nếu chỉ áp dụng Transformer thuần vào các model này đó là khả năng mô hình hóa các thông tin tương quan cục bộ, vì Transformer vốn chỉ mạnh trong việc mô hình hóa các thông tin toàn cục. Do đó để tăng khả năng học những thông tin tương quan toàn cục và cục bộ, đặc biệt là những câu rất ngắn hoặc rất dài, thì Conformer đã được sử dụng với một số thay đổi khác so với Conformer trong ASR để phù hợp với bàn toán TTS.

Kiến trúc của Conformer trong TTS được thể hiện trên Hình 5. Trong đó có một số sự thay đổi so với Conformer trong ASR như sau:

1.     Swish được thay thế bởi ReLU, trong [7] có cho thấy rằng việc này giúp model học tốt hơn những câu dài.

2.     Thứ tự của MHSA và Depthwise Convolution được đảo cho nhau để model nhanh hội tụ hơn.

3.     Cuối cùng, ba Linear layer trong mô đun Feed Forward được thay bằng Covolution Layer để có thể mô hình hóa tốt hơn nữa các tương quan cục bộ. Trong [7] cũng quan sát thấy việc thay thế này giúp chất lượng âm thanh và ngữ điệu đầu ra tốt hơn.

Việc áp dụng Conformer trong TTS cũng cho kết quả tốt hơn so với việc dùng Transformer, đặc biệt là trong việc tổng hợp tiếng nói có cảm xúc, có ngữ điệu. Tác giả của DelightFull TTS [7] đã áp dụng Conformer trong TTS và giành quán quân trong cuộc thi Blizzard Challenge 2021.

Hình 5: Kiến trúc của Conformer trong TTS [7]

Conclusion

Trên đây chúng ta đã tìm hiểu về Conformer trong cả ASR và TTS, vẫn còn một số điều khúc mắc với việc ứng dụng Conformer như: Việc sử dụng Macron style có thực sự cần thiết? hay Absolute Postional Encoding có thể được dùng vào từng Conformer Block thay cho Relative Positional Encoding để tăng tốc độ tính toán mà vẫn giữ chất lượng hay không?

Mặc dù vẫn còn khúc mắc như vậy nhưng thực tế cho thấy trong ASR và TTS, việc áp dụng Conformer đều mang đến sự cải thiện đáng kể về mặt chất lượng mà không tốn thêm chi phí tính toán.

References

[1] Yeh, Ching-Feng, et al. "Transformer-transducer: End-to-end speech recognition with self-attention." arXiv preprint arXiv:1910.12977 (2019).

[2] Zhang, Qian, et al. "Transformer transducer: A streamable speech recognition model with transformer encoders and rnn-t loss." ICASSP 2020-2020 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2020.

[3] Graves, Alex. "Sequence transduction with recurrent neural networks." arXiv preprint arXiv:1211.3711 (2012).

[4] Gulati, Anmol, et al. "Conformer: Convolution-augmented transformer for speech recognition." arXiv preprint arXiv:2005.08100 (2020).

[5] Dai, Zihang, et al. "Transformer-xl: Attentive language models beyond a fixed-length context." arXiv preprint arXiv:1901.02860 (2019).

[6] Vaswani, Ashish, et al. "Attention is all you need." Advances in neural information processing systems 30 (2017).

[7] Liu, Yanqing, et al. "Delightfultts: The microsoft speech synthesis system for blizzard challenge 2021." arXiv preprint arXiv:2110.12612 (2021).



Nhận xét

Bài đăng phổ biến từ blog này

Attention Mechanism

Trước khi đi sâu tìm hiểu về Attention ta sẽ xem xét một chút về mô hình S equence to S equence và lý do vì sao attention lại được áp dụng cho mô hình này. Tôi có đọc nhiều bài viết trên mạng và thấy có nhiều người cho rằng Sequence to Sequence model là một trường hợp đặc biệt của Auto-Encoder, hay là một mô hình học sâu, tuy nhiên đây là một nhầm lẫn tai hại về khái niệm. Thực tế việc sử dụng Auto-Encoder chỉ là một trong những giải pháp giải quyết các vấn đề về Sequence to Sequence, tuy nhiên thì đây là giải pháp được dùng phổ biến và hiệu quả nhất hiện nay, do đó trong bài viết này chúng ta ngầm hiểu Sequence to Sequence model cũng chính là Auto-Encoder model. Sequence to Sequence Models Sequence to Sequence models là một lớp các mô hình được đề xuất để giải quyết các lớp bài toán liên quan đến chuỗi như: Dịch máy, nhận dạng tiếng nói, tổng hợp tiếng nói,… Dịch Máy (Machine Translation): Là hệ thống tự động dịch văn bản từ ngôn ngữ nguồn sang ngôn ngữ đích. Hình 1: Ví dụ về dịch máy

Tổng hợp tiếng nói sử dụng mô hình Markov ẩn

Trong hai mươi năm trở lại đây, tổng hợp tiếng nói dựa trên mô hình Markov ẩn là một trong những hướng tiếp cận được nghiên cứu rộng rãi nhất cho đến khi các mô hình dựa trên mạng nơ ron học sâu xuất hiện. Trước khi đến với các mô hình học sâu, chúng ta cùng xem qua mô hình đã làm mưa làm gió mấy chục năm qua. Vậy mô hình Markov ẩn là gì? Hình 1: Mô hình Markov ẩn với ba trạng thái Mô hình Markov ẩn (HMM: Hidden Markov Model) là một mô hình máy trạng thái, mô hình này cho phép chúng ta xem xét đến hai thành phần là sự kiện quan sát được và các sự kiện ẩn. Ví dụ trong nhận dạng tiếng nói thì sự kiện quan sát được là các đặc trưng âm học của tiếng nói, còn sự kiện ẩn là các từ.  Một mô hình markov ẩn như biểu diễn trên hình 1 thường gồm có các thành phần chính sau:  Q = q1,q2,,,qN: Q là tập của N trạng thái A = a11,a12,,,,ann: A là ma trận chuyển trạng thái với aij là xác xuất chuyển từ trạng thái i sang trạng thái j, và ta có  O = o1,o2,,,,oT: O là một chuỗi T các qua