colabの無料枠でLLMを用いた議事録生成をできるようにした話



![スクリーンショット 2023-09-10 190514.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909180/554b89c0-7213-4776-0a2e-11d59391aa55.png)

[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1C4h68lQ3NLDVkbci1rruF9Bn2V_bIzdd?usp=sharing)

## はじめに

最近、OPENAIのGPT3.5turboやwhisperAPIを使用した議事録生成プロダクトが登場し、その革新性に注目が集まっています。

これらの議事録生成ソリューションは、APIを使用する際に商談内容などの機密情報をOPENAI社のサーバー内で扱う必要があり、セキュリティ上の懸念がついて回りました。しかし、このプロダクトは、**GPU8GBあれば動作**し、音声データの**約1/5の時間**（※）で議事録を生成でき、クラウドやオンプレミス環境での実行が可能です。

この議事録生成AIは、音声データから文字起こし、話者の割り当て、要約までを自動的に行い、最終的に生成された議事録を提供します。これにより、会議やセミナーの記録作成が大幅に簡素化され、時間と労力を節約することができます。

この記事では、議事録AIの簡単な処理内容とcolabでの使用方法と議事録生成結果について解説します。


※　以下の実行環境で、音声データの約1/5の時間で議事録生成を確認した。
- OS: Ubuntu20.04
- CPU: Rythen7 3700X
- GPU: GEFORCE RTX2070 SUPER(8GB)
- MEMORY: 32GB

上記実行環境で、約37分のmp3を**約7分**で議事録生成が可能でした。



## 処理内容

![agenda_ai.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/909180/a598c402-4c75-91ce-e0ac-c9264a6be25d.png)


### 1. 文字起こし

WhisperXを使用して、音声データからテキストへの変換を行います。これにより、音声データを手動で文字起こしする手間が省かれ、時間と労力を節約できます。

### 2. 話者割り当て

WhisperXを使用して、音声データから話者を自動的に分離します。議事録での各話者の発言を正確に識別し、整理できます。

### 3. テキストセグメンテーション

SentenceTransformer(pkshatech/simcse-ja-bert-base-clcmlp)を使用して文章を上から順に類似度を計算し結合することで、テキストを段落に分割します。これにより、生成された議事録がより読みやすく、整理されたものになります。

### 4. 要約

LLama2 ELYZAを使用して、生成されたテキストを要約します。議事録の重要なポイントが強調され、冗長な情報が排除されます。

### 5. 文書校正

LLama2 ELYZAを使用して、生成されたテキストを文章校正します。文法エラーや誤字脱字を修正し、プロフェッショナルな議事録を提供します。


## colabでの実行方法

[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1C4h68lQ3NLDVkbci1rruF9Bn2V_bIzdd?usp=sharing)
上記ノートブックを使用して、以下の手順に従っていただければ実行できると思います。

1. ノートブックをコピー
2. ランタイプの変更をしてGPUに接続
3. huggingface tokenを用意
4. 1セル目を実行（setupに約10分くらいかかる）
5. 2セル目でhuggingfaceにログイン（※Add token as git credential? (Y/n) nと回答）
6. 3セル目を実行


※colabはセッションが切れる度にsetupの必要がある

## 議事録生成結果

議事録生成に限らずに、勉強会やゼミ、会議、などの動画や音声データからテキストベースで内容の要約を得ることが目的のときに使用できます。

以下は、社内の勉強会で「議事録AI」について発表した動画を議事録化したものです。


#### 結果の例

```markdown
 ## 基本情報
【議事名】	xxxxx 

【日　時】	2023年xx月xx日 () 

【場　所】	Meet (Web Meeting) 

【出席者（敬称略）】
- SPEAKER_01様 
- SPEAKER_02様 
## 会議の要約 
コラボの無料アカウントで議事録を生成できるようになった。
前まではダッシュを使っていたが、今回はGPUのメモリも削減できてより早い時間で議事録生成ができるようになった。
ファイルをアップロードして作成結果を見ることができる。
グラディオというサービスを使い、ノートブックを作成し、URLを共有することで、スマホなどから音声を録音して文字起こしができる。


## 会議の概要 
コラボの無料アカウントで擬似録を生成できるようになった。
前まではダッシュを使っていたが、今回はGPUのメモリも削減できてより早い時間で議事録生成ができるようになった。
会議の議事録を作成するために、ファイルをアップロードし、作成結果を見ることができ、ハンズオンのような機能は利用できません。
ファイルのアップロードには時間がかかりますが、作成結果は見えるようにしています。
グラディオというサービスを使い、ノートブックを作成し、URLを共有することで、スマホなどから音声を録音して文字起こしができる。
セキュリティについては保証できないので、使い方は注意が必要である。
 特にない場合は閉じる。



## 会議の流れ 
- [SPEAKER_02さん] 

では始めていきます コラボの無料アカウントで 擬似録を生成できるようにした話という題で発表させていただきます
もともと 擬似メモ作成AIを作っている話っていうのが 昨年末に発表させていただいたんですけどそこで話していた 
擬似メモ作成AIのアップデート版についての発表となりますえっとそうですね 前まではその差分として前まではダッシュを使っていたんですけど
今回グラディオを使ったという点と前までその日本語の要約っていうのを結果出すのに
イスパー側で日本語の音声を英語に翻訳してから英語で要約を結果を出してあげるみたいなその遠回りなことをしていたところを近年のそのLLMの発達にそうですね恩恵を得て 
LLM を使って 要約できるようになったことでGPUのメモリも削減できて より早い時間で議事録生成ができるようになったという内容になっています
年度末で発表した時については まだChat GPT 3.5 Turboが出始めか出てないかぐらいだったんですがその後にOpenAIのGPT 3.5 Turboだったり Whisper APIだったりが出始めていてですね 
ギロック生成AIをAPIで作成するっていうところを 誰かしらが木板に上げているのを見てそういう時代になったなと思って 一旦開発をやめていたんですが
最近 そのElizaのLLM2の7ビリオンの日本語対応のLLM2というのが出ましてこれを使えば日本語から直接要約ができるなと思いまして今回アップデートに乗り切ったという感じでございます
この記録作成AIについては Googleコラボのノートブック上で実行可能でしておそらくここまで早くはならないのかなとは思うんですが一応音声データよりも短い時間で 記録生成っていうのはできるようになっています
一応私の実行環境では 37分のMP3を7分で記録生成っていうのが可能でした細かい処理内容について ざっと説明させていただくんですがまずMP3だったり 動画形式のMP4だったりWebRed形式のWebの音声データだったり 
動画だったりをこのアプリ ここのインターフェースのところで入れてもらいます入れてもらった後に 内部的にリスパーXっていうライブラリで文字起こしと話者の割り当てっていうのを 
行ってあげていますでこのウィスパーXっていうのは ウィスパーとパイアノートのダイアライゼーションっていうその2つのライブラリとさらに 
そのウェーブトゥーベクターをこのウィスパーXを作った本人が組み合わせてあげて 話者割り当てと文字起こしっていうのを内部一つのライブラリーで やってあげているようなライブラリーになっています
それに入れてあげることで 文字起こしとワシャリアデッドというのを実現しています文字起こしされたものに関しては センテンストランスフォーマーで文書の段落分割をしています 
センテンストランスフォーマーを使ってやっている理由に関しては文を段落分けしてから 要約をしている理由としては要約する際に文章が長すぎると 
入力図として入りきらないので何かしらの方法で分割してあげる必要があるから 段落ごとの分割というのをしていますある程度その意味を持ったまとまりにしたいので 
センテンストランスフォーマーで文の上から順に類似度が高いものを 1つのブロックというふうにしてあげてブロック単位で要約してあげることで 要約結果っていうのを出すようにしてあげています
要約文章構成っていうのをElizaの開発した LLMA2の7ビリオンのモデルに入れているんですがここではその要約と一緒に 文章の構成っていうのも行っています
この文章の構成については 前回までできていなかったので新しくアップデートされた点なのかなとは思いますねで 要約に関しては 読んで字のごとく要約をしてあげているんですが
先ほど 段落ごとに要約結果を 出してあげると言ったんですがその段落ごとに出た要約結果っていうのは 文の繋がりというのがないのでこの文章構成のフェーズで 
ちゃんと意味がつながる文章に構成してあげるように 改変してあげるというフェーズをかましてあげてますつまり そのLLM A2を2回入れてあげてるような状態ですそうですね 
一番最初にやろうと思っていたんですが一応 こんなインターフェイス が出てきて 入力したものに対してアップロードをされて 議事録の作成結果っていうのが見えるようになっているんですが 
少し時間がかかるので ハンズオンみたいなのができないので 作成結果ができるまでっていうのを 一番最初にやろうと思っていました このアップローディングっていうのも 少し時間はかかります
ファイルの重さには依存するんですが一応 あれですね これが処理の 内容 先ほどまでのようやく文書構成までが処理の内容というふう になっていて 
実際に使うときは こういうふうに立ち上げてもらったものに対して 入力 音声データだったり 動画データだったりを入れてあげて パラメータについて調整してあげて
実行ボタンを押すんですがパラメータここでやっているのが音声の前処理するかどうかっていうのと 序盤をカットするか終盤をカットするかみたいなのを決定できるようにしてるんですが
前処理自体については喋っていない期間だったりをカットできるような前処理っていうのを実行できるように 選択できるようにしていますその前処理の中には 
一番最初のオープニングの挨拶だったりとか 最後の方の締めの挨拶だったりをそうですね ワッシャーの割り当てをしなきゃいけないので 
最初と最後だけありがとうございましたみたいな感じで喋ってる部分をカットしたいっていった時に カットするための機能としてこれらは入れています
会議で話したであろう最小人数 最大人数っていうのは適切に設定していただくと話者の割り当てっていうのが 上手にいくかなと思います
これ実行してしばらく待つ必要があるんですがですねちょっとその間に説明の方を 進めていきたいと思います実際にその実行結果っていうのが 
どのようになるのかについて説明します今回 前回もそうなんですが シルガネ工業FMの私が興味あるなと思ったタイトルのものを適当に引っ張ってきて
議事録生成させてみましたここからが実行結果なんですが 後ほど出てきたものについてはお見せできたらなと思いますこんな感じでようやくと概要と会話の流れというふうになって
誰がいつ誰がいつという 誰が喋って それに対して誰が喋ってっていうのが分かるような感じになっています概要と要約の違いなんですが 
概要については先ほど段落ごとに要約してあげてその要約結果の文に対して文章の構成をするというお話をしたんですがそれをしたのが概要となってます
この概要に対してさらにその要約してあげたのが会議の要約というふうにしてあげていますこういうふうにした理由に関してはその会議の概要について見ていただくと分かるんですが
若干長いなと私は思いましてもっとぎゅっと要約してくれればいいなと思って要約っていうのをさらにもう1段階かましてあげたという意図がありますそうですね 
ある程度その話者の割り当てというのも うまくいってはいるんですがよいしょよいしょでそうですね これはうまくいって...あ こういうところですね 
例えばこのコスパよく忘れさせるとかっていう文の区切れっていうのがあると思うんですけど そこら辺をうまく判別できないことっていうのがあるので前の人が喋ってる内容が 
次の人が喋ってる内容に若干組み込まれてしまうってことが多々ありますねただそういったところを除いては ある程度いい範囲でいい感じでその和写の割り当てっていうのが 
できてるんじゃないかなというのがそう主張になっていますねそうですね 前回テキスト形式で出力をしていたんですけどマークダウン形式で議事録生成を できるようになってたためプレビューで見てあげれば
それっぽいものにはなるようになりましたですね まだかかってますね多分 あと3分とかかかるのかなとは思うんですけど
今これ計算させてるのその会社のサーバーとかではなくて今の私の自前のパソコンで計算させていて会社のパソコンから私の自前のパソコンにアクセスしているという形になってるんですけど
これ自体ポートを開けてどうとか危険なことをしているわけではなくてGladioの機能を使って実現しているものでしてグラディオンのシェア機能というのがありまして
シェアイコールトゥルーというふうに挙げるとグローバルで共有できるような機能があるんですねそれ自体使ってあげるとそのURLにアクセスした人が誰でもそこにアクセスできるようになる
という感じでして例えばですけどこっちで実行してるんですけどこっちでこうやって新たにアクセスしてあげるみたいなことも可能でしてこのURLさえ分かれば 
パソコンが手元になくてもスマホだったりとかiPadとかでも 実行が自体はできるので簡易的なウェブアプリケーションみたいな 使い方ができるので出先で音声を録音して 
それの疑似録 文字起こしが欲しいなといったときにこのURLを自分のパソコンでグラディを立ち上げてあげてそのURLに出先のスマートフォンだったりiPadだったりタブレットだったりとかでアクセスしてあげて音声データをぶち込んであげればすぐに議事録っていうのが作成できるような形になっていますあくまでネットのセキュリティについては保証できないので使い方は要注意だなとは思うんですが個人で使う分にはかなりいいのかなと思います
えーですね ちょっと時間がかかっているんですが 500秒ぐらいかかるんですかねちょっと... あ そうですね えーっと で実際ノートブックを作っていて ここで立ち上げることも可能ではあるんですが2つほど注意点がありまして 1つはハギングフェイスのアクセストークンっていうのが必要なので つまりハギングフェイスのアカウントを作って トークンっていうのを自分で生成してあげなければ
ノートブックを使うことができません理由としてはそのハギングフェイスのトークンでハギングフェイスにログインしている人じゃないと利用できないモデルっていうのを内部で使用しているからですもう一つなんですがセットアップっていうのをここでやってるんですけどこれ自体 いろいろなライブラリを インストールする必要があるのでこのセットアップ自体で かなり時間が取られるところがありますね
かつコラボなので セッションが切れてしまうとまた再度これを実行し直さなければいけない っていうのがありましてそこが若干ストレスかなと思うのでDockerかなんかで自分のサーバー 
だったりとか 立ててあげて使うのが一番理想的なのかなとは思いますね 多分今できたのかな 入ってましたね話があっち行ったりこっち行ったり してるんですけど
実行ボタン押してあげて 実行完了してあげると こういうふうにダウンロードアジェンダのところだったり ダウンロードオールリザルツのところでダウンロードができる 
ようになりますアジェンダ自体どういったものができているのかっていうのも確認できる機能をつけていて
この作成結果のタブを押してもらえるとこういうふうにどういった結果が得られているのかっていうのがこういうふうに見れるようになっています若干そうですね 
なんかこんにちはとかそういうところを省きたいなって思ったらこういう前処理のところで大体1分までなんですけど最初の方を省いてあげるっていったところで
調整してあげて再度実行してあげれば自分の理想的なものが得られるのかなと思います使い方 すごく簡単なものは書いてはいるんですけどRead Me のところを読んでいただければいいのかなと思います 
- [SPEAKER_01さん] 

一回ザーッと話はしましたが 何か質問とありますでしょうか質問よろしいですか?これでデータ入れてから記事録を作るまでの間ってデータが外部に抜かれるというか 参照されてしまうみたいなことはないっていう感じですか?そうですね 
- [SPEAKER_02さん] 

今このグローバルで立ち上げてつまりその私のパソコン私のその自宅にあるパソコンとこの会社のパソコンっていうのは多分グラディオのネットかなんかどこを経由しているかがないですけど
経由している状態なのでこの使い方を何か機密な動作でやるのは望ましくはないかなと思います 
ただそのローカルホストで立ち上げているあげる分に関してはそのローカルで済む話なのでどこかに抜かれる話はないのかなと思いますねスキル 
そうですねグラディオのシェアがどうなっているのかあまり詳しくないので厳密なことができないはいなんか議事録だと結構機密情報とか 入ることも多いのかなと思ったので
そこら辺はローカルでやる分には 大丈夫そうみたいなイメージですかねそうですね 本当はその社内のサーバーか何かで 立ち上げてあげてVPNでローカルホストで接続できるようにしてあげるっていうのが 
一番安全なやり方なのかなとは思ってはいますねはい ありがとうございますはい 他何かありますでしょうか特にないようであれば これで 閉じてしまうかなと思うんですがそうですね 
すいません 1個いいですかはい ありがとうございます 実際にこれを使いたいってなったときにはすいません 初めのほう入ってなかったんですけれどもこのページに載っているようなところからこうすればもう使える状態にあるみたいなことなんですか?
一応このノートブックにアクセスしていただいて多分その編集権限は付けてないのでファイルでノートブックをコピーしていただいてコピーしていただいた後に 


```

後ろで文字起こしが途中になっているのは、音源の後ろ部分を60秒程カットした影響だと思います。
あと、最後の方でもう一人別の方に質問をもらっていたのに、そこが反映されていないですね...

ただ、要約や概要など内容が端的にわかるため個人的にはよくできたと思っています！



## まとめ


このプロダクトをクローンして実行する場合は、以下のリポジトリをご参照ください。

makeコマンドで手軽にコンテナ環境を構築できるようにしているので、ローカルやクラウドで簡単に利用可能だと思います。

https://github.com/jumtra/agenda_maker/tree/master