首页 > 编程知识 正文

人工智能语音系统下载(Kaldi在线搭建语音识别系统-李健)

时间:2023-05-06 16:47:27 阅读:123590 作者:3932

Kaldi数据准备:

需要准备四份文件

1.wav.scp [ utt-id ] [ wav-path ] e.g.sen _1/home/train 01 _ data/sen _1. wav

2.text [ utt-id ] [ text-content ] e.g.sen _ 1今天天气很好

3.ut T2 spk [ utt-id ] [ spk-id ] e.g.sen _1speaker _ 1

4.spk 2u TT [ spk-id ] [ utt-id ] e.g.speaker _1sen _ 1

Kaldi有道具,如果酷酷冥王星已经有文件3,就可以自动生成4。

在生成这些文件的过程中,通常使用awk (应用于逐行处理的文件)、shell、Perl和Python等工具。

一般公开或购买的声音数据集形式的公众会中的声音数据按人被分成一个目录,对应于声音的文本文件位于一个目录中。

首先,统计一下总共有多少声音。 (ps )即使不知道具体流程,问题也很少。 因为没有特别仔细地整理)。

我不知道find ./wav/-iname '*.wav' | wc -l为什么是-iname而不是-name,请认识的伟人告诉我。

将所有语音路径放入wav.scp.temp (文件1 )。

find/home/train 02/data/Guangzhou/LQ dwl-tem-051/data/IOs/wav-iname ' *.wav ' wav.scp.temp是语音说话人姓名和对话id的

在wak中,用/分隔文件路径,检索最后两列,并用Speaker_替换最后第二列中的Speaker。 最后一列中的一些字符. wav将删除cat wav.scp.temp|awkf '/' { printf (% s _ % s ) $ nf }|sed ' s|. wav|||sed ' s|speakkk

#如果要查看合并效果,请使用paste-d ' ' wav _ id wav.scp.temp|head-n1 paste-d ' ' wav _ id wav.scp.temp wav.scp查看文本文件

#对于目录中的所有文件,文件编码类型for x in local/data/script/*; doy=` echo $ x ' s ' script _ utf8 '; iconv -f UTF-16LE -t UTF-8 $x $y; 道恩

给数据集的文档的奇数行是要读的句子,偶数行实际上要读句子,所以需要提取偶数行。 (所谓NR,是指当前行共有几列。)

awk ' NR %2==0' local/data/scrip _ utf8/speaker 7305.txt tmp.txt然后提取行号:

#将第奇数行的列放入文件中awk 'NR % 2!=0{printf((%s(n ),$1) } ) local/data/script _ utf8/speaker 7305.txtsen _ id _ 7305.txt表示说话者id和每个人的句子

#!/xhd HN/bash speak _ id=$1string=` echo $ speak _ id|sed ' s|. txt|||sed ' s|` speaker _|` awaw 我不记得下一句是做什么的。 cut用于剪切字符串,-d用于定义分隔符。 默认值为选项卡键,-f指示需要获取哪个字段。

cut-d '-f1 text|awk-f ' _ ' { printf ($0' ' $1_ $2'n ' } )介绍Kaldi的两个常见工具箱steps和utils。 这里是示例wsj数据集的工具设置

steps-./kaldi/egs/wsj/S5/steps utils-./kaldi/egs/wsj/S5/utils使用工具将文件3转换为文件4。

./util us/ut T2 spk _ to _ spk 2u TT.plut T2 sp ksp k2 utt完成这些操作后,所有语句都必须分开写(,此数据集的文本都是一句一句的,没有分词

Kaldi数据准备之延续lang/data

/strong>

Lexicon语音词典(把文字或词组转成它最小的单位,就是一个音素),跟发音有关,汉语就是声韵母,英语就是音标。例如:

[character/word] [pronunciation]

早晨:z ao ch en

天气 t i an q i

把文本统计一下,包含多少词,生成一个word_list,再到网上找一个语音词典,或者你买的。把所有出现的词在词典里查,找到发音,生成一个lexicon的文件。针对这个数据集具体步骤为:

1、先将文本中标点去掉,然后分词统计为word_list。(你直接写个小脚本在某个集合中去匹配,这样子太粗糙,可能匹配到不是最好的,如你,你好,你是谁,你是。可以去网上找分词工具。)

这里用的是开源工具,Python zhon。

#!/usr/xhdhn/env pythonimport reimport sysfrom zhon.hanzi import punctuationfor line in sys.stdin: line = line.strip('n') print re.sub(ur'[%s]+' %punctuation, '', line.decode('utf-8'))

Python代码里是标准输入:

cat text | head -n 10 | python remove_punctuation.py

然后安装分词工具mmseg(是kaldi样例某一个中文数据集用的分词工具)

from mmseg import seg_txtfor w in seg_txt(r"我是李国强我家在东北我有三座金山"): print w

在分词的过程中要处理一些无法识别的噪声数据,如<noise>,<non>等等。需要将文本中的这些去掉,在去掉这些的过程中发现(首先统计出来有哪些噪声数据),结果有同样的表示如<noise><noise>,但在vim中发现有一个后面加了^M,最后发现是win下面的文件在linux打开所带来的,于是用dos2unix命令将文件格式转换为linux下。

发现有些语句是空行,要把他们找出来

cat text | gawk '/[A-Za-z0-9_]*s+$/'# ^除在[]中使用,否则为匹配开头,$是匹配结尾

将text文件中的所有非空行列出来

grep -w -vf bad_sens.txt text | wc -1# -w是指只能精准匹配# -f是指以a.txt中每一行为关键字,查找b.txt中匹配的行# -v是指显示不匹配的内容

当所有都处理完毕时,生成word_list

awk '{for(i=2; i<=NF; i++) printf("%sn", &i)} text | sort -u > word_list'

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。