├── .idea
├── libraries
│ └── R_User_Library.xml
└── vcs.xml
├── D4_750.wav
├── README.md
├── config
├── __pycache__
│ └── config.cpython-36.pyc
├── config.py
└── key.txt
├── ctc_prefix_score.py
├── data
├── aishell_dev.txt
└── aishell_train.txt
├── decoder.py
├── freeze_graph.py
├── generate_data.py
├── model
└── Transformer.py
├── pb_save
└── model.pb
├── train.py
└── util
├── __pycache__
└── feature.cpython-36.pyc
└── feature.py
/.idea/libraries/R_User_Library.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/D4_750.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuangcaomvp/speech-recognize/299939442d3fcea54aab926a3fd77351524465f7/D4_750.wav
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # speech-regconize
2 | 语音识别
3 |
4 | 1 环境安装
5 |
6 | pip install soundfile
7 |
8 | pip install tensorflow-gpu==1.12
9 |
10 | pip install python_speech_features
11 |
12 | pip install tqdm
13 |
14 | pip install easydict
15 |
16 | cuda9.0
17 |
18 | 2 测试
19 |
20 | python decoder.py
21 |
22 | 3 训练
23 |
24 | 数据准备:
25 |
26 | 见data文件夹 txt格式 音频路径+'\t' + label (label用空格分割) //'\t'是指tab建不是字符
27 |
28 | config.py 中data_path+音频路径 为音频的绝对路径
29 |
30 | 运行 python generate_data.py 不报错 则数据准备正确
31 |
32 | 运行 python train.py 进行训练
33 |
34 | 4 模型冻结
35 |
36 | freeze_graph.py 修改ckpt_file为自己训练的checkpoint路径
37 |
38 | pb_file 生成的pb文件保存路径
39 |
40 | 运行 python freeze_graph.py
41 |
42 | 修改 config.py 中__C.PREDICT.pb = pb_file
43 |
44 | 运行python decode.py 测试
45 | 5 checkpoint模型地址
46 | 链接:https://pan.baidu.com/s/1_CgXG3AvBDrXGTRr5_Rv8Q
47 | 提取码:ryqc
48 |
--------------------------------------------------------------------------------
/config/__pycache__/config.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuangcaomvp/speech-recognize/299939442d3fcea54aab926a3fd77351524465f7/config/__pycache__/config.cpython-36.pyc
--------------------------------------------------------------------------------
/config/config.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python
2 | # coding=utf-8
3 | from easydict import EasyDict as edict
4 |
5 | __C = edict()
6 | cfg = __C
7 |
8 | # BASE options
9 | __C.BASE = edict()
10 |
11 | #数据字典
12 | __C.BASE.DICT = 'config/key.txt'
13 |
14 | __C.BASE.DATA_PATH = '/e'
15 |
16 | # 使用mel fbank或者mfcc作特征提取
17 | __C.BASE.FEATURE_TYPE = 'mel' #['mel','mfcc']
18 | __C.BASE.OUTPUT_NUM = {'mel': 40,'mfcc': 26}
19 | #是否均值化
20 | __C.BASE.NOMALNIZE = 'none' #['none', 'local', 'local_scalar','cmvn']
21 | __C.BASE.initial_weight = 'logs_lm_tf/lm_train_loss=2.8582.ckpt-2'
22 | #Predict options
23 |
24 | #迭代
25 | __C.BASE.epochs =30
26 | __C.BASE.warmup_periods =10
27 | #学习率
28 | __C.BASE.lr =1e-3
29 | __C.BASE.lr_deep =1e-5
30 |
31 | # Train options
32 | __C.TRAIN = edict()
33 |
34 | __C.TRAIN.BATCH_SIZE = 12
35 | __C.TRAIN.read_files = ['aishell_train.txt']
36 |
37 | # TEST options
38 | __C.TEST = edict()
39 | __C.TEST.BATCH_SIZE = 12
40 | __C.TEST.read_files =['aishell_dev.txt']
41 |
42 | __C.PREDICT = edict()
43 |
44 | # 训练是ctc占比权重 用于解码
45 | __C.PREDICT.CTC_WEIGHT = 0.3
46 |
47 | #ctc beam链路的占比
48 | __C.PREDICT.CTC_SCORING_RATIO = 1.5
49 |
50 | #beam size
51 | __C.PREDICT.BEAM = 10
52 |
53 | __C.PREDICT.PENALTY = 0.0
54 |
55 | # 最终去最好的几个结果
56 | __C.PREDICT.NBEST = 1
57 |
58 | # pb 模型文件的地址 端到段模型
59 | __C.PREDICT.pb = 'pb_save/model.pb'
60 |
61 |
62 |
--------------------------------------------------------------------------------
/config/key.txt:
--------------------------------------------------------------------------------
1 | 你
2 | 是
3 | 对
4 | 数
5 | 学
6 | 还
7 | 工
8 | 程
9 | 更
10 | 有
11 | 热
12 | 情
13 | 所
14 | 以
15 | 大
16 | 家
17 | 可
18 | 多
19 | 关
20 | 注
21 | 股
22 | 市
23 | 了
24 | 如
25 | 果
26 | 想
27 | 搏
28 | 一
29 | 把
30 | 买
31 | 点
32 | 中
33 | 小
34 | 盘
35 | 基
36 | 金
37 | 键
38 | 要
39 | 看
40 | 这
41 | 些
42 | 票
43 | 的
44 | 质
45 | 量
46 | 国
47 | 光
48 | 博
49 | 会
50 | 上
51 | 物
52 | 联
53 | 网
54 | 成
55 | 为
56 | 场
57 | 焦
58 | 智
59 | 慧
60 | 城
61 | 车
62 | 能
63 | 硬
64 | 件
65 | 等
66 | 代
67 | 表
68 | 新
69 | 兴
70 | 产
71 | 业
72 | 正
73 | 逐
74 | 步
75 | 与
76 | 机
77 | 遇
78 | 我
79 | 几
80 | 乎
81 | 每
82 | 天
83 | 都
84 | 在
85 | 生
86 | 意
87 | 到
88 | 种
89 | 况
90 | 据
91 | 证
92 | 报
93 | 资
94 | 讯
95 | 统
96 | 计
97 | 六
98 | 月
99 | 来
100 | 两
101 | 已
102 | 二
103 | 十
104 | 三
105 | 公
106 | 司
107 | 被
108 | 举
109 | 牌
110 | 四
111 | 次
112 | 核
113 | 实
114 | 问
115 | 询
116 | 函
117 | 相
118 | 海
119 | 立
120 | 份
121 | 将
122 | 自
123 | 今
124 | 日
125 | 起
126 | 停
127 | 历
128 | 史
129 | 文
130 | 科
131 | 融
132 | 环
133 | 境
134 | 零
135 | 七
136 | 年
137 | 半
138 | 显
139 | 示
140 | 现
141 | 营
142 | 收
143 | 入
144 | 深
145 | 圳
146 | 香
147 | 港
148 | 距
149 | 离
150 | 不
151 | 英
152 | 里
153 | 泰
154 | 君
155 | 安
156 | 指
157 | 出
158 | 近
159 | 期
160 | 各
161 | 行
162 | 议
163 | 聚
164 | 度
165 | 明
166 | 提
167 | 升
168 | 人
169 | 说
170 | 师
171 | 好
172 | 又
173 | 怎
174 | 么
175 | 样
176 | 货
177 | 黄
178 | 则
179 | 再
180 | 扬
181 | 目
182 | 前
183 | 千
184 | 百
185 | 水
186 | 平
187 | 附
188 | 于
189 | 原
190 | 因
191 | 专
192 | 预
193 | 美
194 | 岸
195 | 线
196 | 未
197 | 内
198 | 重
199 | 塑
200 | 地
201 | 力
202 | 推
203 | 广
204 | 源
205 | 汽
206 | 增
207 | 长
208 | 当
209 | 俗
210 | 也
211 | 路
212 | 马
213 | 个
214 | 们
215 | 销
216 | 售
217 | 继
218 | 续
219 | 保
220 | 持
221 | 维
222 | 分
223 | 之
224 | 至
225 | 五
226 | 就
227 | 东
228 | 投
229 | 块
230 | 钱
231 | 下
232 | 去
233 | 赚
234 | 少
235 | 只
236 | 知
237 | 道
238 | 别
239 | 独
240 | 特
241 | 性
242 | 法
243 | 吗
244 | 元
245 | 周
246 | 波
247 | 动
248 | 踏
249 | 走
250 | 势
251 | 连
252 | 阳
253 | 突
254 | 破
255 | 压
256 | 位
257 | 后
258 | 交
259 | 易
260 | 涨
261 | 他
262 | 强
263 | 调
264 | 债
265 | 务
266 | 限
267 | 及
268 | 政
269 | 府
270 | 延
271 | 朗
272 | 普
273 | 非
274 | 常
275 | 税
276 | 改
277 | 革
278 | 进
279 | 展
280 | 座
281 | 九
282 | 万
283 | 口
284 | 第
285 | 储
286 | 向
287 | 绪
288 | 系
289 | 列
290 | 事
291 | 而
292 | 巨
293 | 恐
294 | 慌
295 | 治
296 | 确
297 | 定
298 | 疲
299 | 软
300 | 迟
301 | 疑
302 | 擅
303 | 写
304 | 作
305 | 由
306 | 着
307 | 似
308 | 态
309 | 布
310 | 局
311 | 乐
312 | 视
313 | 遭
314 | 存
315 | 危
316 | 暴
317 | 风
318 | 断
319 | 卷
320 | 舆
321 | 论
322 | 漩
323 | 涡
324 | 标
325 | 准
326 | 修
327 | 订
328 | 主
329 | 体
330 | 部
331 | 那
332 | 听
333 | 什
334 | 导
335 | 致
336 | 频
337 | 繁
338 | 发
339 | 严
340 | 洪
341 | 灾
342 | 害
343 | 影
344 | 响
345 | 沿
346 | 社
347 | 区
348 | 和
349 | 庭
350 | 沙
351 | 八
352 | 降
353 | 价
354 | 短
355 | 加
356 | 速
357 | 阶
358 | 段
359 | 微
360 | 信
361 | 免
362 | 费
363 | 领
364 | 取
365 | 操
366 | 策
367 | 略
368 | 牛
369 | 否
370 | 真
371 | 需
372 | 此
373 | 单
374 | 宣
375 | 划
376 | 让
377 | 辆
378 | 测
379 | 试
380 | 但
381 | 方
382 | 式
383 | 孤
384 | 掷
385 | 景
386 | 善
387 | 宜
388 | 属
389 | 磋
390 | 商
391 | 执
392 | 副
393 | 总
394 | 裁
395 | 首
396 | 席
397 | 运
398 | 官
399 | 张
400 | 旭
401 | 职
402 | 暂
403 | 无
404 | 变
405 | 化
406 | 级
407 | 邓
408 | 崎
409 | 琳
410 | 龄
411 | 退
412 | 休
413 | 观
414 | 察
415 | 记
416 | 者
417 | 解
418 | 控
419 | 创
420 | 粮
421 | 杆
422 | 企
423 | 并
424 | 初
425 | 愿
426 | 望
427 | 仅
428 | 从
429 | 远
430 | 飞
431 | 称
432 | 打
433 | 心
434 | 章
435 | 阅
436 | 读
437 | 最
438 | 农
439 | 整
440 | 率
441 | 较
442 | 低
443 | 食
444 | 本
445 | 居
446 | 高
447 | 贪
448 | 腐
449 | 落
450 | 管
451 | 理
452 | 朝
453 | 该
454 | 通
455 | 过
456 | 驾
457 | 驶
458 | 放
459 | 何
460 | 处
461 | 趋
462 | 才
463 | 开
464 | 始
465 | 缓
466 | 赛
467 | 决
468 | 题
469 | 权
470 | 争
471 | 夺
472 | 战
473 | 浓
474 | 雾
475 | 笼
476 | 罩
477 | 任
478 | 得
479 | 味
480 | 尘
481 | 埃
482 | 终
483 | 涉
484 | 嫌
485 | 违
486 | 纪
487 | 查
488 | 另
489 | 外
490 | 素
491 | 付
492 | 帆
493 | 顺
494 | 催
495 | 面
496 | 荣
497 | 规
498 | 比
499 | 简
500 | 介
501 | 绍
502 | 办
503 | 门
504 | 槛
505 | 套
506 | 谓
507 | 红
508 | 木
509 | 具
510 | 完
511 | 全
512 | 粗
513 | 制
514 | 滥
515 | 造
516 | 同
517 | 满
518 | 足
519 | 时
520 | 排
521 | 技
522 | 术
523 | 台
524 | 版
525 | 容
526 | 病
527 | 障
528 | 然
529 | 协
530 | 达
531 | 功
532 | 徐
533 | 汇
534 | 建
535 | 筑
536 | 太
537 | 洋
538 | 歇
539 | 武
540 | 钢
541 | 集
542 | 团
543 | 经
544 | 孙
545 | 带
546 | 汤
547 | 臣
548 | 类
549 | 告
550 | 陈
551 | 良
552 | 品
553 | 际
554 | 仍
555 | 令
556 | 欣
557 | 喜
558 | 识
559 | 曙
560 | 用
561 | 户
562 | 共
563 | 享
564 | 域
565 | 财
566 | 述
567 | 消
568 | 息
569 | 候
570 | 很
571 | 山
572 | 西
573 | 服
574 | 土
575 | 炼
576 | 油
577 | 硫
578 | 酸
579 | 黑
580 | 依
581 | 店
582 | 直
583 | 输
584 | 伏
585 | 应
586 | 阿
587 | 巴
588 | 假
589 | 反
590 | 亿
591 | 培
592 | 养
593 | 轻
594 | 支
595 | 悉
596 | 欢
597 | 登
598 | 跑
599 | 希
600 | 纺
601 | 织
602 | 设
603 | 材
604 | 格
605 | 省
606 | 认
607 | 促
608 | 员
609 | 流
610 | 宽
611 | 签
612 | 条
613 | 托
614 | 备
615 | 案
616 | 评
617 | 拉
618 | 游
619 | 铁
620 | 求
621 | 站
622 | 往
623 | 归
624 | 根
625 | 结
626 | 底
627 | 靠
628 | 绩
629 | 做
630 | 撑
631 | 恒
632 | 伊
633 | 藤
634 | 忠
635 | 跨
636 | 电
637 | 演
638 | 疯
639 | 狂
640 | 士
641 | 固
642 | 模
643 | 滑
644 | 贾
645 | 跃
646 | 亭
647 | 彻
648 | 层
649 | 空
650 | 留
651 | 置
652 | 虚
653 | 传
654 | 监
655 | 罚
656 | 温
657 | 龙
658 | 虎
659 | 榜
660 | 卖
661 | 额
662 | 均
663 | 构
664 | 季
665 | 煤
666 | 炭
667 | 板
668 | 房
669 | 械
670 | 昨
671 | 媒
672 | 色
673 | 客
674 | 爱
675 | 回
676 | 转
677 | 型
678 | 名
679 | 其
680 | 锂
681 | 池
682 | 稀
683 | 己
684 | 端
685 | 竞
686 | 优
687 | 利
688 | 链
689 | 伸
690 | 晚
691 | 间
692 | 德
693 | 券
694 | 跟
695 | 踪
696 | 早
697 | 净
698 | 超
699 | 析
700 | 项
701 | 巩
702 | 贸
703 | 随
704 | 酷
705 | 狗
706 | 音
707 | 声
708 | 释
709 | 歉
710 | 赏
711 | 密
712 | 切
713 | 旧
714 | 楼
715 | 补
716 | 贴
717 | 幅
718 | 兼
719 | 组
720 | 刚
721 | 钟
722 | 图
723 | 止
724 | 跌
725 | 委
726 | 照
727 | 寻
728 | 稳
729 | 针
730 | 北
731 | 京
732 | 邮
733 | 采
734 | 访
735 | 湖
736 | 截
737 | 稿
738 | 复
739 | 翻
740 | 午
741 | 沪
742 | 边
743 | 倒
744 | 值
745 | 润
746 | 许
747 | 手
748 | 租
749 | 赁
750 | 尽
751 | 启
752 | 渐
753 | 缩
754 | 暖
755 | 世
756 | 铝
757 | 例
758 | 参
759 | 院
760 | 没
761 | 酵
762 | 旦
763 | 形
764 | 银
765 | 除
766 | 刘
767 | 答
768 | 抗
769 | 险
770 | 闲
771 | 库
772 | 迎
773 | 待
774 | 批
775 | 祁
776 | 屏
777 | 估
778 | 算
779 | 器
780 | 诉
781 | 讼
782 | 跳
783 | 难
784 | 耶
785 | 伦
786 | 曾
787 | 弱
788 | 胀
789 | 咎
790 | 临
791 | 呼
792 | 吁
793 | 耐
794 | 避
795 | 震
796 | 慑
797 | 或
798 | 冲
799 | 击
800 | 贷
801 | 款
802 | 负
803 | 判
804 | 冷
805 | 虽
806 | 活
807 | 屋
808 | 济
809 | 衡
810 | 录
811 | 气
812 | 云
813 | 合
814 | 购
815 | 档
816 | 招
817 | 书
818 | 扩
819 | 伐
820 | 亦
821 | 快
822 | 够
823 | 崛
824 | 羊
825 | 奶
826 | 粉
827 | 使
828 | 乳
829 | 清
830 | 蛋
831 | 白
832 | 干
833 | 漂
834 | 亮
835 | 吃
836 | 饱
837 | 健
838 | 众
839 | 盯
840 | 住
841 | 芯
842 | 片
843 | 透
844 | 露
845 | 拟
846 | 筹
847 | 珠
848 | 隆
849 | 紧
850 | 笔
851 | 状
852 | 福
853 | 田
854 | 耗
855 | 耀
856 | 界
857 | 玻
858 | 璃
859 | 供
860 | 澳
861 | 韩
862 | 垄
863 | 益
864 | 考
865 | 老
866 | 像
867 | 爸
868 | 象
869 | 极
870 | 阻
871 | 碍
872 | 挂
873 | 曹
874 | 旺
875 | 雨
876 | 绸
877 | 缪
878 | 犯
879 | 啊
880 | 渠
881 | 包
882 | 括
883 | 淘
884 | 宝
885 | 猫
886 | 号
887 | 苏
888 | 宁
889 | 纯
890 | 医
891 | 疗
892 | 康
893 | 思
894 | 哲
895 | 永
896 | 甚
897 | 觉
898 | 语
899 | 言
900 | 仰
901 | 互
902 | 殖
903 | 头
904 | 朋
905 | 友
906 | 话
907 | 码
908 | 肉
909 | 搜
910 | 索
911 | 接
912 | 吓
913 | 遵
914 | 守
915 | 律
916 | 究
917 | 竟
918 | 仔
919 | 细
920 | 赔
921 | 树
922 | 雄
923 | 壮
924 | 志
925 | 扶
926 | 赵
927 | 薇
928 | 瑞
929 | 敏
930 | 担
931 | 尔
932 | 董
933 | 找
934 | 腔
935 | 越
936 | 眼
937 | 镜
938 | 教
939 | 育
940 | 军
941 | 综
942 | 卡
943 | 亚
944 | 努
945 | 身
946 | 剩
947 | 花
948 | 倍
949 | 子
950 | 烧
951 | 戏
952 | 必
953 | 须
954 | 轮
955 | 猪
956 | 范
957 | 效
958 | 礼
959 | 充
960 | 民
961 | 币
962 | 获
963 | 按
964 | 配
965 | 册
966 | 双
967 | 凤
968 | 凰
969 | 涅
970 | 槃
971 | 验
972 | 燕
973 | 塘
974 | 迪
975 | 麦
976 | 趣
977 | 峰
978 | 垫
979 | 施
980 | 习
981 | 贯
982 | 失
983 | 络
984 | 精
985 | 神
986 | 园
987 | 措
988 | 叫
989 | 彩
990 | 厂
991 | 便
992 | 故
993 | 伴
994 | 洗
995 | 背
996 | 暗
997 | 藏
998 | 玄
999 | 呢
1000 | 劳
1001 | 湾
1002 | 引
1003 | 摸
1004 | 石
1005 | 河
1006 | 婷
1007 | 球
1008 | 渤
1009 | 且
1010 | 逾
1011 | 佛
1012 | 呈
1013 | 岁
1014 | 末
1015 | 鲜
1016 | 静
1017 | 垒
1018 | 伯
1019 | 爵
1020 | 江
1021 | 诗
1022 | 丹
1023 | 顿
1024 | 受
1025 | 虑
1026 | 攻
1027 | 陷
1028 | 掉
1029 | 华
1030 | 累
1031 | 减
1032 | 吨
1033 | 傅
1034 | 饮
1035 | 牵
1036 | 抢
1037 | 占
1038 | 追
1039 | 溯
1040 | 纳
1041 | 庆
1042 | 桥
1043 | 她
1044 | 错
1045 | 尚
1046 | 恰
1047 | 角
1048 | 倾
1049 | 闻
1050 | 积
1051 | 护
1052 | 掌
1053 | 缴
1054 | 乱
1055 | 谋
1056 | 急
1057 | 刺
1058 | 纠
1059 | 亏
1060 | 损
1061 | 先
1062 | 俄
1063 | 亥
1064 | 州
1065 | 廊
1066 | 逢
1067 | 申
1068 | 赎
1069 | 肥
1070 | 豪
1071 | 宅
1072 | 绿
1073 | 玫
1074 | 瑰
1075 | 印
1076 | 吸
1077 | 航
1078 | 潜
1079 | 挖
1080 | 掘
1081 | 骚
1082 | 荡
1083 | 义
1084 | 川
1085 | 封
1086 | 棘
1087 | 泥
1088 | 哪
1089 | 洁
1090 | 责
1091 | 助
1092 | 糟
1093 | 糕
1094 | 奢
1095 | 侈
1096 | 淀
1097 | 室
1098 | 研
1099 | 既
1100 | 慢
1101 | 脚
1102 | 选
1103 | 择
1104 | 熟
1105 | 肯
1106 | 苹
1107 | 劲
1108 | 即
1109 | 允
1110 | 膜
1111 | 屈
1112 | 队
1113 | 伍
1114 | 皆
1115 | 盈
1116 | 刻
1117 | 悬
1118 | 摩
1119 | 克
1120 | 斯
1121 | 剑
1122 | 撤
1123 | 探
1124 | 郑
1125 | 旁
1126 | 般
1127 | 激
1128 | 烈
1129 | 披
1130 | 南
1131 | 丰
1132 | 馈
1133 | 伙
1134 | 割
1135 | 给
1136 | 侧
1137 | 迅
1138 | 字
1139 | 塔
1140 | 顶
1141 | 舍
1142 | 坚
1143 | 玩
1144 | 暇
1145 | 征
1146 | 差
1147 | 异
1148 | 党
1149 | 央
1150 | 冬
1151 | 猛
1152 | 夏
1153 | 旗
1154 | 滨
1155 | 螺
1156 | 检
1157 | 酒
1158 | 扎
1159 | 伞
1160 | 循
1161 | 惠
1162 | 廉
1163 | 私
1164 | 募
1165 | 齐
1166 | 勘
1167 | 约
1168 | 凸
1169 | 黯
1170 | 淡
1171 | 罗
1172 | 星
1173 | 移
1174 | 妻
1175 | 男
1176 | 幸
1177 | 某
1178 | 讲
1179 | 围
1180 | 径
1181 | 拿
1182 | 鼓
1183 | 励
1184 | 它
1185 | 禁
1186 | 乘
1187 | 裂
1188 | 折
1189 | 射
1190 | 洲
1191 | 赞
1192 | 奖
1193 | 屑
1194 | 顾
1195 | 蔡
1196 | 胜
1197 | 腾
1198 | 陆
1199 | 跻
1200 | 巧
1201 | 篇
1202 | 佳
1203 | 兆
1204 | 恢
1205 | 叛
1206 | 坦
1207 | 途
1208 | 迥
1209 | 纷
1210 | 赢
1211 | 念
1212 | 搭
1213 | 命
1214 | 握
1215 | 困
1216 | 刷
1217 | 见
1218 | 梳
1219 | 瞄
1220 | 词
1221 | 妈
1222 | 唤
1223 | 换
1224 | 叶
1225 | 悟
1226 | 轨
1227 | 药
1228 | 抵
1229 | 押
1230 | 凑
1231 | 奈
1232 | 节
1233 | 琴
1234 | 颇
1235 | 青
1236 | 睐
1237 | 铺
1238 | 承
1239 | 弹
1240 | 著
1241 | 咨
1242 | 锡
1243 | 洽
1244 | 谈
1245 | 挤
1246 | 兑
1247 | 审
1248 | 欧
1249 | 料
1250 | 逆
1251 | 丽
1252 | 诺
1253 | 富
1254 | 缠
1255 | 忽
1256 | 绝
1257 | 死
1258 | 扭
1259 | 邦
1260 | 赤
1261 | 剧
1262 | 乔
1263 | 胞
1264 | 左
1265 | 概
1266 | 拓
1267 | 岭
1268 | 镑
1269 | 束
1270 | 横
1271 | 沉
1272 | 诞
1273 | 杉
1274 | 赐
1275 | 挡
1276 | 若
1277 | 唯
1278 | 邀
1279 | 请
1280 | 班
1281 | 昂
1282 | 帕
1283 | 替
1284 | 尼
1285 | 缘
1286 | 播
1287 | 蒸
1288 | 遍
1289 | 混
1290 | 贫
1291 | 穗
1292 | 燃
1293 | 纸
1294 | 稍
1295 | 尤
1296 | 谨
1297 | 慎
1298 | 窗
1299 | 散
1300 | 迹
1301 | 鉴
1302 | 怕
1303 | 怯
1304 | 妙
1305 | 圆
1306 | 递
1307 | 韵
1308 | 火
1309 | 闭
1310 | 爆
1311 | 脱
1312 | 敲
1313 | 悄
1314 | 埋
1315 | 振
1316 | 辩
1317 | 予
1318 | 街
1319 | 宗
1320 | 抽
1321 | 缺
1322 | 契
1323 | 猎
1324 | 豹
1325 | 磅
1326 | 蓝
1327 | 番
1328 | 炒
1329 | 盛
1330 | 掩
1331 | 盖
1332 | 仓
1333 | 适
1334 | 擦
1335 | 睛
1336 | 辨
1337 | 液
1338 | 映
1339 | 逻
1340 | 辑
1341 | 儿
1342 | 句
1343 | 誉
1344 | 秋
1345 | 绎
1346 | 抱
1347 | 凭
1348 | 借
1349 | 骤
1350 | 威
1351 | 偏
1352 | 账
1353 | 抓
1354 | 胆
1355 | 船
1356 | 忧
1357 | 荐
1358 | 锤
1359 | 渡
1360 | 碧
1361 | 桂
1362 | 仙
1363 | 林
1364 | 碑
1365 | 饿
1366 | 寿
1367 | 禀
1368 | 赋
1369 | 耕
1370 | 汰
1371 | 偿
1372 | 础
1373 | 署
1374 | 忘
1375 | 豆
1376 | 贵
1377 | 墓
1378 | 蕴
1379 | 含
1380 | 矿
1381 | 柴
1382 | 葛
1383 | 兰
1384 | 潮
1385 | 佐
1386 | 迫
1387 | 谜
1388 | 误
1389 | 乏
1390 | 惧
1391 | 李
1392 | 芳
1393 | 右
1394 | 茅
1395 | 糖
1396 | 寄
1397 | 惨
1398 | 亟
1399 | 滴
1400 | 迁
1401 | 敢
1402 | 梯
1403 | 蒙
1404 | 感
1405 | 欺
1406 | 骗
1407 | 女
1408 | 姻
1409 | 瓜
1410 | 惊
1411 | 讶
1412 | 幕
1413 | 衔
1414 | 津
1415 | 符
1416 | 夹
1417 | 缝
1418 | 妆
1419 | 却
1420 | 挺
1421 | 奏
1422 | 仲
1423 | 奥
1424 | 贡
1425 | 献
1426 | 撇
1427 | 夜
1428 | 霾
1429 | 旬
1430 | 圈
1431 | 拒
1432 | 防
1433 | 赌
1434 | 毒
1435 | 召
1436 | 沟
1437 | 萌
1438 | 辞
1439 | 挑
1440 | 吧
1441 | 序
1442 | 忡
1443 | 阵
1444 | 衣
1445 | 彰
1446 | 勇
1447 | 郝
1448 | 伟
1449 | 喝
1450 | 泸
1451 | 窖
1452 | 闯
1453 | 春
1454 | 忙
1455 | 碌
1456 | 宿
1457 | 猜
1458 | 浦
1459 | 泛
1460 | 辅
1461 | 课
1462 | 堂
1463 | 授
1464 | 泼
1465 | 胁
1466 | 蓬
1467 | 勃
1468 | 驱
1469 | 匮
1470 | 炸
1471 | 唱
1472 | 畅
1473 | 送
1474 | 寒
1475 | 久
1476 | 咋
1477 | 漠
1478 | 污
1479 | 染
1480 | 欠
1481 | 丁
1482 | 冰
1483 | 捧
1484 | 餐
1485 | 厨
1486 | 垃
1487 | 圾
1488 | 潍
1489 | 隐
1490 | 娱
1491 | 冠
1492 | 松
1493 | 枪
1494 | 攀
1495 | 牙
1496 | 迄
1497 | 斗
1498 | 惯
1499 | 败
1500 | 群
1501 | 杠
1502 | 装
1503 | 貌
1504 | 飙
1505 | 贬
1506 | 遗
1507 | 摊
1508 | 薄
1509 | 梅
1510 | 雅
1511 | 黛
1512 | 帮
1513 | 毛
1514 | 鸡
1515 | 盐
1516 | 拼
1517 | 脸
1518 | 郊
1519 | 赖
1520 | 王
1521 | 晓
1522 | 泡
1523 | 沫
1524 | 甘
1525 | 肃
1526 | 喻
1527 | 偷
1528 | 袭
1529 | 珍
1530 | 血
1531 | 童
1532 | 鞋
1533 | 颓
1534 | 墨
1535 | 哥
1536 | 疾
1537 | 奔
1538 | 羽
1539 | 祖
1540 | 耳
1541 | 艺
1542 | 谢
1543 | 芝
1544 | 诊
1545 | 锁
1546 | 菲
1547 | 晋
1548 | 佩
1549 | 讨
1550 | 冻
1551 | 挽
1552 | 架
1553 | 柱
1554 | 您
1555 | 纵
1556 | 伤
1557 | 疆
1558 | 昌
1559 | 吉
1560 | 县
1561 | 韶
1562 | 米
1563 | 毕
1564 | 灵
1565 | 汉
1566 | 诟
1567 | 抛
1568 | 描
1569 | 胎
1570 | 旅
1571 | 雷
1572 | 浩
1573 | 缔
1574 | 警
1575 | 谷
1576 | 堪
1577 | 艰
1578 | 啧
1579 | 扰
1580 | 萎
1581 | 植
1582 | 斩
1583 | 梦
1584 | 幻
1585 | 斌
1586 | 酮
1587 | 卵
1588 | 磷
1589 | 脂
1590 | 皂
1591 | 苷
1592 | 溶
1593 | 纤
1594 | 吴
1595 | 删
1596 | 井
1597 | 钥
1598 | 匙
1599 | 弛
1600 | 冒
1601 | 暑
1602 | 杭
1603 | 萧
1604 | 纽
1605 | 螳
1606 | 螂
1607 | 捕
1608 | 蝉
1609 | 雀
1610 | 盟
1611 | 谁
1612 | 刊
1613 | 载
1614 | 厅
1615 | 沃
1616 | 挫
1617 | 麻
1618 | 柳
1619 | 逼
1620 | 诸
1621 | 陶
1622 | 瞒
1623 | 僵
1624 | 尸
1625 | 履
1626 | 捐
1627 | 救
1628 | 母
1629 | 丑
1630 | 诲
1631 | 扣
1632 | 浪
1633 | 钛
1634 | 嘲
1635 | 笑
1636 | 梁
1637 | 怀
1638 | 督
1639 | 钩
1640 | 砥
1641 | 砺
1642 | 瘫
1643 | 痪
1644 | 衷
1645 | 吆
1646 | 勿
1647 | 裕
1648 | 拖
1649 | 舰
1650 | 祥
1651 | 荼
1652 | 烦
1653 | 偶
1654 | 溢
1655 | 聘
1656 | 村
1657 | 漫
1658 | 啥
1659 | 酣
1660 | 徽
1661 | 岗
1662 | 绕
1663 | 摹
1664 | 森
1665 | 野
1666 | 迷
1667 | 浙
1668 | 殊
1669 | 盼
1670 | 茶
1671 | 聊
1672 | 郭
1673 | 赠
1674 | 诚
1675 | 杂
1676 | 饭
1677 | 乌
1678 | 镇
1679 | 籍
1680 | 亲
1681 | 吹
1682 | 惩
1683 | 揪
1684 | 蛀
1685 | 虫
1686 | 尝
1687 | 臭
1688 | 氧
1689 | 闹
1690 | 魄
1691 | 训
1692 | 秘
1693 | 皇
1694 | 丝
1695 | 毫
1696 | 桩
1697 | 俱
1698 | 挥
1699 | 抉
1700 | 坡
1701 | 父
1702 | 芙
1703 | 蓉
1704 | 姐
1705 | 辄
1706 | 拥
1707 | 胡
1708 | 灰
1709 | 旨
1710 | 钻
1711 | 枣
1712 | 闪
1713 | 舵
1714 | 蓄
1715 | 迈
1716 | 昔
1717 | 触
1718 | 皮
1719 | 典
1720 | 劝
1721 | 朱
1722 | 啸
1723 | f
1724 | s
1725 | g
1726 | 孩
1727 | 妥
1728 | 宏
1729 | 泵
1730 | 壁
1731 | 忍
1732 | 楚
1733 | 忐
1734 | 忑
1735 | 苗
1736 | 圩
1737 | 廷
1738 | 腹
1739 | 笋
1740 | 携
1741 | 硅
1742 | 残
1743 | 痕
1744 | 愤
1745 | 怒
1746 | 厚
1747 | 黎
1748 | 孵
1749 | 菱
1750 | 轿
1751 | 艾
1752 | 诈
1753 | 粹
1754 | 斤
1755 | 陕
1756 | 榆
1757 | 棚
1758 | 尿
1759 | 患
1760 | 颖
1761 | 盲
1762 | 赶
1763 | 杜
1764 | 撰
1765 | 磨
1766 | 弃
1767 | 隔
1768 | 遐
1769 | 妮
1770 | 癌
1771 | 症
1772 | 兵
1773 | 悦
1774 | 薪
1775 | 莱
1776 | 炮
1777 | 闸
1778 | 衰
1779 | 滞
1780 | 砸
1781 | 拔
1782 | 蜜
1783 | 曝
1784 | 觑
1785 | 欲
1786 | 舌
1787 | 殡
1788 | 葬
1789 | 祺
1790 | 唐
1791 | 拆
1792 | 酬
1793 | 垂
1794 | 族
1795 | 侵
1796 | 仪
1797 | 馆
1798 | 匈
1799 | 碰
1800 | 兜
1801 | 练
1802 | 唏
1803 | 嘘
1804 | 擎
1805 | 晰
1806 | 仿
1807 | 画
1808 | 疫
1809 | 饰
1810 | 肤
1811 | 肆
1812 | 霍
1813 | 孕
1814 | 妇
1815 | 泄
1816 | 弥
1817 | 姓
1818 | 钜
1819 | 愈
1820 | 渭
1821 | 捞
1822 | 摆
1823 | 杀
1824 | 僻
1825 | 奸
1826 | 泉
1827 | 沸
1828 | 疼
1829 | 卫
1830 | 鸣
1831 | 拨
1832 | 草
1833 | 袖
1834 | 舞
1835 | 悲
1836 | 汾
1837 | 坊
1838 | 曲
1839 | 慕
1840 | 撬
1841 | 杨
1842 | 宇
1843 | 栋
1844 | 辖
1845 | 锐
1846 | 穿
1847 | 梭
1848 | 骨
1849 | 串
1850 | 沈
1851 | 铭
1852 | 婴
1853 | 幼
1854 | 贩
1855 | 桶
1856 | 壳
1857 | 糊
1858 | 敷
1859 | 盒
1860 | 届
1861 | 校
1862 | 庞
1863 | 恼
1864 | 歧
1865 | 编
1866 | 稻
1867 | 彦
1868 | 丛
1869 | 紫
1870 | 辜
1871 | 丧
1872 | 挣
1873 | 铂
1874 | 涛
1875 | 寸
1876 | 凯
1877 | 氢
1878 | 澄
1879 | 贝
1880 | 恩
1881 | 匿
1882 | 翡
1883 | 翠
1884 | 飓
1885 | 耽
1886 | 矛
1887 | 盾
1888 | 叠
1889 | 抬
1890 | 尊
1891 | 炉
1892 | 醒
1893 | 聪
1894 | 魔
1895 | 疏
1896 | 奇
1897 | 蹦
1898 | 坏
1899 | 废
1900 | 脑
1901 | 韬
1902 | 晦
1903 | 潘
1904 | 援
1905 | 勋
1906 | 辈
1907 | 瓶
1908 | 颈
1909 | 哗
1910 | 哄
1911 | 坐
1912 | 狐
1913 | 驰
1914 | 砍
1915 | 崇
1916 | 烟
1917 | 孔
1918 | 狼
1919 | 甲
1920 | 鹿
1921 | 慈
1922 | 睹
1923 | 鲁
1924 | 峻
1925 | 赴
1926 | 派
1927 | 喀
1928 | 译
1929 | 逸
1930 | 役
1931 | 庄
1932 | 祝
1933 | 翁
1934 | 肇
1935 | 灯
1936 | 撞
1937 | 塞
1938 | 俊
1939 | 晖
1940 | 泽
1941 | 汹
1942 | 柯
1943 | 壶
1944 | 汪
1945 | 孟
1946 | 匹
1947 | 痛
1948 | 践
1949 | 隅
1950 | 顽
1951 | 郁
1952 | 拍
1953 | 碳
1954 | 亡
1955 | 穆
1956 | 夫
1957 | 罪
1958 | 烂
1959 | 凝
1960 | 嗅
1961 | 兹
1962 | 遣
1963 | 艘
1964 | 艇
1965 | 宾
1966 | 轰
1967 | 驻
1968 | 渔
1969 | 柜
1970 | 硕
1971 | 返
1972 | 纲
1973 | 奉
1974 | 扮
1975 | 睦
1976 | 邻
1977 | 卢
1978 | 劣
1979 | 旋
1980 | 钞
1981 | 秩
1982 | 鹰
1983 | 亨
1984 | 弗
1985 | 踝
1986 | 墙
1987 | 辟
1988 | 蒂
1989 | 褒
1990 | 屡
1991 | 俨
1992 | 古
1993 | 阔
1994 | 凌
1995 | 篮
1996 | 帅
1997 | 陌
1998 | 咸
1999 | 沣
2000 | 缜
2001 | 侦
2002 | 膨
2003 | 拳
2004 | 甸
2005 | 惑
2006 | 拐
2007 | 炕
2008 | 苦
2009 | 趟
2010 | 骑
2011 | 乙
2012 | 添
2013 | 剂
2014 | 踱
2015 | 寥
2016 | 讳
2017 | 潭
2018 | 滚
2019 | 熊
2020 | 牢
2021 | 汗
2022 | 遥
2023 | 幽
2024 | 默
2025 | 搞
2026 | 钴
2027 | 镍
2028 | 脉
2029 | 削
2030 | 陂
2031 | 敦
2032 | 戒
2033 | 憔
2034 | 悴
2035 | 惫
2036 | 巡
2037 | 厦
2038 | 卧
2039 | 榷
2040 | 楠
2041 | 夸
2042 | 拭
2043 | 婆
2044 | 岳
2045 | 帝
2046 | 僚
2047 | 侣
2048 | 详
2049 | 妨
2050 | 矩
2051 | 倪
2052 | 卓
2053 | 悍
2054 | 雪
2055 | 勤
2056 | 骇
2057 | 毅
2058 | 烫
2059 | 敌
2060 | 嘴
2061 | 怪
2062 | 薛
2063 | 敞
2064 | 斜
2065 | 瞧
2066 | 涌
2067 | 哈
2068 | 缆
2069 | 趾
2070 | 诿
2071 | 杯
2072 | 琐
2073 | 牍
2074 | 兔
2075 | 瓦
2076 | 谐
2077 | 兄
2078 | 弟
2079 | 敬
2080 | 涵
2081 | 浮
2082 | 坑
2083 | 悔
2084 | 遏
2085 | 仁
2086 | 叹
2087 | 酌
2088 | 锋
2089 | 撮
2090 | 乡
2091 | 夕
2092 | 氛
2093 | 刑
2094 | 歌
2095 | 徒
2096 | 噪
2097 | 床
2098 | 碗
2099 | 筷
2100 | 奋
2101 | 页
2102 | 岩
2103 | 壤
2104 | 扔
2105 | 穷
2106 | 盗
2107 | 窃
2108 | 拘
2109 | 攒
2110 | 傻
2111 | 袋
2112 | 腻
2113 | 焰
2114 | 娃
2115 | 氏
2116 | 袁
2117 | 滋
2118 | 娄
2119 | 拜
2120 | 惕
2121 | 洒
2122 | 屁
2123 | 怖
2124 | 恶
2125 | 戚
2126 | 丢
2127 | 颜
2128 | 煮
2129 | 锅
2130 | 毗
2131 | 跪
2132 | 咖
2133 | 喱
2134 | 酱
2135 | 殴
2136 | 蹲
2137 | 蹴
2138 | 谴
2139 | 菌
2140 | 抨
2141 | 侯
2142 | 凡
2143 | 怨
2144 | 3
2145 | 尴
2146 | 尬
2147 | 醋
2148 | 痊
2149 | 萨
2150 | 叙
2151 | 汀
2152 | 阁
2153 | 岛
2154 | 棋
2155 | 碎
2156 | 鸟
2157 | 谣
2158 | 尺
2159 | 竿
2160 | 逝
2161 | 羚
2162 | 揽
2163 | 耸
2164 | 葆
2165 | 逗
2166 | 舒
2167 | 绘
2168 | 歼
2169 | 灭
2170 | 懊
2171 | 胶
2172 | 彼
2173 | 荒
2174 | 陀
2175 | 灿
2176 | 璧
2177 | 峭
2178 | 甜
2179 | 勾
2180 | 隧
2181 | 凶
2182 | 厮
2183 | 猝
2184 | 扼
2185 | 腕
2186 | 厉
2187 | 哭
2188 | 挚
2189 | 巅
2190 | 阴
2191 | 吵
2192 | 肢
2193 | 遂
2194 | 磊
2195 | 忆
2196 | 慨
2197 | 睡
2198 | 阮
2199 | 沦
2200 | 侥
2201 | 鼻
2202 | 霸
2203 | 莫
2204 | 躲
2205 | 窄
2206 | 鄞
2207 | 箭
2208 | 婉
2209 | 瞬
2210 | 恍
2211 | 惚
2212 | 渊
2213 | 胸
2214 | 肿
2215 | 瘤
2216 | 陪
2217 | 惹
2218 | 胳
2219 | 膊
2220 | 肘
2221 | 踢
2222 | 愉
2223 | 耍
2224 | 泳
2225 | 裙
2226 | 崖
2227 | 抚
2228 | 蜂
2229 | 啦
2230 | 乖
2231 | 飘
2232 | 傍
2233 | 覆
2234 | 乃
2235 | 姜
2236 | 弄
2237 | 曼
2238 | 霞
2239 | 怜
2240 | 恨
2241 | 躺
2242 | 呀
2243 | 轩
2244 | 甩
2245 | 埔
2246 | 琼
2247 | 哦
2248 | 喊
2249 | 桃
2250 | 侠
2251 | 菊
2252 | 俩
2253 | 淮
2254 | 竹
2255 | 槐
2256 | 嘉
2257 | 嘞
2258 | 懂
2259 | 浑
2260 | 鱼
2261 | 匀
2262 | 呗
2263 | 嘛
2264 | 瑾
2265 | 瘦
2266 | 噶
2267 | 娟
2268 | 湘
2269 | 倘
2270 | 瓯
2271 | 鸳
2272 | 鸯
2273 | 谭
2274 | 杰
2275 | 齿
2276 | 拢
2277 | 恋
2278 | 铠
2279 | 朵
2280 | 秀
2281 | 弯
2282 | 瓷
2283 | 粘
2284 | 蒲
2285 | 歪
2286 | 脖
2287 | 冈
2288 | 裤
2289 | 贱
2290 | 钓
2291 | 唧
2292 | 炫
2293 | 筒
2294 | 轴
2295 | 株
2296 | 蕊
2297 | 妹
2298 | 鳞
2299 | 咱
2300 | 爽
2301 | 摔
2302 | 吟
2303 | 咏
2304 | 鹏
2305 | 姑
2306 | 瞎
2307 | 扯
2308 | 庙
2309 | 玉
2310 | 膝
2311 | 疤
2312 | 鬼
2313 | 眯
2314 | 绮
2315 | 邱
2316 | 宋
2317 | 媛
2318 | 寺
2319 | 芒
2320 | 魏
2321 | 辉
2322 | 蠢
2323 | 俑
2324 | 眷
2325 | 渴
2326 | 臂
2327 | 垮
2328 | 嗡
2329 | 崔
2330 | 宪
2331 | 叵
2332 | 茨
2333 | 莎
2334 | 笨
2335 | 愧
2336 | 橱
2337 | 剥
2338 | 鸦
2339 | 坟
2340 | 诱
2341 | 峨
2342 | 眉
2343 | 冤
2344 | 枉
2345 | 娇
2346 | 掐
2347 | 哟
2348 | 逃
2349 | 寝
2350 | 莉
2351 | 哀
2352 | 堵
2353 | 嫂
2354 | 脾
2355 | 抄
2356 | 屌
2357 | 伺
2358 | 媳
2359 | 噢
2360 | 爪
2361 | 填
2362 | 娘
2363 | 崽
2364 | 啵
2365 | 咧
2366 | 嗯
2367 | 谎
2368 | 吻
2369 | 骂
2370 | 绵
2371 | 浴
2372 | 昏
2373 | 瓮
2374 | 脆
2375 | 锦
2376 | 铜
2377 | 余
2378 | 呵
2379 | 靴
2380 | 婚
2381 | 俺
2382 | 氓
2383 | 怡
2384 | 泊
2385 | 龚
2386 | 醉
2387 | 摄
2388 | 瑕
2389 | 疵
2390 | 辕
2391 | 膏
2392 | 肾
2393 | 竭
2394 | 尾
2395 | 抒
2396 | 腿
2397 | 兽
2398 | 凋
2399 | 苑
2400 | 庸
2401 | 咩
2402 | 绒
2403 | 璇
2404 | 呱
2405 | 盆
2406 | 磁
2407 | 沧
2408 | 勐
2409 | 钾
2410 | 熏
2411 | 魂
2412 | 晨
2413 | 呆
2414 | 铃
2415 | 喧
2416 | 捶
2417 | 搬
2418 | 箱
2419 | 菇
2420 | 辣
2421 | 椒
2422 | 唉
2423 | 躁
2424 | 戴
2425 | 晗
2426 | 熬
2427 | 祠
2428 | 伢
2429 | 戳
2430 | 孪
2431 | 秦
2432 | 恁
2433 | 犊
2434 | 猴
2435 | 哑
2436 | 皓
2437 | 涯
2438 | 玲
2439 | 孝
2440 | 醛
2441 | 柄
2442 | 驼
2443 | 睇
2444 | 泻
2445 | 乞
2446 | 丐
2447 | 羡
2448 | 插
2449 | 炎
2450 | 宫
2451 | 喷
2452 | 氟
2453 | 宠
2454 | 梨
2455 | 峡
2456 | 仇
2457 | 驴
2458 | 姨
2459 | 睿
2460 | 霉
2461 | 咪
2462 | 冉
2463 | 愁
2464 | 搅
2465 | 拌
2466 | 莹
2467 | 沛
2468 | 辛
2469 | 崩
2470 | 溃
2471 | 祭
2472 | 萱
2473 | 闷
2474 | 瘾
2475 | 鼎
2476 | 唔
2477 | 鸿
2478 | 蔚
2479 | 弘
2480 | 狱
2481 | 浆
2482 | 逛
2483 | 玮
2484 | 岂
2485 | 晶
2486 | 腺
2487 | 侍
2488 | 栗
2489 | 闫
2490 | 曦
2491 | 雯
2492 | 抹
2493 | 艳
2494 | 鑫
2495 | 硼
2496 | 舅
2497 | 俯
2498 | 喉
2499 | 吮
2500 | 啡
2501 | 骅
2502 | 溺
2503 | 晃
2504 | 惜
2505 | 萍
2506 | 澡
2507 | 菜
2508 | 摘
2509 | 瑶
2510 | 厌
2511 | 阐
2512 | 洛
2513 | 锄
2514 | 禾
2515 | 舟
2516 | 蛤
2517 | 胥
2518 | 寇
2519 | 勒
2520 | 郎
2521 | 喔
2522 | 吐
2523 | 鹅
2524 | 漱
2525 | 吖
2526 | 叔
2527 | 踩
2528 | 哩
2529 | 揍
2530 | 芽
2531 | 尖
2532 | 詹
2533 | 桐
2534 | 寂
2535 | 寞
2536 | 寡
2537 | 媚
2538 | 饥
2539 | 刀
2540 | 弦
2541 | 涂
2542 | 撒
2543 | 誓
2544 | 嗜
2545 | 朔
2546 | 蒋
2547 | 雌
2548 | 枚
2549 | 爷
2550 | 呻
2551 | 渺
2552 | 姊
2553 | 翔
2554 | 慰
2555 | 圣
2556 | 拷
2557 | 彬
2558 | 茹
2559 | 绑
2560 | 拾
2561 | 鹃
2562 | 衲
2563 | 龟
2564 | 淑
2565 | 吕
2566 | 靓
2567 | 颊
2568 | 匠
2569 | 镶
2570 | 咳
2571 | 嗽
2572 | 纹
2573 | 浣
2574 | 浒
2575 | 橘
2576 | 焉
2577 | 诅
2578 | 咒
2579 | 瑜
2580 | 伽
2581 | 坯
2582 | 锯
2583 | 捉
2584 | 琪
2585 | 畔
2586 | 坤
2587 | 帖
2588 | 嘟
2589 | 饼
2590 | 缙
2591 | 苍
2592 | 蝇
2593 | 羞
2594 | 辱
2595 | 禧
2596 | 潢
2597 | 驳
2598 | 昊
2599 | 甫
2600 | 壕
2601 | 咯
2602 | 舔
2603 | 莲
2604 | 佬
2605 | 砖
2606 | 翼
2607 | 狭
2608 | 丫
2609 | 篆
2610 | 泣
2611 | 袜
2612 | 溜
2613 | 哎
2614 | 肠
2615 | 溪
2616 | 蘑
2617 | 祸
2618 | 烤
2619 | 瑟
2620 | 芬
2621 | 棒
2622 | 妞
2623 | 姚
2624 | 潇
2625 | 疸
2626 | 陡
2627 | 蛮
2628 | 腋
2629 | 襟
2630 | 懒
2631 | 裹
2632 | 遮
2633 | 堆
2634 | 晴
2635 | 捡
2636 | 靳
2637 | 裸
2638 | 耿
2639 | 摇
2640 | 雁
2641 | 胖
2642 | 倩
2643 | 踊
2644 | 楷
2645 | 哇
2646 | 昆
2647 | 捷
2648 | 岚
2649 | 坪
2650 | 妾
2651 | 陋
2652 | 娶
2653 | 璜
2654 | 簧
2655 | 澜
2656 | 弓
2657 | 嗝
2658 | 狡
2659 | 猾
2660 | 哼
2661 | 钉
2662 | 娜
2663 | 谱
2664 | 暧
2665 | 昧
2666 | 蝙
2667 | 蝠
2668 | 喃
2669 | 瞑
2670 | 葵
2671 | 蹭
2672 | 柔
2673 | 砂
2674 | 粒
2675 | 幂
2676 | 恭
2677 | 痘
2678 | 邢
2679 | 惟
2680 | 乾
2681 | 饶
2682 | 咬
2683 | 馨
2684 | 肌
2685 | 唇
2686 | 珑
2687 | 暄
2688 | 钧
2689 | 薰
2690 | 萝
2691 | 嘻
2692 | 玛
2693 | 坝
2694 | 褥
2695 | 疮
2696 | 爹
2697 | 炙
2698 | 贤
2699 | 鳕
2700 | 坠
2701 | 倦
2702 | 壹
2703 | 贰
2704 | 嫩
2705 | 湛
2706 | 嚣
2707 | 彭
2708 | 樱
2709 | 涓
2710 | 髓
2711 | 寨
2712 | 呐
2713 | 梓
2714 | 臻
2715 | 麟
2716 | 窝
2717 | 栖
2718 | 搁
2719 | 爬
2720 | 豌
2721 | 荚
2722 | 廖
2723 | 怂
2724 | 恿
2725 | 伪
2726 | 噩
2727 | 雍
2728 | 嫁
2729 | 喽
2730 | 剪
2731 | 芸
2732 | 菁
2733 | 囱
2734 | 坛
2735 | 鄂
2736 | 颅
2737 | 彪
2738 | 窟
2739 | 坎
2740 | 坷
2741 | 昼
2742 | 翰
2743 | 逊
2744 | 毁
2745 | 叽
2746 | 卑
2747 | 煌
2748 | 丈
2749 | 罢
2750 | 斧
2751 | 铲
2752 | 撸
2753 | 茜
2754 | 粱
2755 | 丘
2756 | 凉
2757 | 趴
2758 | 棍
2759 | 猥
2760 | 呃
2761 | 钰
2762 | 阀
2763 | 亵
2764 | 渎
2765 | 琉
2766 | 狸
2767 | 涟
2768 | 秒
2769 | 冕
2770 | 晕
2771 | 娓
2772 | 傲
2773 | 邹
2774 | 柚
2775 | 掺
2776 | 肚
2777 | 牺
2778 | 牲
2779 | 椰
2780 | 槽
2781 | 枭
2782 | 莴
2783 | 馍
2784 | 熙
2785 | 砷
2786 | 斑
2787 | 虞
2788 | 璐
2789 | 妍
2790 | 杖
2791 | 皑
2792 | 牧
2793 | 儒
2794 | 琦
2795 | 罐
2796 | 葱
2797 | 诩
2798 | 俏
2799 | 嘿
2800 | 鼠
2801 | 渣
2802 | 扫
2803 | 葫
2804 | 芦
2805 | 芋
2806 | 痹
2807 | 吾
2808 | 勉
2809 | 丸
2810 | 衢
2811 | 烨
2812 | 雕
2813 | 谊
2814 | 颐
2815 | 虐
2816 | 觅
2817 | 臀
2818 | 御
2819 | 晒
2820 | 蛹
2821 | 陨
2822 | 酥
2823 | 呦
2824 | 猖
2825 | 蕉
2826 | 挨
2827 | 堕
2828 | 鲅
2829 | 撅
2830 | 劈
2831 | 仑
2832 | 桌
2833 | 奴
2834 | 疡
2835 | 妃
2836 | 宴
2837 | 虹
2838 | 焕
2839 | 菏
2840 | 蝶
2841 | 濑
2842 | 嗔
2843 | 奎
2844 | 堡
2845 | 腰
2846 | 挪
2847 | 霜
2848 | 堰
2849 | 葡
2850 | 萄
2851 | 哒
2852 | 霖
2853 | 別
2854 | 晟
2855 | 蜘
2856 | 蛛
2857 | 嘚
2858 | 皖
2859 | 尹
2860 | 巾
2861 | 淋
2862 | 跤
2863 | 姿
2864 | 侮
2865 | 筛
2866 | 翘
2867 | 墅
2868 | 襄
2869 | 跛
2870 | 蛙
2871 | 蕾
2872 | 甄
2873 | 裘
2874 | 帽
2875 | 俭
2876 | 侄
2877 | 锻
2878 | 屯
2879 | 逍
2880 | 砌
2881 | 婵
2882 | 裴
2883 | 陛
2884 | 矮
2885 | 颗
2886 | 蚊
2887 | 荷
2888 | 煲
2889 | 粥
2890 | 捆
2891 | 悠
2892 | 渝
2893 | 姆
2894 | 锌
2895 | 铮
2896 | 沒
2897 | 娴
2898 | 茵
2899 | 蹄
2900 | 淫
2901 | 漏
2902 | 鳖
2903 | 绣
2904 | 磺
2905 | 褶
2906 | 肖
2907 | 嬷
2908 | 冯
2909 | 蔽
2910 | 囊
2911 | 醇
2912 | 昕
2913 | 澈
2914 | 牡
2915 | 屉
2916 | 棉
2917 | 泪
2918 | 懵
2919 | 吊
2920 | 炯
2921 | 嫉
2922 | 妒
2923 | 剃
2924 | 鸢
2925 | 肩
2926 | 膀
2927 | 噻
2928 | 栏
2929 | 珂
2930 | 膛
2931 | 墉
2932 | 衬
2933 | 眠
2934 | 殷
2935 | 絮
2936 | 轲
2937 | 穹
2938 | 彤
2939 | 眩
2940 | 菩
2941 | 嗲
2942 | 埠
2943 | 邪
2944 | 荧
2945 | 纱
2946 | 炖
2947 | 筋
2948 | 雇
2949 | 佣
2950 | 漾
2951 | 樊
2952 | 丙
2953 | 筝
2954 | 庵
2955 | 窑
2956 | 煊
2957 | 粽
2958 | 韦
2959 | 吼
2960 | 沁
2961 | 蛇
2962 | 茗
2963 | 卿
2964 | 铣
2965 | 闺
2966 | 瞿
2967 | 驹
2968 | 耘
2969 | 刹
2970 | 胃
2971 | 唠
2972 | 嗑
2973 | 谅
2974 | 巍
2975 | 桓
2976 | 汕
2977 | 滩
2978 | 剐
2979 | 荞
2980 | 甥
2981 | 蹈
2982 | 毋
2983 | 哺
2984 | 臃
2985 | 籁
2986 | 漳
2987 | 拦
2988 | 栅
2989 | 芭
2990 | 粑
2991 | 佼
2992 | 浔
2993 | 眸
2994 | 荫
2995 | 喂
2996 | 碟
2997 | 斥
2998 | 掏
2999 | 卜
3000 | 铎
3001 | 盹
3002 | 筱
3003 | 殿
3004 | 卞
3005 | 缸
3006 | 厢
3007 | 狠
3008 | 慵
3009 | 贺
3010 | 茄
3011 | 栈
3012 | 耻
3013 | 瘸
3014 | 翅
3015 | 鹤
3016 | 岑
3017 | 俞
3018 | 癫
3019 | 洞
3020 | 翎
3021 | 隶
3022 | 猬
3023 | 沾
3024 | 揉
3025 | 糯
3026 | 妤
3027 | 搓
3028 | 趁
3029 | 滢
3030 | 淄
3031 | 恺
3032 | 韧
3033 | 鸽
3034 | 笠
3035 | 揭
3036 | 仗
3037 | 晔
3038 | 莓
3039 | 蟹
3040 | 憨
3041 | 憋
3042 | 氮
3043 | 牟
3044 | 芍
3045 | 惭
3046 | 柏
3047 | 秧
3048 | 蔓
3049 | 麒
3050 | 寓
3051 | 珊
3052 | 诵
3053 | 妄
3054 | 兮
3055 | 宵
3056 | 搂
3057 | 嘱
3058 | 咐
3059 | 盔
3060 | 拄
3061 | 倡
3062 | 朕
3063 | 覃
3064 | 啰
3065 | 嗦
3066 | 隋
3067 | 湿
3068 | 厕
3069 | 脯
3070 | 亢
3071 | 戛
3072 | 旱
3073 | 圃
3074 | 枫
3075 | 榴
3076 | 捏
3077 | 茂
3078 | 甬
3079 | 灶
3080 | 愚
3081 | 橙
3082 | 糍
3083 | 脏
3084 | 犁
3085 | 绳
3086 | 鲤
3087 | 虾
3088 | 鱿
3089 | 蹶
3090 | 尧
3091 | 掰
3092 | 啪
3093 | 浸
3094 | 抖
3095 | 剁
3096 | 姬
3097 | 遛
3098 | 峪
3099 | 巢
3100 | 狙
3101 | 篡
3102 | 陵
3103 | 稚
3104 | 忌
3105 | 惮
3106 | 莞
3107 | 讪
3108 | 痒
3109 | 幺
3110 | 阜
3111 | 鲨
3112 | 踹
3113 | 扑
3114 | 鳄
3115 | 俪
3116 | 煜
3117 | 菠
3118 | 沮
3119 | 蔗
3120 | 榕
3121 | 鸭
3122 | 嫖
3123 | 妓
3124 | 橇
3125 | 窘
3126 | 葩
3127 | 框
3128 | 蔼
3129 | 給
3130 | 婶
3131 | 聋
3132 | 罕
3133 | 嗨
3134 | 惦
3135 | 聆
3136 | 玥
3137 | 恕
3138 | 龈
3139 | 粤
3140 | 窍
3141 | 屎
3142 | 啤
3143 | 睁
3144 | 骞
3145 | 绯
3146 | 黔
3147 | 蜡
3148 | 烛
3149 | 胛
3150 | 贼
3151 | 啃
3152 | 轶
3153 | 彝
3154 | 涕
3155 | 札
3156 | 幌
3157 | 佢
3158 | 嘹
3159 | 僧
3160 | 刮
3161 | 漆
3162 | 钙
3163 | 潦
3164 | 卦
3165 | 邑
3166 | 辫
3167 | 饵
3168 | 痴
3169 | 犬
3170 | 诶
3171 | 禽
3172 | 捣
3173 | 铉
3174 | 址
3175 | 浅
3176 | 璨
3177 | 朽
3178 | 劫
3179 | 坞
3180 | 邸
3181 | 祈
3182 | 渲
3183 | 蝴
3184 | 宙
3185 | 畜
3186 | 叉
3187 | 涿
3188 | 侬
3189 | 琅
3190 | 肝
3191 | 桨
3192 | 厘
3193 | 殒
3194 | 皱
3195 | 庚
3196 | 迩
3197 | 浇
3198 | 猕
3199 | 袄
3200 | 膺
3201 | 肺
3202 | 橡
3203 | 蔑
3204 | 蜀
3205 | 昀
3206 | 稣
3207 | 纭
3208 | 铅
3209 | 狮
3210 | 琛
3211 | 靖
3212 | 辐
3213 | 帘
3214 | 奕
3215 | 缅
3216 | 馀
3217 | 苛
3218 | 铸
3219 | 腱
3220 | 撕
3221 | 鲍
3222 | 颤
3223 | 溥
3224 | 侃
3225 | 弊
3226 | 沂
3227 | 獒
3228 | 弈
3229 | 诫
3230 | 羹
3231 | 肋
3232 | 颠
3233 | 咕
3234 | 咚
3235 | 胫
3236 | 谍
3237 | 呜
3238 | 览
3239 | 洼
3240 | 辗
3241 | 嬛
3242 | 绢
3243 | 氨
3244 | 硝
3245 | 茫
3246 | 灼
3247 | 澎
3248 | 湃
3249 | 撼
3250 | 缕
3251 | 驭
3252 | 湄
3253 | 岔
3254 | 罄
3255 | 笈
3256 | 玺
3257 | 槌
3258 | 芜
3259 | 痫
3260 | 孚
3261 | 淆
3262 | 锣
3263 | 仨
3264 | 犹
3265 | 豫
3266 | 瑛
3267 | 舛
3268 | 琢
3269 | 呛
3270 | 窒
3271 | 莆
3272 | 匪
3273 | 秉
3274 | 贿
3275 | 椅
3276 | 擂
3277 | 馋
3278 | 燥
3279 | 芪
3280 | 桑
3281 | 淹
3282 | 讽
3283 | 枯
3284 | 峙
3285 | 骏
3286 | 氯
3287 | 吞
3288 | 噬
3289 | 匣
3290 | 骸
3291 | 舱
3292 | 谦
3293 | 炳
3294 | 竖
3295 | 拇
3296 | 绷
3297 | 卉
3298 | 荔
3299 | 矫
3300 | 踞
3301 | 腊
3302 | 憧
3303 | 憬
3304 | 匾
3305 | 喘
3306 | 悖
3307 | 褪
3308 | 嵌
3309 | 筏
3310 | 帐
3311 | 篷
3312 | 拧
3313 | 宕
3314 | 烽
3315 | 梗
3316 | 塌
3317 | 妖
3318 | 祷
3319 | 歹
3320 | 逮
3321 | 矣
3322 | 骆
3323 | 舶
3324 | 雏
3325 | 蚂
3326 | 蚁
3327 | 枢
3328 | 锚
3329 | 厥
3330 | 疚
3331 | 瞩
3332 | 璀
3333 | 飚
3334 | 魅
3335 | 斐
3336 | 阙
3337 | 邵
3338 | 弑
3339 | 秽
3340 | 禺
3341 | 懈
3342 | 漓
3343 | 掀
3344 | 沐
3345 | 靡
3346 | 铐
3347 | 颁
3348 | 谙
3349 | 诠
3350 | 钮
3351 | 惆
3352 | 怅
3353 | 慷
3354 | 朴
3355 | 帷
3356 | 坍
3357 | 戈
3358 | 袍
3359 | 畴
3360 | 娼
3361 | 屠
3362 | 渚
3363 | 扇
3364 | 佟
3365 | 棵
3366 | 奂
3367 | 荆
3368 | 浏
3369 | 堤
3370 | 箕
3371 | 阎
3372 | 赫
3373 | 羁
3374 | 拗
3375 | 蔫
3376 | 憾
3377 | 怠
3378 | 瞪
3379 | 脐
3380 | 刁
3381 | 矢
3382 | 胚
3383 | 邬
3384 | 冶
3385 | 诀
3386 | 斋
3387 | 咽
3388 | 驿
3389 | 鞠
3390 | 躬
3391 | 耷
3392 | t
3393 | 恤
3394 | 咙
3395 | 荟
3396 | 濒
3397 | 榨
3398 | 霆
3399 | 噘
3400 | 袒
3401 | 匕
3402 | 喇
3403 | 叭
3404 | 矜
3405 | 衅
3406 | 睬
3407 | 忻
3408 | 栓
3409 | a
3410 | 抑
3411 | 匆
3412 | 畸
3413 | 禹
3414 | 潼
3415 | 郜
3416 | 琨
3417 | 殃
3418 | 酝
3419 | 酿
3420 | 奠
3421 | 捂
3422 | 蟒
3423 | 拎
3424 | 焊
3425 | 勺
3426 | 赡
3427 | 舀
3428 | 咫
3429 | 沽
3430 | 淳
3431 | 皙
3432 | 棕
3433 | 碾
3434 | 蜗
3435 | 灸
3436 | 亩
3437 | 冀
3438 | 夯
3439 | 迸
3440 | 箍
3441 | 瘠
3442 | 藻
3443 | 捅
3444 | 萤
3445 | 卸
3446 | 袱
3447 | 骄
3448 | 瑚
3449 | 俘
3450 | 虏
3451 | 剖
3452 | 镐
3453 | 猩
3454 | 粪
3455 | 酪
3456 | 宸
3457 | 姗
3458 | 狒
3459 | 汁
3460 | 熄
3461 | 挠
3462 | 魁
3463 | 箔
3464 | 噎
3465 | 璞
3466 | 竣
3467 | 谬
3468 | 钵
3469 | 敛
3470 | 烊
3471 | 衫
3472 | 剿
3473 | 滇
3474 | 柿
3475 | 筐
3476 | 惋
3477 | 嫡
3478 | 钊
3479 | k
3480 | 缀
3481 | 顷
3482 | 赣
3483 | 剔
3484 | 峥
3485 | 哽
3486 | 茬
3487 | 羔
3488 | 弧
3489 | 鲸
3490 | 冗
3491 | 滤
3492 | 锰
3493 | 劵
3494 | 囚
3495 | 毯
3496 | 镁
3497 | 钠
3498 | 烯
3499 | 宰
3500 | 眈
3501 | 灌
3502 | 秸
3503 | 秆
3504 | 仕
3505 | 羿
3506 | 麾
3507 | 拽
3508 | 倚
3509 | 庶
3510 | 汛
3511 | 觊
3512 | 觎
3513 | 蔬
3514 | 涝
3515 | 豁
3516 | 嘈
3517 | 瀑
3518 | 搀
3519 | 绰
3520 | 霄
3521 | 嘶
3522 | 陇
3523 | 灞
3524 | 渗
3525 | 囤
3526 | 棱
3527 | 剽
3528 | 乒
3529 | 乓
3530 | 穴
3531 | 馅
3532 | 颂
3533 | 崭
3534 | 脊
3535 | 椎
3536 | 庾
3537 | 晏
3538 | 疹
3539 | 蜻
3540 | 蜓
3541 | 扳
3542 | 胰
3543 | 钒
3544 | 汝
3545 | 丞
3546 | 聂
3547 | 饺
3548 | 毙
3549 | 溉
3550 | 骥
3551 | 眨
3552 | 巷
3553 | 禅
3554 | c
3555 | 娅
3556 | 腮
3557 | 栾
3558 | 啼
3559 | 螃
3560 | 迭
3561 | 锏
3562 | 霏
3563 | 辙
3564 | 妩
3565 | 庐
3566 | 蠕
3567 | 阱
3568 | 瘟
3569 | 佑
3570 | 犄
3571 | 悚
3572 | 婿
3573 | 鞍
3574 | 缭
3575 | 懿
3576 | l
3577 | i
3578 | o
3579 | y
3580 | n
3581 | z
3582 | h
3583 | e
3584 | b
3585 | u
3586 | q
3587 | j
3588 | r
3589 | m
3590 | x
3591 | p
3592 | d
3593 | w
3594 | v
3595 | 曰
3596 | 馥
3597 | 枝
3598 | 嬴
3599 | 淝
3600 | 炀
3601 | 嶂
3602 | 昱
3603 | 赈
3604 | 碣
3605 | 饲
3606 | 椿
3607 | 茎
3608 | 铵
3609 | 蜿
3610 | 蜒
3611 | 焚
3612 | 鄙
3613 | 夷
3614 | 瞥
3615 | 窜
3616 | 糙
3617 | 犀
3618 | 皋
3619 | 锥
3620 | 岐
3621 | 钦
3622 | 诡
3623 | 恳
3624 | 禄
3625 | 辽
3626 | 帜
3627 | 涤
3628 | 棠
3629 | 谕
3630 | 郡
3631 | 诏
3632 | 垣
3633 | 昭
3634 | 锢
3635 | 曜
3636 | 蹬
3637 | 嘀
3638 | 凳
3639 | 瀛
3640 | 畿
3641 | 骋
3642 | 绚
3643 | 巫
3644 | 徙
3645 | 臼
3646 | 鳍
3647 | 钝
3648 | 悼
3649 | 珽
3650 | 吏
3651 | 谄
3652 | 瓣
3653 | 桔
3654 | 拂
3655 | 踵
3656 | 栽
3657 | 祀
3658 | 藩
3659 | 祯
3660 | 缢
3661 | 捍
3662 | 佥
3663 | 熔
3664 | 悯
3665 | 蚕
3666 | 肪
3667 | 鬓
3668 | 腥
3669 | 稽
3670 | 闽
3671 | 羌
3672 | 獭
3673 | 彗
3674 | 淖
3675 | 屿
3676 | 恬
3677 | 滕
3678 | 悸
3679 | 嫔
3680 | 拣
3681 | 嗟
3682 | 沼
3683 | 祚
3684 | 裔
3685 | 弼
3686 | 闾
3687 | 暮
3688 | 樵
3689 | 岱
3690 | 尉
3691 | 铢
3692 | 麋
3693 | 暨
3694 | 蚌
3695 | 卒
3696 | 谥
3697 | 寅
3698 | 晤
3699 | 掠
3700 | 绊
3701 | 杏
3702 | 缎
3703 | 纂
3704 | 仆
3705 | 衙
3706 | 卤
3707 | 烃
3708 | 窦
3709 | 佚
3710 | 苟
3711 | 狩
3712 | 唢
3713 | 酶
3714 | 酉
3715 | 笃
3716 | 羟
3717 | 哆
3718 | 烷
3719 | 辰
3720 | 锈
3721 | 蚀
3722 | 弩
3723 | 汞
3724 | 谏
3725 | 庇
3726 | 梧
3727 | 谗
3728 | 骈
3729 | 臾
3730 | 鲑
3731 | 荪
3732 | 盏
3733 | 蜈
3734 | 龛
3735 | 孺
3736 | 杞
3737 | 宦
3738 | 胤
3739 | 吠
3740 | 帧
3741 | 摧
3742 | 碱
3743 | 搔
3744 | 戍
3745 | 癸
3746 | 讷
3747 | 溅
3748 | 诣
3749 | 婺
3750 | 烘
3751 | 滔
3752 | 舜
3753 | 贞
3754 | 衍
3755 | 镀
3756 | 泗
3757 | 吡
3758 | 棺
3759 | 烹
3760 | 邕
3761 | 拙
3762 | 昙
3763 | 畏
3764 | 垦
3765 | 凹
3766 | 羯
3767 | 凛
3768 | 冽
3769 | 骼
3770 | 嗣
3771 | 蚩
3772 | 恃
3773 | 赃
3774 | 璋
3775 | 苓
3776 | 扪
3777 | 孜
3778 | 岌
3779 | 淌
3780 | 掖
3781 | 沱
3782 | 扁
3783 | 黏
3784 | 宛
3785 | 兖
3786 | 溟
3787 | 涩
3788 | 廿
3789 | 砚
3790 | 泌
3791 | 樟
3792 | 瞰
3793 | 苔
3794 | 镰
3795 | 婕
3796 | 篝
3797 | 邈
3798 | 袂
3799 | 峦
3800 | 淤
3801 | 蛊
3802 | 壬
3803 | 鳝
3804 | 涧
3805 | 纬
3806 | 赦
3807 | 隙
3808 | 胺
3809 | 驷
3810 | 於
3811 | 奚
3812 | 徇
3813 | 町
3814 | 匡
3815 | 挝
3816 | 愕
3817 | 汐
3818 | 刃
3819 | 翱
3820 | 缚
3821 | 梵
3822 | 簇
3823 | 坨
3824 | 哉
3825 | 遴
3826 | 碴
3827 | 滁
3828 | 礴
3829 | 呕
3830 | 匝
3831 | 幢
3832 | 棣
3833 | 潺
3834 | 狄
3835 | 炜
3836 | 蜚
3837 | 鸾
3838 | 笙
3839 | 撩
3840 | 裆
3841 | 斟
3842 | 驯
3843 | 冢
3844 | 拯
3845 | 嵩
3846 | 牦
3847 | 炬
3848 | 痰
3849 | 忒
3850 | 睫
3851 | 恣
3852 | 仄
3853 | 姥
3854 | 濡
3855 | 夙
3856 | 寐
3857 | 虔
3858 | 昉
3859 | 毓
3860 | 晾
3861 | 淞
3862 | 嘎
3863 | 祛
3864 | 戌
3865 | 髻
3866 | 洙
3867 | 曳
3868 | 蛾
3869 | 幄
3870 | 缮
3871 | 昵
3872 | 擢
3873 | 臧
3874 | 逞
3875 | 镖
3876 | 饷
3877 | 挟
3878 | 舫
3879 | 郦
3880 | 椭
3881 | 瞻
3882 | 戮
3883 | 薨
3884 | 桢
3885 | 鞅
3886 | 蜥
3887 | 烬
3888 | 殉
3889 | 蒜
3890 | 孰
3891 | 鞭
3892 | 惶
3893 | 凄
3894 | 褐
3895 | 漕
3896 | 翊
3897 | 髯
3898 | 闰
3899 | 绫
3900 | 蟠
3901 | 後
3902 | 熹
3903 | 邃
3904 | 侨
3905 | 嚏
3906 | 榻
3907 | 瞟
3908 | 兢
3909 | 莺
3910 | 梢
3911 | 厄
3912 | 忱
3913 | 敕
3914 | 泷
3915 | 邺
3916 | 矗
3917 | 诋
3918 | 檀
3919 | 牒
3920 | 坂
3921 | 巳
3922 | 俸
3923 | 籽
3924 | 绅
3925 | 酰
3926 | 鲫
3927 | 麓
3928 | 纫
3929 | 笺
3930 | 窈
3931 | 窕
3932 | 厩
3933 | 蹉
3934 | 跎
3935 | 绥
3936 | 镯
3937 | 隽
3938 | 贮
3939 | 徘
3940 | 徊
3941 | 孽
3942 | 蟾
3943 | 蟆
3944 | 昺
3945 | 嫣
3946 | 斛
3947 | 荀
3948 | 鞑
3949 | 闵
3950 | 娣
3951 | 蕃
3952 | 酯
3953 | 跋
3954 | 丕
3955 | 耆
3956 | 吱
3957 | 茁
3958 | 饪
3959 | 颍
3960 | 跺
3961 | 垢
3962 | 帚
3963 | 肴
3964 | 卯
3965 | 戎
3966 | 锆
3967 | 婢
3968 | 驸
3969 | 煞
3970 | 稷
3971 | 蕙
3972 | 豚
3973 | 簿
3974 | 姝
3975 | 羲
3976 | 晁
3977 | 冥
3978 | 洱
3979 | 爻
3980 | 夭
3981 | 迢
3982 | 驮
3983 | 濮
3984 | 煎
3985 | 珀
3986 | 瑙
3987 | 敖
3988 | 揣
3989 | 榛
3990 | 祉
3991 | 萃
3992 | 揖
3993 | 殆
3994 | 酋
3995 | 麝
3996 | 雉
3997 | 轼
3998 | 柠
3999 | 泾
4000 | 昇
4001 | 歆
4002 | 宥
4003 | 幔
4004 | 鳌
4005 | 肛
4006 | 诛
4007 | 绞
4008 | 莽
4009 | 邯
4010 | 郸
4011 | 怼
4012 | 瞳
4013 | 诽
4014 | 谤
4015 | 秤
4016 | 鲲
4017 | 耦
4018 | 楂
4019 | 竺
4020 | 挎
4021 | 扛
4022 | 矶
4023 | 荏
4024 | 苒
4025 | 匍
4026 | 匐
4027 | 煽
4028 | 隘
4029 | 桀
4030 | 骜
4031 | 檄
4032 | 唳
4033 | 胱
4034 | 骁
4035 | 钣
4036 | 浊
4037 | 枕
4038 | 簸
4039 | 疝
4040 | 還
4041 | 鳅
4042 | 噜
4043 | 桦
4044 | 額
4045 | 1
4046 | 9
4047 | 8
4048 | 7
4049 | 4
4050 | 淸
4051 | 柒
4052 | 仟
4053 | 娩
4054 | 佰
4055 | 髋
4056 | 2
4057 | 0
4058 | 6
4059 | 砰
4060 | 薯
4061 | 蔻
4062 | 唬
4063 | 秃
4064 | 磕
4065 | 纾
4066 | 哔
4067 | 檬
4068 | 瓢
4069 | 哨
4070 | 橄
4071 | 榄
4072 | 吝
4073 | 啬
4074 | 轧
4075 | 蹊
4076 | 跷
4077 | 罹
4078 | 珉
4079 | 淼
4080 | 琮
4081 | 濠
4082 | 攥
4083 | 弁
4084 | 赟
4085 | 鸵
4086 | 旷
4087 | 唑
4088 | 谛
4089 | 乍
4090 | 楹
4091 | 仝
4092 | 熠
4093 | 吭
4094 | 哧
4095 | +
4096 | 抿
4097 | 肱
4098 | 叱
4099 | 咤
4100 | 戟
4101 | 鹈
4102 | 鹕
4103 | 捻
4104 | 蜷
4105 | 沅
4106 | 圭
4107 | 翟
4108 | 缨
4109 | 绽
4110 | 貂
4111 | 赘
4112 | 狈
4113 | 涎
4114 | 饽
4115 | 獗
4116 | 邂
4117 | 逅
4118 | 囧
4119 | 犸
4120 | 眶
4121 | 鞘
4122 | 芮
4123 | 胯
4124 | 镕
4125 | 刨
4126 | 蓓
4127 | 焖
4128 | 惰
4129 | 膘
4130 | 喆
4131 | 莅
4132 | 祐
4133 | 哮
4134 | 怵
4135 | 抠
4136 | 蔷
4137 | 餮
4138 | 叁
4139 | 倔
4140 | 霹
4141 | 雳
4142 | 翩
4143 | 踌
4144 | 躇
4145 | 廓
4146 | 幡
4147 | 媲
4148 | 涮
4149 | 腼
4150 | 腆
4151 | 膳
4152 | 涞
4153 | 筵
4154 | 朦
4155 | 稠
4156 | 沌
4157 | 镓
4158 | 胧
4159 | 烙
4160 | 脓
4161 | 潸
4162 | 铖
4163 | 稼
4164 | 婧
4165 | 谚
4166 | 绌
4167 | 馒
4168 | 枷
4169 | 篱
4170 | 咀
4171 | 忏
4172 | 墟
4173 | 拮
4174 | 诧
4175 | 叮
4176 | 淇
4177 | 铤
4178 | 甭
4179 | 盎
4180 | 芹
4181 | 槿
4182 | 逵
4183 | 烁
4184 | 糜
4185 | 壑
4186 | 琊
4187 | 馁
4188 | 粟
4189 | 缉
4190 | 偎
4191 | 噱
4192 | 嗓
4193 | 鹜
4194 | 赊
4195 | 焙
4196 | 撂
4197 | 墩
4198 | 疙
4199 | 瘩
4200 | 栩
4201 | 喵
4202 | 侏
4203 | 茧
4204 | 咻
4205 | 蚝
4206 | 窿
4207 | 窥
4208 | 赂
4209 | 髦
4210 | 癖
4211 | 唾
4212 | 腌
4213 | 鹦
4214 | 鹉
4215 | 擒
4216 | 醺
4217 | 酗
4218 | 蚤
4219 | 鲈
4220 | 鬃
4221 | 邋
4222 | 遢
4223 | 叨
4224 | 痞
4225 | 珪
4226 | 愣
4227 | 轱
4228 | 辘
4229 | 娲
4230 | 嚅
4231 | 遁
4232 | 嘣
4233 | 嚓
4234 | 怔
4235 | 兀
4236 | 粲
4237 | 嚎
4238 | 汩
4239 | 僮
4240 | 盂
4241 | 罡
4242 | 褂
4243 | 抡
4244 | 楞
4245 | 礁
4246 | 嚷
4247 | 胭
4248 | 拚
4249 | 伶
4250 | 俐
4251 | 耙
4252 | 拱
4253 | 狰
4254 | 狞
4255 | 裳
4256 | 哏
4257 | 叼
4258 | 扒
4259 | 荃
4260 | 鹊
4261 | 喳
4262 | 嗖
4263 | 唰
4264 | 吩
4265 | 摁
4266 | 鸨
4267 | 噼
4268 | 铨
4269 | 掂
4270 | 镣
4271 | 骧
4272 | 塬
4273 | 钳
4274 | 傧
4275 | 臊
4276 | 銮
4277 | 盅
4278 | 蹿
4279 | 屹
4280 | 佃
4281 | 岀
4282 | 噗
4283 | 靶
4284 | 茸
4285 | 暹
4286 | 攘
4287 | 藐
4288 | 掴
4289 | 掇
4290 | 阉
4291 | 浚
4292 | 讥
4293 | 箩
4294 | 黠
4295 | 嗫
4296 | 拴
4297 | 瞌
4298 | 啕
4299 | 咔
4300 | 笛
4301 | 瞅
4302 | 豺
4303 | 纣
4304 | 砾
4305 | 倭
4306 | 茉
4307 | 偃
4308 | 掣
4309 | 嗤
4310 | 惴
4311 | 嗷
4312 | 忖
4313 | 掸
4314 | 5
4315 | 囡
4316 | 晌
4317 | 炷
4318 | 沓
4319 | 淅
4320 | 沥
4321 | 嗒
4322 | 鬟
4323 | 韭
4324 | 捎
4325 | 釜
4326 | 婀
4327 | 捺
4328 | 恪
4329 | 埂
4330 | 噔
4331 | 猷
4332 | 骡
4333 | 哝
4334 | 黝
4335 | 瀚
4336 | 奘
4337 | 碉
4338 | 傣
4339 | 贻
4340 | 燎
4341 | 汲
4342 | 赓
4343 | 缰
4344 | 谘
4345 | 掬
4346 | 剞
4347 | 炽
4348 | 沏
4349 | 塾
4350 | 猿
4351 | 霎
4352 | 嚼
4353 | 阄
4354 | 囔
4355 | 皎
4356 | 腑
4357 | 蹑
4358 | 毡
4359 | 恙
4360 | 檐
4361 | 邳
4362 | 倌
4363 | 敝
4364 | 咆
4365 | 惺
4366 | 叩
4367 | 娥
4368 | 揆
4369 | 孬
4370 | 荤
4371 | 砀
4372 | 婪
4373 | 婊
4374 | 衩
4375 | 炊
4376 | 捋
4377 | 蛰
4378 | 袈
4379 | 裟
4380 | 藕
4381 | 嗵
4382 | 垭
4383 | 躯
4384 | 撵
4385 | 瓒
4386 | 寰
4387 | 蹋
4388 | 焌
4389 | 怄
4390 | 孛
4391 | 偌
4392 | 姘
4393 | 斓
4394 | 噙
4395 | 钗
4396 | 谒
4397 | 蓦
4398 | 馊
4399 | 瘁
4400 | 犒
4401 | 蘸
4402 | 犟
4403 | 焘
4404 | 嬉
4405 | 扉
4406 | 蝎
4407 | 蛟
4408 | 啷
4409 | 伎
4410 | 泞
4411 | 浃
4412 | 眺
4413 | 憎
4414 | 旌
4415 | 萦
4416 | 扈
4417 | 滏
4418 | 砭
4419 | 碚
4420 | 飒
4421 | 雎
4422 | 蝗
4423 | 杵
4424 | 琵
4425 | 琶
4426 | 铛
4427 | 肮
4428 | 譬
4429 | 睽
4430 | 來
4431 | 诬
4432 | 凿
4433 | 柑
4434 | 颉
4435 | 尕
4436 | 莘
4437 | 痣
4438 | 拈
4439 | 嫦
4440 | 咛
4441 | 剌
4442 | 紊
4443 | 汶
4444 | 懋
4445 | 擞
4446 | 攸
4447 | 馄
4448 | 饨
4449 | 糠
4450 | 吒
4451 | 篓
4452 | 霓
4453 | 獐
4454 | 鸠
4455 | 咂
4456 | 搡
4457 | 揩
4458 | 垛
4459 | 瓴
4460 | 嗬
4461 | 帼
4462 | 摞
4463 | 苇
4464 | 怏
4465 | 砣
4466 | 惬
4467 | 藉
4468 | 雹
4469 | 徕
4470 | 锭
4471 | 骷
4472 | 髅
4473 | 箸
4474 | 挞
4475 | 懦
4476 | 亊
4477 | 迂
4478 | 弋
4479 | 飕
4480 | 饯
4481 | 铿
4482 | 圧
4483 | 蔺
4484 | 杳
4485 | 呸
4486 | 嘤
4487 | 涔
4488 | 噌
4489 | 悻
4490 | 蒿
4491 | 铳
4492 | 咦
4493 | 梆
4494 | 哙
4495 | 袆
4496 | 咣
4497 | 阖
4498 | 鼾
4499 | 疱
4500 | 粕
4501 | 酐
4502 | 臆
4503 | 磐
4504 | 榈
4505 | 鹭
4506 | 谩
4507 | 芥
4508 | 翌
4509 | 菀
4510 | 煦
4511 | 涸
4512 | 铰
4513 | 莠
4514 | 篑
4515 | 铟
4516 | 镳
4517 | 毂
4518 | 玷
4519 | 钯
4520 | 飨
4521 | 酚
4522 | 筠
4523 | 玑
4524 | 苯
4525 | 唆
4526 | 瞠
4527 | 垠
4528 | 阈
4529 | 肽
4530 | 铆
4531 | 孢
4532 | 醚
4533 | 稞
4534 | 纶
4535 | 碘
4536 | 搪
4537 | 咗
4538 | 纰
4539 | 阂
4540 | 鹄
4541 | 姣
4542 | 裨
4543 | 岷
4544 | 芊
4545 | 旻
4546 | 泓
4547 | 滦
4548 | 甾
4549 | 铼
4550 | 榭
4551 | 讹
4552 | 郴
4553 | 瘴
4554 | 烩
4555 | 枸
4556 | 崂
4557 | 柬
4558 | 鸥
4559 | 渍
4560 | 俾
4561 | 珈
4562 | 叻
4563 | 冇
4564 | 憩
4565 | 祟
4566 | 阑
4567 | 彷
4568 | 徨
4569 | 蜇
4570 | 榔
4571 | 咁
4572 | 龌
4573 | 龊
4574 | 樽
4575 | 泯
4576 | 黍
4577 | 搐
4578 | 蹒
4579 | 跚
4580 | 蟑
4581 | 崴
4582 | 蛐
4583 | 熨
4584 | 藿
4585 | 偕
4586 | 毽
4587 | 氰
4588 | 娑
4589 | 锵
4590 | 笆
4591 | 缥
4592 | 槟
4593 | 褚
4594 | 辍
4595 | 劾
4596 | 蒯
4597 | 痔
4598 | 隍
4599 | 犷
4600 | 刽
4601 | 鲶
4602 | 辊
4603 | 釉
4604 | 喏
4605 | 炅
4606 | 妊
4607 | 琥
4608 | 迦
4609 | 芷
4610 | 衮
4611 | 苞
4612 | 瑄
4613 | 蹂
4614 | 躏
4615 | 帛
4616 | 呲
4617 | 趸
4618 | 祎
4619 | 郫
4620 | 鏖
4621 | 莒
4622 | 蜕
4623 | 钽
4624 | 渥
4625 | 宓
4626 | 呷
4627 | 谟
4628 | 汴
4629 | 潞
4630 | 诃
4631 | 睢
4632 | 袤
4633 | 涪
4634 | 娠
4635 | 寮
4636 | 诘
4637 | 诙
4638 | 讧
4639 | 戊
4640 | 効
4641 | 跆
4642 | 傀
4643 | 儡
4644 | 佯
4645 | 楔
4646 | 擀
4647 | 亘
4648 | 喙
4649 | 忿
4650 | 葺
4651 | 佗
4652 | 亳
4653 | 铀
4654 | 镌
4655 | 缤
4656 | 仞
4657 | 靛
4658 | 蓟
4659 | 箴
4660 | 虬
4661 | 舷
4662 | 玖
4663 | 罔
4664 | 岖
4665 | 铬
4666 | 柘
4667 | 涣
4668 | 骊
4669 | 颢
4670 | 癞
4671 | 咄
4672 | 缄
4673 | 啄
4674 | 楣
4675 | 漪
4676 | 淬
4677 | 倜
4678 | 傥
4679 | 袅
4680 | 珞
4681 | 骰
4682 | 谌
4683 | 痉
4684 | 挛
4685 | 绛
4686 | 琬
4687 | 荥
4688 | 怆
4689 | 奄
4690 | 枇
4691 | 杷
4692 | 惘
4693 | 颚
4694 | 阡
4695 | 氪
4696 | 吋
4697 | 怦
4698 | 氦
4699 | 伱
4700 | 魇
4701 | 钼
4702 | 腩
4703 | 瘪
4704 | 慜
4705 | 摒
4706 | 踉
4707 | 跄
4708 | 漉
4709 | 芈
4710 | 珲
4711 | 皿
4712 | 泔
4713 | 珏
4714 | 蹙
4715 | 伫
4716 | 瘌
4717 | 啾
4718 | 襁
4719 | 褓
4720 | 踮
4721 | 锹
4722 | 钨
4723 | 瑁
4724 | 喋
4725 | 秣
4726 | 啐
4727 | 泱
4728 | 溧
4729 | 洺
4730 | 殓
4731 | 呤
4732 | 笫
4733 | 乜
4734 | 簪
4735 | 骐
4736 | 璟
4737 | 癀
4738 | 灏
4739 | 丶
4740 | 阚
4741 | 舸
4742 | 萘
4743 | 薏
4744 | 懑
4745 | 嚯
4746 | 蛳
4747 | 痧
4748 | 菡
4749 | 焱
4750 | 瘀
4751 | 咿
4752 | 嵴
4753 | 绉
4754 |
4755 | *
4756 |
--------------------------------------------------------------------------------
/ctc_prefix_score.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 |
4 | import numpy as np
5 |
6 | class CTCPrefixScore(object):
7 | """
8 | 百度搜:
9 | ‘HYBRID CTC/ATTENTION ARCHITECTURE FOR END-TO-END SPEECH RECOGNITION’
10 | """
11 | def __init__(self, x, blank, eos):
12 | self.logzero = -10000000000.0
13 | self.blank = blank
14 | self.eos = eos
15 | self.input_length = len(x)
16 | self.x = x
17 |
18 | def initial_state(self):
19 | r = np.full((self.input_length, 2), self.logzero, dtype=np.float32)
20 | a = self.x[:, self.blank]
21 | r[:, 1] = np.cumsum(a, axis=0)
22 | return r
23 |
24 |
25 | def __call__(self, y, cs, r_prev):
26 | shape = y.shape
27 | batch = shape[0]
28 | output_length = shape[1] - 1 # ignore sos
29 | b_x = np.tile(self.x[np.newaxis, :, :], (batch, 1, 1))
30 | cs_e = np.expand_dims(cs, 1)
31 | xs = b_x[np.arange(0, cs.shape[0])[:, np.newaxis, np.newaxis], :, cs_e]
32 | xs = np.squeeze(xs, 1)
33 | xs = np.transpose(xs, (0, 2, 1))
34 |
35 | r = np.full((batch, self.input_length, 2, cs.shape[1]), self.logzero, dtype=np.float32)
36 | if output_length == 0:
37 | r[:, 0, 0] = xs[:, 0]
38 |
39 | r_sum = np.logaddexp(r_prev[:, :, 0], r_prev[:, :, 1])
40 | last = y[:, -1]
41 | log_phi = np.tile(r_sum[:, :, np.newaxis], (1, 1, cs.shape[1]))
42 |
43 | for i in range(batch):
44 | if output_length > 0 and last[i] in cs[i]:
45 | log_phi[i, :, list(cs[i]).index(last[i])] = r_prev[i, :, 1]
46 |
47 | start = max(output_length, 1)
48 | log_psi = r[:, start - 1, 0]
49 | for t in range(start, self.input_length):
50 | r[:, t, 0] = np.logaddexp(r[:, t - 1, 0], log_phi[:, t - 1]) + xs[:, t]
51 | r[:, t, 1] = np.logaddexp(r[:, t - 1, 0], r[:, t - 1, 1]) + b_x[:, t, self.blank][:, np.newaxis]
52 | log_psi = np.logaddexp(log_psi, log_phi[:, t - 1] + xs[:, t])
53 |
54 | eos_pos = np.where(cs == self.eos)
55 | if len(eos_pos[0]) > 0:
56 | log_psi[eos_pos[0], eos_pos[1]] = r_sum[eos_pos[0], -1]
57 |
58 | return log_psi, np.rollaxis(r, 3, 1)
59 |
--------------------------------------------------------------------------------
/data/aishell_dev.txt:
--------------------------------------------------------------------------------
1 | dev/S0724/BAC009S0724W0121.wav 广 州 市 房 地 产 中 介 协 会 分 析
2 | dev/S0724/BAC009S0724W0122.wav 广 州 市 房 地 产 中 介 协 会 还 表 示
3 | dev/S0724/BAC009S0724W0123.wav 相 比 于 其 他 一 线 城 市
4 | dev/S0724/BAC009S0724W0124.wav 广 州 二 手 住 宅 市 场 表 现 一 直 相 对 稳 健
5 | dev/S0724/BAC009S0724W0125.wav 而 在 股 市 大 幅 震 荡 的 环 境 下
6 | dev/S0724/BAC009S0724W0126.wav 预 计 第 三 季 度 将 陆 续 有 部 分 股 市 资 金 重 归 楼 市
7 | dev/S0724/BAC009S0724W0127.wav 但 受 穗 六 条 及 二 套 房 首 付 七 成 的 制 约
8 | dev/S0724/BAC009S0724W0128.wav 下 半 年 楼 市 能 是 否 能 回 到 快 速 上 升 通 道 依 然 存 在 变 数
9 | dev/S0724/BAC009S0724W0129.wav 其 中 越 秀 区 涨 幅 领 先
10 | dev/S0724/BAC009S0724W0130.wav 天 河 区 的 签 约 面 积 在 豪 宅 交 投 增 多 的 带 动 下 上 升 较 快
11 | dev/S0724/BAC009S0724W0131.wav 其 中 天 河 区 增 长 幅 度 近 百 分 之 三
12 |
--------------------------------------------------------------------------------
/data/aishell_train.txt:
--------------------------------------------------------------------------------
1 | train/S0002/BAC009S0002W0122.wav 而 对 楼 市 成 交 抑 制 作 用 最 大 的 限 购
2 | train/S0002/BAC009S0002W0123.wav 也 成 为 地 方 政 府 的 眼 中 钉
3 | train/S0002/BAC009S0002W0124.wav 自 六 月 底 呼 和 浩 特 市 率 先 宣 布 取 消 限 购 后
4 | train/S0002/BAC009S0002W0125.wav 各 地 政 府 便 纷 纷 跟 进
5 | train/S0002/BAC009S0002W0126.wav 仅 一 个 多 月 的 时 间 里
6 | train/S0002/BAC009S0002W0127.wav 除 了 北 京 上 海 广 州 深 圳 四 个 一 线 城 市 和 三 亚 之 外
7 | train/S0002/BAC009S0002W0128.wav 四 十 六 个 限 购 城 市 当 中
8 | train/S0002/BAC009S0002W0129.wav 四 十 一 个 已 正 式 取 消 或 变 相 放 松 了 限 购
9 | train/S0002/BAC009S0002W0130.wav 财 政 金 融 政 策 紧 随 其 后 而 来
10 | train/S0002/BAC009S0002W0131.wav 显 示 出 了 极 强 的 威 力
11 | train/S0002/BAC009S0002W0132.wav 放 松 了 与 自 往 需 求 密 切 相 关 的 房 贷 政 策
12 | train/S0002/BAC009S0002W0133.wav 其 中 包 括 对 拥 有 一 套 住 房 并 已 结 清 相 应 购 房 贷 款 的 家 庭
13 | train/S0002/BAC009S0002W0134.wav 为 改 善 居 住 条 件 再 次 申 请 贷 款 购 买 普 通 商 品 住 房
14 | train/S0002/BAC009S0002W0135.wav 银 行 业 金 融 机 构 执 行 首 套 房 贷 款 政 策
15 | train/S0002/BAC009S0002W0136.wav 这 个 后 来 被 称 为 九 三 零 新 政 策 的 措 施
16 | train/S0002/BAC009S0002W0137.wav 被 市 场 公 认 为 是 今 年 对 楼 市 影 响 最 大 的 一 个 政 策
17 | train/S0002/BAC009S0002W0138.wav 以 提 高 住 房 公 积 金 缴 存 职 工 住 房 消 费 能 力
18 | train/S0002/BAC009S0002W0139.wav 支 持 缴 存 职 工 购 买 首 套 和 改 善 型 自 住 住 房
19 | train/S0002/BAC009S0002W0140.wav 通 过 财 政 补 贴 手 段 鼓 励 购 房 的 地 区 也 在 不 断 增 加
20 | train/S0002/BAC009S0002W0141.wav 其 中 多 项 政 策 惠 及 购 房 者
21 | train/S0002/BAC009S0002W0142.wav 尚 未 取 消 限 购
22 | train/S0002/BAC009S0002W0143.wav 也 通 过 大 幅 调 整 对 普 通 住 宅 总 价 认 定 标 准 的 方 式
23 | train/S0002/BAC009S0002W0144.wav 刺 激 改 善 型 需 求 入 市
24 | train/S0002/BAC009S0002W0145.wav 而 另 外 一 剂 楼 市 强 心 剂 则 当 属 央 行 的 不 对 称 降 息
25 | train/S0002/BAC009S0002W0146.wav 有 业 内 人 士 当 时 就 指 出
26 | train/S0002/BAC009S0002W0147.wav 对 于 房 地 产 业 的 影 响 来 说
27 | train/S0002/BAC009S0002W0148.wav 货 币 手 段 历 来 是 刺 激 市 场 需 求 的 最 有 效 工 具
28 | train/S0002/BAC009S0002W0149.wav 此 次 降 息 将 成 为 市 场 加 快 库 存 去 化 的 重 要 利 器
29 | train/S0002/BAC009S0002W0150.wav 房 地 产 市 场 迅 速 变 化
30 | train/S0002/BAC009S0002W0151.wav 住 房 和 城 乡 建 设 部 会 配 合 有 关 部 门
31 | train/S0002/BAC009S0002W0152.wav 强 化 地 方 调 控 主 体 责 任
32 | train/S0002/BAC009S0002W0153.wav 及 时 调 整 了 限 购 差 别 化 信 贷 等 方 面 的 政 策
33 | train/S0002/BAC009S0002W0154.wav 支 持 居 民 合 理 的 住 房 消 费
34 |
--------------------------------------------------------------------------------
/decoder.py:
--------------------------------------------------------------------------------
1 | #coding=utf-8
2 |
3 |
4 |
5 | import os
6 |
7 | import tensorflow as tf
8 | import numpy as np
9 |
10 | from ctc_prefix_score import CTCPrefixScore
11 |
12 | from config.config import cfg
13 |
14 | from util.feature import load_sample
15 |
16 | os.environ['CUDA_VISIBLE_DEVICES'] = '1'
17 |
18 | def readtxt(txt):
19 | with open(txt, 'r') as f:
20 | lines = f.readlines()
21 | return [line.strip() for line in lines]
22 |
23 | def read_pb_return_tensors(graph, pb_file, return_elements):
24 |
25 | with tf.gfile.FastGFile(pb_file, 'rb') as f:
26 | frozen_graph_def = tf.GraphDef()
27 | frozen_graph_def.ParseFromString(f.read())
28 |
29 | with graph.as_default():
30 | return_elements = tf.import_graph_def(frozen_graph_def,
31 | return_elements=return_elements)
32 | return return_elements
33 |
34 | def end_detect(ended_hyps, i, M=3, D_end=np.log(1 * np.exp(-10))):
35 | if len(ended_hyps) == 0:
36 | return False
37 | count = 0
38 | best_hyp = sorted(ended_hyps, key=lambda x: x['score'], reverse=True)[0]
39 | for m in range(M):
40 | hyp_length = i - m
41 | hyps_same_length = [x for x in ended_hyps if len(x['yseq']) == hyp_length]
42 | if len(hyps_same_length) > 0:
43 | best_hyp_same_length = sorted(hyps_same_length, key=lambda x: x['score'], reverse=True)[0]
44 | if best_hyp_same_length['score'] - best_hyp['score'] < D_end:
45 | count += 1
46 |
47 | if count == M:
48 | return True
49 | else:
50 | return False
51 |
52 |
53 | def beam_search_decode_with_ctc(x, han_vocab, sess):
54 | enc, lpz = sess.run([return_tensors[3], return_tensors[4]], {return_tensors[0]: np.array([x])})
55 | lpz = np.squeeze(lpz, axis=0)
56 |
57 | if ctc_weight == 0.0:
58 | lpz =None
59 |
60 | maxlen = enc.shape[1]
61 | minlen = 0
62 |
63 | eos = han_vocab.index('')
64 |
65 | hyp = {'score': 0.0, 'yseq': [eos]}
66 |
67 | if lpz is not None:
68 | ctc_prefix_score = CTCPrefixScore(lpz, han_vocab.index('*'), eos)
69 | hyp['ctc_state_prev'] = ctc_prefix_score.initial_state()
70 | hyp['ctc_score_prev'] = 0.0
71 | # print(hyp['ctc_state_prev'])
72 |
73 | if ctc_weight != 1.0:
74 | ctc_beam = min(lpz.shape[-1], int(beam * CTC_SCORING_RATIO))
75 | else:
76 | ctc_beam = lpz.shape[-1]
77 |
78 | hyps = [hyp]
79 | ended_hyps = []
80 | for i in range(maxlen):
81 | hyps_best_kept = []
82 |
83 | max_len = max(len(hyp['yseq']) for hyp in hyps)
84 | ys = np.ones(shape=(len(hyps),max_len))*eos
85 | for k, hyp in enumerate(hyps):
86 | ys[k, :len(hyp['yseq'])] =hyp['yseq']
87 |
88 | local_att_scores_all = sess.run(return_tensors[5], {return_tensors[3]: np.tile(enc,(len(hyps),1,1)),
89 | return_tensors[1]: ys,
90 | return_tensors[2]: np.tile(np.array([[maxlen]]),(len(hyps),1))})
91 |
92 | # * 是ctc占位符 语言模型中不会出现
93 | local_att_scores_all[:, han_vocab.index('*')] = -10000000000.0
94 | local_scores_all = local_att_scores_all
95 |
96 | if lpz is not None:
97 | local_best_scores_all, local_best_ids_all = sess.run([score, ids],
98 | {topk_input: local_att_scores_all,
99 | beam_size: ctc_beam})
100 |
101 | ctc_state_prev = np.array([hyp['ctc_state_prev'] for hyp in hyps])
102 | ctc_score_prev = np.array([hyp['ctc_score_prev'] for hyp in hyps])
103 | ctc_score_prev = ctc_score_prev[:, np.newaxis]
104 |
105 | ctc_scores_all, ctc_states_all = ctc_prefix_score(
106 | ys, local_best_ids_all, ctc_state_prev)
107 |
108 | local_att_scores_all_now = local_att_scores_all[
109 | np.arange(0, local_best_ids_all.shape[0])[:, np.newaxis], local_best_ids_all]
110 |
111 | local_scores_all = (1.0 - ctc_weight) * local_att_scores_all_now \
112 | + ctc_weight * (ctc_scores_all - ctc_score_prev)
113 |
114 |
115 | local_best_scores_all, joint_best_ids_all = sess.run([score, ids],
116 | {topk_input: local_scores_all, beam_size: beam})
117 | local_best_ids_all = local_best_ids_all[
118 | np.arange(0, joint_best_ids_all.shape[0])[:, np.newaxis], joint_best_ids_all]
119 |
120 | else:
121 | local_best_scores_all, local_best_ids_all = sess.run([score, ids],
122 | {topk_input: local_scores_all,
123 | beam_size: beam})
124 | for k, hyp in enumerate(hyps):
125 | for j in range(beam):
126 | new_hyp = {}
127 | new_hyp['score'] = hyp['score'] + float(local_best_scores_all[k, j])
128 | new_hyp['yseq'] = [0] * (1 + len(hyp['yseq']))
129 | new_hyp['yseq'][:len(hyp['yseq'])] = hyp['yseq']
130 | new_hyp['yseq'][len(hyp['yseq'])] = int(local_best_ids_all[k, j])
131 | if lpz is not None:
132 | new_hyp['ctc_state_prev'] = ctc_states_all[k, joint_best_ids_all[k, j]]
133 | new_hyp['ctc_score_prev'] = ctc_scores_all[k, joint_best_ids_all[k, j]]
134 | hyps_best_kept.append(new_hyp)
135 | hyps_best_kept = sorted(
136 | hyps_best_kept, key=lambda x: x['score'], reverse=True)[:beam]
137 | hyps = hyps_best_kept
138 |
139 | if i == maxlen - 1:
140 | for hyp in hyps:
141 | if hyp['yseq'][-1] != eos:
142 | hyp['yseq'].append(eos)
143 |
144 | remained_hyps = []
145 | for hyp in hyps:
146 | if hyp['yseq'][-1] == eos:
147 | if len(hyp['yseq']) > minlen:
148 | hyp['score'] += (i+1) * penalty
149 | ended_hyps.append(hyp)
150 | else:
151 | remained_hyps.append(hyp)
152 | if end_detect(ended_hyps, i):
153 | break
154 | hyps = remained_hyps
155 | if len(hyps) <= 0:
156 | break
157 | ended_hyps=sorted(
158 | ended_hyps, key=lambda x: x['score'], reverse=True)
159 | lenth = len(ended_hyps)
160 | if lenth == 0:
161 | return []
162 | index_l = [0]
163 | index_r = [len(ended_hyps)]
164 | for i in range(1,lenth):
165 | diff = len(ended_hyps[i]['yseq'])-len(ended_hyps[i-1]['yseq'])
166 | # 相邻分值差不多的 应该字数差不多 干掉字少的
167 | if abs(diff) > 3:
168 | if diff < 0:
169 | index_r.append(i)
170 | else:
171 | index_l.append(i)
172 | # 相邻分值相差很大 干掉前面分值大的 越大字越少
173 | elif ended_hyps[i]['score'] - ended_hyps[i - 1]['score'] < -10:
174 | index_r.append(i)
175 | m_l = max(index_l)
176 | m_r = min(index_r)
177 |
178 | if m_l >= m_r:
179 | m_r = lenth
180 | ended_hyps = ended_hyps[m_l:m_r]
181 |
182 | a_s = [i['score'] for i in ended_hyps]
183 | a_seq = [[han_vocab[b] for b in i['yseq']] for i in ended_hyps]
184 | for a, b in zip(a_s, a_seq):
185 | print(a, b)
186 | nbest_hyps = sorted(
187 | ended_hyps, key=lambda x: x['score'], reverse=True)[:min(len(ended_hyps), nbest)]
188 | if len(nbest_hyps) == 0:
189 | return []
190 | result = [han_vocab[i] for i in nbest_hyps[0]['yseq'][1:-1]]
191 | return result
192 |
193 |
194 | if __name__ == '__main__':
195 | # 参数初始化
196 | feature_type = cfg.BASE.FEATURE_TYPE
197 | nomalnize = cfg.BASE.NOMALNIZE
198 | data_last_channel= int(cfg.BASE.OUTPUT_NUM[feature_type])
199 | # ctc权重 训练参数
200 | ctc_weight = cfg.PREDICT.CTC_WEIGHT
201 | CTC_SCORING_RATIO = cfg.PREDICT.CTC_SCORING_RATIO
202 | beam = cfg.PREDICT.BEAM
203 | penalty = cfg.PREDICT.PENALTY
204 | nbest = cfg.PREDICT.NBEST
205 | han_vocab = readtxt(cfg.BASE.DICT)
206 | graph_e2e = tf.Graph()
207 |
208 | #端到段模型初始化
209 | with graph_e2e.as_default():
210 | return_elements = ["input_data:0", "label_in:0", 'wave_l:0',
211 | 'encode_samples/enc_num_blocks_5/multihead_attention_1/ln/add_1:0',#encode节点名称
212 | 'LogSoftmax:0', #encode_log_softmax 节点名称
213 | 'strided_slice:0'] #decode_log_softmax 节点名称
214 |
215 | pb_file = cfg.PREDICT.pb
216 |
217 | return_tensors = read_pb_return_tensors(graph_e2e, pb_file, return_elements)
218 |
219 | beam_size = tf.placeholder(tf.int32, shape=(), name='beam_size')
220 | topk_input= tf.placeholder(tf.float32, shape=(None, None), name='topk_input')
221 | #tensorflow 求topk
222 | score, ids = tf.nn.top_k(topk_input, k=beam_size)
223 | sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True),graph=graph_e2e)
224 |
225 | full_path ='D4_750.wav'
226 | x, wave_len = load_sample(full_path, feature_type, nomalnize)
227 | result = beam_search_decode_with_ctc(x,han_vocab,sess)
228 | print('result: ' + ''.join(result))
229 |
230 |
231 |
232 |
233 |
234 |
--------------------------------------------------------------------------------
/freeze_graph.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python
2 | # coding=utf-8
3 |
4 | import tensorflow as tf
5 | from config.config import cfg
6 | from model.Transformer import Lm
7 | """
8 | 端到段模型冻结
9 | """
10 | #模型保存路径
11 | pb_file = "pb_save/model.pb"
12 |
13 | #tensorflow 模型地址 checkpoint
14 | ckpt_file = "logs_lm_tf/lm_train_loss=4.0981.ckpt-2"
15 |
16 | # 输入输出节点
17 | output_node_names = ["input_data", "label_in", 'wave_l',
18 | 'encode_samples/enc_num_blocks_5/multihead_attention_1/ln/add_1',#encode节点名称
19 | 'LogSoftmax', #encode_log_softmax 节点名称
20 | 'strided_slice'] #decode_log_softmax 节点名称
21 |
22 | feature_type = cfg.BASE.FEATURE_TYPE
23 | data_last_channel = int(cfg.BASE.OUTPUT_NUM[feature_type])
24 |
25 | input_data = tf.placeholder(tf.float32, shape=(None,None, data_last_channel),name='input_data')
26 | label_in = tf.placeholder(tf.int32, shape=(None, None), name='label_in')
27 | wave_l = tf.placeholder(tf.int32, shape=(None, 1), name='wave_l')
28 |
29 | e2e = Lm(False)
30 | encode, en_des = e2e.encode_network(input_data)
31 | encode_log_softmax= tf.nn.log_softmax(en_des,axis=-1)
32 |
33 | logits, preds = e2e.decode_network(encode, label_in,wave_l)
34 | decode_log_softmax = tf.nn.log_softmax(logits)[:,-1]
35 |
36 | sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True))
37 | saver = tf.train.Saver()
38 | saver.restore(sess, ckpt_file)
39 |
40 | converted_graph_def = tf.graph_util.convert_variables_to_constants(sess,
41 | input_graph_def = sess.graph.as_graph_def(),
42 | output_node_names = output_node_names)
43 |
44 | with tf.gfile.GFile(pb_file, "wb") as f:
45 | f.write(converted_graph_def.SerializeToString())
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/generate_data.py:
--------------------------------------------------------------------------------
1 | import os
2 | import time
3 | from random import shuffle
4 |
5 | import numpy as np
6 | import tensorflow as tf
7 |
8 | from config.config import cfg
9 | from util.feature import load_sample
10 |
11 |
12 | class get_data(object):
13 | def __init__(self, train_type):
14 | # #训练方式 train test dev
15 | self.data_type = train_type
16 | #数据类型 mfcc 或mel
17 | self.feature_type = cfg.BASE.FEATURE_TYPE
18 | self.nomalnize= cfg.BASE.NOMALNIZE
19 |
20 | # 采样特征的最后通道数
21 | self.data_last_channel= int(cfg.BASE.OUTPUT_NUM[self.feature_type])
22 | # 批次数
23 | self.batch_size = cfg.TRAIN.BATCH_SIZE if train_type == 'train' else cfg.TEST.BATCH_SIZE
24 | # 文件基础目录
25 | self.data_path = cfg.BASE.DATA_PATH
26 | # 需要加载的数据集 在config下配置
27 | self.read_files = cfg.TRAIN.read_files if train_type == 'train' else cfg.TEST.read_files
28 |
29 | # record 目录
30 |
31 | self.sos = ''
32 | self.eos = ''
33 |
34 | #字典 根据数据集自己修改 训练与transformer.py保持一致
35 | self.han_vocab = self.readtxt(cfg.BASE.DICT)
36 | self.source_init()
37 | self.dataset = tf.data.Dataset.from_generator(self.generate_values,
38 | (tf.string, tf.int32,tf.int32,tf.int32)) \
39 | .map(self.wrapped_complex_calulation,
40 | num_parallel_calls=8) \
41 | .filter(self.filter_fn) \
42 | .padded_batch(self.batch_size,
43 | padded_shapes=([None, self.data_last_channel], [None], [None], [None], [None], [None], [None]),
44 | padding_values=(0.0,-1,-1,-1,-1,-1,-1))\
45 | .prefetch(8)
46 |
47 |
48 | self.iterator = self.dataset.make_initializable_iterator()
49 | self.next_element = self.iterator.get_next()
50 | self.init_op = self.iterator.initializer
51 |
52 | def filter_fn(self,data,wave_len,label,label_len,label_in,label_out,ctc_len):
53 |
54 | return tf.greater(1000,wave_len) & tf.greater(wave_len,ctc_len)
55 |
56 |
57 | def wrapped_complex_calulation(self,wave,label,label_in,label_out):
58 | data,data_len,label,label_len,\
59 | label_in,label_out,ctc_len= \
60 | tf.py_func(func=self.calculation,
61 | inp=(wave,label,label_in,label_out),
62 | Tout=(tf.double, tf.int64, tf.int32, tf.int64, tf.int32, tf.int32, tf.int64))
63 |
64 | data=tf.cast(data,tf.float32)
65 |
66 | data_len=[tf.shape(data)[0]//4-1]
67 | data_len= tf.cast(data_len,tf.int32)
68 | label = tf.cast(label, tf.int32)
69 | label_len = tf.cast(label_len, tf.int32)
70 | label_in = tf.cast(label_in, tf.int32)
71 | label_out = tf.cast(label_out, tf.int32)
72 | ctc_len= tf.cast(ctc_len, tf.int32)
73 | return data,data_len,label,label_len,label_in,label_out,ctc_len
74 |
75 |
76 | def calculation(self,wave,label,label_in,label_out):
77 | data_input,wave_len =load_sample(wave,self.feature_type,self.nomalnize)
78 |
79 | if data_input.shape[0] % 4 != 0:
80 | data = np.zeros((data_input.shape[0] // 4 * 4 + 4, data_input.shape[1]))
81 | data[:data_input.shape[0], :] = data_input
82 | else:
83 | data = data_input
84 |
85 | label_len=len(label)
86 | data = data.astype(np.float)
87 | ctc_len = self.ctc_len(label)
88 | return data,[wave_len//4-1],label,[label_len],label_in,label_out,[ctc_len]
89 |
90 | def source_init(self):
91 | print('get source list...')
92 | self.wav_lst = []
93 | self.han_lst = []
94 | for file in self.read_files:
95 | print('load ', file, ' data...')
96 | sub_file = 'data/' + file
97 | with open(sub_file, 'r', encoding='utf8') as f:
98 | data = f.readlines()
99 | shuffle(data)
100 | for line in data:
101 | wav_file, han = line.strip().split('\t')
102 | han = han.lower()
103 | try:
104 | label = [self.han_vocab.index(i.lower()) for i in han.strip().split(' ')]
105 | if len(label) >= 100:
106 | continue
107 |
108 | npy_path = os.path.join(self.data_path, wav_file)
109 | self.wav_lst.append(npy_path)
110 |
111 | self.han_lst.append(label)
112 | except:
113 | print(wav_file,han)
114 |
115 | print('leng:'+str(len(self.han_lst)))
116 |
117 | self.batch_num = len(self.han_lst) // self.batch_size
118 |
119 | def __len__(self):
120 | return self.batch_num
121 |
122 | def __iter__(self):
123 | return self
124 |
125 |
126 | def generate_values(self):
127 | SOS = [self.han_vocab.index(self.sos)]
128 | EOS = [self.han_vocab.index(self.eos)]
129 | n_= [i for i in range(len(self.han_lst))]
130 | shuffle(n_)
131 | for j in n_:
132 | wave = self.wav_lst[j]
133 | label = self.han_lst[j]
134 | label_in = SOS + label
135 | label_out = label + EOS
136 | yield wave,label,label_in,label_out
137 |
138 |
139 | def ctc_len(self, label):
140 | add_len = 0
141 | label_len = len(label)
142 | for i in range(label_len - 1):
143 | if label[i] == label[i + 1]:
144 | add_len += 1
145 | return label_len + add_len
146 |
147 |
148 |
149 | def readtxt(self,txt):
150 | with open(txt,'r') as f:
151 | lines = f.readlines()
152 | return [line.strip() for line in lines]
153 |
154 |
155 | if __name__=='__main__':
156 | testset = get_data('train')
157 | sess = tf.InteractiveSession()
158 | count = 0
159 | sess.run(testset.init_op)
160 | t1= time.time()
161 | while True:
162 | try:
163 | wave,wave_len, label,label_length, label_in \
164 | , label_out,_ \
165 | = sess.run(testset.next_element)
166 | print(wave)
167 | break
168 | # print(i)
169 |
170 | except tf.errors.OutOfRangeError:
171 | # print("End of dataset")
172 | break
173 | t2 = time.time()
174 | print(t2-t1)
175 |
176 |
177 |
178 |
179 |
180 |
--------------------------------------------------------------------------------
/model/Transformer.py:
--------------------------------------------------------------------------------
1 | import math
2 |
3 | import numpy as np
4 | import tensorflow as tf
5 |
6 | from config.config import cfg
7 |
8 |
9 | def normalize(inputs,
10 | epsilon = 1e-8,
11 | scope="ln",
12 | reuse=tf.AUTO_REUSE):
13 | with tf.variable_scope(scope, reuse=reuse):
14 | inputs_shape = inputs.get_shape()
15 | params_shape = inputs_shape[-1:]
16 |
17 | mean, variance = tf.nn.moments(inputs, [-1], keep_dims=True)
18 | beta = tf.get_variable(name='beta', shape=params_shape, initializer=tf.constant_initializer(0.0))
19 | gamma = tf.get_variable(name='gamma', shape=params_shape, initializer=tf.constant_initializer(1.0))
20 | normalized = (inputs - mean) / ( (variance + epsilon) ** (.5) )
21 | outputs = gamma * normalized + beta
22 |
23 | return outputs
24 |
25 |
26 |
27 | def embedding(vocab_size,
28 | num_units,
29 | zero_pad=False,
30 | scope="embedding",
31 | reuse=None):
32 | with tf.variable_scope(scope, reuse=reuse):
33 | lookup_table = tf.get_variable('lookup_table',
34 | dtype=tf.float32,
35 | shape=[vocab_size, num_units],
36 | initializer=tf.contrib.layers.xavier_initializer())
37 | if zero_pad:
38 | lookup_table = tf.concat((tf.zeros(shape=[1, num_units]),
39 | lookup_table[1:, :]), 0)
40 |
41 | return lookup_table
42 |
43 |
44 | def creat_pe(max_length,d_model):
45 | pe = np.zeros((max_length, d_model))
46 | position = np.expand_dims(np.arange(0, max_length, dtype=np.float32),axis=1)
47 | div_term = np.exp(np.arange(0, d_model, 2, dtype=np.float32) *
48 | -(math.log(10000.0) / d_model))
49 | pe[:, 0::2] = np.sin(position * div_term)
50 | pe[:, 1::2] = np.cos(position * div_term)
51 | return pe
52 |
53 |
54 | def mask(inputs, key_masks):
55 | padding_num = -2 ** 32 + 1
56 | key_masks = tf.tile(key_masks, [tf.shape(inputs)[0] // tf.shape(key_masks)[0], tf.shape(inputs)[1] // tf.shape(key_masks)[1], 1]) # (h*N, t1, t2)
57 | key_masks = tf.to_float(key_masks)
58 | paddings = tf.ones_like(key_masks) * padding_num
59 | outputs = tf.where(tf.equal(key_masks, 0), paddings, inputs)
60 | outputs = tf.nn.softmax(outputs)
61 | paddings_zeros = tf.zeros_like(key_masks)
62 | outputs = tf.where(tf.equal(key_masks, 0), paddings_zeros, outputs)
63 | return outputs
64 |
65 | def scaled_dot_product_attention(Q, K, V,key_masks, dropout_rate=0.,
66 | training=True,
67 | scope="scaled_dot_product_attention"):
68 | with tf.variable_scope(scope, reuse=tf.AUTO_REUSE):
69 | d_k = Q.get_shape().as_list()[-1]
70 |
71 | # dot product
72 | outputs = tf.matmul(Q, tf.transpose(K, [0, 2, 1])) # (N, T_q, T_k)
73 |
74 | # scale
75 | outputs /= d_k ** 0.5
76 |
77 | # key masking
78 | outputs = mask(outputs, key_masks=key_masks)
79 |
80 | # dropout
81 | outputs = tf.layers.dropout(outputs, rate=dropout_rate, training=training)
82 |
83 | # weighted sum (context vectors)
84 | outputs = tf.matmul(outputs, V) # (N, T_q, d_v)
85 |
86 | return outputs
87 |
88 | def positional_encoding(inputs,
89 | position_enc,
90 | masking=False,
91 | scope="positional_encoding"):
92 | N, T = tf.shape(inputs)[0], tf.shape(inputs)[1] # dynamic
93 | with tf.variable_scope(scope, reuse=tf.AUTO_REUSE):
94 | # position indices
95 | position_ind = tf.tile(tf.expand_dims(tf.range(T), 0), [N, 1]) # (N, T)
96 | # lookup
97 | outputs = tf.nn.embedding_lookup(position_enc, position_ind)
98 | # masks
99 | if masking:
100 | outputs = tf.where(tf.equal(inputs, 0), inputs, outputs)
101 |
102 | return tf.to_float(outputs)
103 |
104 |
105 |
106 | def multihead_attention(queries, keys, values,key_masks,
107 | num_heads=8,
108 | dropout_rate=0,
109 | is_training=True,
110 | scope="multihead_attention"):
111 |
112 | d_model = queries.get_shape().as_list()[-1]
113 | with tf.variable_scope(scope, reuse=tf.AUTO_REUSE):
114 | # Linear projections
115 | Q = tf.layers.dense(queries, d_model, use_bias=True) # (N, T_q, d_model)
116 | K = tf.layers.dense(keys, d_model, use_bias=True) # (N, T_k, d_model)
117 | V = tf.layers.dense(values, d_model, use_bias=True) # (N, T_k, d_model)
118 |
119 | # Split and concat
120 | Q_ = tf.concat(tf.split(Q, num_heads, axis=2), axis=0) # (h*N, T_q, d_model/h)
121 | K_ = tf.concat(tf.split(K, num_heads, axis=2), axis=0) # (h*N, T_k, d_model/h)
122 | V_ = tf.concat(tf.split(V, num_heads, axis=2), axis=0) # (h*N, T_k, d_model/h)
123 |
124 | # Attention
125 | outputs = scaled_dot_product_attention(Q_, K_, V_, key_masks, dropout_rate, is_training)
126 |
127 | # Restore shape
128 | outputs = tf.concat(tf.split(outputs, num_heads, axis=0), axis=2) # (N, T_q, d_model)
129 |
130 | # Residual connection
131 | outputs += queries
132 |
133 | # Normalize
134 | outputs = normalize(outputs) # (N, T_q, C)
135 |
136 |
137 | return outputs
138 |
139 |
140 |
141 | def feedforward(inputs,
142 | num_units=[2048, 512],
143 | scope="multihead_attention",
144 | reuse=tf.AUTO_REUSE):
145 | with tf.variable_scope(scope, reuse=reuse):
146 | # Inner layer
147 | params = {"inputs": inputs, "filters": num_units[0], "kernel_size": 1,
148 | "activation": tf.nn.relu, "use_bias": True}
149 | outputs = tf.layers.conv1d(**params)
150 |
151 | # Readout layer
152 | params = {"inputs": outputs, "filters": num_units[1], "kernel_size": 1,
153 | "activation": None, "use_bias": True}
154 | outputs = tf.layers.conv1d(**params)
155 |
156 | # Residual connection
157 | outputs += inputs
158 |
159 | # Normalize
160 | outputs = normalize(outputs)
161 |
162 | return outputs
163 |
164 |
165 | def label_smoothing(inputs, epsilon=0.1):
166 | K = inputs.get_shape().as_list()[-1] # number of channels
167 | return ((1-epsilon) * inputs) + (epsilon / K)
168 |
169 |
170 |
171 | def read_class_names(class_file_name):
172 | '''loads class name from a file'''
173 | names = {}
174 | with open(class_file_name, 'r') as data:
175 | for ID, name in enumerate(data):
176 | names[ID] = name.strip('\n')
177 | return names
178 |
179 |
180 |
181 | def label_mask_tril(x):
182 | ys_mask = tf.math.not_equal(x, -1)
183 | size = tf.shape(ys_mask)[-1]
184 | ret = tf.ones(shape=[size, size], dtype=tf.float32)
185 | tril = tf.expand_dims(tf.linalg.LinearOperatorLowerTriangular(ret).to_dense(), axis=0)
186 | tril = tf.to_int32(tril)
187 | ys_mask_exp = tf.expand_dims(ys_mask, axis=-2)
188 | ys_mask_exp = tf.to_int32(ys_mask_exp)
189 | c = tf.bitwise.bitwise_and(ys_mask_exp, tril)
190 | return c
191 |
192 |
193 |
194 | class Lm(object):
195 | def __init__(self, is_training, dropout_rate_position=0.0):
196 | self.is_training = is_training
197 | self.hidden_units = 256
198 | self.label_vocab_size = len(read_class_names(cfg.BASE.DICT))
199 | self.num_heads = 4
200 | self.en_num_blocks = 6
201 | self.de_num_blocks = 6
202 | self.max_length = 100
203 | self.dropout_rate_position = dropout_rate_position
204 |
205 | self.dropout_rate = dropout_rate_position
206 |
207 | self.embbeding = embedding(vocab_size=self.label_vocab_size, num_units=self.hidden_units)
208 | self.en_pe = tf.convert_to_tensor(creat_pe(1000, self.hidden_units), tf.float32)
209 | self.pe = tf.convert_to_tensor(creat_pe(self.max_length, self.hidden_units), tf.float32)
210 |
211 |
212 | def encode_network(self,x, wave_len = None):
213 | with tf.variable_scope('encode_samples', reuse=tf.AUTO_REUSE):
214 | x = tf.expand_dims(x, -1)
215 | emb = tf.layers.conv2d(x, self.hidden_units, 3, 2, activation=tf.nn.relu)
216 | emb = tf.layers.conv2d(emb, self.hidden_units, 3, 2, activation=tf.nn.relu)
217 |
218 | emb = tf.reshape(emb, [tf.shape(emb)[0], tf.shape(emb)[1], self.hidden_units * 9])
219 | emb = tf.layers.dense(emb, self.hidden_units, activation=tf.nn.relu)
220 | enc = emb * (self.hidden_units**0.5) + positional_encoding(emb, self.en_pe)
221 | enc = tf.layers.dropout(enc,
222 | rate=self.dropout_rate_position,
223 | training=tf.convert_to_tensor(self.is_training))
224 |
225 | seq_range = tf.range(0, tf.shape(enc)[1], dtype=tf.int32)
226 | seq_range = tf.expand_dims(seq_range, axis=0)
227 | seq_range = tf.tile(seq_range, [tf.shape(x)[0], 1])
228 | if wave_len is None:
229 | src_masks = seq_range <= seq_range
230 | else:
231 | src_masks = seq_range <= wave_len
232 | src_masks = tf.expand_dims(src_masks, axis=1)
233 |
234 | for i in range(self.en_num_blocks):
235 | with tf.variable_scope("enc_num_blocks_{}".format(i)):
236 | enc = multihead_attention(queries=enc,
237 | keys=enc,
238 | values=enc,
239 | key_masks=src_masks,
240 | num_heads=self.num_heads,
241 | dropout_rate=self.dropout_rate,
242 | is_training=self.is_training)
243 |
244 | enc = feedforward(enc, num_units=[4 * self.hidden_units, self.hidden_units])
245 | en_des = tf.layers.dense(enc, self.label_vocab_size)
246 | return enc,en_des
247 |
248 |
249 |
250 | def decode_network(self,encode,y,wave_len):
251 | with tf.variable_scope('decode_samples', reuse=tf.AUTO_REUSE):
252 | tgt_masks = label_mask_tril(y)
253 |
254 | seq_range = tf.range(0, tf.shape(encode)[1], dtype=tf.int32)
255 | seq_range = tf.expand_dims(seq_range, axis=0)
256 | seq_range = tf.tile(seq_range, [tf.shape(wave_len)[0], 1])
257 | src_masks = seq_range <= wave_len
258 | src_masks = tf.expand_dims(src_masks, axis=1)
259 |
260 | # embedding
261 | emb = tf.nn.embedding_lookup(self.embbeding, y)
262 |
263 | dec = emb * (self.hidden_units**0.5) + positional_encoding(emb, self.pe)
264 |
265 | ## layer_nomal and Dropout
266 | #dec = normalize(dec)
267 | dec = tf.contrib.layers.layer_norm(
268 | inputs=dec, begin_norm_axis=-1, begin_params_axis=-1, scope='Layer_Nomal')
269 | dec = tf.layers.dropout(dec,
270 | rate=self.dropout_rate_position,
271 | training=tf.convert_to_tensor(self.is_training))
272 |
273 | ## Blocks
274 | for i in range(self.de_num_blocks):
275 | with tf.variable_scope("dec_num_blocks_{}".format(i)):
276 | ### Multihead Attention
277 | dec = multihead_attention(queries=dec,
278 | keys=dec,
279 | values=dec,
280 | key_masks=tgt_masks,
281 | num_heads=self.num_heads,
282 | dropout_rate=self.dropout_rate,
283 | is_training=self.is_training)
284 |
285 | dec = multihead_attention(queries=dec,
286 | keys=encode,
287 | values=encode,
288 | key_masks=src_masks,
289 | num_heads=self.num_heads,
290 | dropout_rate=self.dropout_rate,
291 | is_training=self.is_training)
292 |
293 | ### Feed Forward
294 | dec = feedforward(dec, num_units=[4*self.hidden_units, self.hidden_units])
295 |
296 | # Final linear projection
297 | logits = tf.layers.dense(dec, self.label_vocab_size,name='dense_output')
298 | preds = tf.to_int32(tf.argmax(logits, axis=-1))
299 |
300 | return logits,preds
301 |
302 | def compute_acc(self,preds,y):
303 | with tf.name_scope(name='acc'):
304 | istarget = tf.to_float(tf.not_equal(y, -1))
305 | acc = tf.reduce_sum(tf.to_float(tf.equal(preds, y))*istarget)/ (tf.reduce_sum(istarget))
306 | return acc
307 |
308 | def compute_loss(self,logits,y):
309 | # Loss
310 | with tf.name_scope(name='loss'):
311 | y_smoothed = label_smoothing(tf.one_hot(y, depth=self.label_vocab_size))
312 | istarget = tf.to_float(tf.not_equal(y, -1))
313 | loss = tf.nn.softmax_cross_entropy_with_logits_v2(logits=logits, labels=y_smoothed)
314 | mean_loss = tf.reduce_sum(loss*istarget) / (tf.reduce_sum(istarget))
315 | return mean_loss
316 |
317 |
318 | def compute_loss_1(self, logits, y, label_smoothing=0.1):
319 | with tf.name_scope(name='loss'):
320 | confidence = 1.0 - label_smoothing
321 | low_confidence = label_smoothing / \
322 | tf.cast(self.label_vocab_size - 1, dtype=tf.float32)
323 | soft_targets = tf.one_hot(
324 | tf.cast(y, tf.int32),
325 | depth=self.label_vocab_size,
326 | on_value=confidence,
327 | off_value=low_confidence,
328 | )
329 | loss = tf.nn.softmax_cross_entropy_with_logits_v2(logits=logits, labels=soft_targets)
330 | normalizing_constant = -(
331 | confidence * tf.log(confidence) +
332 | tf.cast(self.label_vocab_size - 1, dtype=tf.float32) *
333 | low_confidence * tf.log(low_confidence + 1e-20)
334 | )
335 | loss -= normalizing_constant
336 | istarget = tf.to_float(tf.not_equal(y, -1))
337 | mean_loss = tf.reduce_sum(loss * istarget) / (tf.reduce_sum(istarget))
338 | return mean_loss
339 |
340 | def compute_ctc_loss(self,y,input_lengths,label_lengths,encode_softmax):
341 | with tf.name_scope(name='cts_loss'):
342 | ctc_loss = tf.keras.backend.ctc_batch_cost(y_true=y,y_pred=encode_softmax
343 | ,input_length=input_lengths,label_length=label_lengths)
344 | batch_loss = tf.reduce_mean(ctc_loss, name='batch_loss')
345 | return batch_loss
346 |
--------------------------------------------------------------------------------
/pb_save/model.pb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuangcaomvp/speech-recognize/299939442d3fcea54aab926a3fd77351524465f7/pb_save/model.pb
--------------------------------------------------------------------------------
/train.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python
2 | # coding=utf-8
3 |
4 | import os
5 | import time
6 |
7 | import numpy as np
8 | import tensorflow as tf
9 | from tensorflow.python.client import device_lib
10 | from tqdm import tqdm
11 |
12 | from config.config import cfg
13 | from model.Transformer import Lm
14 | from generate_data import get_data
15 |
16 | os.environ['CUDA_VISIBLE_DEVICES'] = '1'
17 |
18 | def get_available_gpus():
19 | r"""
20 | Returns the number of GPUs available on this system.
21 | """
22 | local_device_protos = device_lib.list_local_devices()
23 | return [x.name for x in local_device_protos if x.device_type == 'GPU']
24 |
25 |
26 |
27 | def calculate_mean_edit_distance_and_loss(iterator,dropout_rate_position,trainable):
28 | r'''
29 | This routine beam search decodes a mini-batch and calculates the loss and mean edit distance.
30 | Next to total and average loss it returns the mean edit distance,
31 | the decoded result and the batch's original Y.
32 | '''
33 | # Obtain the next batch of data
34 | wave, wave_len, label, label_length, label_in, label_out, _ = iterator.get_next()
35 | model = Lm(trainable, dropout_rate_position)
36 |
37 | encode, en_des = model.encode_network(wave,wave_len)
38 | logits, preds = model.decode_network(encode, label_in,wave_len)
39 |
40 | att_loss = model.compute_loss_1(logits,label_out)
41 | acc = model.compute_acc(preds,label_out)
42 | encode_softmax = tf.nn.softmax(en_des, axis=-1)
43 | ctc_loss = model.compute_ctc_loss(label, wave_len, label_length, encode_softmax)
44 | loss = ctc_loss * 0.3 + (1 - 0.3) * att_loss
45 | return loss,att_loss,acc,ctc_loss
46 |
47 | def get_tower_results(iterator, optimizer,dropout_rate_position,trainable):
48 | # To calculate the mean of the losses
49 | tower_avg_losses = []
50 | tower_avg_att_losses = []
51 | tower_avg_ctc_losses = []
52 | tower_avg_acc = []
53 | # Tower gradients to return
54 | tower_gradients = []
55 |
56 | available_devices=get_available_gpus()
57 | with tf.variable_scope(tf.get_variable_scope()):
58 | # Loop over available_devices
59 | for i in range(len(available_devices)):
60 | # Execute operations of tower i on device i
61 | device = get_available_gpus()[i]
62 | with tf.device(device):
63 | # Create a scope for all operations of tower i
64 | with tf.name_scope('tower_%d' % i):
65 | loss, att_loss, acc, ctc_loss = calculate_mean_edit_distance_and_loss(iterator,dropout_rate_position,trainable)
66 | tf.get_variable_scope().reuse_variables()
67 |
68 | tower_avg_losses.append(loss)
69 | gradients = optimizer.compute_gradients(loss)
70 | tower_gradients.append(gradients)
71 | tower_avg_att_losses.append(att_loss)
72 | tower_avg_ctc_losses.append(ctc_loss)
73 | tower_avg_acc.append(acc)
74 | avg_loss = tf.reduce_mean(input_tensor=tower_avg_losses, axis=0)
75 | avg_att = tf.reduce_mean(input_tensor=tower_avg_att_losses, axis=0)
76 | avg_ctc = tf.reduce_mean(input_tensor=tower_avg_ctc_losses, axis=0)
77 | avg_acc = tf.reduce_mean(input_tensor=tower_avg_acc, axis=0)
78 | return tower_gradients, avg_loss, avg_att, avg_ctc, avg_acc
79 |
80 | def average_gradients(tower_gradients):
81 | r'''
82 | A routine for computing each variable's average of the gradients obtained from the GPUs.
83 | Note also that this code acts as a synchronization point as it requires all
84 | GPUs to be finished with their mini-batch before it can run to completion.
85 | '''
86 | # List of average gradients to return to the caller
87 | average_grads = []
88 |
89 | # Run this on cpu_device to conserve GPU memory
90 | with tf.device('/cpu:0'):
91 | # Loop over gradient/variable pairs from all towers
92 | for grad_and_vars in zip(*tower_gradients):
93 | # Introduce grads to store the gradients for the current variable
94 | grads = []
95 |
96 | # Loop over the gradients for the current variable
97 | for g, _ in grad_and_vars:
98 | # Add 0 dimension to the gradients to represent the tower.
99 | expanded_g = tf.expand_dims(g, 0)
100 | # Append on a 'tower' dimension which we will average over below.
101 | grads.append(expanded_g)
102 |
103 | # Average over the 'tower' dimension
104 | grad = tf.concat(grads, 0)
105 | grad = tf.reduce_mean(input_tensor=grad, axis=0)
106 |
107 | # Create a gradient/variable tuple for the current variable with its average gradient
108 | grad_and_var = (grad, grad_and_vars[0][1])
109 |
110 | # Add the current tuple to average_grads
111 | average_grads.append(grad_and_var)
112 |
113 | # Return result to caller
114 | return average_grads
115 |
116 | def noam_scheme(init_lr, global_step, warmup_steps=4000.):
117 | '''Noam scheme learning rate decay
118 | init_lr: initial learning rate. scalar.
119 | global_step: scalar.
120 | warmup_steps: scalar. During warmup_steps, learning rate increases
121 | until it reaches init_lr.
122 | '''
123 | step = tf.cast(global_step + 1, dtype=tf.float32)
124 | return init_lr * warmup_steps ** 0.5 * tf.minimum(step * warmup_steps ** -1.5, step ** -0.5)
125 |
126 | def train():
127 | trainset = get_data('train')
128 | testset = get_data('dev')
129 |
130 | global_step = tf.train.get_or_create_global_step()
131 |
132 | steps_per_period=len(trainset)
133 | warmup_steps = tf.constant(cfg.BASE.warmup_periods * steps_per_period,
134 | dtype=tf.float32, name='warmup_steps')
135 | train_steps = tf.constant(cfg.BASE.epochs * steps_per_period,
136 | dtype=tf.float32, name='train_steps')
137 |
138 | warmup_lr = tf.to_float(global_step) / tf.to_float(warmup_steps) \
139 | * cfg.BASE.lr
140 |
141 | decay_lr = tf.train.cosine_decay(
142 | cfg.BASE.lr,
143 | global_step=tf.to_float(global_step) - warmup_steps,
144 | decay_steps=train_steps - warmup_steps,
145 | alpha=0.01)
146 | learn_rate = tf.where(tf.to_float(global_step) < warmup_steps, warmup_lr, decay_lr)
147 | optimizer = tf.train.AdamOptimizer(learn_rate)
148 |
149 | iterator = tf.data.Iterator.from_structure(trainset.dataset.output_types,
150 | trainset.dataset.output_shapes,
151 | output_classes=trainset.dataset.output_classes)
152 | train_init_op = iterator.make_initializer(trainset.dataset)
153 | test_init_op = iterator.make_initializer(testset.dataset)
154 |
155 | trainable = tf.placeholder(dtype=tf.bool, name='training')
156 | dropout_rate_position = tf.placeholder(tf.float32, shape=(), name='drop_out')
157 | gradients, loss, att, ctc, acc = get_tower_results(iterator, optimizer,dropout_rate_position,trainable)
158 |
159 | avg_tower_gradients = average_gradients(gradients)
160 |
161 | grads, all_vars = zip(*avg_tower_gradients)
162 | clipped, gnorm = tf.clip_by_global_norm(grads, 0.25)
163 | grads_and_vars = list(zip(clipped, all_vars))
164 |
165 | apply_gradient_op = optimizer.apply_gradients(grads_and_vars, global_step=global_step)
166 |
167 |
168 |
169 | with tf.Session(config=tf.ConfigProto(allow_soft_placement=True)) as sess:
170 |
171 | loader = tf.train.Saver(tf.global_variables())
172 | saver = tf.train.Saver(tf.global_variables(), max_to_keep=5)
173 | sess.run(tf.global_variables_initializer())
174 | try:
175 | print('=> Restoring weights from: %s ... ' % cfg.BASE.initial_weight)
176 | loader.restore(sess, cfg.BASE.initial_weight)
177 | except:
178 | print('=> %s does not exist !!!' % cfg.BASE.initial_weight)
179 | print('=> Now it starts to train LM from scratch ...')
180 |
181 |
182 | for epoch in range(1, 1+cfg.BASE.epochs):
183 | #初始化数据集
184 | sess.run(train_init_op)
185 | train_epoch_loss, test_epoch_loss = [], []
186 | train_epoch_acc, test_epoch_acc = [], []
187 | train_epoch_ctc, test_epoch_ctc = [], []
188 | train_epoch_att, test_epoch_att = [], []
189 | pbar = tqdm(range(len(trainset)+1))
190 | for i in pbar:
191 | try:
192 | _, train_step_loss,train_step_acc,train_step_ctc,train_step_att, \
193 | global_step_val = sess.run(
194 | [apply_gradient_op, loss,acc,ctc,att,
195 | global_step],feed_dict={
196 | trainable: True,
197 | dropout_rate_position:0.1
198 |
199 | })
200 |
201 | train_epoch_loss.append(train_step_loss)
202 | train_epoch_acc.append(train_step_acc)
203 | train_epoch_ctc.append(train_step_ctc)
204 | train_epoch_att.append(train_step_att)
205 | pbar.set_description("loss:%.2f" % train_step_loss)
206 | pbar.set_postfix(acc=train_step_acc)
207 | except tf.errors.OutOfRangeError:
208 | break
209 |
210 |
211 | sess.run(test_init_op)
212 | while True:
213 | try:
214 |
215 | test_step_loss,test_step_acc,test_step_ctc,test_step_att = sess.run( [loss,acc,ctc,att], feed_dict={
216 | trainable: False,
217 | dropout_rate_position:0.0
218 | })
219 |
220 | test_epoch_loss.append(test_step_loss)
221 | test_epoch_acc.append(test_step_acc)
222 | test_epoch_ctc.append(test_step_ctc)
223 | test_epoch_att.append(test_step_att)
224 |
225 | except tf.errors.OutOfRangeError:
226 | break
227 | train_epoch_loss, test_epoch_loss = np.mean(train_epoch_loss), np.mean(test_epoch_loss)
228 | train_epoch_ctc,test_epoch_ctc = np.mean(train_epoch_ctc), np.mean(test_epoch_ctc)
229 | train_epoch_att, test_epoch_att = np.mean(train_epoch_att), np.mean(test_epoch_att)
230 |
231 | train_epoch_acc, test_epoch_acc = np.mean(train_epoch_acc), np.mean(test_epoch_acc)
232 | ckpt_file = "./logs_lm_tf/lm_train_loss=%.4f.ckpt" % train_epoch_loss
233 | log_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
234 | print("=> Epoch: %2d Time: %s Tr_loss: %.2f Tr_acc: %.2f Te_acc: %.2f "
235 | " tr_ctc: %.2f tr_att: %.2f "
236 | % (epoch, log_time, train_epoch_loss, train_epoch_acc, test_epoch_acc,
237 | train_epoch_ctc, train_epoch_att))
238 | saver.save(sess, ckpt_file, global_step=epoch)
239 |
240 |
241 |
242 |
243 | if __name__ == '__main__':
244 | train()
245 |
246 |
247 |
248 |
249 |
--------------------------------------------------------------------------------
/util/__pycache__/feature.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuangcaomvp/speech-recognize/299939442d3fcea54aab926a3fd77351524465f7/util/__pycache__/feature.cpython-36.pyc
--------------------------------------------------------------------------------
/util/feature.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | import numpy as np
4 | import python_speech_features as psf
5 | from scipy.io import wavfile
6 |
7 | WIN_LENGTH = 0.025 # Window length in seconds.
8 | WIN_STEP = 0.010 # The step between successive windows in seconds.
9 | MFCC_NUM_FEATURES = 26 # Number of features to extract.
10 | MEL_NUM_FEATURES=40
11 |
12 |
13 | def load_sample(file_path, feature_type=None, feature_normalization=None):
14 |
15 | __supported_feature_types = ['mel', 'mfcc']
16 | __supported_feature_normalizations = ['none', 'local', 'local_scalar', 'cmvn']
17 |
18 | feature_type = feature_type
19 | feature_normalization = feature_normalization
20 |
21 | if feature_type not in __supported_feature_types:
22 | raise ValueError('Requested feature type of {} isn\'t supported.'
23 | .format(feature_type))
24 |
25 | if feature_normalization not in __supported_feature_normalizations:
26 | raise ValueError('Requested feature normalization method {} is invalid.'
27 | .format(feature_normalization))
28 |
29 | if type(file_path) is not str:
30 | file_path = str(file_path, 'utf-8')
31 |
32 | if not os.path.isfile(file_path):
33 | raise ValueError('"{}" does not exist.'.format(file_path))
34 |
35 | # Load the audio files sample rate and data.
36 | (sampling_rate, audio_data) = wavfile.read(file_path)
37 |
38 | # At 16000 Hz, 512 samples ~= 32ms. At 16000 Hz, 200 samples = 12ms. 16 samples = 1ms @ 16kHz.
39 | f_max = sampling_rate / 2. # Maximum frequency (Nyquist rate).
40 | f_min = 0. # Minimum frequency.
41 | n_fft = 512 # Number of samples in a frame.
42 |
43 | if feature_type == 'mfcc':
44 | sample = __mfcc(
45 | audio_data, sampling_rate, WIN_LENGTH, WIN_STEP, MFCC_NUM_FEATURES, n_fft, f_min, f_max
46 | )
47 | elif feature_type == 'mel':
48 | sample = __mel(
49 | audio_data, sampling_rate, WIN_LENGTH, WIN_STEP, MEL_NUM_FEATURES, n_fft, f_min, f_max
50 | )
51 | else:
52 | raise ValueError('Unsupported feature type')
53 |
54 | # Make sure that data type matches TensorFlow type.
55 | sample = sample.astype(np.float32)
56 |
57 |
58 | # Get length of the sample.
59 | sample_len = np.array(sample.shape[0], dtype=np.int32)
60 |
61 | # Apply feature normalization.
62 | sample = __feature_normalization(sample, feature_normalization)
63 |
64 | # sample = [time, NUM_FEATURES], sample_len: scalar
65 | return sample, sample_len
66 |
67 |
68 | def __mfcc(audio_data, sampling_rate, win_len, win_step, num_features, n_fft, f_min, f_max):
69 | """Convert a wav signal into Mel Frequency Cepstral Coefficients (MFCC).
70 | Args:
71 | audio_data (np.ndarray): Wav signal.
72 | sampling_rate (int): Sampling rate.
73 | win_len (float): Window length in seconds.
74 | win_step (float): Window stride in seconds.
75 | num_features (int): Number of features to generate.
76 | n_fft (int): Number of Fast Fourier Transforms.
77 | f_min (float): Minimum frequency to consider.
78 | f_max (float): Maximum frequency to consider.
79 | Returns:
80 | np.ndarray: MFCC feature vectors. Shape: [time, num_features]
81 | """
82 |
83 | # Compute MFCC features.
84 | mfcc = psf.mfcc(signal=audio_data, samplerate=sampling_rate, winlen=win_len, winstep=win_step,
85 | numcep=num_features, nfilt=num_features, nfft=n_fft,
86 | lowfreq=f_min, highfreq=f_max,
87 | preemph=0.97, ceplifter=22, appendEnergy=True)
88 |
89 | # And the first-order differences (delta features).
90 | # feat_mfcc_d = psf.delta(mfcc, 2)
91 | # feat_mfcc_dd = psf.delta(feat_mfcc_d, 2)
92 |
93 | # Combine MFCC with MFCC_delta
94 | return mfcc
95 |
96 |
97 | def __mel(audio_data, sampling_rate, win_len, win_step, num_features, n_fft, f_min, f_max):
98 | """Convert a wav signal into a logarithmically scaled mel filterbank.
99 | Args:
100 | audio_data (np.ndarray): Wav signal.
101 | sampling_rate (int): Sampling rate.
102 | win_len (float): Window length in seconds.
103 | win_step (float): Window stride in seconds.
104 | num_features (int): Number of features to generate.
105 | n_fft (int): Number of Fast Fourier Transforms.
106 | f_min (float): Minimum frequency to consider.
107 | f_max (float): Maximum frequency to consider.
108 | Returns:
109 | np.ndarray: Mel-filterbank. Shape: [time, num_features]
110 | """
111 | mel = psf.logfbank(signal=audio_data, samplerate=sampling_rate, winlen=win_len,
112 | winstep=win_step, nfilt=num_features, nfft=n_fft,
113 | lowfreq=f_min, highfreq=f_max, preemph=0.97)
114 | return mel
115 |
116 |
117 | def __feature_normalization(features, method, is_mean =True, is_vars=True):
118 | """Normalize the given feature vector `y`, with the stated normalization `method`.
119 | Args:
120 | features (np.ndarray):
121 | The signal array
122 | method (str):
123 | Normalization method:
124 | 'local': Use local (in sample) mean and standard deviation values, and apply the
125 | normalization element wise, like in `global`.
126 | 'local_scalar': Uses only the mean and standard deviation of the current sample.
127 | The normalization is being applied by ([sample] - mean_scalar) / std_scalar
128 | 'none': No normalization is being applied.
129 | Returns:
130 | np.ndarray: The normalized feature vector.
131 | """
132 | if method == 'none':
133 | return features
134 | if method == 'local':
135 | return (features - np.mean(features, axis=0)) / np.std(features, axis=0)
136 | if method == 'local_scalar':
137 | # Option 'local' uses scalar values.
138 | return (features - np.mean(features)) / np.std(features)
139 | if method == 'cmvn':
140 | square_sums = (features ** 2).sum(axis=0)
141 | mean = features.mean(axis=0)
142 | if is_mean:
143 | features = np.subtract(features, mean)
144 |
145 | if is_vars:
146 | var = square_sums / features.shape[0] - mean ** 2
147 | std = np.maximum(np.sqrt(var), 1.0e-20)
148 | features = np.divide(features, std)
149 | return features
150 | raise ValueError('Invalid normalization method.')
151 |
152 |
153 |
154 |
--------------------------------------------------------------------------------