음성인식 AI를 위한 라벨 데이터 전처리 및 모델 라벨 활용 방법
음성인식 AI를 개발하기 위해서는 음성 데이터를 라벨링하고, 이를 모델 학습에 적합한 형식으로 전처리하는 작업이 필수적이다. 본 글에서는 MFCC로 변환된 npy 파일을 입력 데이터로 활용하여, 해당 음성 파일에 포함된 발화 내용을 라벨로 처리하는 방법을 알아보고 다음 차례에 이를 적용해보고자 한다.
1. 음성 데이터와 라벨 데이터 준비
음성인식 모델의 입력 데이터는 일반적으로 음성 파일의 특징(feature) 값이다. 본 예제에서는 MFCC(Mel-Frequency Cepstral Coefficients)로 변환된 npy 파일을 사용한다. 이와 함께 각 음성 파일에 매칭되는 스크립트 데이터(발화 내용)를 라벨로 활용한다.
준비할 데이터
- 입력 데이터: 음성 파일을 MFCC로 변환하여 저장한 npy 파일.
- 라벨 데이터: 각 음성 파일의 스크립트 정보가 포함된 CSV 파일. (예:
filename,transcription
형식)
2. 데이터 로드 및 매핑
CSV 파일과 npy 파일을 로드하여 매핑한다. 이를 통해 각 음성 데이터가 해당 라벨과 정확히 연결되도록 한다.
import os
import numpy as np
import pandas as pd
# 파일 경로 설정
mfcc_dir = "path_to_mfcc_files" # MFCC 파일이 저장된 디렉토리
label_csv = "path_to_labels.csv" # 라벨 정보가 포함된 CSV 파일
# 라벨 데이터 로드
label_df = pd.read_csv(label_csv)
# CSV 파일 예시
# filename,transcription
# audio1.npy,나는 오늘 밥을 먹었어
# npy 파일과 라벨 매핑
label_dict = {row['filename']: row['transcription'] for _, row in label_df.iterrows()}
# MFCC 파일 로드
mfcc_data = {}
for file_name in os.listdir(mfcc_dir):
if file_name.endswith('.npy'):
mfcc_data[file_name] = np.load(os.path.join(mfcc_dir, file_name))
3. 라벨 데이터 전처리
음성인식 모델 학습을 위해 라벨 데이터를 적합한 형식으로 변환한다. 여기서는 스크립트를 음절 단위로 분리하거나, 정수 인코딩을 적용하는 과정을 포함한다.
음절 단위 분리
스크립트를 음절 단위로 분리하기 위해 konlpy
또는 kiwi
와 같은 형태소 분석기를 사용할 수 있다.
from kiwipiepy import Kiwi
# Kiwi 초기화
kiwi = Kiwi()
# 발화 내용을 음절 단위로 분리
def syllable_split(text):
result = []
for word in kiwi.tokenize(text):
result.extend(list(word.form))
return result
# 라벨 변환 예시
label_encoded = {key: syllable_split(value) for key, value in label_dict.items()}
print(label_encoded)
# Output: {"audio1.npy": ["나", "는", " ", "오", "늘", " ", "밥", "을", " ", "먹", "었", "어"]}
정수 인코딩
모델 학습을 위해 각 음절을 정수로 변환한다. 이를 위해 문자 집합(vocabulary)을 생성한다.
# 문자 집합 생성
vocab = set()
for transcription in label_encoded.values():
vocab.update(transcription)
# 문자와 정수 매핑
token_to_id = {token: idx for idx, token in enumerate(sorted(vocab), start=1)}
id_to_token = {idx: token for token, idx in token_to_id.items()}
# 정수 인코딩 적용
def encode_label(label):
return [token_to_id[token] for token in label]
encoded_labels = {key: encode_label(value) for key, value in label_encoded.items()}
print(encoded_labels)
# Output: {"audio1.npy": [1, 2, 3, 4, 5, ...]}
4. 모델 학습 데이터 생성
모델 입력과 라벨 데이터를 Tensor 형식으로 변환한다. 이를 위해 PyTorch 또는 TensorFlow를 사용할 수 있다.
PyTorch 데이터셋 정의
import torch
from torch.utils.data import Dataset
class SpeechDataset(Dataset):
def __init__(self, mfcc_data, encoded_labels):
self.mfcc_data = mfcc_data
self.encoded_labels = encoded_labels
def __len__(self):
return len(self.mfcc_data)
def __getitem__(self, idx):
file_name = list(self.mfcc_data.keys())[idx]
mfcc = self.mfcc_data[file_name]
label = self.encoded_labels[file_name]
return torch.tensor(mfcc, dtype=torch.float32), torch.tensor(label, dtype=torch.long)
# 데이터셋 생성
dataset = SpeechDataset(mfcc_data, encoded_labels)
# 데이터 로드 예시
for x, y in dataset:
print(x.shape, y.shape)
break
5. 결론
이 과정을 통해 음성 파일과 스크립트 데이터를 모델 학습에 사용할 수 있는 형식으로 변환할 수 있다. 라벨 전처리 과정에서 음절 분리, 정수 인코딩 등을 활용하면 음성인식 모델의 학습 효율을 높일 수 있다. 이후 학습 모델에 따라 적합한 손실 함수와 평가 지표를 설정하여 음성인식 AI를 완성한다.
'Data Analysis > DeepLearning' 카테고리의 다른 글
CTC Loss의 개념 및 원리 이해 - 음성인식, 언어생성 모델 손실함수 (0) | 2024.12.31 |
---|---|
[Pytorch] 음성 데이터 학습 모델 개발에 필요한 정보 및 개념 정리 (0) | 2024.12.29 |
[Pytorch] 간단한 언어 생성 모델 개발 (LSTM) 및 모델 출력 길이 조절 (0) | 2024.12.26 |
[Pytorch] 모델 학습을 하기 위해 필요한 함수 및 코드 정리 - Trainer, Dataloader, Optimizer 등 (1) | 2024.12.25 |
[Pytorch] 딥러닝 모델 구현하는 방법 및 코드 정리 - Sequential, Functional, nn.Module (0) | 2024.12.24 |