HuBERTとは?音声から作ったクラスタ番号の予測で、文字起こしに頼らず表現を学ぶ技術

HuBERTは、音声をクラスタリングして作った疑似ラベルを、隠した区間で予測する自己教師あり学習です。正解を作り直す反復学習、wav2vec 2.0との違い、音声認識の実験結果から、少量ラベルでの開発への応用と限界を解説します。

参考文献

HuBERT: Self-Supervised Speech Representation Learning by Masked Prediction of Hidden Units

Wei-Ning Hsu, Benjamin Bolte, Yao-Hung Hubert Tsai, Kushal Lakhotia, Ruslan Salakhutdinov, Abdelrahman Mohamed

論文を見る

今回の論文

今回読むのは、HuBERT: Self-Supervised Speech Representation Learning by Masked Prediction of Hidden Unitsです。著者はWei-Ning Hsu、Benjamin Bolte、Yao-Hung Hubert Tsai、Kushal Lakhotia、Ruslan Salakhutdinov、Abdelrahman Mohamedの6名です。2021年6月14日にarXivで公開され、IEEE/ACM Transactions on Audio, Speech, and Language Processingにも掲載されました。研究分野は、音声の自己教師あり表現学習と音声認識です。

原論文はarXivの公開ページから読めます。この記事の手法・数値はarXiv初版の本文と表をもとにしています。

選んだ理由は、「人が正解を書けなくても、粗い分類を学習課題として利用し、学んだ表現でその分類自体を改善する」という考え方が、データの少ないAI開発にも参考になるためです。単に音声認識の精度を見るのではなく、何を正解として予測させると、役立つ特徴が育つのかに注目します。

どんな技術か

HuBERT(Hidden-Unit BERT)は、文字起こしのない音声から、音の並びを捉える特徴を学ぶ技術です。まず短い時間ごとの音声特徴を似たもの同士にまとめ、各時刻へクラスタ番号を付けます。次に音声特徴の一部を隠し、周囲から隠れた位置の番号を予測するモデルを学習します。

たとえば、ある区間に付いた番号が「17」であれば、その区間を見せずに「ここは17になりそう」と答えさせます。番号は人間が決めた文字や音素ではありません。同じ特徴空間で似た音に同じ番号が付くことを、学習の足場にします。

さらに、一度学習したモデルの中間特徴を再びクラスタリングし、よりよい疑似ラベルを作って次の学習に使います。クラスタリングで課題を作り、文脈予測で表現を育て、その表現で課題を更新する流れが中心です。

ただし、これは音声表現を学ぶ事前学習です。文字起こしを出力するには、後から転写付き音声を用いて文字との対応を学ばせる必要があります。

課題

録音は集められても、正確な文字起こしは簡単に揃いません。専門用語の確認、発話の聞き直し、表記の統一が必要で、業務や言語が変わるたびに費用がかかります。少量の転写データだけで認識器を育てると、特定の話者や録音環境に偏るおそれがあります。

一方、音声へテキストの穴埋め学習をそのまま持ち込むことも困難です。文章には単語や文字という離散的な単位がありますが、音声波形は連続値です。「どこからどこまでが一つの音か」も与えられていません。同じ発音でも、声質や速度で値は変わります。

波形の細かな値を再現するだけでは、背景音や話者の特徴を覚えることが近道になる可能性があります。逆に、音を粗い番号へ変換してから入力すると、認識に必要な情報まで落とすかもしれません。入力に残す情報と、正解として要求する情報を分ける必要があります。

HuBERTは、クラスタリングの誤りにも向き合います。粗い番号をそのまま模倣するだけでは、特徴抽出の改善につながりにくいためです。そこで、予測対象の音を隠し、番号だけでなく音の前後関係も学ばざるを得ない課題にします。

用語解説

自己教師あり表現学習
人間が付けた正解の代わりに、データ自身から学習課題を作る方法です。HuBERTでは音声由来のクラスタ番号を予測し、後の文字起こしに利用できる特徴を育てます。
MFCC(メル周波数ケプストラム係数)
短時間の音のスペクトル形状を表す音響特徴です。HuBERTでは、まだ学習済みモデルがない最初の段階で、クラスタ番号を作る材料にします。
k-meansと疑似ラベル
k-meansは特徴ベクトルを指定数の群へ分けるクラスタリングです。各時刻を最も近い中心へ割り当てた番号が疑似ラベルになります。番号は音素や文字の正解とは異なります。
マスク予測
入力の連続区間を隠し、周囲の文脈からその区間の正解を予測する課題です。HuBERTは主に隠した位置だけで損失を計算し、見えている音から番号を写すだけの学習を避けます。
CTC(Connectionist Temporal Classification)
音声の各時刻と文字の正確な対応がなくても、系列全体の文字起こしで学べる損失です。クラスタ番号の予測で得た表現を、文字列を出力する認識器へ適応させる段階で使います。

技術の仕組み

学習は、疑似ラベルの作成、マスク予測による事前学習、疑似ラベルの更新、文字起こしへの適応に分かれます。クラスタリングとニューラルネットワークの更新を同時に行わない点が重要です。

最初の正解を、音声だけから作る

最初は音声から39次元のMFCC特徴を取り出します。これは13係数に一次・二次の変化量を加えたものです。原論文では100クラスタのk-meansを使い、音声の各時刻へ番号を割り当てます。

この処理はネットワーク学習の前に行います。一つの学習段階の間は、その疑似ラベルを固定して使います。「17番」が何の発音なのかを人間が命名する必要はなく、クラスタ番号が文字と一対一に対応する必要もありません。

入力は連続値のまま、正解だけを番号にする

モデルへ渡すのはクラスタ番号列ではなく、音声波形です。7層の畳み込みエンコーダーで特徴列を作り、連続区間をマスクベクトルに置き換えてから、双方向Transformerへ入力します。16kHz音声では畳み込み後の特徴間隔は20ミリ秒です。

Transformerの層数はBaseが12、Largeが24、X-Largeが48です。出力特徴を射影し、学習可能な各クラスタの埋め込みとのコサイン類似度を計算します。温度0.1で調整したsoftmaxにより、各番号の予測確率を得ます。

標準設定では特徴列の8%の位置をマスクの開始点に選び、各開始点から10時刻、約200ミリ秒を隠します。「8%だけを隠す」という意味ではありません。複数区間の重なりもあるため、開始点の割合と実際に隠れる割合は分けて考えます。

隠した位置を当てることで、音の前後関係を学ぶ

最小化する損失を言葉で書くと、「隠した各位置で、正しいクラスタ番号へ割り当てた確率の負の対数を足す」です。正解番号の確率が低いほど罰が大きくなります。

見えている位置の番号を当てるだけなら、MFCCのクラスタリングに近い処理を覚えれば済みます。隠した位置では直接の音響情報がないため、前後の音を表現し、その並びを利用する必要があります。著者は、この条件が粗い疑似ラベルにも耐える表現学習につながると説明しています。

同じく音声の欠けた区間から学ぶwav2vec 2.0の量子化と対照学習では、学習中に正解表現を量子化し、負例候補と比較します。HuBERTは、事前に作ったクラスタ番号の分類へ分離します。負例の抽出や量子化器の共同学習を要しない一方、別工程のクラスタ作成が必要です。

学んだ中間特徴で、正解を作り直す

初回の学習が終わったら、未マスクの音声をモデルへ通し、中間層の特徴を取り出します。その特徴に500クラスタのk-meansを適用し、新しい疑似ラベルを作ります。次の段階はこの新しい番号を予測します。

Baseの実験では、第1段階を25万更新し、そのモデルの第6層から作ったラベルで第2段階を40万更新します。LargeとX-Largeは、第2段階Baseの第9層から作ったラベルを使い、Libri-Lightの6万時間で学習します。大きいモデルごとにMFCCから全工程をやり直す設定ではありません。

どの層を使うかも設計要素です。初回モデルでは最終層より中間層のクラスタ品質がよい傾向があり、最終層が粗い教師を模倣しすぎる可能性を著者は指摘しています。反復や層選択の詳細は原論文の手法と実験設定で確認できます。

文字起こしには、別の出力層で適応する

事前学習後は、クラスタ予測用の射影層を文字予測用の出力層へ置き換え、転写付き音声を用いてCTCで学習します。論文では畳み込みエンコーダーを固定し、初期の一定期間は新しい出力層だけを学習した後、Transformerも更新します。

認識時には事前学習用のマスクもk-meansも必要ありません。音声から文字の確率列を出し、CTCの規則に従って文字列へ変換します。外部言語モデルを併用する場合は、音響側のスコアと文章としての自然さを合わせて候補を選びます。

実験と結果

原論文は、英語の朗読音声を中心に、少量の転写でも音声認識へ適応できるかを検証しています。未ラベル事前学習にはLibriSpeech 960時間またはLibri-Light 6万時間、適応には10分から960時間までの転写付き音声を使います。

大規模事前学習の上で、少量ラベルを活用できた

評価指標はWER(単語誤り率)です。正解の単語数に対する、置換・削除・挿入の数の比率で、小さいほどよい値です。以下は表IIの10分ラベル条件で、すべてLibri-Light 6万時間での事前学習と、外部Transformer言語モデルを併用しています。

モデルtest-clean WER(%)test-other WER(%)
wav2vec 2.0 Large4.88.2
HuBERT Large4.77.6
HuBERT X-Large4.66.8

Large同士では、より難しいtest-otherが8.2%から7.6%へ0.6ポイント下がりました。X-Largeではさらに6.8%ですが、こちらはモデルの規模も増えています。目的関数の差だけで得た改善とは切り分けて読む必要があります。

また、10分はCTC適応に使った転写付き音声の量です。6万時間の未ラベル音声による事前学習や、外部言語モデルのテキスト学習を含めて10分で済むという結果ではありません。

HuBERTがすべての条件で勝つわけでもありません。100時間ラベル・Large・外部Transformer言語モデルのtest-cleanでは、wav2vec 2.0が2.0%、HuBERTが2.1%です。960時間ラベルの表IIIではHuBERT X-Largeのtest-otherは2.9%ですが、事前学習と自己学習を組み合わせたConformerの2.6%には届いていません。詳細は原論文の表II・IIIと結果の議論にあります。

粗い教師には、どこで損失を計算するかが効いた

表Vのアブレーションは、事前学習10万更新、転写付き10時間での適応、固定したn-gram言語モデルによるdev-other評価です。上の主結果とは条件が異なります。

MFCC・100クラスタの教師を使った場合、隠した位置だけで学ぶ条件のWERは17.86%でした。マスク位置と非マスク位置の損失を両方使う条件では29.57%、非マスク位置だけでは96.37%です。同じ粗い教師でも、見える場所の模倣に偏ると、下流の認識が大きく悪化しています。

隠した位置だけで学ぶ条件のまま、教師を初回Baseの第6層・500クラスタへ変えると11.91%、第2段階Baseの第9層・500クラスタでは10.75%になります。表現を利用して教師を改善する流れにも効果が見られます。

ただし、人手の転写に基づく高品質な教師ラベルを使う上限比較では、非マスク位置の損失も使う条件が有利でした。「常に隠した位置だけが最善」という一般則ではなく、教師の品質と学習課題の組み合わせが重要という結果です。

何に使える?

以下は原論文の仕組みから考えられる応用です。原論文が日本語の業務システムや各用途で効果を実証したわけではなく、対象データでの検証が必要です。

業務音声の認識を、少量の転写から適応させる

作業報告、専門分野の研修、サポート通話などでは、録音に対して転写の整備が追い付きません。対象言語に合う学習済みHuBERTを出発点にし、代表的な音声と転写でCTC適応を行う用途が考えられます。

役立つのは、音の特徴を学ぶ工程を大規模な未ラベル学習へ任せ、手元の転写を文字との対応や業務分野への適応に集中できる点です。追加の未ラベル学習まで必要かは、まず適応だけの結果と比較して判断します。

音声検索やRAGの入口を改善する

録音を文字起こしして検索対象にする場合、製品名や専門語の認識ミスが検索漏れにつながります。音声認識を対象分野へ適応できれば、通話ログや研修動画を検索する入口を改善できる可能性があります。

HuBERTのクラスタ番号自体が、そのまま文章の検索ベクトルになるわけではありません。文字起こし、区間分割、テキスト検索を組み合わせ、最終的に正しい資料や発話区間へ到達できたかを測ります。

音声特徴や離散単位を使う研究の土台にする

学習済みの中間特徴をクラスタリングすれば、音声を番号列として扱う実験ができます。音の並びの分析や、別の系列モデルの入力を作る研究用途が考えられます。連続値から離散的な学習対象を作る設計を試しやすい点が利点です。

ただし、この番号列だけで音声を復元できるとは限りません。原論文は高品質な音声生成や圧縮コーデックを実証したものではなく、復元器や品質評価は別途必要です。

開発や事業へのヒント

HuBERTから得られるのは、最初から完璧な教師を作ることだけが改善の道ではない、という設計上のヒントです。ただし、小規模プロダクトで原論文の事前学習を一から再現する必要はありません。

教師の精度と、教師を使う課題を分けて検証する

粗い分類を見せてそのまま写させる場合と、一部を隠して前後から推測させる場合では、同じラベルでも得られる表現が違います。新しい自己教師あり学習を考えるなら、ラベルの品質だけでなく、「入力の何を隠すか」「どの位置に損失を掛けるか」も比較対象にします。

これは、どんな誤ラベルでもよいという意味ではありません。音声の構造と一定の相関があり、学習段階内で一貫して付与される番号だからこそ足場になります。ランダムな番号で同じ結果が出るとは言えません。

小規模開発では、適応の比較から始める

まず対象言語の事前学習済みモデルを使い、転写付き実データで適応前後を比較します。話者や収録単位で学習・検証・テストを分け、全体WERに加えて、製品名の認識率や検索成功率を測ると、追加学習の価値が見えます。

クラスタを作り直す本格的な事前学習は、その比較で不足が確認できてからの選択肢です。モデルの規模を増やす前に、どの録音条件や専門語で失敗するかを集計すれば、転写を追加すべき場所も判断しやすくなります。

疑似ラベルも、再現可能な学習成果物として保存する

反復学習では、特徴抽出に使ったモデル、層番号、クラスタ数、中心ベクトル、音声前処理の設定を記録する必要があります。番号はクラスタリングごとに付け直されるため、別の中心で作った「17番」を同じ意味として混ぜてはいけません。

公式実装では、MFCCのラベルは標準で100Hz、HuBERT特徴由来のラベルは50Hzです。入力特徴と正解番号の時刻対応を正しく合わせる必要があります。著者公開の実装手順でも、ラベルのフレームレートを設定するよう案内されています。

限界

事前学習の損失が単純でも、全体の計算は軽くありません。原論文のBaseは32 GPUで2段階、Largeは128 GPU、X-Largeは256 GPUで学習しています。中間特徴の抽出、保存、k-meansの学習、全音声への番号付与も必要です。既存モデルを利用する場合と、一から再現する場合の費用は大きく異なります。

クラスタリングは特徴とデータ分布に依存します。話者や録音環境の違いを強く拾う可能性があり、クラスタ数を増やせば必ずよくなるわけでもありません。最終層が最善とは限らず、使う層と疑似ラベルの品質を下流の認識性能で確かめる必要があります。

原論文の中心は英語朗読音声です。日本語の自然会話、電話音質、重なり発話への性能は、この結果から保証できません。日本語では単語分割でWERが変わるため、文字誤り率や業務上重要な語の認識率も併用する考え方が有効です。

また、双方向Transformerは前後の文脈を使います。そのまま低遅延のストリーミング認識器になるわけではありません。長い録音の区間分割、境界の認識漏れ、応答時間を別途設計する必要があります。

最後に、転写なしで意味や文字列を直接出力できるわけではありません。話者分離、句読点、翻訳も別の機能です。音声表現の改善と、製品として必要な処理を分けて評価する必要があります。

よくある質問

Q. HuBERTのクラスタ番号は、音素や文字ですか?

A. 音声特徴をk-meansでまとめた番号で、人間が定義した音素や文字ではありません。音素との相関はありますが、一対一の対応は保証されません。文字起こしには別途CTC適応が必要です。

Q. wav2vec 2.0とは何が違いますか?

A. 主な違いは正解と損失の作り方です。wav2vec 2.0は量子化器を共同学習し、正例と負例を比較します。HuBERTは事前にクラスタ番号を作って固定し、その番号を予測します。両者とも入力側には連続的な音声特徴を残します。

Q. 10分の文字起こしがあれば、認識器を作れますか?

A. 論文では大規模な未ラベル事前学習と外部言語モデルを利用した上で、10分の転写による適応を評価しています。10分だけで全体を学習した結果ではありません。手元の言語・録音条件に合うモデルを使い、必要な転写量を測ってください。

Q. 認識するときにもクラスタリングが必要ですか?

A. CTC適応済みの認識器なら不要です。クラスタリングは事前学習用の正解を作る工程で、認識時は音声エンコーダーと文字出力層を使います。研究目的で番号列を抽出する場合は、別途対応するクラスタ中心が必要です。

Q. 粗い疑似ラベルなら、何を使ってもよいのでしょうか?

A. いいえ。論文は、音声由来の一貫したクラスタ番号とマスク予測の組み合わせを検証しています。教師を改善すると下流WERも下がっており、品質が不要なわけではありません。教師の分類精度だけでなく、学習後の認識性能で判断することが大切です。

今日の学び

この論文は、文字起こしが不足し、音の単位や境界も与えられない状況で、役立つ音声表現をどう学ぶかを扱いました。音声からクラスタ番号を作り、隠した区間の番号を予測し、学習済みの特徴で番号を作り直す方法を提案しています。

得られるヒントは、教師を改善することと、教師をどう使うかを設計することの両方が重要だという点です。粗い正解でも、単純な模倣では解けない課題を作れば、次の学習へつながる表現を育てられる可能性があります。