[PaddleSpeech] AIで音声認識(Speech to Text) [Python]

2021年12月25日土曜日

Artificial Intelligence

本記事では、PaddleSpeechを使って、音声認識、音声合成、音声翻訳、音声分類を行う方法を紹介します。

アイキャッチ

PaddleSpeechとは

PaddleSpeechとは、Baidu社が開発するAIプラットフォームであるPaddlePaddleを用いた音声タスクを実現するツールキットです。

音声タスクとは、音声認識(Speech to Text)音声翻訳(Sppech Translation English to Chinese)音声合成(Text to Speech)音声分類(Audio classification)などが挙げられます。

特徴として、全てのタスクにおいて1つ以上の事前学習済みモデルが提供され、全てのモデルの学習コードも提供されています。
つまり、事前学習済みモデルを使用してタスクを容易に実行できるとともに、用途に合わせて学習データを用意し、自作モデルをトレーニングすることも可能です。

一点、注意点として、2021年12月末時点では、ほとんどのタスクが中国語のみサポートとなっているため、日本語モデルを使用したい場合は 別途トレーニングが必要です。

しかしPaddleOCRが多言語対応を進めているので、将来的にPaddleSpeechの対応言語が拡張されていく可能性はありそうです。

PaddleSpeechの導入手順

セットアップ: conda環境構築

それでは早速、開発環境にPaddleSpeechをセットアップしていきます。
動作確認は下記の環境で行っています。

OS: Ubuntu 18.04.3 LTS
GPU: GeForce GTX 1080

なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。

それでは、PaddleSpeechをインストールしていきます。他の機械学習環境に影響を与えないためにMinicondaの仮想環境上に構築していきます。Minicondaのインストール手順は公式ドキュメントをご参照ください。

conda環境構築手順を下記に記載します。
なお動作要件は下記の通りです。

  1. C++コンパイル環境
  2. Python >= 3.7+
$ C++コンパイル環境をインストール
# sudo apt install build-essential

# python version 3.7のconda環境を作成
$ conda create -n PaddleSpeech python=3.7 -y

# 作成した環境をアクティベート
$ conda activate PaddleSpeech
 
# Proxy配下の場合はインストール前に下記を設定
$ export http_proxy="http://"username":"password"@proxy:port"
$ export https_proxy="http://"username":"password"@proxy:port"

# 関連するライブラリをインストール
$ conda install -y -c conda-forge sox libsndfile swig bzip2 libflac bc
# cudatoolkitのバージョンはインストールされているcudaのバージョンに合わせる
$ conda install -c conda-forge cudatoolkit=11.2 cudnn nccl six ffmpeg
$ conda install -c anaconda decorator 
$ pip3 install protobuf numpy requests pillow astor

# paddlepaddle-gpuをインストール
# https://anaconda.org/Paddle/paddlepaddle-gpu/files からpython versionとcudaバージョンが一致するものをインストール
$ wget https://anaconda.org/Paddle/paddlepaddle-gpu/2.2.1/download/linux-64/paddlepaddle-gpu-2.2.1-py37_gpu_cuda11.2_many_linux.tar.bz2
$ conda install paddlepaddle-gpu-2.2.1-py37_gpu_cuda11.2_many_linux.tar.bz2

問題なくインストールできているか下記のコマンドを実行して確認します。

$ python3 -c "import paddle; print(paddle.__version__)"
2.2.1
$ python3 -c "import paddle; paddle.utils.run_check()"
...中略
PaddlePaddle works well on 2 GPUs.
PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now.

上記のようにバージョンが表示されチェックに成功すれば、paddlepaddle-gpuのインストールは完了です。

続いてPaddleSpeechをインストールします

$ pip3 install paddlespeech paddlenlp

# codeをgit clone
$ git clone https://github.com/PaddlePaddle/PaddleSpeech.git
$ cd PaddleSpeech
# 動作確認
$ cd demos/audio_tagging/
$ sh run.sh
Cat: 0.8381208777427673
Animal: 0.7571945786476135
Domestic animals, pets: 0.7082720398902893
Meow: 0.6496204137802124
Inside, small room: 0.04219694435596466
Caterwaul: 0.02085551992058754
Speech: 0.01875639334321022
Music: 0.016380252316594124
Outside, urban or manmade: 0.016187790781259537
Purr: 0.013365675695240498

上記コマンドで学習が実行させれば正常にPaddleSegがインストールされています。

音声認識(Sppech to Text)

音声認識(Speech to text)を実行してみます。
なお2021年12月末時点では、中国語(zh)のみ対応しています。
日本語や英語の音声認識を行う場合別途学習させてモデルを生成する必要があります。

今回はhttps://paddlespeech.readthedocs.io/en/latest/tts/demo.htmlから中国語の音声ファイルを使用します。
音声ファイルは"昨日,这名“伤者”与医生全部被警方依法刑事拘留"(直訳: 昨日、「負傷者」と医師はすべて、法律に従って警察に刑事拘留されました)と発話しているファイルを使用します。

$ cd demos/speech_recognition
# https://paddlespeech.readthedocs.io/en/latest/tts/demo.html からファイルをダウンロードして直下に配置
$ paddlespeech asr --input ./009901.wav --lang zh
[2021-12-24 22:01:00,371] [    INFO] [log.py] [L57] - ASR Result: 昨日这名伤者与医生全部被警方依法刑事拘留

正確に認識されていますね。

音声分類(Audio Classification)

次に音声分類試してみます。
このタスクでは、入力した音声にタグと、タグごとのスコアを付与します。 https://paddlespeech.bj.bcebos.com/PaddleAudio/cat.wav 上記猫の鳴き声の音声ファイルを使用します。

$ cd demos/audio_tagging
# https://paddlespeech.bj.bcebos.com/PaddleAudio/cat.wav からファイルをダウンロードして直下に配置
$ paddlespeech cls --input ./cat.wav --topk 10
Cat: 0.8381208777427673
Animal: 0.7571945786476135
Domestic animals, pets: 0.7082720398902893
Meow: 0.6496204137802124
Inside, small room: 0.04219694435596466
Caterwaul: 0.02085551992058754
Speech: 0.01875639334321022
Music: 0.016380252316594124
Outside, urban or manmade: 0.016187790781259537
Purr: 0.013365675695240498

タグとそれぞれのタグのスコアが出力されています。
猫、動物などがハイスコアとなっていることからも有効なタグが検出されていますね。

ちなみにデフォルトで用意されているタグは527個です。--topkを527より大きい数字を設定した場合エラーとなるためご注意下さい。
もっとも、後半のタグのスコアはかなり低くなるためあまり意味を成しません。

字幕生成(automatic video subtitles)

次に音声ファイルの字幕生成を試してみます。
このタスクでは、動画から音声ファイルを抽出し音声認識を実施後、字幕用に句読点を付けたテキストを出力します。

$ demos/automatic_video_subtitiles
# デモ動画をダウンロード
$ wget https://paddlespeech.bj.bcebos.com/demos/asr_demos/subtitle_demo1.mp4
# 音声ファイルに変換
$ ffmpeg -i subtitle_demo1.mp4 -ac 1 -ar 16000 -vn subtitle_demo.wav
# 字幕生成
$ python -u recognize.py --input subtitle_demo.wav
ASR Result: 
当我说我可以把三十年的经验变成一个准确的算法他们说不可能当我说我们十个人就能实现对十九个城市变电站七乘二十四小时的实时监管他们说不可能
Text Result: 
当我说我可以把三十年的经验变成一个准确的算法,他们说不可能。当我说我们十个人就能实现对十九个城市变电站七乘二十四小时的实时监管,他们说不可能。

ASR Resultが音声認識結果、Text Resultが字幕用に句読点を付与した出力テキストです。

音声翻訳(Text Translation)

次にText Translationを試してみます。
"the invention of movable metal letters in the middle of the fifteenth century may justly be considered as the invention of the art of printing."(訳: 15世紀半ばの可動金属文字の発明は、印刷技術の発明と見なすことができます。)と発話している音声ファイルを使用します。
こちらのファイルは、https://paddlespeech.readthedocs.io/en/latest/tts/demo.htmlから取得しています。

ただし、入力できるサンプリング周波数が16000HzとなっているためSOXを使用して変換しています。

$ cd demos/speech_translation
# https://paddlespeech.readthedocs.io/en/latest/tts/demo.html から英語のファイルをダウンロード
# サンプリング周波数変更
$ sox ./LJ001-0005.wav --rate 16k --bits 16 --channels 1 output_audio.wav
$ paddlespeech st --input ./output_audio.wav
[2021-12-25 14:44:22,776] [    INFO] - ST Result: ['十五世纪 中部 的 金属 字母 的 发明 可能 被 认为 是 印刷 艺术 的 发明 。']

出力結果を英訳した結果は以下の通りです。
"The invention of metal letters in the middle of the 15th century may be considered an invention of the art of printing." 正確に音声を翻訳できていますね。

音声合成(Text to Speech)

最後にText to Speechを実行してみます。
这个声音是机器发出的声音(訳: この音声は機械によって作られた音声です)
上記の音声を作成してみます。

$ cd demos/text_to_speech
$ paddlespeech tts --input 这个声音是机器发出的声音

発音の良し悪しの判断ができないのが歯がゆいですがGoogle翻訳にしゃべらせてみたものより、流暢な音声ファイルが生成されます。

まとめ

本記事では、PaddleSpeechで音声認識(Speech to Text)、音声翻訳(Sppech Translation English to Chinese)、音声合成(Text to Speech)、音声分類(Audio classification)を行う方法を紹介しました。
かなり手厚いツールキットで、予測の実行から、学習、データ変換に至るまでほとんどがカバーされています。
学習データさえ用意できれば、多くのモデルのトレーニングを試すことができるため非常に助かりますね。

また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。


また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。

参考文献

1. 論文 - WeNet: Production oriented Streaming and Non-streaming End-to-End Speech Recognition Toolkit

2. GitHub - PaddlePaddle/PaddleSpeech

3. Audio Sample

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology