Finvoc2vec
F
Finvoc2vec
由 waiv 开发
专为企业披露场景设计的语音语调分类器,基于Wav2Vec2架构进行两阶段训练
下载量 17
发布时间 : 12/18/2024
模型简介
该模型用于分析财报电话会议中的语音情感,识别正面、负面和中性语调
模型特点
企业场景优化
专门针对财报电话会议的声学特征进行优化
两阶段训练
先通过自监督学习适应披露环境,再通过监督学习进行情感分类
高质量标注数据
使用5,000条人工标注的电话会议语音样本进行微调
模型能力
语音情感分类
音频特征提取
企业语音分析
使用案例
企业分析
财报电话会议情感分析
分析企业管理层在财报电话中的语音语调情绪
可识别正面、负面和中性三种情感状态
投资者情绪监测
通过语音分析评估企业管理层的信心水平
提供量化的情感概率分布
🚀 FinVoc2Vec
FinVoc2Vec 是一款专为现实世界中的企业披露设计的语音语调分类器。它可以有效分析企业会议中的语音语调,为企业信息分析提供有力支持。
🚀 快速开始
FinVoc2Vec 是一个用于企业披露的语音语调分类器。它分两个阶段进行训练:首先,使用 500,000 个未标记的电话会议语音句子样本进行自监督预训练,使基础模型适应披露环境的声学特征;然后,进行有监督的微调,使用包含 5,000 个来自电话会议的语言中立句子的语音语料库,并手动标记每个句子的语音语调(积极、消极或中立),让模型学习人类标记的语音语调表示。
💻 使用示例
基础用法
使用示例数据集进行语音语调分类:
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']]}
📚 详细文档
为本地自动类注册模型
若要为本地自动类注册该模型,请使用以下代码:
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)派生而来。
- 此模型遵循知识共享署名非商业性使用 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}}
}
模型信息
属性 | 详情 |
---|---|
模型类型 | 语音语调分类器 |
训练数据 | 第一阶段使用 500,000 个未标记的电话会议语音句子样本进行自监督预训练;第二阶段使用包含 5,000 个来自电话会议的语言中立句子的语音语料库,并手动标记每个句子的语音语调(积极、消极或中立) |
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进行微调训练,用于语音情感识别,输出唤醒度、支配度和效价三个维度的预测值。
音频分类
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架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98