音声とテキストから発話の時間境界付きの Praat TextGrid を生成する「Wav2TextGrid」を英語音声で試してみる

初めに

まだ試験的ですが以下のライブラリが出てきていたので触ってみます

github.com

対応言語は英語のみのため、日本語を使いたい場合は自前で学習する必要があります。

モデル/アーキテクチャ

  • Wav2Vec2 によるフレームレベルの音素予測
  • 強制アラインについては、予測された音素 posterior を、Viterbi decodingで転写音素列に整列して時間境界を得る

開発環境

環境構築

uvが入っている前提で以下を実行します

uv sync

実行

サンプルデータを使って実行してみます

uv run python scripts\\run_inference_workflow.py --examples-dir examples --output-dir outputs

出力結果 (0.wav)は以下のようになります

File type = "ooTextFile"
Object class = "TextGrid"

xmin = 0 
xmax = 2.37 
tiers? <exists> 
size = 2 
item []: 
    item [1]:
        class = "IntervalTier" 
        name = "phones" 
        xmin = 0 
        xmax = 2.37 
        intervals: size = 8 
        intervals [1]:
            xmin = 0 
            xmax = 0.42 
            text = "[SIL]" 
        intervals [2]:
            xmin = 0.42 
            xmax = 0.57 
            text = "B" 
        intervals [3]:
            xmin = 0.57 
            xmax = 1.37 
            text = "ER" 
        intervals [4]:
            xmin = 1.37 
            xmax = 1.43 
            text = "D" 
        intervals [5]:
            xmin = 1.43 
            xmax = 1.51 
            text = "HH" 
        intervals [6]:
            xmin = 1.51 
            xmax = 1.73 
            text = "AW" 
        intervals [7]:
            xmin = 1.73 
            xmax = 2.05 
            text = "S" 
        intervals [8]:
            xmin = 2.05 
            xmax = 2.37 
            text = "[SIL]" 
    item [2]:
        class = "IntervalTier" 
        name = "words" 
        xmin = 0 
        xmax = 2.37 
        intervals: size = 3 
        intervals [1]:
            xmin = 0 
            xmax = 0.42 
            text = "[SIL]" 
        intervals [2]:
            xmin = 0.42 
            xmax = 2.05 
            text = "birdhouse" 
        intervals [3]:
            xmin = 2.05 
            xmax = 2.37 
            text = "[SIL]"