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/n/334034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
UDPNEUDPNE
上一篇 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

发表回复

登录后才能评论