Featured image of post 音声系の技術メモ

音声系の技術メモ

目次

背景

  • 音声系技術を実装した時に学んだことメモ
  • 次のようなシステムを実装していた
    • LLM会話システム、TTSモデル、ASRモデル、VADモデル
  • 記憶がフレッシュなうちに備忘録として残す
  • 特に音周りの技術は初めてだったので、用語を整理した

用語 / 技術

会話の組み立て

音声発話

  • TTS
    • Text to Speech
    • テキストを音声に変換する技術
  • piper-plus
    • 高速・高品質なニューラルテキスト音声合成 (TTS) システム
    • 英語版のpiperを日本人がforkしたリポジトリ
    • 今回は日本語のTTSに使用
  • VITS
    • Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech
    • piper-plusのモデルの名前

音声認識

  • STT
    • Speech to Text
    • 音声をテキストに変換する技術
  • ASR
    • automatic speech recognition
    • 音声認識技術
  • LID
    • language identification
    • 言語識別
  • SER
    • speech emotion recognition
    • 音声感情認識
  • AED
    • audio event detection
    • 音響イベント検出
  • AEC (分類)
    • audio event classification
    • 音響イベント分類
  • Speaker identification / Speaker verification
    • Speaker Identification(話者識別)
    • Speaker Verification(話者照合/認証)
    • 違いは、「誰であるか特定する(1対N)」か、「主張された本人か確認する(1対1)」かという点
  • speech enhancement
    • 「音声を綺麗にする技術」の総称
    • ノイズ除去、残響除去、帯域拡張など
    • タスク: 「音声 + ノイズ」→「音声」
    • サブtopics:
      • Speech Denoising(ノイズ除去)
        • 背景ノイズの除去
        • 例:エアコン、車、カフェの雑音など
      • Dereverberation(残響除去)
        • 残響、リバーブの除去
        • 部屋の反射音を取り除く
      • Bandwidth Extension(BWE/帯域拡張)
        • 狭帯域音声を高音質化
        • 例:電話音声(8kHz)→ 高音質音声(48kHz)
      • Declipping
        • クリッピング歪みの修復
        • 音割れした音声の復元
      • Packet Loss Concealment
        • パケットロスの補完
        • 通信で欠落した部分を補間
      • Codec Artifact Removal
        • 圧縮による劣化の修復
        • 例:MP3、AACなどの圧縮ノイズ除去
  • Source separation
  • Audio tagging
    • Audio taggingは、音声データ内の特定の音響イベントやシーン(会話、音楽、環境音など)を自動または手動で識別し、ラベル(タグ)を付ける技術
    • 音声を「セリフ」「BGM」などに分類できる
  • KWS
    • Keyword Spotting
    • 「OK Google」などのような、キーワード認識技術
  • Kotoba Whisper
    • 日本語に強いWhisper
    • 今回は、tiny版のGGML版の量子化されたq5を使用
    • 最速で動かすため、Greedy decodingとBeam Searchを調整した
  • Whisper.cpp
  • sherpa
  • Kaldi
    • Kaldi Speech Recognition Toolkit
    • 長らく音声認識のデファクトスタンダードツールとして利用されていたC++ライブラリ
  • VOSK
    • エッジで動く音声認識ツールキット
    • 日本語モデルは、small: 48M、big: 1GBが用意されている
  • SenseVoice

音認識

  • VAD
    • Voice Activity Detection
    • 発話区間検出のための技術
  • Silero VAD
    • 高性能で軽量(約2MB)なオープンソースのVADモデル
    • CPUで1ms以下で動作する高速性を持ち、WebRTC VADよりも高精度で、ノイズの多い環境でも音声を正確に検知 (according to the AI)
  • PCM
    • Pulse Code Modulation:パルス符号変調
    • 非圧縮・高品質: 音波を一定周期でサンプリングし、量子化してデータ化するため、原音に忠実
  • VAP

音の精度向上

  • PipeWire
    • Linuxのマルチメディアサーバー
    • AEC(キャンセル)やNS、AGCの機能がある
    • aec_method=webrtcを今回は使用した
  • AEC (キャンセル)
    • acoustic echo cancellation
    • スピーカーから出た周り込みを消す技術
  • NS
    • Noise Suppression
    • 扇風機、キーボード、エアコンなどの雑音を減らす技術
  • AGC
    • Automatic Gain Control
    • 声などの音量を自動調整する技術

音の理解向上

  • Punctuation
    • 意味は句読点で、句読点や記号を自動で補うこと
  • Speaker Diarization
    • 録音された音声データから「いつ、誰が話したか(Who spoke when?)」を特定し、発言ごとに分割・分類する技術
    • いわゆる話者分離

AIモデルの処理速度向上

  • LLMの量子化
    • Quantization
    • モデルのパラメータを高精度な数値(16/32bit浮動小数点)から低精度な数値(4/8bit整数)に変換し、モデルサイズを大幅に軽量化・高速化する技術
    • 精度低下を最小限に抑えつつ、少ないVRAM(GPUメモリ)で動作させ、安価なハードウェアでの推論を可能
  • ONNX
    • Open Neural Network Exchangeの意味
    • 異なるAIフレームワーク間でモデルを共有・実行するためのフォーマット
  • OpenMP
    • C/C++のマルチスレッド並列処理を簡単に書くための仕組み
    • 共有メモリ環境での並列プログラミングを支援する技術

双方向会話

  • Full Duplex
    • Full Duplex(全二重)音声技術は、AI対話システムにおいて、ユーザーとAIが「話しながら聞く(同時双方向)」ことを可能にする技術
    • 従来の「話して、待って、聞く」というターンベースの音声対話とは異なり、人間同士のような自然な相槌や発話のオーバーラップを実現する
  • GPT Realtime
    • リアルタイムで低遅延の会話操作を処理するように設計された音声入力、音声出力の会話システム
    • Function ToolやMCPも使える
  • j-moshi
    • 日本語版のmoshi
    • 同時双方向的な特徴をモデル化できるfull-duplex音声対話システム
  • personaplex

処理速度向上

  • 見える化
    • わかりにくい状態を見て分かる形にすること
    • 例えば、処理している事がわかる用にインジケータを出さないと処理速度が遅く感じた
  • 非同期
    • 処理の完了を待っている間に、別の処理を進める仕組み
    • 応答性とスループットを最大化する手法
  • マルチスレッド化
    • 計算タスクを複数コアで並列処理する仕組み
    • 応答性とスループットを最大化する手法
  • CPU Affinity
    • 処理ごとにCPUのCoreを分離する技術
    • 複数の重い処理がありOSのスケジューラーに邪魔されず処理したい時に使う
  • CPU clock scaling
    • OSが消費電力の削減やパフォーマンスの向上のために CPU の周波数を上げ下げする技術
    • Jetsonでは性能と消費電力・発熱のバランスを取るためのCPU周波数制御をしている
    • 今回はこれをOffにした
  • Producer-Consumerパターン
    • データを生成する「プロデューサー」と処理する「コンシューマー」の間にキュー(Queue)を挟み、非同期で処理を行う設計パターン
    • タスクキュー、ジョブキュー、メッセージキューなど色々な呼び方がある
    • デカップリングの一種
  • TinyML
    • 超低消費電力・小型のデバイス上で機械学習を動かす技術
    • 数KB〜数MB程度のメモリしかない小さなチップ上で、音声認識・異常検知・画像分類などを行うAI

音声分離と話者分離

  • 音声分離(speech separation)
    • 話者ごとに音声を分離するモデル
    • 例えば、Aさんの音声、Bさんの音声のように、一つの音声を物理的に分ける
  • 話者分離(diarization)
    • 時間ごとに誰が喋っているか分類するモデル
    • 例えば、ある音声で010秒はAさん、1112秒はBさんのように

有名なモデル:

  • pyannote.audio
  • Asteroid / ConvTasNet
  • SepFormer / SpeechBrain
  • MossFormer2 / ClearerVoice-Studio

音声分離の用語

  • bleed / leakage / crosstalk

    • 本来ほしい音源に、別の音が漏れ込んでいる状態
    • 音声分離では、分離しきれなかった他パートの残留音を指すことが多い
    • 例:ボーカル stem にドラムや伴奏がうっすら残る
  • artifacts

    • AI分離やノイズ除去などの処理で生じる不自然な副作用
    • 例:「金属っぽい音」「水中っぽさ」「揺れ」「チリチリ音」「音の欠け」など
    • bleed とは違い、元の音がそのまま漏れているというより、処理によって変質した音
  • doubling / ダブリング

    • 同じ音や声が重なって二重に聞こえること
    • 意図的な録音手法の場合もあるし、分離処理の副作用として起きる場合もある
    • 例:ボーカルが一枚ではなく、薄く二枚重なって聞こえる
  • phasing / フェイジング

    • 似た音が少しズレて重なり、位相干渉でシュワシュワ・うねうね・薄く聞こえる現象
    • ダブリングに近いが、より「干渉」「位相ズレ」感が強い
  • ghosting / ゴースト成分

    • 本来そこに残ってほしくない、薄い残像のような音
    • 例:消したはずのボーカルや伴奏の輪郭が、影のように残っている
    • 技術的に厳密な用語というより、聴感上の説明として使われることが多い
  • residual / residual component / 残留成分

    • 分離・除去しきれずに残った音
    • bleed や ghosting を含めて広めに表せる、やや技術寄りで無難な言い方

相槌とフィラー

  • フィラー(filler / filler word / filler sound)
    • フィラーは、話し手が「間を埋める」ために入れる音や言葉
    • 例: um, uh, well, like, you know, I mean, sort of / kind of
  • 相槌(backchannel / backchannel response)
    • 相槌は、聞き手が「聞いていますよ」「理解していますよ」と示す反応、verbal nodsという事
    • 例: yeah, uh-huh, right, I see, really?, sure, exactly, that makes sense
種類主に使う人役割
フィラー話し手間を埋める・考える時間を作るえー、あのー、えっと
相槌聞き手聞いていることを示す・反応するうん、はい、なるほど

プロソディ

プロソディ(韻律)とは、話す速度、音の強弱(ストレス)、高低(イントネーション)、ポーズなど、発話に伴う音声の音楽的・律動的な要素の総称。

プロソディは主に以下の5つの要素で構成される。

  1. イントネーション(抑揚): 文末のピッチの上げ下げ。疑問形や感情を表す。
  2. ストレス・アクセント: 単語や文の中で、どの音を強く・高く発音するか。
  3. リズム: 言葉の長短や強弱が織りなす拍子。
  4. ポーズ: 話の切れ目に入る「間」。意味のまとまりを作る。
  5. プロミネンス: 文中で特に強調したい部分を際立たせること。

WAVとPCM

  • WAV
    • 音声ファイルの形式
    • 音声データを入れる「コンテナ」のようなもの
    • 拡張子は .wav
  • PCM
    • Pulse Code Modulation:パルス符号変調
    • 音波を一定間隔でサンプリングし、音量を数値化したもの
    • 非圧縮の音声データとして扱われることが多い

Mel尺度とメルスペクトログラム

  • Mel尺度
    • Mel尺度 は、人間の聴覚に近い周波数スケールの事
  • メルスペクトログラム
    • メルスペクトログラムは、音の周波数成分(音のエネルギー分布)を メル尺度で表したもの
    • 普通のスペクトルは、たとえば 100Hz、200Hz、1000Hz、5000Hz……のように物理的な周波数で音を分解する
    • でも人間の耳は、周波数を等間隔には感じず、低い音の違いには敏感で、高い音の細かい違いにはやや鈍い
    • そこでメル尺度で、音を人間の耳に近い感覚で周波数ごとに分ける
    • 深層学習・CNN/Transformer系だとlog-mel spectrogramが使われがち

STFTとMFCC

  • STFT
    • Short-Time Fourier Transform
    • 音声を短い時間窓に区切り、それぞれの区間で周波数成分を計算する手法
    • 出力は時間 × 周波数のスペクトログラム
    • 実際の音声特徴量では、STFTの複素スペクトルから振幅スペクトログラムやパワースペクトログラムを使うことが多い
  • MFCC
    • Mel-Frequency Cepstral Coefficients(メル周波数ケプストラム係数)
    • MFCCはメル特徴量を圧縮したもの
    • 古典的な音声認識、特にGMM-HMM/HMM時代によく使われた特徴量
    • 深層学習ASRでは、MFCCよりもlog-mel spectrogram / log-mel filterbank featuresが使われることが多い
    • ただし、wav2vec 2.0やHuBERTのようにraw waveformから特徴を学習するモデルもある

MFCCまでの処理のフロー

一例として、MFCCまでは、以下のようなフローになる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
音声波形
短い区間に分ける(フレーミング)
窓関数をかける(Hamming窓など)
FFT / STFT で周波数成分に変換
パワースペクトルを計算
メルフィルタバンクをかける
各メル帯域のエネルギーを取る
logを取る
fbank特徴量(log Mel filter bank)
DCT
MFCC
CMVN
音声認識モデルへ

サンプリング周波数・ビット深度・チャンネル

  • サンプリング周波数
    • 1秒間に何回、音を測るか
    • 例: 16kHz、44.1kHz、48kHz
    • ASRでは16kHz monoに変換して扱うことが多い
  • ビット深度
    • 1サンプルの音量をどれくらい細かく表すか
    • 例: 16bit、24bit、32bit float
  • チャンネル数
    • monoは1ch、stereoは2ch
    • 音声認識ではmonoに変換して扱うことが多い
  • sample format
    • s16lefloat32 など
    • s16le は signed 16bit little-endian の意味

window、hop length

  • window size
    • 1回の周波数分析に使う音声の長さ
    • 例: 25ms
  • hop length / stride
    • 次の分析窓へどれくらいずらすか
    • 例: 10ms
  • spectrogram
    • 時間ごとの周波数成分を並べたもの
    • 横軸が時間、縦軸が周波数、色や値がエネルギーを表す
  • log-mel spectrogram
    • メルスペクトルの値に対数を取ったもの
    • 音声認識や音声分類の入力特徴量としてよく使われる

VADとEndpointing

  • VAD
    • Voice Activity Detection
    • 今この瞬間に音声があるかを判定する技術
    • 「声か、無音か」を見る
  • Endpointing
    • 発話が終わったかを判定する技術
    • ASRやLLMにいつ入力を渡すかを決める

音声AIの評価指標

  • RTF
    • Real Time Factor
    • 音声の長さに対して、処理に何倍の時間がかかったか
    • RTF < 1 ならリアルタイム処理可能
    • 例: 10秒の音声を2秒で処理できるならRTF=0.2
  • WER
    • Word Error Rate
    • 単語単位の音声認識エラー率
    • 英語など単語区切りが明確な言語でよく使われる
  • CER
    • Character Error Rate
    • 文字単位の音声認識エラー率
    • 日本語ASRではWERよりCERの方が扱いやすい場合がある
  • MOS
    • Mean Opinion Score
    • TTSなどの音質を人間が主観評価する指標

Gain・dBFS・Clipping

  • Gain
    • 音量を増幅・減衰させる量
    • マイク入力が小さすぎるとASR精度が落ち、大きすぎると音割れする
  • dBFS
    • デジタル音声における音量の単位
    • 0 dBFS が最大値で、それを超えるとクリッピングする
  • Clipping
    • 音量が大きすぎて波形の上下が潰れる現象
    • 音割れの原因になる
    • 一度クリッピングした音声は完全には元に戻せない
  • Normalization
    • 音声全体の音量を一定基準に揃える処理

Ring buffer / Chunking

  • Ring buffer
    • 固定長のバッファを循環させながら使うデータ構造
    • マイクから連続的に入ってくる音声をリアルタイム処理する時に便利
  • Chunking
    • 音声を一定長の塊に分けて処理すること
    • 例: 10ms、20ms、30ms、1秒など

注意点:

  • チャンクが短いほど低遅延だが、認識や判定が不安定になりやすい
  • チャンクが長いほど安定するが、遅延が増える
  • VAD、ASR、TTSで最適なチャンク長は異なる

CMVN

画像の前処理でやるものと同じように、分布の中心を平均にして、スケールをSDにする処理の事。

  • CMVN
    • CMVN(Cepstral Mean and Variance Normalization)とは、音声特徴量を「平均0・分散1」にそろえる前処理
    • CMVN = CMN + CVNで、画像の前処理と同じようなZ値化のための統計処理
  • CMN:平均を引く
    • 特徴量の中心を0にする
  • CVN:標準偏差で割る
    • ばらつきを1にする

bank、fbank

  • filter bank
    • filter bank は、複数の周波数フィルタを並べたもの
    • イメージとしては、音声に対するザルのようなもの
    1
    2
    3
    4
    5
    6
    7
    
    音声信号
    [低音フィルタ] → エネルギー1
    [中低音フィルタ] → エネルギー2
    [中音フィルタ] → エネルギー3
    [高音フィルタ] → エネルギー4
    ...
    
  • fbank
    • 各時間フレームごとに、メル周波数帯域ごとのログエネルギーを並べたもの
    • 例えば、80次元 fbank なら、1フレームごとにこういうベクトルになる
      1
      2
      3
      4
      
      frame 1: [band1, band2, band3, ..., band80]
      frame 2: [band1, band2, band3, ..., band80]
      frame 3: [band1, band2, band3, ..., band80]
      ...
      
    • これが時間方向に並ぶので、画像っぽく見ると スペクトログラムみたいになる

CTCとアライメント不明問題

  • アライメント不明問題
    • 音声の波形データ(いつ、どんな音が鳴ったか)と、テキスト(文字データ)の対応関係が不明・不正確になってしまう問題のこと
    • 例:
      1
      2
      
      - 入力: 音声フレーム 100個
      - 出力: 文字列 "hello" 5文字
      
    • 上記のような、入力は長い時系列データだけど、出力は短いラベル列になる
    • しかも、「どの音声フレームが h に対応するか」「どこから e か」みたいな対応関係は普通はわからなくなる
  • CTC
    • Connectionist Temporal Classification
    • 日本語だと 「結合主義的時系列分類」
    • 入力と出力の対応位置がわからない時系列タスク(アライメント不明問題)で使う損失関数
    • CTC では、通常の文字ラベルに加えてblank(-)という特殊ラベルを使う
    1
    
    h - - e l - l o
    
    • そして、最後にblank を消して、連続重複をまとめることでhelloにする
    • つまり、CTCは、ある正解ラベル列に対応しうる多数のアライメント候補を全部考慮して、その合計確率を最大化するように学習する

CTCとRNN-T

  • CTC
    • 学習が速い
    • encoder-onlyで構造がシンプル
    • 出力形状は主に 時間T × 語彙V
    • ベースラインや高速学習に向いている
  • RNN-T
    • CTCより学習は重い
    • encoder + prediction network + joint network を使う
    • 時間T × 出力長U の格子上で計算するため、CTCよりメモリ・計算量が大きい
    • ただし、出力履歴を使えるため精度やストリーミングASRでは有利になりやすい
    • pruned RNN-Tなどの最適化で学習速度はかなり改善できる

BPTTとTBPTT

RNN 系モデルで長い系列を学習するときに使う誤差伝搬の仕組み。

  • BPTT
    • BPTT / Backpropagation Through Time の略
    • シリーズ全体に対して過去方向へずっと誤差を逆伝播する
    • たとえば文章が 1,000 トークンあるなら、理屈上は 1,000 ステップぶん遡って勾配を計算する仕組み
  • TBPTT
    • Truncated Backpropagation Through Time の略で、日本語だと 「切り詰めた時間方向の誤差逆伝播」
    • シリーズを短い区間に分割して、たとえば 20 ステップごと や 100 ステップごとに区切って学習する仕組み

Conformer、Emformer、Zipformer

音響特徴量を高レベル表現に変換するacoustic encoder。

  • Conformer
    • Transformer + CNN の王道ASR encoder
    • 通常はchunk attention / causal convなどでストリーミング化
    • 精度が高く、実装・知見が多い
  • Emformer
    • Streaming前提のmemory-efficient Transformer
    • 入力をsegmentに分け、left/right contextとmemory bankを使う
    • 低遅延streamingに素直。Torchaudioにも実装あり
  • Zipformer
    • Conformerを高速・省メモリ・高精度に再設計した新しめのencoder
    • chunk/cached attentionなどでstreaming対応
    • icefall系でよく使われる
    • 速い・省メモリ・精度が良い傾向だが、構造が複雑。実装依存が強め

音素、音節、モーラ

音の3つの単位のこと。

  • 音素(Phoneme)
    • 意味を区別できる最小の音韻単位
    • 例えば日本語では /a/ や /k/ などが音素
    • 「か」は /k/ + /a/ から成る
    • 音声認識では、音素はラベル単位の一つとして使われることがある
    • しかしが、近年のASRでは文字、サブワード、音節なども広く使われる
  • モーラ(Mora)
    • 日本語のリズムを構成する拍の単位
    • 普通の仮名1文字はおおむね1モーラ
    • しかし、小さい「ゃ・ゅ・ょ」は単独では1モーラになならない
    • 一方で「っ」「ん」「ー」はそれぞれ1モーラとして数える
    • 例:「きっかけ」は「き・っ・か・け」で4モーラ、「にゃお」は「にゃ・お」で2モーラ
  • 音節(Syllable)
    • 母音を中心とした発音のまとまり
    • 英語などではリズムや強勢を分析する基本単位になる
    • 日本語ではモーラと音節が一致する場合もある
    • しかし、「かん」「きっ」「こう」のように、1音節が複数モーラを含む場合がある

ラティスとN-best list

ASRでは、N-Best Listはリストで、ラティスはGraphという違いがある。

  • N-best list
    • N-best list は、音声認識が出した候補を上から順に並べたもの
      1
      2
      3
      4
      
      1. 明日は雨です
      2. 明日は飴です
      3. 明日は雨ですか
      4. 明日晴れです
      
    • つまり、候補ごとに完成文が1本ずつあるイメージ
  • ラティス
    • ラティスは、候補をグラフ(多数の候補経路)として表す
      1
      2
      3
      
      開始 → 明日 → は → 雨 → です → 終了
                       ↘ 飴 ↗
                            ↘ ですか → 終了
      
    • 実際には各枝に、音響スコア・言語モデルスコア・時間情報などが付いている
    • ラティスでは、共通部分を共有しながら、途中の分岐を保持

n-gram

  • n-gramは、文章や音声を 連続する n 個の単位のまとまりとして見る考え方
  • 単位は、文字・音素・モーラ・単語など何でもあり
  • ある単語の次に、どの単語が来やすいかを確率で表す
  • たとえば、明日 はの次には、雨 晴れ 休み 仕事などが来そう。
  • n-gram言語モデルでは、たとえば bigram なら、$P(雨 | は)$
  • つまり「『は』の次に『雨』が来る確率」を使う
  • trigram なら、$P(雨 | 明日, は)$
  • つまり「『明日 は』の次に『雨』が来る確率」を使う
  • greedy
    • その瞬間いちばん良い候補だけを選ぶ
    • たとえばASRで、音声から文字を1つずつ出すとする
      1
      2
      3
      4
      
      1文字目候補:
      あ 0.6
      か 0.3
      さ 0.1
      
    • greedy はここで を選ぶ
    • 次に、以下なら を選ぶ
      1
      2
      3
      4
      
      2文字目候補:
      め 0.5
      ね 0.4
      れ 0.1
      
    • 結果: あめ
    • シンプルで速いが、弱点がある
    • 最初に選んだ「あ」があとで不自然になっても、戻れない
  • beam search
    • 上位いくつかの候補を残しながら進む
    • beam search は、毎回1つだけに絞らず、上位いくつかを残す
    • この「残す候補数」を beam width と言う
    • beam width = 3 なら、各ステップで上位3候補くらいを保持する
      1
      2
      3
      4
      
      1文字目:
      あ 0.6
      か 0.3
      さ 0.1
      
    • ここで greedy なら「あ」だけだが、beam search は例えば以下を残す
      1
      2
      3
      
    • そして、次の文字を足して、下のように複数候補を作り、スコアが高いものをまた上位だけ残す
      1
      2
      3
      4
      5
      6
      
      あめ
      あね
      かめ
      かね
      さめ
      さね
      
    • つまり、途中で多少スコアが低くても、後半で自然な文になる可能性がある候補を捨てにくい

マシーン、オートマトン、トランスデューサー

マシーンは「状態を持つ広義の機械」、オートマトンが「状態遷移モデルで判定機」、トランスデューサーは「入力を出力に写す変換器」。

  • マシーン
    • 状態を持つ一般的な仕組み
    • マシーン = 計算や処理を行う抽象的・実用的な「機械」一般
    • 実用・工学寄りの文脈でよく使われる
    • 例: Finite-State Machine = 有限個の状態を持つ機械
  • オートマトン
    • オートマトンは、入力を読みながら状態を変えていく抽象的な計算モデル
    • 1
      2
      
      状態A --入力x--> 状態B
      状態B --入力y--> 状態C
      
    • 重要なのは、基本的には 入力を受け取って、受理するかどうかを判定するものだという点
  • トランスデューサー
    • トランスデューサーは、入力を読みながら出力も出す変換器
    • 1
      2
      
      /k a/ → か
      /a m e/ → 雨
      

FSTとWFST

  • FS
    • Finite State
    • 有限状態
    • 扱える状態の数が有限である、という意味
  • FST
    • Finite State Transducer
    • 有限状態トランスデューサー
    • つまり、有限状態で変換するということ
  • WFST
    • 重み付きFST

LAS

  • LAS は、ASR文脈では、Listen, Attend and Spell の略
  • 一言でいうと、「音声を聞いて、重要な部分に注意を向けながら、文字列を直接出力するEnd-to-End音声認識モデル」
1
2
3
Listen : 音声特徴量を読み取る(エンコーダ表現)
Attend : どの時間部分に注目するか決める(Attention)
Spell  : 文字やサブワードを1つずつ出力する

Forced alignmentとSoft alignment、Hard alignment

  • Forced alignment
    • 音声データと、すでに正しいと分かっている文字列・音素列を入力して、各単語や音素が音声のどの時刻に対応するかを推定する処理
    • 1
      2
      3
      4
      5
      6
      7
      
      音声:「今日は晴れです」
      正解テキスト:「今日は晴れです」
      出力:
      今日:0.00〜0.45秒
      は:0.45〜0.58秒
      晴れ:0.58〜1.05秒
      です:1.05〜1.30秒
      
  • Soft alignment、Hard alignment
    • 各音声フレームや入力要素を、特定の1つの単語・音素・トークンに明確に割り当てる表現方法
    • 1
      2
      3
      
      たとえば、ある音声フレームを、
      音素 /k/ に100%割り当てる → Hard alignment
      /k/ に70%、/a/ に30%割り当てる → Soft alignment
      

促音・拗音・撥音など

  • 清音(せいおん)
    • 日本語のひらがなのこと
  • 促音(そく音)
    • 「がっこう」「さっぱり」などの語において、小さく「っ」と表記される音
    • 「っ」「ッ」(小さいつ)
    • => つまる音
  • 拗音(よう音)
    • 「きゃ」「きゅ」「きょ」などの語のように、一音節が仮名2文字で表記される音
    • 「〇ゃ 〇ゅ 〇ょ」「〇ャ 〇ュ 〇ョ」(小さいやゆよがつくもの)
    • ※拗音には、限定的ですが、小さい「〇ゎ」「〇ヮ」で表記されるものもある
    • => はねる音
  • 撥音(はつ音)
    • 「ん」と表記される音。通常、語中または語尾で一音節をなす鼻音
    • 「ん」「ン」
    • => ねじれる音
  • 長音(ちょう音)
    • 前の母音の音を伸ばして発音する音
    • ひらがなでは「ー(長音符)」や母音(あ・い・う・え・お)をそのまま当てて表記
    • => のばす音
  • 濁音
    • 濁音は、濁った音
    • 「〝」がつく音のこと
  • 半濁音
    • 半濁音は、「ぱぴぷぺぽ」のような、丸がついた音
    • 「゜」がつく音のこと

ハイブリッド型とE2E型

  • DNN-HMMハイブリッド型
    • 音声認識を複数の部品に分けて組み合わせる
    • アーキ
      • DNN:各時刻の音声が、どの音素状態らしいかを推定
      • HMM:音素が時間方向にどう遷移するかをモデル化
      • さらに、発音辞書や言語モデルを使って単語列を決定
    • フロー
      1
      2
      3
      4
      5
      6
      7
      8
      9
      
      音声
      音響特徴量
      DNNによる音素・HMM状態の確率推定
      HMM+発音辞書+言語モデルで探索
      文字・単語列
      
  • End-to-End型
    • 音声から文字列までを、なるべく1つのモデルで直接学習する
    • フロー
      1
      2
      3
      4
      5
      
      音声
      ニューラルネットワーク
      文字・単語列
      
    • 代表的なモデル
      • CTC
      • Attention Encoder-Decoder
      • RNN-T
      • Transformer / Conformer系
      • WhisperのようなEncoder-Decoder型

ハイブリッドとE2Eの違い:

観点DNN-HMMハイブリッド型End-to-End型
構成複数のモデル・辞書を組み合わせる1つのモデルとして統合的に学習
出力単位HMM状態や音素を経て単語へ変換文字・サブワード・単語を直接出力
アライメント明示的な音素・状態アライメントを使うことが多いCTCやAttentionなどが内部で学習
発音辞書基本的に必要不要な場合が多い
言語モデル外部言語モデルを明示的に使用モデル内に含む場合が多い。外部LMも併用可能
学習工程複数段階で複雑比較的シンプル
必要データ量比較的少ないデータでも構築しやすい一般に大量データで強みを発揮
解釈・制御音素や辞書単位で制御しやすい内部処理が見えにくい
新語対応辞書に発音を追加しやすいトークン設計や追加学習が必要なことがある
ストリーミング実績が豊富RNN-Tなどは得意。モデル方式に依存

DNN-HMMハイブリッド型のコンポーネント

DNN-HMMハイブリッド型の音声認識システムは、主に次の4要素を組み合わせる。

  • 音響モデル
    • 音声信号から、どの音素・HMM状態らしいかを推定する
    • 入力された特徴量がどの単語の音声に該当する確率が高いかを表す、音響スコアを算出する
    • 音声認識においてHMMは、「単語内での音素の時系列変化」を表現するモデルとして使われる
    • 発話の速さによる影響を吸収するのが目的
  • 発音辞書
    • 単語と音素列の対応を定義する
    • それぞれの単語が、どのような音素の並びで表現されるかを定義する
    • 発音辞書は、「秋」「紙」といった単語とその読み、そして ”a-k-i”・”k-a-m-i” といった音素の表記とを紐づける
    • 発音辞書により、単語を音素列(音素の並び)で表すことができる
    • 逆に言えば、発音辞書に書かれていない単語は音素列で表すことができないので、認識結果に登場しないということになる
  • 言語モデル
    • どの単語列が自然・起こりやすいかを評価する
    • 単語の並びが言語的に自然かどうかを表す、言語スコアを算出する
    • 「文脈」を判断する役割を果たしているのが言語モデル
  • デコーダ/探索アルゴリズム
    • 特徴量がどの音っぽいかを判定し、その確率を出力
    • (ハイブリッド型では音素単位、End-to-End型では文字や単語単位)
    • 「発音辞書」「音響モデル」「言語モデル」から得られた音響スコアと言語スコアをもとに判断すし、
    • 最もスコアが高い「単語の並び」を探索して認識結果とする処理をデコードと呼ぶ

RNNとLSTMとGRU

文章や音声のような時系列データを処理するニューラルネットワーク。

  • RNN
    • 過去の隠れ状態と現在の入力から、新しい隠れ状態を計算する
  • LSTM
    • LSTMは、通常のRNNに記憶を管理するゲートを追加したモデル
    • 主に3つのゲートがある
      • 忘却ゲート:過去の情報をどれだけ忘れるか
      • 入力ゲート:新しい情報をどれだけ記憶するか
      • 出力ゲート:記憶から何を出力するか
    • また、LSTMは通常の隠れ状態とは別に、長期記憶を保持するセル状態を持つ
  • GRU
    • Gated Recurrent Unit
    • GRUもRNNの一種だが、情報を残すか忘れるかを制御するゲートを持っている
    • 主に2つのゲートがある
      • 更新ゲート:過去の情報をどれくらい残すか
      • リセットゲート:過去の情報をどれくらい無視する
    • GRUもゲートを持つRNNだが、LSTMより構造を簡略化している
    • BiGRUもよく利用される

共調音の順行性と逆行性

  • 順行性
    • 前の音が後の音に影響する
  • 逆行性
    • 予測的:後の音を発音する準備が前の音に現れる

GRUは前から処理するため主に順行性の影響を捉えるが、BiGRUは前後の音声フレームを見るため、両方向の共調音をモデル化しやすい。

1
2
3
4
音声:     k   y   o   o
             ↑ 現在
GRU:      ← 過去の音だけを見る
BiGRU:    ← 過去 + 未来を見る →

MambaとGRU

  • GRU
    • 1ステップずつ、ゲートを使って過去の情報を更新するRNN
  • Mamba
    • 状態空間モデルを使い、入力に応じて「何を記憶し、何を捨てるか」を選択するモデル
    • Mambaは、Selective State Space Modelという仕組みを使う
    • Transformerより並列化しやすい構造になっている

Bidirectional vs Causal

基本的に情報量が多い分、BiXXXの方が精度が高い。

  • Causal(Unidirectional, UniXXX)
    • 時刻tの出力は、現在までの情報だけで計算
    • リアルタイム処理など
  • Bidirectional(BiXXX)
    • 時刻tの出力を、前後両方の情報から計算
    • 前後の文脈を利用できる

結論

  • 音の中でも会話についての技術で学んだ事をまとめた
  • 会話とはダンシングであり、交通整理が大事
  • そこをリアルタイムでやるのがミソ

参考文献

Built with Hugo
テーマ StackJimmy によって設計されています。