院長ブログ |

有料の音声認識サービスを自作で置き換えた話|内科医のAI活用

開業当初から、診察中の会話を音声認識してカルテに落とすサービスを使っていました。マイクで拾った音声をクラウドに送り、文字起こしとSOAP整形をして返してくれるもので、使い勝手は問題ありませんでした。実用レベルとしては十分です。

それでも置き換えたのは、「自由度」と「コスト」が理由です。今回はその経緯を書きます。

なぜ置き換えたのか

一番の動機は、自由度でした。

たとえば、看護師用に「S(主訴)とO(バイタル)だけ出力するモード」を作りたい。SOAPの整形プロンプトを自分好みにチューニングしたい。音声認識のエンジン自体を新しいものに差し替えたい。

ベンダーのサービスだと、こういうことができません。要望を出して対応を待つしかない。自分の外来に合わせて細かく調整したいのに、手が出せない。

それに加えて、コストの問題もありました。サブスクリプション型のサービスなので、使い続ける限り毎月固定で費用がかかります。自前でやれるならやりたいと考えました。

自作版の仕組み

使ったのは、faster-whisperというオープンソースの音声認識エンジンです。OpenAIが公開しているWhisperという音声認識モデルを高速化したもので、診察室のPCに載っているGPU(RTX 3070)で動きます。

音声認識の流れはこうなっています。

  1. 診察中の会話をマイクで録音する
  2. 10秒ごとにチャンクに分割して、faster-whisperで文字起こしする
  3. 文字起こし結果をAI(AWS Bedrock上のClaude)に渡して、SOAP形式に整形する
  4. 整形されたSOAPをカルテに貼り付ける

SOAP整形にはClaude Sonnetを使っています。プロンプトもモデルも自分で選べるので、整形の質を自分でコントロールできます。

医学用語の認識精度

faster-whisperには「initial_prompt」という機能があります。認識開始時に「こういう単語が出てきますよ」とヒントを与えておくものです。

ここに医学用語を60語ほど登録しています。薬の名前、検査項目、症状の名前。これだけで認識精度がかなり上がります。

「アムロジピン5mg」「HbA1c 7.2」「レントゲンで浸潤影なし」。こういった表現が、ほぼそのまま文字になって出てきます。

しかも、この辞書は自分で自由に追加・修正できます。新しい薬が出たらすぐ足せますし、自分の外来でよく使う表現を優先的に登録できます。

SOAP整形はAIの仕事

文字起こしの結果は、そのままではカルテに使えません。患者さんの発言と医師の発言が混ざっていますし、「えーと」「あのー」といったフィラーも入っています。

ここをAIに任せています。AWS Bedrock上のClaude Sonnetに、文字起こしテキストを渡して「SOAP形式に整形してください」と指示します。すると、S(患者さんが言ったこと)、O(診察所見・検査結果)、A(評価)、P(治療方針)に分けて返してくれます。

プロンプトは何度もチューニングしました。バージョンを9回重ねて、ようやく実用レベルになっています。

大事なのは、AIが出力したSOAPは下書きであって、最終的には医師が確認して修正するということです。そのまま確定することはありません。

コストの話

自作版の内訳はこうなっています。

  • faster-whisper:無料(オープンソース、ローカルPC上で動作)
  • AWS Bedrock(SOAP整形):月200〜300円程度
  • GPU電気代:無視できるレベル

月額で200〜300円。年間でも3,000〜4,000円程度です。以前の有料サービスと比べて、桁が違うコスト削減になりました。

データはどこに行くのか

音声認識の処理は、すべて診察室のPC上で完結します。音声データが外部に送信されることはありません。

外部に送信されるのは、SOAP整形のために文字起こしテキストをAWS Bedrockに渡す部分だけです。ここはZDR(ゼロデータリテンション)が適用されていて、処理後にデータは保持されません。東京リージョンで処理されます。

つまり、音声そのものはローカル完結、テキスト化されたあとのSOAP整形だけがクラウドを経由します。この切り分けは意識して設計しました。

泥臭い試行錯誤

Whisperにはモデルサイズがいくつかあります。small、medium、large。大きいほど精度は上がりますが、GPUのメモリ(VRAM)を食います。

診察室のPCはVRAM 8GBで、Whisperのlargeモデルを動かすとそれだけで3.9GB使います。同時にローカルLLMも動かしたいのですが、両方は載りません。どちらか片方ずつ排他的に使う仕組みを入れました。

チャンクの切り方も試行錯誤しました。最初は30秒チャンクにしていましたが、認識が遅れて会話に追いつかない。10秒チャンクにしたら、リアルタイムに近い感覚で文字が出るようになりました。

ナースにも展開し始めた

最近、看護師用の音声認識も動かし始めました。これがまさに、自作した一番の理由でもあります。

医師用とは別のプロンプトで、S(主訴)とO(バイタル・所見)だけを出力する看護師専用モードです。A(評価)やP(計画)は医師の仕事なので、看護師版では出しません。

ベンダーのサービスでは「看護師用にSOだけ出すモード」は作れません。自作だからこそ、プロンプトを1つ書くだけで実現できました。

おわりに

有料の音声認識サービスを、月200円の自作ツールで置き換えました。

ただ、前のサービスが悪かったわけではありません。開業初期に音声認識を導入できたのはあのサービスのおかげですし、品質も実用レベルでした。

それでも置き換えたのは、「自分で中身を理解してコントロールできる」ことに価値を感じたからです。プロンプトが気に入らなければ変える。医学用語辞書が足りなければ追加する。ナースにも展開したければ、別のプロンプトを書けばいい。エンジンごと差し替えたければそれもできる。そういう自由度が、日々の診療をじわじわと良くしていきます。

ひろつ内科クリニック受診予約はこちらから
https://wakumy.lyd.inc/clinic/hg08874

ページ上部へ戻る