衬布厂家
免费服务热线

Free service

hotline

010-00000000
衬布厂家
热门搜索:
行业资讯
当前位置:首页 > 行业资讯

手把手教你用Keras实现LSTM预测英语单词发音-【新闻】

发布时间:2021-04-05 23:18:34 阅读: 来源:衬布厂家

雷锋网按:本文为 AI 研习社编译的技术博客,原标题 Predicting English Pronunciations,作者 Ryan Epp。

翻译 | 涂世文 整理 | 凡江

1. 动机

我近期在研究一个 NLP 项目,根据项目的要求,需要能够通过设计算法和模型处理单词的音节 (Syllables),并对那些没有在词典中出现的单词找到其在词典中对应的押韵词(注:这类单词类似一些少见的专有名词或者通过组合产生的新词,比如 Brexit,是用 Britain 和 exit 组合在一起创造出来表示英国脱欧的新词)。在这两个任务中,能够对单词的发音进行预测是非常有必要的。本文详细记录我解决该问题的过程,希望能够对初学者和具有一定经验的朋友有所帮助。本文代码实现均基于 Python 3 和 Keras 框架。现在让我们开始吧!

2. 数据集获取

我们将使用 CMU Pronunciation Dictionary (http://www.speech.cs.cmu.edu/cgi-bin/cmudict) 作为我们的数据集,该词典收录了将近 134000 个单词以及对应的音标拼写。譬如「苹果」的英文单词「apple」出现在该词典中的形式为:「AE1P AH0L」。其中每一个去除数字后的音标块(token),表示一个发音(如 AE,P,AH 等),在语言学里称之为「音素」。音素结尾的数字表示发音的声调大小,被称为「词汇重音标记」。由于只有元音才有重音标记,所以在英文中有 39 个唯一的音素和 84 个独特的符号。

话不多说,让我们先加载 CMU Pronunciation Dictionary 词典数据并做一下初步数据清洗工作:

先输出几条数据,看看我们的词典数据长什么样儿:

3. 数据准备

接下来,在我们将数据交给学习算法之前,我们需要想办法将单词和发音用数值的形式表示。在这里我们将单词看作是字符序列,发音看作音素符号的序列(包括重音标记)。我们可以给每一个字符和音素赋予一个数值,然后我们就可以将它们表示为 One-Hot 向量的形式。根据单词的字母预测其发音可以看作一个字音转换问题。我们需要告诉模型语音拼写从哪里开始又从哪里结束,因此我们引入两个独特的开始和结束标注符号,在这里我使用的制表符'\t' 和换行符'\n'分别来表示。

用这些数字型的 ID 直接作为模型的输入看起来非常诱人,但是这样做的话会使得字母/音素之间隐含一种并不真正存在的关系。例如,由于 A=4,C=6,和 U=24,意味着 A 和 C 在某种程度上比 A 和 U 更相似(因为 4 更接近 6)。显然事实情况并非如此。相反,我们可以使用我们的 ID 映射来将字符和音素转换为 one-hot 向量(https://machinelearningmastery.com/why-one-hot-encode-data-in-machine-learning/):

现在我们有一种数值化表示字母和音素的方法,我们可以把整个数据集转换成两个大的三维矩阵(也可以被称为张量):

4. Baseline 模型

由于我们处理的是序列数据,对于序列数据来说,RNN 模型 [视频, 博客] 最适合不过了。让我们先从基于 RNN 的 LSTM 模型 [视频, 博客] 开始上手吧!

RNN 模型视频

逸仙诀果盘版

美杜莎传奇最新版

朕的江山最新版

蜀将战记ol