语音识别应用案例 | 语音助手

其中,声学模型GRU-CTC,只需导入路径即可:

frommodel_speech.gru_ctc importAm, am_hparams

实现此案例需要按照如下步骤进行.

01

步骤一:声学模型训练

编辑train.py文件完成声学模型的训练,语言模型使用已经训练好的模型文件(www.wq56.cn)。

【案例5- 4】train.py

importkeras

importos

importtensorflow astf

fromutils importget_data, data_hparams

fromkeras.callbacks importModelCheckpoint

# 0.准备训练所需数据------------------------------

data_args = data_hparams

data_args.data_type = 'train'

data_args.data_path = '../dataset/'

data_args.thchs30 = True

data_args.aishell = True

data_args.prime = True

data_args.stcmd = True

data_args.batch_size = 4

data_args.data_length = 10

# data_args.data_length = None

data_args.shuffle = True

train_data = get_data(data_args)

# 0.准备验证所需数据------------------------------

data_args = data_hparams

data_args.data_type = 'dev'

data_args.data_path = '../dataset/'

data_args.thchs30 = True

data_args.aishell = True

data_args.prime = False

data_args.stcmd = False

data_args.batch_size = 4

# data_args.data_length = None

data_args.data_length = 10

data_args.shuffle = True

dev_data = get_data(data_args)

# 1.声学模型训练-----------------------------------

frommodel_speech.gru_ctc importAm, am_hparams

am_args = am_hparams

am_args.vocab_size = len(train_data.am_vocab)

am_args.gpu_nums = 1

am_args.lr = 0.0008

am_args.is_training = True

am = Am(am_args)

ifos.path.exists( 'logs_am/model.h5'):

print( 'load acoustic model...')

am.ctc_model.load_weights( 'logs_am/model.h5')

epochs = 10

batch_num = len(train_data.wav_lst) // train_data.batch_size

# checkpoint

ckpt = "model_{epoch:02d}-{val_acc:.2f}.hdf5"

checkpoint = ModelCheckpoint(os.path.join( './checkpoint', ckpt), monitor= 'val_loss', save_weights_only= False, verbose= 1, save_best_only= True)

batch = train_data.get_am_batch

dev_batch = dev_data.get_am_batch

am.ctc_model.fit_generator(batch, steps_per_epoch=batch_num, epochs= 10, callbacks=[checkpoint], workers= 1, use_multiprocessing= False, validation_data=dev_batch, validation_steps= 200)

am.ctc_model.save_weights( 'logs_am/model.h5')

02

步骤二:模型测试

在test.py文件中整合声学模型和语言模型。

【案例5- 5】test.py

本案例中test.py文件完整代码如下所示:

import os

import difflib

import tensorflow astf

import numpy asnp

from utils import decode_ctc, GetEditDistance

# 0.准备解码所需字典,参数需和训练一致,也可以将字典保存到本地,直接进行读取

from utils import get_data, data_hparams

data_args = data_hparams

train_data = get_data(data_args)

# 1.声学模型-----------------------------------

from model_speech.gru_ctc import Am, am_hparams

am_args = am_hparams

am_args.vocab_size = len(train_data.am_vocab)

am= Am(am_args)

print( 'loading acoustic model...')

am.ctc_model.load_weights( 'logs_am/model.h5')

# 2.语言模型-------------------------------------------

from model_language.transformer import Lm, lm_hparams

lm_args = lm_hparams

lm_args.input_vocab_size = len(train_data.pny_vocab)

lm_args.label_vocab_size = len(train_data.han_vocab)

lm_args.dropout_rate = 0.

print( 'loading language model...')

lm= Lm(lm_args)

sess = tf.Session(graph= lm.graph)

with lm.graph.as_default:

saver = tf.train.Saver

with sess.as_default:

latest = tf.train.latest_checkpoint( 'logs_lm')

saver.restore(sess, latest)

# 3. 准备测试所需数据, 不必和训练数据一致,通过设置data_args.data_type测试,

# 此处应设为 'test',我用了 'train'因为演示模型较小,如果使用 'test'看不出效果,

# 且会出现未出现的词。

data_args.data_type = 'train'

data_args.shuffle = False

data_args.batch_size = 1

test_data = get_data(data_args)

# 4. 进行测试-------------------------------------------

am_batch = test_data.get_am_batch

word_num = 0

word_error_num = 0

fori in range( 10):

print( '\n the ', i, 'th example.')

# 载入训练好的模型,并进行识别

inputs, _ = next(am_batch)

x= inputs[ 'the_inputs']

y= test_data.pny_lst[i]

result = am.model.predict( x, steps= 1)

# 将数字结果转化为文本结果

_, text = decode_ctc(result, train_data.am_vocab)

text = ' '. join(text)

print( '文本结果:', text)

print( '原文结果:', ' '. join( y))

with sess.as_default:

text = text.strip( '\n'). split( ' ')

x= np.array([train_data.pny_vocab. index(pny) forpny in text])

x= x.reshape( 1, - 1)

preds = sess.run( lm.preds, { lm. x: x})

label = test_data.han_lst[i]

got = ''. join(train_data.han_vocab[idx] foridx in preds[ 0])

print( '原文汉字:', label)

print( '识别结果:', got)

word_error_num += min( len(label), GetEditDistance(label, got))

word_num += len(label)

print( '词错误率:', word_error_num / word_num)

sess. close

03

参考书籍

《人工智能概论

作者:赵克玲 瞿新吉 任燕

定价:69元

扫码优惠购书

内容简介

本书特色

采用思维导图对课程和章节重要知识点进行梳理,便于理解和记忆。

每章配有目标、正文、总结和习题,使教学内容和过程形成闭环。

理论联系实践,基于应用,并提供微课视频,帮助初学者能够快速学习和掌握。

教学资源

配套资源丰富,包括微课视频、教学课件、程序代码、习题答案、教学大纲、考试大纲等资源。

04

精彩推荐

  • 机器学习案例 |预测工资——线性回归

  • 机器学习案例 |猫狗分类

  • 人工智能实战 | 影评词云数据案例分析

  • 鸿蒙开发实例|构建轻量级智能穿戴设备用户界面

  • CCF CSP-J/S第一轮认证必考知识点:回溯算法

  • CCF CSP-J/S第一轮认证必考知识点:二值图像的最大连通块

  • CCF CSP-J/S第一轮认证必考知识点:哥德巴赫猜想

  • CCF CSP-J/S第一轮认证考纲详解

  • Python 韩信点兵思政案例(含优惠码)

  • Python ︱爬取天气预报信息(附视频)

  • 《机器学习》实验指导书(附实验参考+代码)

  • Python爬虫综合实战 │ 创建云起书院爬虫(附代码)

  • Python爬虫实战 │ Email提醒(附代码)

  • Python深度学习 │一文掌握卷积神经网络

主营产品:二氧化碳激光打标机,光纤激光打标机,激光焊接机,紫外激光打标机,激光加工