├── .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 | --------------------------------------------------------------------------------