【モデル選定】 通話記録の要約にAmazon TranscribeとClaude-instantを選んだ経緯

# はじめに

こんにちは、**Airion株式会社**でインターンをしている**欄木**です。

今回、**ラクスル株式会社**さんとともに、**顧客応対電話音声を文字起こし、要約するシステム**の開発をしました。その際に、**実用化レベルとして十分な音声認識モデル・要約モデルの選定**や、**音声認識・要約の精度を上げる取り組み**を行いました。

今回のプロジェクトの総まとめを**音声モデルの選定、音声モデル及び要約モデルのチューニング**の2段階で紹介させていただきます。

# 音声認識モデルの選定

音声認識に用いるモデルを以下の5つのサービスから選定しました。
- Amazon Transcribe（Amazon）
- Azure Speech to Text（Microsoft）
- Whisper（OpenAI）
- Google Cloud Speech-to-Text（Google）
- AmiVoice（アドバンスト・メディア）

whisperとGoogle Cloud Speech-to-Textは**デフォルトでは話者認識機能が備わっていない**ため、**Pyannoteを用いて話者分離を実装**しています。


<img width=19% alt="Amazon Transcribe logo" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335213/88e1aa29-d7ed-453d-dcc8-11e03563a35c.png">
<img width=19% alt="Azure Speech to Text logo" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335213/7d061dc9-e242-582a-658f-29ccfed485a6.png">
<img width=19% alt="Whisper logo" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335213/043165fa-509f-2ba4-64ed-6744294ed020.png">
<img width=19% alt="Google Cloud Speech-to-Text logo" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335213/a4edb06f-207b-608f-a25c-2288b2998daa.png">
<img width=19% alt="AmiVoice logo" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335213/b864270d-4abe-e14a-4856-4d3eeca19646.jpeg">

評価基準としては、**音声認識の精度・処理時間・価格**などありましたが、今回は特に**音声認識の精度**について重点的に紹介します。

### アノテーション作業

会話音声は、フィラーが多く含まれることや、二人同時に発声することなどから、**正確な文字起こしが難しい**という問題があります。

そこで今回は、複数の顧客応対電話音声を文字起こしして作成されたスクリプトを元に、**再現音声を作成**することで、**正確なアノテーションがつけられた音声データを作成**しました。プロジェクト終盤で行った本番トライアルまではこれらの音声について検証を行っています。

### 認識誤りの数（CER・WER）の評価

まず、CERやWERを用いた**認識誤り数の評価**を行いました。漢字変換を含めた比較であるCER・WERに加え、**純粋に音が聞き取れたかを評価する**ために**かな変換や音素変換をした、かなCER・音素CER・かなWER**も評価しました。

https://zenn.dev/panyoriokome/scraps/d6c8b9985c4a6e

各検証音声の**CER・WER値のアノテーションデータの文字数に応じた加重平均**を以下に示します。**各セルの左右にそれぞれ話者分割をしない場合とした場合の値**を載せています。


![スクリーンショット 2024-01-26 153953.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335213/8d1b18ce-d1e8-6892-5669-70a127f65eeb.png)


CERやWERはズレの大きさを測るので、値が小さい方が高精度です。

検証の結果、話者分割無しではAmiVoiceが高精度なのですが、話者分割有りにするとAmazon Transcribe、Azure Speech to Textが高精度であると評価されました。この結果を見ると、AmiVoiceは、**純粋な音の検知は得意だが、話者分割の精度が低い**ということが分かります。

また、Whisper及びGoogle Cloud Speech to Textの**音声認識の精度が低い**のですが、これは恐らく**Pyannoteを用いた話者認識の実装の影響**であると考えられます。また、この実装故に**音声認識の処理時間がDiarization録音データの実時間を大きく超えており**、実用的では無いと判断しこれ以降の**検証対象から外しました。**

### 認識誤りの程度（BertScore）の評価

次にBertScoreを用いた**意味的な評価**を行いました。

https://scrapbox.io/evergreens/BERTScore

各検証音声の**BertScore(F値)のアノテーションデータの文字数に応じた加重平均**を以下に示します。


![スクリーンショット 2024-01-26 154003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335213/06819b0f-f84c-692b-ab9a-7bcb01e76295.png)


BertScoreは、単語ベクトル内積を取っている感覚に近く、大きさが1に近い程、高精度です。

検証の結果、**意味的な評価でも、3つのモデルの精度は大きく変わらない**ということが分かりました。


### 要約の精度（目視）による評価

最後に要約モデルを用いた検証を行いました。**文字起こしの内容に誤りが多数含まれており、さらにAmiVoice以外のモデルではフィラー除去が十分に出来ない**（詳しくは「[**フィラー除去**](#その他)」の項目に書きました。）ので、この状況でも十分な精度の要約が出来る音声認識モデル及び要約生成モデルのセットを調査しました。

認識誤り程度の評価同様に、参照文をアノテーションにしたBertScoreを用いた定量的な評価が一般的に用いられていますが、**重要な出来事のみの要約文よりも、全ての出来事を記述する方が高精度と判別される指標**となっており、更に**プロンプト指示の内容を考慮できないため**、今回は使用しませんでした。

そこで、文字起こしされた文章が**プロンプト指示の内容に沿って要約されているかどうか定性的に評価**しました。評価の結果、そこまでAPI代の高くないLLMのClaude-instantを用いても、**3モデル全ての書き起こし結果を十分に要約出来る**ことが分かりました。

### 評価項目の総まとめ

Amazon Transcribe、Azure Speech to Text、AmiVoiceの**3モデルについて**音声認識の精度・処理時間・価格のそれぞれの評価項目から見た、それぞれの音声認識モデルの性能をまとめます。**料金及び、処理時間についてはラクスルでの1日分のトライアル結果を元に、大凡の比率**を載せます。

- 認識精度
    - **3モデルの音声認識精度には大きな差が無い。** 辞書登録まで行うと、Azure Speech to Textがやや高精度か（詳しくは「[**辞書登録**](#辞書登録)」の項目に書きました。）
- 処理時間
    - **Amazon Transcribeが最短**、Azure Speech to Textが約1.8倍、AmiVoiceが約3.4倍
- 価格
    - **Azure Speech to Textが最安**、AmiVoiceが約3倍、Amazon Transcribeが約4倍
　

以上の結果を踏まえて、**音声認識モデルとしてAmazon Transcribe**を、**要約モデルとしてClaude-instant**を用いることが**決定**しました。（詳しくは[**要約モデルの選定**](#要約モデルの選定)）今回は通話終了後なるべく早く要約記録を確認したいという要望から、**処理速度を重視しています。**（因みに、BIZTELというサービスを用いて通話記録を取得しています。）


![画像3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335213/51393ad6-8f26-3d8c-ad0c-4334e9d3af6b.png)








# 音声モデル及び要約モデルのチューニング


### Claude-instantのプロンプトチューニング

プロンプトは、**タスクについての説明・入力の注意事項・出力の注意事項・出力形式の4段落で構成**されています。初めにシンプルなプロンプトを作成し、そこから**本番トライアルを繰り返して、カスタマーサポートセンター担当者さんの意見をお伺いしながら、プロンプトチューニング**を行いました。

プロンプトを長く書くほど、一つ一つの文章が無視されやすくなるので、**重要なことのみを書き、特に重要な文言は2度書く**などの工夫をしました。**最終的に採用となったプロンプト**を一部公開します。

<img width=80% alt="プロンプト" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335213/6c59ea0e-9e1b-e14c-3f5b-0303be3838cb.png">

### 辞書登録

ラクスルで扱う専門用語の多くはデフォルトでは音声認識されません。そこで、**専門用語を辞書登録することで、音声認識されるように**しました。基本的な方針としては、**印刷業界の専門用語集や、本番トライアル中に含まれていた専門用語などを登録**しています。

結果として、「入稿」や「オペレーターチェック」といった**専門用語（同音異義語も含む）が認識可能**になりました。一方で、「入稿」（⇔「入港」）などの同音異義語については、モデルがコンテクストを解釈して正しい方を選ぶ精度は高くないので、**出現頻度が高い場合のみ登録する方針**となりました。また、**語彙としてベースモデルに含まれていない単語（「ラクスル」等）は、そもそも雑音として認識され、音を聞き取らないことが多く**、この問題に関しては、辞書登録では改善できなかったです。

因みに、Azure Speech to Textでは、辞書登録によって「ラクスル」を認識出来るようになったりしました…。









# 付録

### 要約モデルの選定

会話要約に用いるモデルを以下の5つのサービスから選定しました。
- GPT-4（OpenAI）
- GPT-3.5（OpenAI）
- Claude 2（Anthropic）
- Claude-instant（Anthropic）
- Azure AI Language summarization（Microsoft）

<img width=19% alt="openai logo" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335213/3d6d2f8e-2097-5497-b8af-565b34114488.png">
<img width=19% alt="anthropic logo" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335213/35323fb8-c12e-a87f-bff4-7752d37e2f13.png">
<img width=19% alt="azure logo" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3335213/bf3e2c8a-0107-4b13-a6a5-1681c630a089.png">


**Azure AI Language summarization**は、**会話の要約に特化したサービス**であり、英語においてはGPT-4と同程度の性能をしていましたが、**日本語での精度が悪く、プロンプトによるチューニングが出来無い上に、価格もGPT-4の20倍程度**でした。

ラクスルの顧客応対電話音声は1時間を超えるものもあり、**GPT-3.5の最大トークン数16kでは一度に入力・要約することが出来ず、要約の精度が他に比べて下がって**しまいました。因みに、次に最大トークン数が小さいものは**Claude-instantの100k（バージニア北部リージョンのみ）で、7時間程度の文字起こしを入力可能**です。

また、**GPT-4及びClaude 2はClaude-instantの10倍程の料金**がかかるが、Claude-instantを用いた要約で精度が十分だと判断したため、**今回はClaude-instantを選びました。**


### その他

- フィラー除去
    - 背景：AmiVoiceにはデフォルトで高機能のフィラー除去の機能がついているが、**Amazon_Transcribe、Azure Speech to Textにはフィラー除去の機能が無い。**
    - **GiNZAやChatGPTを用いた手法**を試したが、処理時間が伸びる割に**フィラー除去の精度がAmiVoiceに比べて低かった。**
    - フィラー除去をしても、**要約タスクの精度には大きな影響は無かった。**
- 音声ファイル形式
    - 背景：音声認識モデルは、二人同時に発声したときに**片方のみが発声していると認識し、話者認識および音声認識の精度が下がることが考えられた。**
    - **上り下り分離した音声での検証**を行ったが、**価格や処理時間の倍増に見合うほど、精度が向上しなかった。**
    - 今回はモノラル音声を採用した。
- 音声認識モデルのファインチューニング
    - 背景：ファインチューニングによって、**辞書登録と同様に専門用語の認識精度が向上することや、フィラー除去の精度が向上すること**が考えられた。
    - アノテーション作業が大変なため、今回は行わなかった。