--- license: mit language: - ko metrics: - accuracy pipeline_tag: automatic-speech-recognition --- # Speech Verification Repository 이 저장소는 음성 데이터를 기반으로 화자 인식 모델을 학습하고 사용하는 방법을 제공합니다. 한국어 음성 데이터셋인 AIHub의 화자 인식용 음성 데이터셋을 사용하여 학습이 진행된 모델입니다. ## 모델 개요 - 모델 이름: wav2vec2-large-960h-lv60-contrastive - 모델 설명: 이 모델은 Wav2Vec 2.0 아키텍처를 기반으로 한 화자 인식 모델입니다. 대조 학습(Contrastive Learning)을 통해 동일 화자에 대한 음성 데이터의 특징을 효과적으로 학습할 수 있습니다. - 활용 분야: 음성 인식, 화자 분류등의 태스크에 활용될 수 있습니다. The original model can be found [wav2vec2-large-960h-lv60](https://huggingface.co/facebook/wav2vec2-large-960h-lv60) ## 학습 데이터 - AIHub의 화자 인식용 음성 데이터셋 사용 - 한국어 음성 데이터로 구성되어 있으며, 다양한 화자의 음성 샘플을 포함 - 원본 데이터 링크: [AIHub 화자 인식 데이터셋](https://aihub.or.kr/aihubdata/data/view.do?currMenu=&topMenu=&aihubDataSe=data&dataSetSn=537) ## 사용 방법 1. Library import ```shell import librosa import torch import torch.nn.functional as F from transformers import Wav2Vec2Model from transformers import Wav2Vec2FeatureExtractor from torch.nn.functional import cosine_similarity ``` 2. Load Model ```shell from transformers import Wav2Vec2Model, AutoFeatureExtractor device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model_name = "Songhun/wav2vec2-large-960h-lv60-contrastive" model = Wav2Vec2Model.from_pretrained(model_name).to(device) feature_extractor = AutoFeatureExtractor.from_pretrained(model_name) ``` 3. Calculate Voice Similarity ```shell file_path1 = './sample_data/voice1.mp3' file_path2 = './sample_data/voice2.mp3' feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained(model_name) def load_and_process_audio(file_path, feature_extractor, max_length=4.0): audio, sampling_rate = librosa.load(file_path, sr=16000) inputs = feature_extractor(audio, sampling_rate=sampling_rate, return_tensors="pt", padding="max_length", truncation=True, max_length=int(max_length * sampling_rate)) return inputs.input_values audio_input1 = load_and_process_audio(file_path1, feature_extractor).to(device) audio_input2 = load_and_process_audio(file_path2, feature_extractor).to(device) embedding1 = model(audio_input1).last_hidden_state.mean(dim=1) embedding2 = model(audio_input2).last_hidden_state.mean(dim=1) similarity = F.cosine_similarity(embedding1, embedding2).item() print(f"Similarity between the two audio files: {similarity}") ``` Threshold: 0.3728 is Youden's J statistic optimal threshold