TL;DR
- WhisperはOpenAIによって開発された音声認識システムで、多言語対応の高精度なテキスト変換機能を提供します。
-
whisper.cpp
はWhisperモデルのC++実装であり、マイク入力からのリアルタイム文字起こしや、音声ベースのアプリケーション開発を容易に行うことができます。 - 修正された
whisper.cpp
とllama.cpp
を組み合わせることで、マイクからの日本語音声入力を基にLLMと日本語で対話するシステムを構築できます。
使用環境
- MacBook Pro
- CPU : Apple M2 Pro, 12core
- MEM : 32 GB
- OS : Sonoma 14.2.1
whisper と whisper.cpp
WhisperはOpenAIによって開発された最先端の音声認識システムであり、様々な言語の音声をテキストに変換する能力を持っています。このシステムは、公開されているモデルを通じて、広範囲の言語や方言に対応し、さまざまな音声の環境下で高い精度の音声認識を実現します。特に、雑音が含まれる環境やさまざまな話者の声にも強く、リアルタイムでの使用にも適しています。
whisper.cpp
は、WhisperモデルをC++で実装したもの. 特に Mac での動作にして聞かされています. この実装例を通じて、開発者はWhisperモデルを自分のアプリケーションに組み込む方法を学ぶことができ、マイクから直接音声を入力し、リアルタイムでの文字起こしや、さらには音声を基にした会話AIとのインタラクションを実現することが可能です。また、whisper.cpp
を使用することで、Whisperの強力な音声認識機能を活用し、様々な言語での対話システムや音声ベースのアプリケーション開発を容易に行えます。
この記事では、whisper.cpp
を日本語化し、マイクからの音声入力を文字起こしした後、それを用いてLLM(Language Learning Model)と会話する talk-llama という例を修正することにより, 日本語を用いたLLMとの対話を実現させた.
whiper.cpp での文字起こし
本家は以下のリポジトリにあります.
https://github.com/ggerganov/whisper.cpp
後々, talk-llamaをクローンするので下記のフォークしたリポジトリを利用すると楽かも
https://github.com/nagato0614/whisper.cpp
基本的な使い方はリポジトリにありますが,
まずリポジトリをクローン
git clone https://github.com/ggerganov/whisper.cpp.git
ソースコードのビルド
make
モデルのダウンロード.
日本語で使えるようにするため, モデル名の末尾にある, .en
がないモデルをダウンロードしてください.
bash ./models/download-ggml-model.sh base
bash ./models/download-ggml-large-v3.sh base
そして実行.
オプションはそれぞれ,
-
-l ja
: 使用言語を日本語に -
-t 4
: 使用するスレッド数 -
-m ./model/ggml-base.bin
: 使用するモデルの選択
下記のコマンドを実行するとマイクからの入力から文字起こし可能です.
./stream -l ja -t 4 -m ./model/ggml-base.bin
llama.cpp の準備
llm との会話する部分は llama.cppを使用する.
以下のリポジトリからクローン.
whisper.cppとおなじクローンしてください.
ディレクトリ構成は以下のような感じ
- ./
- llama.cpp
- whisper.cpp
クローン後ビルド
cd llama.cpp
make
モデルのダウンロードは huggingface に公開されているものをダウンロード.
自分がダウンロードしたのは, swallow-7b-instruct.Q4_K_S.gguf
.
違いはイマイチわかっていない.
ダウンロードしたモデルは ./models に保存
- -m ./models/swallow-13b-instruct.Q6_K.gguf : 使用するモデルを指定
- -n 256 : 生成するトークン(単語や文字列の単位)の数を指定
- --repeat_penalty 1.0 : 繰り返しペナルティを指定
- --color : 出力に色を使用するオプション
- -i : 対話モードで実行
- -r "User:" : 入力の際にユーザーからの発言を示すプレフィックス(接頭辞)を指定
- -f : 事前に入力するプロンプト
./main -m ./models/swallow-13b-instruct.Q6_K.gguf -n 256 --repeat_penalty 1.0 --color -i -r "User:" -f ./prompts/chat-with-bob.txt
whisper.cpp + llama.cpp
whisper.cpp の example ディレクトリが存在しており, whiper.cpp ディレクトリないでビルドすることが可能.
今回使用するexample も以下のようにビルドすることができる.
make talk-llama
今回修正したコードは本形をフォークしたリポジトリをクローンすることで使用することができる.
whisper.cpp, llama.cpp と同じ階層にクローンする.
準備はwhisper.cpp と同様にしておく.
git clone https://github.com/nagato0614/whisper.cpp
cd whisper.cpp
make talk-llama
./talk-llama -mw ./models/ggml-large-v3.bin -ml ../llama.cpp/models/swallow-7b-instruct.Q4_K_S.gguf -p "User:" -t 8 -l ja
これで日本語を用いてllmと対話が可能になる.