Finvoc2vec
F
Finvoc2vec
waivによって開発
企業開示シナリオ向けに設計された音声トーン分類器、Wav2Vec2アーキテクチャに基づく2段階トレーニング
ダウンロード数 17
リリース時間 : 12/18/2024
モデル概要
このモデルは決算電話会議における音声感情を分析し、ポジティブ、ネガティブ、ニュートラルのトーンを識別
モデル特徴
企業シナリオ最適化
決算電話会議の音響特徴に特化して最適化
2段階トレーニング
自己教師あり学習で開示環境に適応後、教師あり学習で感情分類
高品質アノテーションデータ
5,000件の手動アノテーション付き電話会議音声サンプルでファインチューニング
モデル能力
音声感情分類
オーディオ特徴抽出
企業音声分析
使用事例
企業分析
決算電話会議感情分析
決算電話における経営陣の音声トーン感情を分析
ポジティブ、ネガティブ、ニュートラルの3つの感情状態を識別可能
投資家感情モニタリング
音声分析により経営陣の自信レベルを評価
定量化された感情確率分布を提供
🚀 FinVoc2Vec
FinVoc2Vecは、実世界の企業開示に特化した声調分類器です。このモデルは、まず自己教師付き事前学習を行い、50万の無ラベル会議コール音声サンプルを使ってベースモデルを開示環境の音響特性に適応させます。次に、教師付き微調整を行い、人間がラベル付けした声調の表現を学習させます。具体的には、会議コールから5,000の言語的に中立な音声録音を含むコーパスを構築し、各文にポジティブ、ネガティブ、ニュートラルの声調ラベルを手動で付けています。
🚀 クイックスタート
このセクションでは、FinVoc2Vecの基本的な使い方を説明します。
✨ 主な機能
- 企業開示の音声データに特化した声調分類が可能です。
- 自己教師付き事前学習と教師付き微調整を組み合わせた学習方法を用いています。
📦 インストール
本READMEにはインストール手順が明示されていないため、このセクションをスキップします。
💻 使用例
基本的な使用法
デモデータセットを使用した例です。
import torch
from datasets import load_dataset
from transformers import Wav2Vec2FeatureExtractor, AutoModel
import numpy as np
device = "cuda" if torch.cuda.is_available() else "cpu"
# load model and feature extractor
model = AutoModel.from_pretrained("waiv/FinVoc2Vec", trust_remote_code=True).to(device)
feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained("waiv/FinVoc2Vec")
# load dataset
demo_dataset = load_dataset("waiv/FinVoc2Vec_demo")
arrays = [demo['audio']['array'] for demo in demo_dataset['test']]
# extract features
features = feature_extractor(
arrays,
sampling_rate=feature_extractor.sampling_rate,
padding=True,
truncation=False)
inputs = torch.tensor(np.array(features['input_values']), dtype=torch.float32).to(device)
attention_mask = torch.tensor(np.array(features['attention_mask']), dtype=torch.long).to(device)
prob_dict = {}
with torch.no_grad():
model_output = model(inputs, attention_mask=attention_mask)
logits = model_output['logits'].to(torch.float32).to('cpu')
probs = torch.nn.functional.softmax(logits, dim=1).numpy()
label_to_id = model.config.label2id
for i, id in enumerate(demo_dataset['test']['id']):
prob_dict[id] = {'prob_negative': probs[i, label_to_id['negative']],
'prob_neutral': probs[i, label_to_id['neutral']],
'prob_positive': probs[i, label_to_id['positive']]}
高度な使用法
音声ファイルを使用した例です。
import torch
from torch.utils.data import DataLoader
from datasets import load_dataset
from dataclasses import dataclass
from typing import Dict, List, Optional, Union
from transformers import Wav2Vec2FeatureExtractor, Wav2Vec2Processor, AutoModel
import torchaudio
device = "cuda" if torch.cuda.is_available() else "cpu"
@dataclass
class DataCollatorWithPadding:
processor: Union[Wav2Vec2Processor, Wav2Vec2FeatureExtractor]
padding: Union[bool, str] = True
max_length: Optional[int] = None
pad_to_multiple_of: Optional[int] = None
def __call__(self,
features: List[Dict[str, Union[List[int], torch.Tensor]]]
)-> Dict[str, torch.Tensor]:
input_features = [{"input_values": feature["input_values"]} for feature in features]
# trunc and pad max lengths, get attention mask
batch = self.processor.pad(
input_features,
padding=self.padding,
max_length=self.max_length,
pad_to_multiple_of=self.pad_to_multiple_of,
return_tensors="pt")
return batch
def preprocess_audio(batch: Dict,
feature_extractor: Wav2Vec2FeatureExtractor = None,
max_duration: Optional[float] = 20.0):
target_sr = feature_extractor.sampling_rate # 16kHz
audio_arrays = []
for path in batch['path']:
audio_array, sampling_rate = torchaudio.load(path)
# split to mono if multiple channels exist
if audio_array.shape[0] > 1:
audio_array = torch.mean(audio_array, dim=0, keepdim=True)
# resample audio
resampler = torchaudio.transforms.Resample(sampling_rate, target_sr)
audio_array = resampler(audio_array).squeeze().numpy()
audio_arrays.append(audio_array)
# set params for feature extractor
max_length = int(target_sr*max_duration) if max_duration is not None else None
# use feature extractor to normalize inputs and trunc data
result = feature_extractor(
audio_arrays,
sampling_rate=target_sr,
max_length=max_length,
truncation=bool(max_length))
return result
# load model
model = AutoModel.from_pretrained("waiv/FinVoc2Vec", trust_remote_code=True).to(device)
# load feature extractor
feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained("waiv/FinVoc2Vec")
# load dataset
# NOTE: Needed feature: 'path' -> path to the audio-data
test_dataset = load_dataset(r'path/to/dataset')
# preprocess audio data
test_dataset = test_dataset.map(
preprocess_audio,
batch_size=1000,
batched=True,
num_proc=4,
fn_kwargs={'feature_extractor': feature_extractor,
'max_duration': 20.0})
data_collator = DataCollatorWithPadding(feature_extractor)
data_loader = DataLoader(
test_dataset,
batch_size=16,
shuffle=False,
collate_fn=data_collator,
num_workers=4)
with torch.no_grad():
for batch in data_loader:
attention_mask, inputs = batch['attention_mask'], batch['input_values']
inputs.to(device)
attention_mask.to(device)
model_output = model(inputs, attention_mask=attention_mask)
logits = model_output['logits'].to(torch.float32).to('cpu')
probs = torch.nn.functional.softmax(logits, dim=1).numpy()
label_to_id = model.config.label2id
dict_probs = {f'prob_negative': probs[:, label_to_id['negative']],
f'prob_neutral': probs[:, label_to_id['neutral']],
f'prob_positive': probs[:, label_to_id['positive']]}
モデルの登録
ローカルのAutoClassにモデルを登録する方法です。
from transformers import AutoConfig, AutoModel
# download model and config
finvoc2vec_config = AutoConfig.from_pretrained("waiv/FinVoc2Vec", trust_remote_code=True)
finvoc2vec_model = AutoModel.from_pretrained("waiv/FinVoc2Vec", trust_remote_code=True)
# register model and config for automodel class
AutoConfig.register("finvoc2vec", FinVoc2VecConfig)
AutoModel.register(FinVoc2VecConfig, FinVoc2Vec)
📚 ドキュメント
追加リソース
🤗 Hugging FaceのWav2Vec2モデルの説明を参照すると、追加のリソースや設定情報を得ることができます。
📄 ライセンス
- このモデルはWav2Vec2(Apache-2.0)をベースにした派生作品です。
- このモデルはCreative Commons Attribution Non Commercial 4.0ライセンス(CC - BY - NC - 4.0)の下で提供されています。
論文
BibTeX
@article{ewertz2024,
title={Listen Closely: Measuring Vocal Tone in Corporate Disclosures},
author={Ewertz, Jonas and Knickrehm, Charlotte and Nienhaus, Martin and Reichmann, Doron},
year={2024},
note={Available at SSRN: \url{https://ssrn.com/abstract=4307178}}
}
Mms Lid 126
Facebookの大規模多言語音声プロジェクトを基にファインチューニングした言語識別モデルで、126言語の音声分類をサポート
音声分類
Transformers 複数言語対応

M
facebook
2.1M
26
Wav2vec2 Base Finetuned Speech Commands V0.02
Apache-2.0
このモデルはfacebook/wav2vec2-baseをspeech_commandsデータセットでファインチューニングした音声コマンド認識モデルで、精度は97.59%です。
音声分類
Transformers

W
0xb1
1.2M
0
Whisper Medium Fleurs Lang Id
Apache-2.0
OpenAI Whisper-mediumをファインチューニングした音声言語識別モデルで、FLEURSデータセットで88.05%の精度を達成
音声分類
Transformers

W
sanchit-gandhi
590.30k
14
Wav2vec2 Large Robust 12 Ft Emotion Msp Dim
このモデルはWav2Vec2-Large-Robustをファインチューニングして訓練され、音声感情認識に使用され、覚醒度、支配度、価値の3つの次元の予測値を出力します。
音声分類
Transformers 英語

W
audeering
394.51k
109
Lang Id Voxlingua107 Ecapa
Apache-2.0
SpeechBrainフレームワークとECAPA-TDNNアーキテクチャに基づく音声言語識別モデルで、107言語の識別と音声埋め込みベクトル抽出をサポートします。
音声分類
PyTorch 複数言語対応
L
speechbrain
330.01k
112
Ast Finetuned Audioset 10 10 0.4593
Bsd-3-clause
オーディオスペクトログラムトランスフォーマー(AST)はAudioSetでファインチューニングされたモデルで、オーディオをスペクトログラムに変換後、ビジョントランスフォーマーを適用してオーディオ分類を行います。
音声分類
Transformers

A
MIT
308.88k
311
Whisper Small Ft Common Language Id
Apache-2.0
openai/whisper-smallをファインチューニングした汎用言語識別モデルで、評価データセットでの精度は88.6%
音声分類
Transformers

W
sanchit-gandhi
256.20k
2
Emotion Recognition Wav2vec2 IEMOCAP
Apache-2.0
ファインチューニングされたwav2vec2モデルを使用した音声感情認識で、IEMOCAPデータセットでトレーニング
音声分類
PyTorch 英語
E
speechbrain
237.65k
131
Ast Finetuned Audioset 14 14 0.443
Bsd-3-clause
AudioSetデータセットでファインチューニングされたオーディオスペクトログラムトランスフォーマーで、音声をスペクトログラムに変換後、ビジョントランスフォーマーアーキテクチャで処理し、音声分類タスクで優れた性能を発揮します。
音声分類
Transformers

A
MIT
194.20k
5
Wav2vec2 Large Xlsr 53 Gender Recognition Librispeech
Apache-2.0
Librispeech-clean-100データセットで微調整された性別認識モデルで、テストセットでF1スコア0.9993を達成
音声分類
Transformers

W
alefiury
182.33k
42
おすすめAIモデル
Llama 3 Typhoon V1.5x 8b Instruct
タイ語専用に設計された80億パラメータの命令モデルで、GPT-3.5-turboに匹敵する性能を持ち、アプリケーションシナリオ、検索拡張生成、制限付き生成、推論タスクを最適化
大規模言語モデル
Transformers 複数言語対応

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-TinyはSODAデータセットでトレーニングされた超小型対話モデルで、エッジデバイス推論向けに設計されており、体積はCosmo-3Bモデルの約2%です。
対話システム
Transformers 英語

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
RoBERTaアーキテクチャに基づく中国語抽出型QAモデルで、与えられたテキストから回答を抽出するタスクに適しています。
質問応答システム 中国語
R
uer
2,694
98