有料の音声認識サービスを自作で置き換えた話|内科医のAI活用
開業当初から、診察中の会話を音声認識してカルテに落とすサービスを使っていました。マイクで拾った音声をクラウドに送り、文字起こしとSOAP整形をして返してくれるもので、使い勝手は問題ありませんでした。実用レベルとしては十分です。
それでも置き換えたのは、「自由度」と「コスト」が理由です。今回はその経緯を書きます。
なぜ置き換えたのか
一番の動機は、自由度でした。
たとえば、看護師用に「S(主訴)とO(バイタル)だけ出力するモード」を作りたい。SOAPの整形プロンプトを自分好みにチューニングしたい。音声認識のエンジン自体を新しいものに差し替えたい。
ベンダーのサービスだと、こういうことができません。要望を出して対応を待つしかない。自分の外来に合わせて細かく調整したいのに、手が出せない。
それに加えて、コストの問題もありました。サブスクリプション型のサービスなので、使い続ける限り毎月固定で費用がかかります。自前でやれるならやりたいと考えました。
自作版の仕組み
使ったのは、faster-whisperというオープンソースの音声認識エンジンです。OpenAIが公開しているWhisperという音声認識モデルを高速化したもので、診察室のPCに載っているGPU(RTX 3070)で動きます。
音声認識の流れはこうなっています。
- 診察中の会話をマイクで録音する
- 10秒ごとにチャンクに分割して、faster-whisperで文字起こしする
- 文字起こし結果をAI(AWS Bedrock上のClaude)に渡して、SOAP形式に整形する
- 整形された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