点击上方关注,All in AI中国
作者:黄功详(Steeve Huang)
随着机器学习的迅速发展,尤其是深度学习的进步,语音识别技术得到了显著的提高。这种技术依赖于大量高质量的数据。但是,为非流行语言构建的模型比流行语言(英语等)的表现还要差。这是因为只有少数可用的训练数据集,并且很难有效地收集高质量的数据。这篇文章将向大家展示如何有效地收集任何语言的语音识别数据。
虽然Mozilla公司推出了一个名为Common Voice的开源项目,这个项目鼓励人们发表自己的意见,但大多数人或者不了解这个项目,或者不愿意参与其中。下图显示了Common Voice中不同语言的小数据收集进度。
Common Voice的小数据收集进度(https://voice.mozilla.org/en/languages) 由于视频网站Youtube上提供了丰富的电视节目和电视剧,因此可以高效地收集语音识别数据,通常通过人工参与来实施。
流星花园(https://www.youtube.com/watch?v=DsuN185H58I)
如上图所示,这些戏剧或节目中的一些嵌入了字幕,可以通过OCR提取。然后,提取的文本连同剪辑的音频可以形成语音识别数据的样本。
概述
下图显示了包含多个模块的整个数据收集管道的概述。我们首先使用Youtube V3 API搜索下载与指定的电视节目名称相关的视频。利用FFMPEG将视频分割成帧,每个帧由自我训练的Mask-RCNN处理(稍后更详细叙述)以仅保留图像的字幕区域。然后,处理后的图像将发送到Google Vision API,以获取预测的文本和置信度。使用Pandas库,我们按时间戳对结果进行排序,然后将它们聚合在一起,为每个视频生成一个SRT文件。以下内容将向大家展示如何实现这些模块。
先决条件
- Python==3.6
- FFMPEG
- joblib==0.12.0
- numpy==1.13.3
- pandas==0.23.3
- tensorflow-gpu==1.4.0
- Keras==2.1.3
- google-cloud-vision==0.32.0
- pafy==0.5.4
- youtube-dl==2017.12.2
- tqdm==4.23.4
- editdistance==0.4
实施
此部分由数据收集管道中的模块划分,每个子部分对应一个模块。
下载视频和提取音频
转到Youtube搜索你感兴趣的电视剧。确保你可以找到该节目的播放列表,因为播放列表中的视频质量往往是统一的。检查第一个视频是否包含嵌入的字幕,我们可以假设整个播放列表都是字幕嵌入的。