GeminiAPIを使って音声データセットのラベル付けを行う

初めに

音声のラベル付けをする場合、LLMを使って文字お越しデータから行う or マルチモーダルを使って音声およびテキストからラベル付けをする方法になります。

今回は、GeminaiのAPIを使って音声および文字お越しデータを渡してその音声がどのような音声なのかのラベル付けをしてみます

以下で実際に試したリポジトリを公開しています

github.com

開発環境

準備

まずは環境構築です

uv venv -p 3.11
source .venv/bin/activate

また以下のドキュメントを参考にAPIの作成を行います

ai.google.dev

GeminiAPI SDKをインストールします

uv pip install -q -U google-generativeai

環境変数を取得するために、以下のライブラリも入れます

uv pip install python-dotenv

GeminiAPIを使ってラベル付けつけ

現時点では、英語の音声しか認識できないため 精度はよくないと思われます

まずはライブラリをインポートして、使用するモデルの設定を行います。

import google.generativeai as genai
import os

genai.configure(api_key=os.environ["API_KEY"])
model = genai.GenerativeModel(model_name="gemini-1.5-flash")

音声データおよびテキストは以下のようにしてAPIに渡すことができます

# 音声データを読み込む
audio_data = {
    "mime_type": "audio/wav",
    "data": pathlib.Path(audio_file_path).read_bytes()
}

# プロンプトと音声データを Gemini に渡す
response = model.generate_content([prompt, audio_data])

全体のコードは以下になります

import google.generativeai as genai
import os
from dotenv import load_dotenv
import pathlib

# .env ファイルから環境変数を読み込む
load_dotenv()
genai.configure(api_key=os.environ["geminai_api"])

# Gemini モデルを初期化
model = genai.GenerativeModel(model_name="gemini-1.5-flash")

# 文字起こしテキスト
transcription = "また、東寺のように、五大明王と呼ばれる、主要な明王の中央に配されることも多い。"  # 実際の文字起こしテキストを入力してください

# 音声ファイルのパスを指定
audio_file_path = 'input.wav'  # 実際の音声ファイルのパスに置き換えてください

# プロンプトを英語で作成
prompt = f"""Analyze the following audio and transcription text, and determine the speaker's emotion by selecting the most appropriate label from the list below:

- Angry
- Disgusted
- Embarrassed
- Fearful
- Happy
- Sad
- Surprised
- Neutral
- Sexual1  # aegi voices
- Sexual2  # chupa voices

Please provide your answer by selecting only one emotion label from the list.

Transcription text:
{transcription}
"""

# 音声データを読み込む
audio_data = {
    "mime_type": "audio/wav",
    "data": pathlib.Path(audio_file_path).read_bytes()
}

# プロンプトと音声データを Gemini に渡す
response = model.generate_content([prompt, audio_data])

# 結果を表示
print(response.text.strip())