2 ポイント 投稿者 GN⁺ 2023-11-03 | 1件のコメント | WhatsAppで共有
  • Talk-Llama は、ターミナルでマイクに向かって話すと Whisper が音声をテキストに変換し、LLaMA が応答する whisper.cpp のサンプル
  • マイク音声のキャプチャには SDL2 が必要で、ビルド時に CMake オプション WHISPER_SDL2=ON を有効にする必要がある
  • 実行時は -mwWhisper モデルを指定し、リアルタイム対話には 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件のコメント

 
GN⁺ 2023-11-03
Hacker News の意見
  • ここで見ると面白いですね :)
    動画に出ているものより、今は Apple Silicon の性能がずっと良くなっているはずです。whisper.cpp は今では GPU 上で完全に動きますし、この数か月で llama.cpp の生成速度も大きく改善されました

    • 新しいデモ動画のコミットまで 13 分しかかかっていませんね、悪くない :D
      実際、性能も印象的です
    • もうかなり有名になっているようですね。GitHub を熱心に追っている人が多い可能性が高いです
    • 新しいデモを一番上に持ってくる PR を送りました。新しいデモのほうがずっと良いと思います
    • これを実行するには Apple Silicon が最もコスト効率が良いのでしょうか、それとも高性能なホームラボの Linux サーバーならもっと安くできるのでしょうか?
    • 最新の distilled Llama でも動作するのでしょうか?
  • 素晴らしいですね。最近のプロジェクトで Llama をオープンソースの 音声合成モデルにつないでみたのですが、面白いエンジニアリング要素がたくさんありました
    個人的に最も有用なコーディング支援ツールは、難しい思考や問題解決を肩代わりしようとするものではなく、docstring から引数や型を生成したり、その逆をしたりする形で 手作業の負担を減らしてくれるツールです。より複雑な作業では、支援ツールにかなり良い出発点を与える必要があるようでした
    コーディング中によく独り言を言うのですが、こうしたツールが私の発話をコンテキストベクトルとして埋め込み、追加の入力として使ってモデルにより良い出発点を与えられるなら、本当に未来的で有用だと思います。Copilot は取り入れるのが遅かったほうで、常に使っているわけではありませんが、似たものをご存じの方がいれば気になります

  • 270 日以内に オープンウェイトに関する提案が現実化すれば、数か月後には事実上禁止される可能性もありますね

    • その主張は Biden の大統領令本文からは裏付けられません。複数の政府機関に対し、安全性評価の枠組みを作り、オープンウェイトモデルに関する初期評価を行い、270 日以内に大統領へ勧告を提出するよう求めているだけです
      私が調べた限りでは、オープンウェイトモデルを禁止する内容はまったくありません。最終勧告に「禁止せよ」が入る理由もあまりなさそうです
      たとえば、政府がオープンウェイトモデルを導入する負担を高くしすぎて、OpenAI を購入するほうがずっと魅力的に見えるようにする、といった既存事業者に有利な勧告は想像できます。しかし、それは元の発言とは違います
      大統領令はかなり読みやすそうですが、私が本文で見落としているものはありますか?
      https://www.whitehouse.gov/briefing-room/presidential-action...
    • ウェイトが禁止されるという内容は見当たりません。私が見た部分は、オープンウェイトのリスクと利点に関する報告書を作るよう求める内容に近いです
      範囲が開かれた形になっているのは懸念される、という点には同意しますが、実際の禁止はどこにあるのでしょうか?
    • これはどれほど深刻な脅威なのでしょうか?業界のリーダーたちと相談もせず、こんな愚かなことをどうやって執行できるのでしょうか?
  • Arch と Debian で ./talk-llama を実行すると floating point exception が出ます。sdl2libffmpeg も確認し、関連 issue(https://github.com/ggerganov/whisper.cpp/issues/1325)も見ましたが解決しません。他の方も経験していますか?

    • PopOS 22.04 で同じエラーに悩まされましたが、これが役に立ちました:
      https://github.com/ggerganov/whisper.cpp/issues/352#issuecom...
      何が変わったのかは確かではありませんが、基本的に ffmpeglibsdl2-dev を削除し、リポジトリのルートで make を実行しました。その後 libsdl2ffmpeg をインストールして 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\n
  • Llama が生成を終えるまで待たずに、テキストストリームを受け取ってすぐ読み上げてくれるテキスト音声変換ソリューションはないのでしょうか?
    モデルが十分速くバッファを埋めて、音声合成エンジンが止まらない場合に限って可能ではありそうです

    • バッファに 1 語だけ残ったら、llama.cpp に “um” や “uhh” のようなものを出させればよさそうですね :D
    • 文がどこへ向かっているのか分かっていたほうが、タイミングと強勢がよりうまく合います。そうでなければ、国連の通訳者のように平板に単語が続いていく感じになるかもしれません
    • ElevenLabs と Gemelo.AI は、まさにこの用途向けに テキスト入力ストリーミングをサポートしているサービスです。オープンソースの増分音声合成(Incremental TTS)モデルは私の知る限りありませんが、トークンをバッファリングしておき、句読点が出たら音声合成モデルへ送る方式で似たように実装することはできます
  • LLM の応答全体が終わるまで待たず、生成され次第、約 6 トークンのまとまりで音声合成にストリーミングすれば、遅延を減らせるでしょうか?

    • はい、そのときはそうしようと思っていたのですが、別件が入ってしまいました。この簡単な例は、いくつもの方法で改善できます
      現状では基本的な適応型しきい値だけを使っている 発話終了検出をもっと良くできますし、大きな LLM が計算している間に、小さな LLM に一般的な素早い応答を作らせることもできます。音声合成もチャンク単位や文単位でストリーミングできます
      この種のチャットボットのより優れたオープンソース版の一つは https://github.com/yacineMTB/talk だと思います。今では似たプロジェクトがもっと増えている可能性も高いです
  • Llama 向けの最高の チャットインターフェースは何でしょう? 3090 があるので、ターミナルで手早いコーディング作業用にモデルを一つ動かしてみたいです

    • ollama は本当に使いやすいです。必要なときにモデルをダウンロードする単一バイナリで、Docker がイメージを取得する仕組みに似ています
      pacman -S ollama
      ollama serve
      ollama run llama2:13b 'insert prompt'
      https://ollama.ai/
    • 音声にも対応しているオープンソースプロジェクトがあります:
      https://github.com/cogentapps/chat-with-gpt
      ElevenLabs と OpenAI API を使うように作られているようですが、ローカルの Whisper.cpp と Llama に合わせて設定するのも簡単かもしれません
    • オープンソースではありませんが、今のところ無料の lmstudio.ai があります。チャット履歴、まずまずの設定 UI、簡単なプロンプト管理、モデルの管理と探索、シンプルな設定、クロスプラットフォーム対応、他のツールと接続するための API サーバー機能まで備えています
      採用中で、公開された収益化戦略はないので、近いうちに無料機能の一部を有料化したり、意図的に制限したりする変化があるだろうと予想しています。それでも llama.cpp に全面的に依存する無料 LLM 向けの薄いアプリが、ベンダーロックインを作るのは難しいでしょう。機能よりオープンソースを優先するなら、私も ollama をおすすめします
    • セットアップが最も簡単なのはこれです: https://faraday.dev/
      技術的な質問には、今は Wizard が主流だと思います
    • 「最高」が何を意味するかによります。可能な限り最速の最先端推論という意味なら、4090 上の ExLlama または ExLlamaV2 です
  • ollama はローカルのオープンソース LLM を実行するには本当に満足なのですが、Whisper や最新のオープンソース 音声合成モデル については、それに相当するものは何でしょう? Whisper をローカルでそれほど簡単に設定できるプロジェクトはよく知りません

  • これで何ができるのか、簡単に説明してもらえますか?チャットの文脈を学習して維持しながら、何か 長期記憶のようなものを蓄積していけるのでしょうか?

    • LLM の専門家ではありませんが、私の理解では 音声認識 → Llama → 音声合成をサードパーティのサーバーではなく、自分の PC で動かす構成です
      LLM のコンテキスト制限は、ユーザーが選んだモデルと設定によって変わります。たとえば Llama 2、Wizard Vicuna など、どのモデルを使うか、コンテキストウィンドウをどう設定したかによって異なります。LLM はユーザーに「答える」というより、ユーザーと有用な assistant の間の会話履歴において最もありそうな次の内容を予測し、その結果として有用な assistant のふりをすることに成功し、実際に有用な assistant になる、という形なので混乱しがちです
      パイプラインを変えれば、そうした動作も可能になりそうです。構造が 音声認識 → Wrapper[Llama] → 音声合成 になり、Wrapper が Llama にやるべきことをさせつつ、入力テキストに追加処理をかけられるなら面白くなります
      Wrapper は会話を分析して、「この人の名前は Bob、男性、35歳、犬が好きで整理された状態を好み、午後5時に娘へ電話するリマインダーを望んでおり、南極マフィアの潜入工作員で、強いポーランド訛りで話してほしいと思っている」といった重要な要素を抽出し、それに応じて動作できます
      たとえば HomeAssistant 経由で午後5時のリマインダーを作成し、音声合成エンジンをポーランド訛りに設定し、以後の実行時の開始会話履歴を修正できます。内部チャット会話に人名を入れ、次の会話の事前紹介に興味や性格を圧縮して提供する、といった形です
      こうすれば、他のツールが実行するアクションを通じてインタラクティブ性が生まれ、次の会話履歴を修正することで連続性も作れます
  • これは本当に強烈な ELIZA 感があります