- Talk-Llama は、ターミナルでマイクに向かって話すと Whisper が音声をテキストに変換し、LLaMA が応答する
whisper.cpp のサンプル
- マイク音声のキャプチャには SDL2 が必要で、ビルド時に CMake オプション
WHISPER_SDL2=ON を有効にする必要がある
- 実行時は
-mw で Whisper モデルを指定し、リアルタイム対話には base または small モデルが推奨される
-ml には ggml 互換 LLaMA モデルを指定し、モデルの準備方法は llama.cpp の手順に従うようになっている
--session FILE を使うとモデル状態を保存・読み込みでき、長い会話や複数回の実行にまたがる コンテキスト維持 が可能
ターミナル音声対話サンプル
whisper.cpp/examples/talk-llama は、ターミナルで LLaMA AI と音声で対話するサンプル
- 2023年11月2日時点の性能デモは、M2 Ultra で Whisper Medium + LLaMA v2 13B Q8_0 の組み合わせで実行されたものと示されている
- 以前のデモは CPU 実行例として別動画が提供されている
ビルドと実行の流れ
whisper-talk-llama は、マイク音声キャプチャのため SDL2 ライブラリに依存する
- OS別の SDL2 インストール例は次のとおり
- Debian 系 Linux:
sudo apt-get install libsdl2-dev
- Fedora Linux:
sudo dnf install SDL2 SDL2-devel
- Mac OS:
brew install sdl2
- CMake ビルドでは
WHISPER_SDL2=ON オプションを有効にする
cmake -B build -S . -DWHISPER_SDL2=ON
cmake --build build --config Release
- 実行例では Whisper モデル、LLaMA モデル、プロンプト、スレッド数をまとめて指定する
./build/bin/whisper-talk-llama -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-13b/ggml-model-q4_0.gguf -p "Georgi" -t 8
モデル指定オプション
-mw 引数は使用する Whisper モデルを指定する
- リアルタイム体験には
base または small モデルが推奨される
-ml 引数は使用する LLaMA モデルを指定する
ggml 互換 LLaMA モデルの入手方法は llama.cpp の手順を参照するようになっている
セッションファイルでコンテキストを引き継ぐ
whisper-talk-llama は、より一貫性があり連続した対話のために セッション管理をサポートする
- 以前のやり取りのコンテキストを維持し、ユーザーの要求をより自然に理解して応答できる
- セッションサポートは実行時の
--session FILE コマンドラインオプションで有効化する
- 各やり取りの後、
whisper-talk-llama のモデル状態が指定したファイルに保存される
- ファイルがなければ新しく作成される
- ファイルがあれば、そのファイルからモデル状態を読み込み、前回のセッションを再開する
- 長い会話や複数セッションにまたがって AI assistant とやり取りする際、以前のやり取りを記憶し、より関連性の高いコンテキスト応答を提供するのに役立つ
- 実行例:
./build/bin/whisper-talk-llama --session ./my-session-file -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-13b/ggml-model-q4_0.gguf -p "Georgi" -t 8
音声出力とフィードバック
- 生成されたテキスト応答を音声で聞くには TTS ツールが必要
- 好みの TTS エンジンを使え、必要に応じて speak スクリプトを修正すればよい
- デフォルト設定では MacOS の
say または Windows の SpeechSynthesizer を使う
- フィードバックは GitHub Discussion #672 で受け付けていると案内されている
1件のコメント
Hacker News の意見
ここで見ると面白いですね :)
動画に出ているものより、今は Apple Silicon の性能がずっと良くなっているはずです。whisper.cpp は今では GPU 上で完全に動きますし、この数か月で llama.cpp の生成速度も大きく改善されました
実際、性能も印象的です
素晴らしいですね。最近のプロジェクトで Llama をオープンソースの 音声合成モデルにつないでみたのですが、面白いエンジニアリング要素がたくさんありました
個人的に最も有用なコーディング支援ツールは、難しい思考や問題解決を肩代わりしようとするものではなく、docstring から引数や型を生成したり、その逆をしたりする形で 手作業の負担を減らしてくれるツールです。より複雑な作業では、支援ツールにかなり良い出発点を与える必要があるようでした
コーディング中によく独り言を言うのですが、こうしたツールが私の発話をコンテキストベクトルとして埋め込み、追加の入力として使ってモデルにより良い出発点を与えられるなら、本当に未来的で有用だと思います。Copilot は取り入れるのが遅かったほうで、常に使っているわけではありませんが、似たものをご存じの方がいれば気になります
270 日以内に オープンウェイトに関する提案が現実化すれば、数か月後には事実上禁止される可能性もありますね
私が調べた限りでは、オープンウェイトモデルを禁止する内容はまったくありません。最終勧告に「禁止せよ」が入る理由もあまりなさそうです
たとえば、政府がオープンウェイトモデルを導入する負担を高くしすぎて、OpenAI を購入するほうがずっと魅力的に見えるようにする、といった既存事業者に有利な勧告は想像できます。しかし、それは元の発言とは違います
大統領令はかなり読みやすそうですが、私が本文で見落としているものはありますか?
https://www.whitehouse.gov/briefing-room/presidential-action...
範囲が開かれた形になっているのは懸念される、という点には同意しますが、実際の禁止はどこにあるのでしょうか?
Arch と Debian で
./talk-llamaを実行すると floating point exception が出ます。sdl2libとffmpegも確認し、関連 issue(https://github.com/ggerganov/whisper.cpp/issues/1325)も見ましたが解決しません。他の方も経験していますか?https://github.com/ggerganov/whisper.cpp/issues/352#issuecom...
何が変わったのかは確かではありませんが、基本的に
ffmpegとlibsdl2-devを削除し、リポジトリのルートでmakeを実行しました。その後libsdl2とffmpegをインストールしてmake talk-llamaしました4 コアの i7-8550U と RAM 16GB ではかなり遅いです
リポジトリのルートでだいたいこんな感じで実行しました:
$ sudo apt purge ffmpeg$ make clean$ git pull$ make$ sudo apt install libsdl2-dev$ make talk-llama$ ./talk-llama -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-2-13b.Q4_0.gguf -p "t0mk" -t 8\n\nLlama が生成を終えるまで待たずに、テキストストリームを受け取ってすぐ読み上げてくれるテキスト音声変換ソリューションはないのでしょうか?
モデルが十分速くバッファを埋めて、音声合成エンジンが止まらない場合に限って可能ではありそうです
LLM の応答全体が終わるまで待たず、生成され次第、約 6 トークンのまとまりで音声合成にストリーミングすれば、遅延を減らせるでしょうか?
現状では基本的な適応型しきい値だけを使っている 発話終了検出をもっと良くできますし、大きな LLM が計算している間に、小さな LLM に一般的な素早い応答を作らせることもできます。音声合成もチャンク単位や文単位でストリーミングできます
この種のチャットボットのより優れたオープンソース版の一つは https://github.com/yacineMTB/talk だと思います。今では似たプロジェクトがもっと増えている可能性も高いです
Llama 向けの最高の チャットインターフェースは何でしょう? 3090 があるので、ターミナルで手早いコーディング作業用にモデルを一つ動かしてみたいです
pacman -S ollamaollama serveollama run llama2:13b 'insert prompt'https://ollama.ai/
https://github.com/cogentapps/chat-with-gpt
ElevenLabs と OpenAI API を使うように作られているようですが、ローカルの Whisper.cpp と Llama に合わせて設定するのも簡単かもしれません
採用中で、公開された収益化戦略はないので、近いうちに無料機能の一部を有料化したり、意図的に制限したりする変化があるだろうと予想しています。それでも llama.cpp に全面的に依存する無料 LLM 向けの薄いアプリが、ベンダーロックインを作るのは難しいでしょう。機能よりオープンソースを優先するなら、私も ollama をおすすめします
技術的な質問には、今は Wizard が主流だと思います
ollama はローカルのオープンソース LLM を実行するには本当に満足なのですが、Whisper や最新のオープンソース 音声合成モデル については、それに相当するものは何でしょう? Whisper をローカルでそれほど簡単に設定できるプロジェクトはよく知りません
WhisperScript というものもかなり良さそうでした: https://github.com/openai/whisper/discussions/1028
とはいえ WhisperX の設定はそれほど難しくありません。数か月前にまとめた手順メモです: https://llm-tracker.info/books/logbook/page/transcription-te...
https://goodsnooze.gumroad.com/l/macwhisper
音声合成は coqui が複数言語でユーザー体験とモデルの面では最も良いですが、品質は商用の音声合成プロバイダーと同じ水準ではありません
これで何ができるのか、簡単に説明してもらえますか?チャットの文脈を学習して維持しながら、何か 長期記憶のようなものを蓄積していけるのでしょうか?
LLM のコンテキスト制限は、ユーザーが選んだモデルと設定によって変わります。たとえば Llama 2、Wizard Vicuna など、どのモデルを使うか、コンテキストウィンドウをどう設定したかによって異なります。LLM はユーザーに「答える」というより、ユーザーと有用な assistant の間の会話履歴において最もありそうな次の内容を予測し、その結果として有用な assistant のふりをすることに成功し、実際に有用な assistant になる、という形なので混乱しがちです
パイプラインを変えれば、そうした動作も可能になりそうです。構造が
音声認識 → Wrapper[Llama] → 音声合成になり、Wrapper が Llama にやるべきことをさせつつ、入力テキストに追加処理をかけられるなら面白くなりますWrapper は会話を分析して、「この人の名前は Bob、男性、35歳、犬が好きで整理された状態を好み、午後5時に娘へ電話するリマインダーを望んでおり、南極マフィアの潜入工作員で、強いポーランド訛りで話してほしいと思っている」といった重要な要素を抽出し、それに応じて動作できます
たとえば HomeAssistant 経由で午後5時のリマインダーを作成し、音声合成エンジンをポーランド訛りに設定し、以後の実行時の開始会話履歴を修正できます。内部チャット会話に人名を入れ、次の会話の事前紹介に興味や性格を圧縮して提供する、といった形です
こうすれば、他のツールが実行するアクションを通じてインタラクティブ性が生まれ、次の会話履歴を修正することで連続性も作れます
これは本当に強烈な ELIZA 感があります