语音识别库 kaldi,语音识别框架kaldi
Kaldi数据准备:
需要准备四份文件。
1.wav.scp [ utt-id ] [ wav-path ]例如sen _1/home/train 01 _ data/sen _1。声音资源文件
2.今天天气很好。
3.ut T2 spk [ utt-id ] [ spk-id ]例如sen _1speaker _ 1
4.spk 2u TT [ spk-id ] [ utt-id ]例如speaker _1sen _ 1
卡迪有道具。如果酷派冥王星已经有了文件3,它可以自动生成4。
在生成这些文件的过程中,通常会用到awk(适用于逐行处理的文件)、shell、Perl、Python等工具。
公开的或购买的声音数据集形式的公开会议中的声音数据按人划分到一个目录中,声音对应的文本文件位于一个目录中。
首先,统计声音总数。(ps)即使不知道具体流程,问题也不大。因为组织的不是特别仔细)。
我不知道为什么找。/wav/-iname *。wav wc -l是-iname而不是-name。请告诉我你认识的伟人。
将所有语音路径放入wav.scp.temp(文件1)。
find/home/train 02/data/Guangzhou/LQDWL-TEM-051/data/iOS/wav-iname *。wav wav.scp.temp是语音扬声器的名称和对话id
在wak中,用/分隔文件路径,检索最后两列,并用Speaker_替换最后第二列中的Speaker。最后一列中的一些字符。wav将删除cat MAV . scp . temp awkf / { printf(% s _ % s)$ nf } sed的。wav sed的 speakk
#如果要查看合并效果,请使用paste-d wav _ idwav . scp . temp head-n1 paste-d wav _ idwav . scp . temp wav . scp查看文本文件。
#对于目录中的所有文件,文件编码类型为local/data/script/*中的x;doy= echo $ x 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和每个人的句子。
#!/xhdhn/bash speak _ id=$ 1 string= echo $ speak _ id sed s 。txt sed的 ` speaker _ ` awaw我记不起下一句是什么了。Cut用于剪切字符串,而-d用于定义分隔符。默认值是tab键,-f表示需要获取哪个字段。
cut-d -f1 text awk-f _ { printf($ 0 $ 1 _ $ 2 n })介绍了Kaldi的两个常用工具箱steps和utils。以下是示例wsj数据集的工具设置。
步骤。/kaldi/egs/wsj/s5/steps utils-。/kaldi/egs/wsj/s5/utils使用该工具将文件3转换为文件4。/utilus/utt2spk _ to _ spk2utt。plut 2 spk 2 utt经过这些操作,所有语句都必须单独编写(,这个数据集的文本是逐句的,没有分词。
Kaldi数据准备之延续lang/data
/h3
Lexicon语音词典(将单词或短语转换成其最小单位,即音素)与发音有关。汉语是韵母,英语是音标。例如:
[字符/单词][发音]
早上:赵晨
天气预报
统计课文,包含多少单词,生成word_list,然后去网上找音标词典,或者你买的。查找字典中出现的所有单词,找到发音,生成词典文件。该数据集的具体步骤如下:
1.先去掉文本中的标点符号,然后分词算作word_list。(你直接写一个小剧本在某一套里配,太粗糙,可能配不出最好的,比如你,你好,你是谁,你是谁?可以去网上找分词工具。)
这是一个开源工具,Python zhon。
#!/usr/xhn/env python import import sys from zhon . hanzi import惩罚for line in sys . stdin:line=line . strip( n )printre . sub(ur [% s] % pension ,line.decode (UTF-8 ))
text head-n10 python remove _ punctuation . py然后安装分词工具mmseg(这是一个针对kaldi样本的中文数据集的分词工具)
From mmseg在seg _ txt中为w导入seg _ txt (r 我是李国强人,家在东北,有三座金山):打印w在分词的过程中要处理一些无法识别的噪声数据,比如noise,non等等。有必要在文本中删除这些。在去除这些的过程中发现(首先统计哪些噪声数据),结果有相同的表达式,比如noisenoise。但是在vim中发现有一个后面加了一个M。最后发现win下的文件是在linux下打开的,于是用dos2unix命令将文件格式转换为linux。
发现有些语句是空行,就找出来。
Text gawk/[a-za-z0-9 _] * s $/#除非在[]中使用,否则是匹配的开始,$是匹配的结束,列出文本文件中所有非空行。
grep-w-vfbad _ sens . txt text WC-1 #-w表示只能精确匹配# -f表示a.txt中的每一行关键字都用来查找b.txt中匹配的行# -v表示显示不匹配的内容。当所有的事情都处理好了,word_list就生成了。
awk“{ for(I=2;i=NFi ) printf(%sn ,i)} text sort -u word_list