4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OpenAIのWhisper API, Llama-index, GPT-4を使って、音声データから文字起こしと要約を作成する

Last updated at Posted at 2023-09-02

はじめに

'OpenAIのWhisper APIとGPT-4を使って、音声データから文字起こしと要約を作成する' の記事では、文字起こししたテキストデータを直接GPT-4に渡してい要約を行っています。この場合、クエリと回答のトークン数が8,192という制約があります。文字起こしデータが長文となった場合でも対応できるよう、Llama-indexでベクトル化してインデックスを作成し、クエリを処理できるようにしてみました。
タイトルに要約を作成すると書いていますが、どのような回答を得たいかはクエリ次第なので、要約以外も出力できます。

参考情報

環境構築

環境

$ python3 -V
Python 3.10.12

事前にffmpegのインストールが必要です。

$ ffmpeg -version
ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers

必要なPythonパッケージのインストール

$ pip install --upgrade pip
$ pip install openai pydub sentence_transformers tiktoken llama-index==0.8.13

インストールされた主なライブラリは以下のとおりです。

$ pip freeze | grep -e "openai" -e "pydub" -e "sentence_transformers" -e "tiktoken" -e "llama-index" 
llama-index==0.8.13
openai==0.27.9
pydub==0.25.1
tiktoken==0.4.0

Pythonコード

実行例

Gitリポジトリをcloneします。

git clone https://github.com/revsystem/llamaindex-with-whisper.git
cd ./llamaindex-with-whisper

文字起こし

Pythonファイルと同じディレクトリ内に動画ファイル(sample.mp4)を配置し、以下の様に実行します。
./data/documents 以下(ディレクトリがなければ自動作成)に文字起こし結果が出力されます。出力ファイル名はtranscription_20230821203508.txtという形式です。

python3 ./transcriptin.py -f ./sample.mp4

ベクター化とインデックス作成

./data/documents以下の文字起こし結果をベクター化し、インデックスを作成します。 ./data/indexes/index.json 以下(ディレクトリがなければ自動作成)にインデックスが作成されます。

python3 ./transcriptin.py -i

クエリ実行

クエリを実行する際は引数なしで実行します。

python3 ./transcriptin.py

入力プロンプトが表示されるので、レポート文章に見出しをつけたり、箇条書きにして議事録を作成して下さい。などクエリを入力します。

Input query: 

レスポンス

Query:に入力したクエリ、Answer:に回答が出力されます。回答は、ChatGPTのようにストリームで文字が1文字ずつ出力されます。そのほかに、コサイン類似度や回答作成の際に参照した箇所が出力されます。

==========
Query:
<QUERY_YOU_INPUTED>
Answer:
<ANSWER_FROM_AI>
==========

node.node.id_='876f8bdb-xxxx-xxxx-xxxx-xxxxxxxxxxxx', node.score=0.8484xxxxxxxxxxxxxx
----------

Cosine Similarity:
0.84xxxxxxxxxxxxxx

Reference text:
<THE_PART_AI_REFERRED_TO>

GTP-4が処理した結果は、Pythonファイルと同じディレクトリ内に出力されます。出力ファイル名はtranscription_summary_20230821203603.txtという形式です。

終了

クエリを終了する場合は、exitと入力します。

Input query: exit

Setting global configuration

インデックス作成やクエリの際に都度service contextを呼び出さなくて済むようにset_global_service_contextを使用しています。

多言語埋め込みモデル

デフォルトの埋め込みモデルtext-embedding-ada-002を使用する場合、埋め込みAPI費用が発生するため、API費用がかからず且つ性能向上が見込めるMultilingual-E5-largeを使用しています。

Text Splitterなどの設定

Text Splitterは、Llama-indexのデフォルトのTokenTextSplitterを使用しています。chunk_sizechunk_overlapは、日本語の文字起こし結果でインデックスを作成した際に回答の精度がよかったときの値を使用しています。試したパターンが少ないので、PromptHelperの設定と併せて他に最適なものがあると思います。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?