生成AIに会議議事録を作成させてみた

この記事は[リクルートICT統括室 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/recruit-ict) 4日目の記事です。

## はじめに
ICT統括室サービス企画部の岩渕です。リクルートでは、DX推進・ICT施策の企画を担当しております。

この記事では、生成AIを使って会議議事録を作成してみた結果と、そこからの学びや気づき、今後の方向性についてお話ししたいと思います。

これから生成AIを使って会議議事録作成にトライされる方の参考になれば嬉しいです。
<br>

※業務においては「[リクルートAI活用指針](https://www.recruit.co.jp/privacy/ai_policy/)」に基づいて生成AIを利用しています。

:::note info
**この記事を読んでわかること**
- Teamsトランスクリプション（文字起こし）とGPT(GPT3.5 16K)を組み合わせた議事録作成の手順がわかる。
- 上記組み合わせで、「会議参加者が議事録を一から作成するよりは工数がかからないレベル」の会議議事録が作成される可能性が高い会議パターンがわかる。
:::


## 検討の背景
2022年11月30日にChat GPTが公開されたことで、AIの活用可能性が急速に広がるとともに、誰でも気軽に生成AIを利用できるようになりました。この流れを受けて、当社では、新たな技術の活用の道を見出し、利活用検証、学びの機会を提供していくために、ChatGPT汎用利用プラットフォームを2023年7月より全社利用できるようにしました。

その中で、「会議議事録を生成AIで作成できるようになれば全社で生産性爆上がりでは！？」と考え、社内でも同様のニーズがあったことから、生成AIが作成した議事録は実用的なレベルなのかどうか実現性検証を実施するに至りました。

以降で詳細説明していきます。


## 前提条件
- 作成したい議事録
　「参加者」「会議の要約」「決定事項」「Todo」を議事録の形式とする会議を対象としました。（誰が何を発言したかを残す会議はここでは想定しません） 
- 使用ツール
　今回の検証では社内ですぐに使用できる環境を組み合わせて検証を実施しました。使用したツールは以下のとおりです。

<table border="1">
 <tr>
  <td >会話内容の文字起こし</td>
  <td>Teamsトランスクリプション</td>
 </tr>
  <td>議事録作成・要約</td>
  <td>Chat GPT汎用利用プラットフォーム<br>※当社利用環境（ChatGPT汎用利用プラットフォーム）で使用できるGPTのバージョンのうち、最も文字数上限が大きいGPT3.5 16kを今回は使用しました。</td>
 </tr>
</table>

## 検証方法
### 検証で使用する会議
実際に社内で実施された会議の文字起こしテキストを用いて、検証を実施しました。会議の時間や議題数によって精度が異なることが想定されたため、複数パターンの会議で検証を実施しました。

| No | 特徴 | 会議時間 | 文字起こしテキストの文字数 |
|:-:|:-:|:-:|:-:|
| 会議A  | 議題は1案件、ファシリ*なし、専門用語・略語多め | 27:05  |12,627 |
| 会議B | 議題は5案件、ファシリ*あり、専門用語・社内用語あり | 1:10:25  | 37,827 |
| 会議C | 議題は1案件、ファシリ*あり、専門用語少な目 | 31:09  |  15,594 |
| 会議D | 議題は3案件、ファシリ*なし、専門用語多め | 1:01:25  | 31,246  |

*　決定事項、Todoを整理して発言するファシリテータがいる会議を「ファシリあり」と定義



### 評価方法
評価は、直感的な評価確認ができるよう、手作業で作成した議事録を正解とし、作成された議事録にどれだけ手作業での修正を加える必要があるか、5段階の評価指標を設定し、実施しました。

| 評価レベル | 評価内容 |
|:-:|:--|
| 1 | **一から議事録作成したほうがいいレベル**<br>　議事録を一から作成する時間と、ツールにより自動出力された議事録に手作業で修正を加えた時間がほぼ同じ） |
| 2 | **手作業で大幅に修正が必要なレベル**<br>　議事録を一から作成するよりは効率的だが、ツールにより自動出力された議事録に対して、議事録を一から作成する時間の<ins>5～8割ほどの時間をかけて手作業で修正</ins>を加える必要あり |
| 3 | **手作業で修正が必要なレベル**<br>　議事録を一から作成するよりは効率的だが、ツールにより自動出力された議事録に対して、議事録を一から作成する時間の<ins>2～4割ほどの時間をかけて手作業で修正</ins>を加える必要あり  |
| 4 | **手作業で若干の修正を加えればよいレベル**<br>　ツールにより自動出力された議事録に対して、議事録を一から作成する時間の<ins>1割以下の時間で手作業で修正</ins>を加えれば議事録が完成するレベル  |
| 5 | **手作業による修正が必要のないレベル**  |

## 検証手順

### 全体の流れ

議事録作成まで3ステップの作業を行いました。なお、STEP3で使用したプロンプトはいくつか試したパターンの中で比較的精度が安定していた組み合わせを使用することにしました。

| No | 手順 | 検証環境 |
|:-:|:-:|:-:|
| STEP1  | 会話内容の文字起こしテキストを取得  | Teamsトランスクリプション  |
| STEP2  | STEP1のテキストを前処理  |  内製したスクリプト |
| STEP3  | STEP2のテキストを生成AIに投入  | ChatGPT汎用利用プラットフォーム  |

なお、世の中には上記手順を一気通貫で行うことができるSaaSツールもありますが、この記事での説明は割愛させていただきます。


### STEPごとの手順

#### STEP1　会話内容の文字起こしテキストを取得

会議終了後にTeamsのチャット画面から文字起こしテキストをダウンロードします。

![aa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629940/1ac2d2c1-3a4d-06ec-dc2d-d16d0cb01e84.png)

<br>


#### STEP2　STEP1のテキストを前処理

STEP1のテキストデータのうち、議事録に関係のない不要な情報を削除していきます。

GPTには入力可能な文字数制限が設けられており、この作業を実施しておくことで、GPTへの分割投入の回数を減らす（または不要とする）ことができ、またGPTが記憶できる文字数制限によるデータ欠落を防ぐことができます。

今回の検証では、機械的に削除可能な、発言時間情報（下図の赤字部分）を削除しました。
<br>

＜STEP1のテキストデータ（抜粋）＞
<table border="1">
<tr><td >
<font color="red">0:0:1.840 --> 0:0:9.340</font><br>
山田 太郎<br>
この会議、録音していいですか。<br>
<font color="red">0:0:13.150 --> 0:0:15.20</font><br>
佐藤 花子<br>
はい、お願いします。<br>
<font color="red">0:0:10.610 --> 0:0:18.230</font><br>
山田 太郎<br>
それでは始めますね。資料用意してきたので、それに沿って説明させてもらいます。<br>
</td></tr></table>


上記情報を削除するため、今回の検証用に作成したスクリプトを使用しましたが、サクラエディタなどのエディタの正規表現を使用して該当箇所を一括削除することも可能です。


正規表現例）^.*-->.*\r\n

↓こんな感じで

![aaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629940/921d065c-6c0b-5da6-6500-90ebcc1d1d81.png)


#### STEP3　STEP2のテキストを生成AIに投入

STEP2のテキストを生成AIに投入していきます。会議の出力としては「参加者」「会議の要約」「決定事項」「Todo」をできれば一括で出力したいのですが、何度か試したところ一度のプロンプトで処理しようとすると要約内容の解像度が落ちてしまうため、以下①、②の2つのプロンプトに分けて実行しました。

①「参加者名」「決定事項」「Todo」を出力するプロンプト
　#会議メモの欄にSTEP2のテキストをコピペします。

 ```
 以下の[#会議メモ]は会議音声の文字起こしデータです。
次の[#制約条件]に従って、[#会議メモ]を以下の[#形式]で要約してください。​

#形式​
・会議のタイトル
​・会議参加者
・決定事項​
・ToDo​

#制約条件
​・決定事項、Todoは重要なキーワードを取りこぼさない。
​・期日が明確に設定されている場合は、省略せず文章中に記載すること。
​・文章の意味を変更しない。名詞は言い換え・変換しない。
​・架空の参加者、表現や言葉を使用しない。​
・ToDoは以下のフォーマットに合わせること。​
　[Todo内容] ([Todoの担当者名])​

#会議メモ​
 ```

 ②「会議の要約」を出力するプロンプト
　#会議メモの欄にSTEP2のテキストをコピペします。

 ```
 以下の[#会議メモ]は会議音声を文字起こししたデータです。
次の[#制約条件]に従って、[#会議メモ]を要約してください。​

​#制約条件
・500文字以内で会議内容を要約してください。​

#会議メモ
 ```

<br>

（GPTの文字数制限により一度で入力できない場合）

入力を分割してGPTに読み込ませることで、すべての情報を反映した回答を得ることが可能です。
分割して入力する方法は以下の記事が参考になります。

https://weel.co.jp/media/prompt-technique#index_id3
https://bocek.co.jp/media/exercise/chatgpt/1331/

## 検証結果
- 会議時間30分以内、単一議題の会議では「一から人手で議事録を作成するより効率的なレベル」での精度が得られた。加えて、ファシリあり、専門用語・略語少なめの会議の場合はより精度が高まる。
- 専門用語、略語は拾えないため、手作業での修正が必要。
- （当然ですが）会議参加者は会議内で発言した人だけがピックアップされる。


| No | 特徴 | 会議時間 | 評価結果 | 詳細 |
|:-:|:-:|:-:|:-:|:-:|
| 会議A | 議題は1案件、ファシリ*なし、専門用語・略語多め  |  27:05 | <font color="red">**3**</font>  | 要約、決定事項、Todoともに6,7割方網羅されている。Todoは情報が丸められていて詳細化が必要だった。  |
| 会議B  | 議題は5案件、ファシリ*あり、専門用語・社内用語あり  | 1:10:25  | 1  |  9割以上の情報が欠落してしまった。（会議の終盤部分しか要約されていない） |
| 会議C  | 議題は1案件、ファシリ*あり、専門用語少な目  | 31:09  | <font color="red">**4**</font>  | 要約、決定事項、Todoともにおおよそ網羅されており、残る修正は略語や固有名詞の誤変換のみであった。  |
| 会議D  | 議題は3案件、ファシリ*なし、専門用語多め  | 1:01:25  | 1  | 9割以上の情報が欠落してしまった。（会議の終盤部分しか要約されていない）  |


## 結論・学びや気づき

- 生成AIは万能ではなく、現時点では最後は人力での修正が必要。
- 今回の検証環境（Teamsトランスクリプション＋GPT3.5 16k）では、以下の会議パターンで「一から人手で議事録を作成するより効率的なレベル」での精度が得られた。
    - 会議時間は30分（目安）以内（30分を超えると情報が欠落してしまう）
    - 議題は1案件
    - ファシリテータが決定事項、Todoを整理して発言する（より精度が高まる）
    - 専門用語や略語が少ない
- 一方で、上記のほか以下の課題も認識
    - ユーザが実施する作業数が多く、議事録作成まで工数が必要
    - 専門用語や略語が拾えない。
        - 略語や固有名詞多めの会議の場合は、辞書登録機能を有する文字起こしツールを使用するのがよさそう。


## 今後の予定

特定条件下においては、「一から人手で議事録を作成するより効率的なレベル」での精度が得られたものの、当社内では単一議題より複数議題の打ち合わせのほうが肌感としては数が多いため、複数議題への対応を検討していきたいと思っています。
また、議事録作成されるまでユーザが実施する作業数が多いため、一気通貫で実施できるツール導入の検討も合わせて進めていきたいと思います。

<br>

[リクルート ICT統括室 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/recruit-ict)では、リクルートの社内ICTに関する記事を投稿していく予定です。もし興味があれば、ぜひ他の記事もあわせてご参照ください。