[IT技术] 目前研一,想研究语音识别方向但毫无头绪?

[复制链接]
workldf 发表于 2023-10-8 17:43:33|来自:中国 | 显示全部楼层 |阅读模式
题主本科读的是网络工程。目前在日本某国立大学读研一,跟的教授是做语音识别的。算跨了一点专业。
我选的研究方向是“音源分离”。然而现在已经过去一个学期了,对这个研究方向还是不知道怎么着手,没有头绪。
上个学期除了日常参加研究室的seminar外,教授也没有给什么其他建议。自己零零散散看了一点论文,博文,以及教材,但因为对这方面的基础知识不够,论文里不认识的概念很多,一开始每看一点就要单独去查一下新接触到的算法,名词,感觉有点模糊的印象了之后再返回去看。感觉读起来很累,并且接收到的知识也非常碎片,没法建立起系统的框架。比如根据看的资料自己尝试接触过htk,kaldi,pytorch,以及神经网络之类的,但感觉非常复杂无从下手,不知道要怎样把这些东西结合应用在自己的研究上。而且越学越觉得机器学习领域知识实在是过于庞大,无力感越来越强,担心毕不了业,每天都很焦虑。
所以想请前辈们分享一点经验、入门学习建议,或者这个研究方向的进行顺序。谢谢啦。
全部回复5 显示全部楼层
艾哥 发表于 2023-10-8 17:44:18|来自:中国 | 显示全部楼层
题主首先要明确自己先从声源分离入手,还是语音识别入手,还是多说话人语音识别入手。这三者在github上都有比较好的开源,且相对较新,很能跟上学术界的步伐。会议可以关注ICASSP和INTERSPEECH,期刊可以关注TheIEEE/ACM Transactions on Audio, Speech, and Language Processing,speech communication,signal processing letter。
声源分离和降噪推荐asteroid
https://github.com/asteroid-team/asteroid语音识别推荐espnet和wenet
https://github.com/espnet/espnetGitHub - wenet-e2e/wenet: Production First and Production Ready End-to-End Speech Recognition Toolkit多说话人语音识别推荐espnet
上述这三个都是基于pytorch的,花点功夫就可以相互耦合
xiaohongchen58 发表于 2023-10-8 17:44:49|来自:中国 | 显示全部楼层
MFA是一款基于Kaldi的音频文件和文字脚本在时间纬度上自动对齐的工具。优点是使用简单,无需学习kaldi即可使用,缺点是基于kaldi的声学模型,二次开发能力不够。针对中文拼音对齐能力不足,针对长文本处理能力不足。
Montreal-forced-aligner by MontrealCorpusTools音频和文字脚本对齐是在2018年之前ASR领域里很重要的一个步骤,当然随着CTC损失函数在机器学习领域的广泛应用,音频和文字准确对齐不再是一个必须的过程。
MFA使用了Kaldi的工具集,包括音频特征参数提取,模型构建,训练方法等。据我观测,MFA应该是使用了Kaldi比较早的nnet模型,模型比较小,训练起来非常快。MFA本身已经提供了一些预先训练好的声学模型包括english和mandarin模型,可以直接下载后使用。English的acoustic模型是基于librispeech训练的,用起来已经比较顺手了,比较准确。但是mandarin的声学模型好像数据量不够大,导致对齐效果差。所以就尝试使用自己的数据重新训练一个声学模型,结果还是不错的,见首图。以下为具体步骤(Kaldi和MFA的安装都略去了,大家可以自行按官方的方法进行安装):
首先准备好音频数据和对应的文字,如果文字是中文需要转化为拼音,我使用了pypinyin进行转化,每个中文汉字对应一个拼音,脚本如下,将中文字转为拼音:
  1. # coding:utf8
  2. import os
  3. import sys
  4. import numpy as np
  5. from pypinyin import pinyin, lazy_pinyin, Style
  6. import re
  7. root_dir = "../train/"
  8. pattern = re.compile(r'(.*)\.txt$')
  9. for root, dir, files in os.walk(root_dir):
  10.         for filename in files:
  11.                 #print(filename)
  12.                 output = pattern.match(filename)
  13.                 if output is not None:
  14.                         print(root, filename)
  15.                         text_file = open(root+"/"+filename)
  16.                         line = text_file.read().strip()
  17.                         line = line.replace(",", "")
  18.                         pinyin =  lazy_pinyin(line, style=Style.TONE3, neutral_tone_with_five=True)
  19.                         pinyinline = ' '.join(pinyin)
  20.                         print(line)
  21.                         target_text_file = open(root+"/"+output.group(1)+".lab", "w")
  22.                         target_text_file.write(pinyinline)
  23.                         target_text_file.close()
复制代码
保证音频文件的名字和脚本的文件名仅仅后缀不同,例如:
T0055G0002S0001.wav 和 T0055G0002S0001.lab
其中lab文件内容:yi3 hou4 ni3 shi4 nan2 hai2 zi5 原来的中文为:“以后你是男孩子”
准备好数据之后,使用MFA代的G2P模型生成词典文件:
  1. mfa g2p mandarin_pinyin_g2p ./corpus/tiny/ dict_tiny.txt
  2. 其中tiny目录如下:
  3. $ ls tiny
  4. G0002  G0135  G0269  G0326  G0726  G0931  G1492  G1634  G1777  G1889  G1966
  5. $ ls G0002
  6. T0055G0002S0001.lab T0055G0002S0081.lab T0055G0002S0001.wav  T0055G0002S0081.wav
  7. $ cat T0055G0002S0001.lab
  8. yi3 hou4 ni3 shi4 nan2 hai2 zi5
  9. dict大概这个样子:
  10. <eps> 0
  11. !sil 1
  12. <unk> 2
  13. an1quan2 3
  14. ba1shi2nian2dai4 4
  15. bao1luo1wan4xiang4 5
复制代码
有了词典,就可以开始训练自己的模型了:
  1. mfa train --config_path /home/yons/data/mfaligner/Montreal-Forced-Aligner/montreal_forced_aligner/config/basic_train.yaml /media/yons/SSD1T4K/kaldi/kaldi_data/corpus/tiny/ dict_tiny.txt result_tiny
复制代码
其中config文件中去掉了 lda和sat部分(mfa 2.0版本使用ac model时的一个bug)
这个运行完成后,默认会在路径:
  1. /home/yons/Documents/MFA/tiny/tri_ali
  2. $ ls tri_ali
  3. acoustic_model.zip  ali.1         ali.2.scores  aligned.2   log      nbest.2      phone_ctm.2  word_ctm.0
  4. ali.0               ali.1.scores  aligned.0     final.mdl   nbest.0  phone_ctm.0  textgrids    word_ctm.1
  5. ali.0.scores        ali.2         aligned.1     final.occs  nbest.1  phone_ctm.1  tree         word_ctm.2
复制代码
下生成一个acoustic_model.zip 的模型文件,就是我们自己的模型了。
使用下面的命令进行对齐我们的音频:
  1. mfa align --config_path /home/yons/data/mfaligner/Montreal-Forced-Aligner/montreal_forced_aligner/config/basic_align.yaml my_example2/ dict_tiny.txt /home/yons/Documents/MFA/tiny/tri_ali/acoustic_model.zip my_result3
复制代码
一般的错误时beam narrow,意思是搜索的宽度不够没有找到最匹配的点,默认的设置一般不会出现beam narrow,出现了也不用紧张,可以通过调整config文件进行调整,就可以得到textgrid文件了,通过图形化的方式验证对齐是否是正确的。
接下来使用工具Praat进行 textgrid和 wav文件的对比分析,看看是不是准确对齐了。



拔刀相助 对应拼音和音素
海默子 发表于 2023-10-8 17:45:01|来自:中国 | 显示全部楼层
先学习一下数字信号处理,然后在开始看一些基础的论文
给自己的论文合集推荐一下:
https://github.com/JusperLee/Speech-Separation-Paper-Tutorial
tjzoo117 发表于 2023-10-8 17:45:14|来自:中国 | 显示全部楼层
你是哪个大学的呀。我10月份去大阪大学做博后,大家可以认识一下。我是做CV方向的,对你的方向不懂,但是学习一个方向的过程应该是相通的。我的本科是学电气工程,毕业后去变压器厂做了几年,后来做CV也是改行了。 在学一个新的领域,第一步并不是学习这个领域的高深的算法,第一步是打基础,学习这个领域的经典算法,让自己对这个领域的发展有个了结。经典算法学习完了后再来看最新的文章。找基础学习资料有个方法,你可以看看你们行业内最有名的几个会议,这些会议一般会有tutorial 的环节,这些环节里讲的东西对提升你的基础会有蛮大的帮助的。
dreamvs 发表于 2023-10-8 17:46:03|来自:中国 | 显示全部楼层
找最近的paper看看,平时多做笔记,有机会可以和作者发邮件交流一下

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则