THCHS30數據集介紹

一、數據集概述

THCHS30是中文語音數據集,共有30個小時的錄音,包含了120個男女說話人的語音。數據集的語音覆蓋範圍很廣泛,包括新聞、電話、報告等不同語境下的錄音,涵蓋了普通話、方言和英文等多種語言。數據集的標註信息詳細,包括了語音文本、文本拼音、字音、語速等信息。

二、數據集下載

THCHS30數據集可以從官方網站進行下載:http://www.openslr.org/18/。下載的數據包解壓後包含了三個文件夾,分別是data文件夾、test文件夾和doc文件夾。其中data文件夾是實際包含語音和標註的文件夾,可以用來進行語音識別等任務的訓練和測試。test文件夾和doc文件夾則分別是測試腳本和標註說明。

三、數據集預處理

THCHS30數據集包含的語音數據格式為WAV格式,需要進行預處理才能用於語音識別等任務的訓練和測試。常見的預處理方式包括MFCC特徵提取和語音分割。

1. MFCC特徵提取

import librosa

def extract_mfcc(file_path, n_mfcc=13):
    # 讀取語音文件並取MFCC特徵
    y, sr = librosa.load(file_path, sr=16000)
    mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=n_mfcc)
    
    return mfcc

2. 語音分割

import librosa

def split_audio(file_path, min_silence_len=1000, hop_length=256):
    # 讀取語音文件並進行語音分割
    y, sr = librosa.load(file_path, sr=16000)
    intervals = librosa.effects.split(y, top_db=20, hop_length=hop_length, \
    min_silence_len=min_silence_len)
    
    audio_segments = []
    for interval in intervals:
        segment = y[interval[0]:interval[1]]
        audio_segments.append(segment)
    
    return audio_segments

四、數據集應用

THCHS30數據集可以用於訓練和測試語音識別、語音合成、語音分割等任務。以下是一些使用THCHS30數據集進行語音識別的代碼示例。

1. 安裝必要的依賴

!pip install torch==1.9.0 torchvision==0.10.0 torchaudio==0.9.0
!pip install kaldi_io fastai==2.3.1

2. 數據集的準備和預處理

import kaldi_io
from tqdm.notebook import tqdm

# 將語音數據生成為Kaldi格式
with open("data/train/wav.scp", "w") as f:
    for file_path in tqdm(train_audio_paths):
        f.write(file_path.split("/")[-1][:-4] + " " + file_path + "\n")

# 生成特徵,並將特徵保存到磁碟
for utt_id, feat in kaldi_io.read_mat_scp("scp:data/train/feats.scp"):
    np.save(f"features/train/{utt_id}.npy", feat)

# 生成標籤
with open("data/train/text", "w") as f:
    for line in tqdm(train_transcripts):
        utt_id, _, transcript = line.split(" ", 2)
        transcript = transcript.strip().replace(" ", "")
        f.write(f"{utt_id} {transcript}\n")

# 將標籤轉化為字元索引
char2idx = {}
with open("data/train/text", "r") as f:
    for line in f:
        utt_id, transcript = line.strip().split(" ", 1)
        for char in transcript:
            if char not in char2idx:
                char2idx[char] = len(char2idx) + 1

# 將字元索引保存到磁碟
with open("data/char2idx.json", "w") as f:
    json.dump(char2idx, f)

3. 模型的訓練和測試

import json
import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, Dataset

from model import MyModel
from dataset import AudioDataset

# 載入字元索引
with open("data/char2idx.json", "r") as f:
    char2idx = json.load(f)

# 載入數據集
train_dataset = AudioDataset("data/train", char2idx)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)

# 初始化模型和優化器
model = MyModel(num_classes=len(char2idx) + 1)
optimizer = optim.Adam(model.parameters(), lr=1e-3)

# 定義損失函數
criterion = nn.CTCLoss(blank=len(char2idx))

# 訓練模型
for epoch in range(10):
    for batch in train_loader:
        audio, audio_lengths, text, text_lengths = batch
        optimizer.zero_grad()
        log_probs = model(audio)
        input_lengths = audio_lengths // 4
        loss = criterion(log_probs.transpose(0, 1).log_softmax(2), text, input_lengths, text_lengths)
        loss.backward()
        optimizer.step()

# 測試模型
test_dataset = AudioDataset("data/test", char2idx)
test_loader = DataLoader(test_dataset, batch_size=32, shuffle=True)
total_cer = 0
total_wer = 0
total = 0
with torch.no_grad():
    for batch in test_loader:
        audio, _, text, text_lengths = batch
        log_probs = model(audio)
        output = log_probs.transpose(0, 1).argmax(2)
        total_cer += (text == output).sum().item()
        total_wer += (text != output).sum().item()
        total += text_lengths.sum().item()
cer = total_cer / total
wer = total_wer / total

五、總結

THCHS30數據集是一個非常有價值的中文語音數據集,可以用於訓練和評估語音識別、語音合成、語音分割等任務。預處理語音數據和處理數據集的代碼示例中展示了一些常見的處理方式,包括MFCC特徵提取和語音分割。這些代碼示例可以幫助進一步了解語音數據的處理過程,方便進行後續的任務開發。

原創文章,作者:UDPNE,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/334034.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
UDPNE的頭像UDPNE
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相關推薦

  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python爬取公交數據

    本文將從以下幾個方面詳細闡述python爬取公交數據的方法: 一、準備工作 1、安裝相關庫 import requests from bs4 import BeautifulSou…

    編程 2025-04-29
  • Python兩張表數據匹配

    本篇文章將詳細闡述如何使用Python將兩張表格中的數據匹配。以下是具體的解決方法。 一、數據匹配的概念 在生活和工作中,我們常常需要對多組數據進行比對和匹配。在數據量較小的情況下…

    編程 2025-04-29
  • Python數據標準差標準化

    本文將為大家詳細講述Python中的數據標準差標準化,以及涉及到的相關知識。 一、什麼是數據標準差標準化 數據標準差標準化是數據處理中的一種方法,通過對數據進行標準差標準化可以將不…

    編程 2025-04-29
  • 如何使用Python讀取CSV數據

    在數據分析、數據挖掘和機器學習等領域,CSV文件是一種非常常見的文件格式。Python作為一種廣泛使用的編程語言,也提供了方便易用的CSV讀取庫。本文將介紹如何使用Python讀取…

    編程 2025-04-29
  • Python根據表格數據生成折線圖

    本文將介紹如何使用Python根據表格數據生成折線圖。折線圖是一種常見的數據可視化圖表形式,可以用來展示數據的趨勢和變化。Python是一種流行的編程語言,其強大的數據分析和可視化…

    編程 2025-04-29
  • Python如何打亂數據集

    本文將從多個方面詳細闡述Python打亂數據集的方法。 一、shuffle函數原理 shuffle函數是Python中的一個內置函數,主要作用是將一個可迭代對象的元素隨機排序。 在…

    編程 2025-04-29

發表回復

登錄後才能評論