音声認識APIとOpenAIで「面接対策アプリ」をつくる

# 本記事の目的
事業会社に所属するDX推進担当者として、昨今のAI系のソリューションはモーダルによらず幅広くカバーしておきたい。

今回は日本語に対する精度が高い音声認識エンジン「AmiVoice API」が無償トライアルできるということで使い道について考えてみた。AmiVoice APIは日本の企業（株式会社アドバンスト・メディア）が開発しているということで、日本語認識に強みを持っているようだ。

https://acp.amivoice.com/amivoice_api/regist/?frombnr=fixbtn

音声認識エンジンの活用アイデアとして、就職活動の面接対策に使うことを考えたので、実現方法について考察してみる。

# 面接対策向けの活用
私が新卒の学生だったころ、面接対策といえば先輩や身近な大人との模擬面接だった。
大学のキャリアセンターにいる職員を相手に面接の練習をするのは気恥ずかしく、1回行っただけで二度と行かなくなったことを覚えている。

今の技術であれば、実際の人を相手にするよりも前の練習台として、生成AIを活用することは十分に可能そうだ。
<br>

有名なメラビアンの法則にも言われているように、面接で相手に与える印象は「話の内容」以上に「話し方」など態度によるところが大きい。音声認識の技術を利用すれば、話し方に関連する以下のような点を、ある程度定量的に評価できそうである。


■ 面接の中で「話し方」に関する評価
 - 話すスピードは適切か
→ 単位時間あたりに話された文字数で定量化

 - フィラー（「えー」などの無意味語）を多用していないか
→ フィラーを除いた（ケバ取り）後の文長との比較で定量化

 - 一般的ではない専門用語を多用していないか
→ 専門用語への対応あり/なしで書き起こしした時の差分で定量化

これに加えて、近年急速に進化が進んでいる生成AIを組み合わせることで、発話内容も踏まえた面接の総合的な評価が可能になる。

# アプリの構想

アプリの全体像は以下のようなもの。
Azure OpenAIをAI Searchで検索拡張生成（RAG: Retrieval Augmented Generation）した一般的な構成に加えて、入力した音声をテキストに変換するためのAmiVoice APIと、事前に履歴書などを構造化するためのDocument Intelligenceを導入する。
![スクリーンショット 2024-05-12 170119.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596092/92cbc67e-83eb-95ae-49a3-9fb52ae41023.png)

<details><summary>1. 募集要項や履歴書を登録</summary>
アプリの利用開始時に、募集要項や履歴書をPDFやWord形式でアップロードすることを想定する。このとき、Azure AI Document Intelligenceを用いてドキュメントをJSON形式に変換しておく。

この後のステップで、Azure OpenAI Service(GPT)に募集要項や履歴書の内容を読み込ませたい。そのための前処理として、いわゆる「非構造化データの構造化」を行うことが目的である。

AI Document Intelligenceでは[セマンティックチャンキング](https://learn.microsoft.com/ja-jp/azure/ai-services/document-intelligence/concept-retrieval-augmented-generation?view=doc-intel-4.0.0#semantic-chunking "セマンティックチャンキング")という考え方があり、意味のまとまり（履歴書であれば「志望動機」や「自身の強み」等のイメージ）の単位で構造化ができる。

![スクリーンショット 2024-05-12 170112.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596092/e0c6084d-0620-d8b9-b816-1ce66653b2ce.png)

</div></details>


<details><summary>2. 面接のはじめの質問を表示する</summary><div>
初回の質問文やその後のやりとりは、事前に準備したプロンプトをGPTに渡すことで実行できる。
事前に読み込んでおいた募集要項や履歴書を読み込ませることで、応募者にパーソナライズされたやりとりを行うようにする。

■ 面接のやりとりに使うプロンプトの例
>あなたは{応募先}の会社の人事部員です。
事前に与えられた{募集要項}と{履歴書}の内容をもとに、応募者との対話による面接を行ってください。面接相手の回答をもとに質問を複数回繰り返し、自社にとって有益な人材かどうかを判断してください。最後に{フィードバックの形式}にしたがって結果を返してください。
なお面接の評価にあたっては{話し方}の結果も加味し、その評価についてもフィードバックに加えてください。

![スクリーンショット 2024-05-12 170101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596092/5a551786-93a4-23ff-1ebe-02fa672b933d.png)

</div></details>

<details><summary>3. 質疑を制限時間内で繰り返す</summary><div>
アプリの利用者は、表示された質問文に対する回答を口頭で話す。
話した内容は、AmiVoice APIを用いてテキストに変換する。
さらに発話テキストに対して関連する情報をRAGで収集し、必要な情報を含めてGPTへのプロンプトの入力とする。

また最後にフィードバックを返すための情報として、やりとりの内容（発話テキスト）に加えて、上で言及した「話し方」に関連する指標（話すスピードなど）も残しておく。

![スクリーンショット 2024-05-12 170049.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596092/5305ea18-6e02-2c1b-0756-805e0df5a2b5.png)

</div></details>

<details><summary>4. 面接へのフィードバックを返す</summary><div>
GPTは事前に定義したフィードバックの形式に基づき結果をフィードバックする。
それまでにやりとりした内容や、AmiVoiceで取得した「話し方」に関する指標をインプットとすることで、総合的な評価を行う。

![スクリーンショット 2024-05-12 170031.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596092/3c907272-22fd-3ae6-1ca0-f003f3f37bff.png)

</div></details>


# おわりに
開発にあたって必要となるコンポーネントは既に揃っており、既存の仕組みを組み合わせるだけで、簡単にサービスが作れそうな実感を持った。久しぶりに少し手を動かして動くものを作ってみたいと思った。

音声会話インターフェイスはスキルを問わず誰でも使いこなしやすく、また両手が塞がっていても問題ないなど、使い勝手が良い。現状で期待できる精度を肌感で確認した上で、今後の導入検討を進めたい。
<br>

なお「面接対策アプリ」は案の定、類似サービスが2年前に既にリリースされていた。自分が就職活動をするときにあったら欲しかったサービスなので、応援したい。

https://prtimes.jp/main/html/rd/p/000000191.000060461.html