Commit 7ae0ec76 authored by sunzhq2's avatar sunzhq2 Committed by xuxo
Browse files

update conformer

parent 60a2c57a
accum_grad: 1
allow_variable_data_keys: false
batch_bins: 2000000
batch_size: 20
batch_type: numel
best_model_criterion:
- - valid
- loss
- min
bpemodel: null
chunk_length: 500
chunk_shift_ratio: 0.5
cleaner: null
collect_stats: false
config: conf/train_lm_transformer.yaml
cudnn_benchmark: false
cudnn_deterministic: true
cudnn_enabled: true
dist_backend: nccl
dist_init_method: env://
dist_launcher: null
dist_master_addr: null
dist_master_port: null
dist_rank: null
dist_world_size: null
distributed: false
dry_run: false
early_stopping_criterion:
- valid
- loss
- min
fold_length:
- 150
g2p: null
grad_clip: 5.0
grad_clip_type: 2.0
grad_noise: false
init: null
iterator_type: sequence
keep_nbest_models: 10
lm: transformer
lm_conf:
att_unit: 512
dropout_rate: 0.0
embed_unit: 128
head: 8
layer: 16
pos_enc: null
unit: 2048
local_rank: 0
log_interval: null
log_level: INFO
max_cache_size: 0.0
max_epoch: 50
model_conf:
ignore_id: 0
multiple_iterator: false
multiprocessing_distributed: false
ngpu: 1
no_forward_run: false
non_linguistic_symbols: null
num_att_plot: 3
num_cache_chunks: 1024
num_iters_per_epoch: null
num_workers: 1
optim: adam
optim_conf:
lr: 0.001
output_dir: exp/lm_train_lm_transformer_char_batch_bins2000000
patience: null
pretrain_key: []
pretrain_path: []
print_config: false
required:
- output_dir
- token_list
resume: true
scheduler: warmuplr
scheduler_conf:
warmup_steps: 25000
seed: 0
sort_batch: descending
sort_in_batch: descending
token_list:
- <blank>
- <unk>
- "\u7684"
- "\u4E00"
- "\u5728"
- "\u5341"
- "\u4E2D"
- "\u662F"
- "\u4EBA"
- "\u6709"
- "\u4E8C"
- "\u4E0A"
- "\u4E86"
- "\u4E0D"
- "\u56FD"
- "\u5E02"
- "\u5927"
- "\u4E1A"
- "\u4E3A"
- "\u5E74"
- "\u4E09"
- "\u53D1"
- "\u4E2A"
- "\u5206"
- "\u51FA"
- "\u4F1A"
- "\u516C"
- "\u884C"
- "\u5730"
- "\u6210"
- "\u8FD9"
- "\u548C"
- "\u5230"
- "\u4E94"
- "\u4EA7"
- "\u65F6"
- "\u5BF9"
- "\u623F"
- "\u767E"
- "\u80FD"
- "\u573A"
- "\u6765"
- "\u4EE5"
- "\u65B0"
- "\u4E4B"
- "\u65E5"
- "\u8005"
- "\u5C06"
- "\u73B0"
- "\u56DB"
- "\u8981"
- "\u5BB6"
- "\u8D44"
- "\u591A"
- "\u6708"
- "\u4E5F"
- "\u65B9"
- "\u540E"
- "\u673A"
- "\u4E0B"
- "\u524D"
- "\u96F6"
- "\u6BD4"
- "\u4E8E"
- "\u751F"
- "\u70B9"
- "\u5F00"
- "\u52A8"
- "\u9AD8"
- "\u7ECF"
- "\u8FDB"
- "\u62A5"
- "\u4F53"
- "\u8D5B"
- "\u5B50"
- "\u4E07"
- "\u8F66"
- "\u7528"
- "\u91D1"
- "\u53F8"
- "\u53EF"
- "\u88AB"
- "\u8FC7"
- "\u624B"
- "\u672C"
- "\u4F5C"
- "\u81EA"
- "\u5168"
- "\u516B"
- "\u516D"
- "\u6700"
- "\u4EF7"
- "\u76EE"
- "\u7535"
- "\u90E8"
- "\u4EA4"
- "\u4E5D"
- "\u4E03"
- "\u9762"
- "\u6211"
- "\u4F01"
- "\u52A0"
- "\u5C0F"
- "\u5EA6"
- "\u5B9E"
- "\u540C"
- "\u57CE"
- "\u5DE5"
- "\u5176"
- "\u529B"
- "\u5B9A"
- "\u800C"
- "\u5143"
- "\u5408"
- "\u5DF2"
- "\u5185"
- "\u4E0E"
- "\u6CD5"
- "\u8FD8"
- "\u5173"
- "\u7F51"
- "\u5F97"
- "\u4ED6"
- "\u5C31"
- "\u5165"
- "\u540D"
- "\u54C1"
- "\u5973"
- "\u8BB0"
- "\u7406"
- "\u4E8B"
- "\u957F"
- "\u4E24"
- "\u5546"
- "\u90FD"
- "\u4EEC"
- "\u4EAC"
- "\u5E76"
- "\u4F46"
- "\u5E73"
- "\u5236"
- "\u4FDD"
- "\u636E"
- "\u671F"
- "\u5316"
- "\u4E3B"
- "\u91CD"
- "\u8868"
- "\u6B21"
- "\u76F8"
- "\u91CF"
- "\u901A"
- "\u9053"
- "\u653F"
- "\u6240"
- "\u5929"
- "\u7B2C"
- "\u5229"
- "\u95F4"
- "\u6D77"
- "\u6570"
- "\u52A1"
- "\u63D0"
- "\u5317"
- "\u5C55"
- "\u5458"
- "\u7BA1"
- "\u6295"
- "\u56E0"
- "\u5EFA"
- "\u597D"
- "\u5916"
- "\u533A"
- "\u66F4"
- "\u793A"
- "\u589E"
- "\u4ECE"
- "\u8BA1"
- "\u4FE1"
- "\u6027"
- "\u7B49"
- "\u8FD0"
- "\u9879"
- "\u5E94"
- "\u5F53"
- "\u6536"
- "\u4F4D"
- "\u7740"
- "\u8D77"
- "\u5B66"
- "\u53F0"
- "\u6C11"
- "\u6301"
- "\u89C4"
- "\u8BBE"
- "\u660E"
- "\u80A1"
- "\u6B63"
- "\u6CA1"
- "\u5FC3"
- "\u7136"
- "\u5F88"
- "\u4ECA"
- "\u8C03"
- "\u53BB"
- "\u5B89"
- "\u6B64"
- "\u4E1C"
- "\u961F"
- "\u5982"
- "\u7EBF"
- "\u79D1"
- "\u4E16"
- "\u65E0"
- "\u8FBE"
- "\u8EAB"
- "\u679C"
- "\u8BC1"
- "\u57FA"
- "\u53D7"
- "\u7537"
- "\u9700"
- "\u6807"
- "\u5E03"
- "\u60C5"
- "\u683C"
- "\u8FD1"
- "\u6B65"
- "\u672A"
- "\u8D39"
- "\u6C42"
- "\u5F0F"
- "\u6D88"
- "\u5343"
- "\u7F8E"
- "\u4E9B"
- "\u91CC"
- "\u7C73"
- "\u5411"
- "\u770B"
- "\u7EED"
- "\u606F"
- "\u610F"
- "\u63A5"
- "\u95E8"
- "\u56DE"
- "\u53CA"
- "\u9500"
- "\u8001"
- "\u83B7"
- "\u603B"
- "\u76D1"
- "\u6253"
- "\u8054"
- "\u81F3"
- "\u4EBF"
- "\u8BF4"
- "\u8BAF"
- "\u4F4F"
- "\u73AF"
- "\u4EF6"
- "\u6574"
- "\u6C34"
- "\u6280"
- "\u8DEF"
- "\u9662"
- "\u5C40"
- "\u7279"
- "\u8BE5"
- "\u7EDF"
- "\u7531"
- "\u552E"
- "\u8D2D"
- "\u5F3A"
- "\u6539"
- "\u95EE"
- "\u4E50"
- "\u697C"
- "\u6DA8"
- "\u5904"
- "\u51B3"
- "\u8BA9"
- "\u7CFB"
- "\u6237"
- "\u9898"
- "\u63A8"
- "\u5C11"
- "\u5E7F"
- "\u663E"
- "\u964D"
- "\u8DD1"
- "\u5F71"
- "\u53EA"
- "\u9009"
- "\u79F0"
- "\u521B"
- "\u6613"
- "\u6218"
- "\u9996"
- "\u5B8C"
- "\u6848"
- "\u7B56"
- "\u5E38"
- "\u67E5"
- "\u53C2"
- "\u79CD"
- "\u724C"
- "\u7A0B"
- "\u94F6"
- "\u5907"
- "\u8BA4"
- "\u8425"
- "\u7ACB"
- "\u52BF"
- "\u7ED3"
- "\u9020"
- "\u8D85"
- "\u5DF1"
- "\u51C6"
- "\u5B58"
- "\u9669"
- "\u7403"
- "\u5404"
- "\u4EE3"
- "\u4F4E"
- "\u518D"
- "\u505A"
- "\u7EA7"
- "\u6B3E"
- "\u653E"
- "\u7269"
- "\u544A"
- "\u539F"
- "\u53CB"
- "\u8F6C"
- "\u8B66"
- "\u5468"
- "\u754C"
- "\u5F20"
- "\u6837"
- "\u4F20"
- "\u8F83"
- "\u98CE"
- "\u5355"
- "\u7ED9"
- "\u5979"
- "\u5DDE"
- "\u89E3"
- "\u5219"
- "\u89C6"
- "\u6307"
- "\u9884"
- "\u5347"
- "\u534E"
- "\u4F9B"
- "\u8D70"
- "\u6BCF"
- "\u53D6"
- "\u5BFC"
- "\u641C"
- "\u96C6"
- "\u6587"
- "\u53D8"
- "\u5BA2"
- "\u6392"
- "\u7247"
- "\u5934"
- "\u4EFB"
- "\u79EF"
- "\u672F"
- "\u7387"
- "\u578B"
- "\u519B"
- "\u65AF"
- "\u7814"
- "\u522B"
- "\u975E"
- "\u76F4"
- "\u667A"
- "\u901F"
- "\u7EC4"
- "\u661F"
- "\u9886"
- "\u53E3"
- "\u4EFD"
- "\u5C81"
- "\u9A6C"
- "\u738B"
- "\u5FEB"
- "\u4E13"
- "\u793E"
- "\u4F7F"
- "\u56E2"
- "\u6A21"
- "\u5668"
- "\u96BE"
- "\u6D3B"
- "\u62C9"
- "\u6216"
- "\u7EA6"
- "\u65BD"
- "\u6E90"
- "\u6784"
- "\u652F"
- "\u533B"
- "\u513F"
- "\u5E26"
- "\u670D"
- "\u5148"
- "\u60F3"
- "\u5F15"
- "\u4E48"
- "\u529E"
- "\u7167"
- "\u72D0"
- "\u6743"
- "\u5FAE"
- "\u5357"
- "\u59CB"
- "\u878D"
- "\u6DF1"
- "\u58EB"
- "\u6E38"
- "\u7EE9"
- "\u4EC5"
- "\u51B5"
- "\u5A92"
- "\u968F"
- "\u534A"
- "\u8D8A"
- "\u5E45"
- "\u786E"
- "\u6CE8"
- "\u7C7B"
- "\u4E89"
- "\u7A0E"
- "\u9650"
- "\u6D41"
- "\u5747"
- "\u63A7"
- "\u5145"
- "\u989D"
- "\u671B"
- "\u8FDE"
- "\u5212"
- "\u5965"
- "\u4E9A"
- "\u5305"
- "\u5A31"
- "\u897F"
- "\u8D22"
- "\u503C"
- "\u4F24"
- "\u67D0"
- "\u81F4"
- "\u7EC8"
- "\u7A7A"
- "\u6D4E"
- "\u4F17"
- "\u9645"
- "\u571F"
- "\u4E70"
- "\u4ECD"
- "\u80B2"
- "\u5E08"
- "\u6C7D"
- "\u77E5"
- "\u8D28"
- "\u6001"
- "\u5177"
- "\u674E"
- "\u8D23"
- "\u7A76"
- "\u9732"
- "\u6761"
- "\u51E0"
- "\u5C45"
- "\u5171"
- "\u54CD"
- "\u53CD"
- "\u7AD9"
- "\u51A0"
- "\u8282"
- "\u5B63"
- "\u4F18"
- "\u59D4"
- "\u5B85"
- "\u89C2"
- "\u4E92"
- "\u89C1"
- "\u8303"
- "\u5883"
- "\u611F"
- "\u8D1F"
- "\u6BB5"
- "\u5931"
- "\u91C7"
- "\u5957"
- "\u57DF"
- "\u5C14"
- "\u4E3E"
- "\u4F55"
- "\u5149"
- "\u6C14"
- "\u843D"
- "\u535A"
- "\u6559"
- "\u9526"
- "\u6797"
- "\u5C71"
- "\u4F9D"
- "\u7EE7"
- "\u6781"
- "\u5F62"
- "\u56FE"
- "\u5BA1"
- "\u7ADE"
- "\u76CA"
- "\u65AD"
- "\u8D37"
- "\u6548"
- "\u5E9C"
- "\u590D"
- "\u8BB8"
- "\u5BB9"
- "\u5065"
- "\u51FB"
- "\u8DB3"
- "\u53C8"
- "\u8BC9"
- "\u52A9"
- "\u5B69"
- "\u8272"
- "\u505C"
- "\u7968"
- "\u53CC"
- "\u62FF"
- "\u677F"
- "\u677E"
- "\u70ED"
- "\u90A3"
- "\u628A"
- "\u5374"
- "\u6E05"
- "\u5218"
- "\u8BAE"
- "\u8003"
- "\u51CF"
- "\u66FE"
- "\u7591"
- "\u4F8B"
- "\u9664"
- "\u529F"
- "\u5360"
- "\u4F60"
- "\u8BD5"
- "\u6839"
- "\u6E2F"
- "\u592A"
- "\u79BB"
- "\u624D"
- "\u8D27"
- "\u7A81"
- "\u6D89"
- "\u4E14"
- "\u5238"
- "\u914D"
- "\u76D8"
- "\u5373"
- "\u5E93"
- "\u4ED8"
- "\u7834"
- "\u804C"
- "\u6F14"
- "\u519C"
- "\u7F6E"
- "\u7EAA"
- "\u8BBA"
- "\u771F"
- "\u9F99"
- "\u665A"
- "\u88C5"
- "\u7231"
- "\u53F7"
- "\u7EC3"
- "\u6B7B"
- "\u538B"
- "\u4EB2"
- "\u4E25"
- "\u8BC4"
- "\u7530"
- "\u8BDD"
- "\u6258"
- "\u62A4"
- "\u706B"
- "\u534F"
- "\u7EA2"
- "\u6C5F"
- "\u514B"
- "\u5356"
- "\u8A00"
- "\u79DF"
- "\u5584"
- "\u9891"
- "\u666E"
- "\u98DE"
- "\u9A8C"
- "\u8865"
- "\u8FB9"
- "\u6EE1"
- "\u8C61"
- "\u8F6F"
- "\u7B97"
- "\u906D"
- "\u9980"
- "\u95FB"
- "\u7A33"
- "\u5382"
- "\u8FDC"
- "\u82F9"
- "\u94B1"
- "\u62C5"
- "\u5224"
- "\u5B98"
- "\u867D"
- "\u6E7E"
- "\u6309"
- "\u6628"
- "\u6821"
- "\u5FC5"
- "\u56ED"
- "\u7565"
- "\u6551"
- "\u5E0C"
- "\u5E95"
- "\u6267"
- "\u591F"
- "\u5F81"
- "\u62CD"
- "\u5386"
- "\u50CF"
- "\u6DA6"
- "\u5C42"
- "\u503A"
- "\u4FBF"
- "\u969C"
- "\u56F4"
- "\u5EB7"
- "\u5E97"
- "\u5F80"
- "\u5217"
- "\u65E9"
- "\u6D4B"
- "\u5F55"
- "\u5426"
- "\u9999"
- "\u5B9D"
- "\u9633"
- "\u7D22"
- "\u6838"
- "\u5174"
- "\u68C0"
- "\u72B6"
- "\u82F1"
- "\u6751"
- "\u6599"
- "\u4E91"
- "\u7559"
- "\u592B"
- "\u79FB"
- "\u5956"
- "\u75C5"
- "\u4E34"
- "\u8F7B"
- "\u7701"
- "\u79D2"
- "\u6FC0"
- "\u8BF7"
- "\u9769"
- "\u5C5E"
- "\u9047"
- "\u8DCC"
- "\u7EF4"
- "\u6279"
- "\u5FB7"
- "\u627F"
- "\u7AEF"
- "\u4ECB"
- "\u7CBE"
- "\u593A"
- "\u7FA4"
- "\u521D"
- "\u80DC"
- "\u5361"
- "\u5C3D"
- "\u82B1"
- "\u8F86"
- "\u5B83"
- "\u6545"
- "\u795E"
- "\u5C4A"
- "\u6CBB"
- "\u900F"
- "\u666F"
- "\u767D"
- "\u526F"
- "\u4EC0"
- "\u5BA3"
- "\u94C1"
- "\u6768"
- "\u8DF3"
- "\u5047"
- "\u767B"
- "\u798F"
- "\u9752"
- "\u836F"
- "\u5A5A"
- "\u517B"
- "\u5E55"
- "\u8FDD"
- "\u77ED"
- "\u8BBF"
- "\u4FEE"
- "\u7EB7"
- "\u5F8B"
- "\u5DE6"
- "\u89D2"
- "\u9152"
- "\u62EC"
- "\u7206"
- "\u5ACC"
- "\u5F84"
- "\u5B81"
- "\u8463"
- "\u9002"
- "\u9010"
- "\u521A"
- "\u9632"
- "\u9648"
- "\u5348"
- "\u5DEE"
- "\u5EAD"
- "\u72EC"
- "\u6CE2"
- "\u98DF"
- "\u8BC6"
- "\u4F3C"
- "\u5019"
- "\u9EC4"
- "\u4EA1"
- "\u8BAD"
- "\u4E66"
- "\u9000"
- "\u5F85"
- "\u822A"
- "\u5757"
- "\u51B2"
- "\u6269"
- "\u5434"
- "\u751A"
- "\u7533"
- "\u4F1F"
- "\u773C"
- "\u5DF4"
- "\u89C9"
- "\u627E"
- "\u6362"
- "\u4E49"
- "\u8F6E"
- "\u6ED1"
- "\u5E2D"
- "\u592E"
- "\u9001"
- "\u53F3"
- "\u536B"
- "\u4E58"
- "\u77F3"
- "\u5B57"
- "\u7F6A"
- "\u7F57"
- "\u6CF3"
- "\u5B59"
- "\u6790"
- "\u5FD7"
- "\u53E6"
- "\u6BCD"
- "\u7EFF"
- "\u62A2"
- "\u6B62"
- "\u4EE4"
- "\u7AE5"
- "\u5988"
- "\u53F2"
- "\u5211"
- "\u6D32"
- "\u8FF0"
- "\u7A7F"
- "\u5FF5"
- "\u7EB3"
- "\u635F"
- "\u5BCC"
- "\u514D"
- "\u6BD2"
- "\u7EDC"
- "\u7D27"
- "\u59BB"
- "\u4E4E"
- "\u8C6A"
- "\u7D20"
- "\u5BB3"
- "\u5012"
- "\u5438"
- "\u8857"
- "\u4FC3"
- "\u62E9"
- "\u6740"
- "\u8FFD"
- "\u5DE8"
- "\u72AF"
- "\u58F0"
- "\u613F"
- "\u6668"
- "\u601D"
- "\u8C08"
- "\u6CB3"
- "\u9547"
- "\u5C3C"
- "\u8DDF"
- "\u5E86"
- "\u94FE"
- "\u63AA"
- "\u501F"
- "\u8D54"
- "\u5BC6"
- "\u5733"
- "\u8D34"
- "\u82CF"
- "\u6E29"
- "\u9A97"
- "\u4E60"
- "\u6444"
- "\u7248"
- "\u5E2E"
- "\u5E01"
- "\u9636"
- "\u963F"
- "\u8FCE"
- "\u9A7E"
- "\u9ED1"
- "\u8D8B"
- "\u53BF"
- "\u79C1"
- "\u5403"
- "\u7597"
- "\u7EC6"
- "\u8651"
- "\u8111"
- "\u97E9"
- "\u4EAE"
- "\u65C5"
- "\u6293"
- "\u7F5A"
- "\u826F"
- "\u80CC"
- "\u8138"
- "\u7EDD"
- "\u73ED"
- "\u5371"
- "\u7840"
- "\u620F"
- "\u6234"
- "\u62DB"
- "\u547D"
- "\u5C1A"
- "\u7F3A"
- "\u4F19"
- "\u987B"
- "\u7236"
- "\u591C"
- "\u5207"
- "\u64CD"
- "\u6325"
- "\u6D3E"
- "\u5EF6"
- "\u649E"
- "\u62AB"
- "\u8863"
- "\u5267"
- "\u9646"
- "\u7ADF"
- "\u7B7E"
- "\u6B27"
- "\u4EAB"
- "\u6625"
- "\u5FBD"
- "\u88C1"
- "\u507F"
- "\u542F"
- "\u827A"
- "\u5B97"
- "\u5473"
- "\u5BDF"
- "\u4F30"
- "\u51C0"
- "\u52DF"
- "\u62E5"
- "\u91CA"
- "\u559C"
- "\u987A"
- "\u52B1"
- "\u9760"
- "\u6E10"
- "\u5170"
- "\u6CB9"
- "\u4F73"
- "\u56F0"
- "\u9488"
- "\u8FF7"
- "\u5199"
- "\u6750"
- "\u786C"
- "\u6865"
- "\u575A"
- "\u8BA2"
- "\u62F3"
- "\u7D2F"
- "\u76D6"
- "\u5BA4"
- "\u675F"
- "\u622A"
- "\u8DDD"
- "\u9A76"
- "\u65EC"
- "\u6B4C"
- "\u6089"
- "\u70C8"
- "\u5E8F"
- "\u60A3"
- "\u5E72"
- "\u6C61"
- "\u5708"
- "\u6770"
- "\u9876"
- "\u8D25"
- "\u4F34"
- "\u5F52"
- "\u63A2"
- "\u66DD"
- "\u6000"
- "\u6025"
- "\u6C60"
- "\u7EC7"
- "\u79C0"
- "\u59D0"
- "\u5CF0"
- "\u987E"
- "\u8BEF"
- "\u952E"
- "\u4E30"
- "\u73A9"
- "\u6C49"
- "\u53E4"
- "\u5F69"
- "\u8BA8"
- "\u670B"
- "\u6297"
- "\u523A"
- "\u6311"
- "\u8840"
- "\u51CC"
- "\u65E7"
- "\u62DF"
- "\u6652"
- "\u9644"
- "\u60CA"
- "\u6B22"
- "\u52B3"
- "\u4E08"
- "\u64AD"
- "\u5F90"
- "\u5417"
- "\u6E56"
- "\u7B11"
- "\u9986"
- "\u97F3"
- "\u9635"
- "\u5750"
- "\u8C37"
- "\u5F02"
- "\u600E"
- "\u590F"
- "\u9F84"
- "\u719F"
- "\u82E5"
- "\u60E0"
- "\u4F11"
- "\u6C38"
- "\u54EA"
- "\u6682"
- "\u8F93"
- "\u7ECD"
- "\u5370"
- "\u51B0"
- "\u7F13"
- "\u6696"
- "\u542C"
- "\u907F"
- "\u5609"
- "\u5BFB"
- "\u57F9"
- "\u7B79"
- "\u4F26"
- "\u96EA"
- "\u8D26"
- "\u66B4"
- "\u7B80"
- "\u4E88"
- "\u4E3D"
- "\u6CFD"
- "\u523B"
- "\u91CE"
- "\u5A01"
- "\u5BBD"
- "\u7B14"
- "\u8BED"
- "\u6B66"
- "\u7092"
- "\u865A"
- "\u67B6"
- "\u5947"
- "\u54E5"
- "\u5C24"
- "\u5EA7"
- "\u8FC5"
- "\u7C89"
- "\u500D"
- "\u6731"
- "\u5C4B"
- "\u822C"
- "\u9519"
- "\u6D25"
- "\u5F1F"
- "\u6C47"
- "\u6982"
- "\u9F13"
- "\u6389"
- "\u90D1"
- "\u949F"
- "\u53EC"
- "\u793C"
- "\u7981"
- "\u6298"
- "\u7F29"
- "\u9501"
- "\u6D9B"
- "\u4E61"
- "\u80A5"
- "\u5E78"
- "\u96E8"
- "\u68A6"
- "\u8089"
- "\u653B"
- "\u51AC"
- "\u547C"
- "\u84DD"
- "\u7EFC"
- "\u7801"
- "\u676F"
- "\u6620"
- "\u5200"
- "\u8C22"
- "\u7F16"
- "\u811A"
- "\u6653"
- "\u904D"
- "\u671D"
- "\u5409"
- "\u6D17"
- "\u76D7"
- "\u4E39"
- "\u5C4F"
- "\u76DB"
- "\u79D8"
- "\u62D8"
- "\u67D3"
- "\u6E20"
- "\u6263"
- "\u6D0B"
- "\u68AF"
- "\u67AA"
- "\u4E45"
- "\u8BC8"
- "\u5DDD"
- "\u6469"
- "\u4FC4"
- "\u8FEA"
- "\u6BDB"
- "\u8D5E"
- "\u7B26"
- "\u753B"
- "\u7FFB"
- "\u59B9"
- "\u7B51"
- "\u805A"
- "\u54C8"
- "\u5175"
- "\u80AF"
- "\u80CE"
- "\u6F6E"
- "\u82E6"
- "\u9003"
- "\u8BB2"
- "\u6388"
- "\u6162"
- "\u987F"
- "\u9057"
- "\u4E1D"
- "\u5448"
- "\u63ED"
- "\u6302"
- "\u5C01"
- "\u6167"
- "\u8DE8"
- "\u8BE2"
- "\u62C6"
- "\u68EE"
- "\u5B55"
- "\u8131"
- "\u8BFB"
- "\u679A"
- "\u6350"
- "\u6869"
- "\u8DC3"
- "\u5237"
- "\u82AF"
- "\u6597"
- "\u6606"
- "\u50A8"
- "\u5B88"
- "\u89E6"
- "\u6728"
- "\u76AE"
- "\u996D"
- "\u6DFB"
- "\u839E"
- "\u9707"
- "\u8F7D"
- "\u8D35"
- "\u4FB5"
- "\u6491"
- "\u7238"
- "\u518C"
- "\u821E"
- "\u4E01"
- "\u8D38"
- "\u5976"
- "\u9690"
- "\u5987"
- "\u699C"
- "\u7761"
- "\u9677"
- "\u8349"
- "\u626C"
- "\u88AD"
- "\u5077"
- "\u7763"
- "\u4E8F"
- "\u5415"
- "\u73E0"
- "\u8D76"
- "\u6276"
- "\u76C8"
- "\u6863"
- "\u8BFA"
- "\u8FD4"
- "\u65E2"
- "\u672B"
- "\u6C99"
- "\u8C01"
- "\u5B8F"
- "\u6458"
- "\u5178"
- "\u5E8A"
- "\u95ED"
- "\u5F03"
- "\u96F7"
- "\u6BD5"
- "\u90ED"
- "\u73B2"
- "\u90CE"
- "\u829D"
- "\u80E1"
- "\u745E"
- "\u76DF"
- "\u5385"
- "\u62B1"
- "\u71C3"
- "\u94DC"
- "\u65D7"
- "\u8363"
- "\u9910"
- "\u7259"
- "\u7237"
- "\u8FF9"
- "\u5B87"
- "\u9014"
- "\u6F5C"
- "\u62B5"
- "\u9AA8"
- "\u63F4"
- "\u6D6A"
- "\u7389"
- "\u7956"
- "\u632F"
- "\u8679"
- "\u6563"
- "\u7126"
- "\u52C7"
- "\u52AA"
- "\u5A46"
- "\u62D2"
- "\u5F39"
- "\u6881"
- "\u575B"
- "\u542B"
- "\u574F"
- "\u7EAF"
- "\u70DF"
- "\u51B7"
- "\u955C"
- "\u53EB"
- "\u8D75"
- "\u9759"
- "\u4EEA"
- "\u85CF"
- "\u6742"
- "\u75DB"
- "\u614E"
- "\u6811"
- "\u7AE0"
- "\u585E"
- "\u94A2"
- "\u72C2"
- "\u5462"
- "\u96C5"
- "\u5BFF"
- "\u6069"
- "\u56FA"
- "\u72D7"
- "\u83DC"
- "\u6C9F"
- "\u732E"
- "\u53F6"
- "\u6CF0"
- "\u8D62"
- "\u5269"
- "\u7A83"
- "\u504F"
- "\u638C"
- "\u5B9C"
- "\u8BFE"
- "\u8DA3"
- "\u559D"
- "\u7EA0"
- "\u7C4D"
- "\u66FF"
- "\u70B8"
- "\u9694"
- "\u7838"
- "\u642D"
- "\u8BDA"
- "\u65CF"
- "\u6D59"
- "\u9F50"
- "\u6746"
- "\u664B"
- "\u6076"
- "\u594B"
- "\u79CB"
- "\u9C9C"
- "\u9C81"
- "\u5192"
- "\u8D5A"
- "\u5F31"
- "\u817F"
- "\u795D"
- "\u6DF7"
- "\u7F34"
- "\u75BE"
- "\u63E1"
- "\u6C6A"
- "\u8F89"
- "\u5954"
- "\u9192"
- "\u6355"
- "\u9A91"
- "\u9E1F"
- "\u6446"
- "\u7075"
- "\u654F"
- "\u725B"
- "\u5C9B"
- "\u604B"
- "\u8017"
- "\u74E6"
- "\u62FC"
- "\u6050"
- "\u68D2"
- "\u5766"
- "\u539A"
- "\u4FA7"
- "\u5C1D"
- "\u85AA"
- "\u5802"
- "\u66F2"
- "\u7B54"
- "\u96C4"
- "\u5F92"
- "\u788D"
- "\u62D3"
- "\u7FD4"
- "\u4F5B"
- "\u4F50"
- "\u6EF4"
- "\u676D"
- "\u6B8B"
- "\u6BEB"
- "\u5C04"
- "\u62D6"
- "\u963B"
- "\u8F91"
- "\u8E2A"
- "\u75C7"
- "\u59D3"
- "\u6B32"
- "\u9C7C"
- "\u8239"
- "\u6062"
- "\u8861"
- "\u6DE1"
- "\u552F"
- "\u4E4F"
- "\u8FDF"
- "\u742A"
- "\u70E7"
- "\u5510"
- "\u5377"
- "\u966A"
- "\u4F0F"
- "\u52B5"
- "\u7E41"
- "\u9006"
- "\u8FC1"
- "\u8BCA"
- "\u4E71"
- "\u4EA6"
- "\u8C13"
- "\u77FF"
- "\u8FEB"
- "\u5FE7"
- "\u626E"
- "\u5DE2"
- "\u624E"
- "\u5353"
- "\u6052"
- "\u5E84"
- "\u9012"
- "\u707E"
- "\u83B1"
- "\u8D74"
- "\u7164"
- "\u640F"
- "\u5242"
- "\u6885"
- "\u5427"
- "\u64A4"
- "\u54F2"
- "\u70B3"
- "\u5C3E"
- "\u8A89"
- "\u6D1B"
- "\u8F68"
- "\u7F72"
- "\u515A"
- "\u60EF"
- "\u5E7C"
- "\u7F18"
- "\u58A8"
- "\u83AB"
- "\u8F9E"
- "\u594F"
- "\u6562"
- "\u5784"
- "\u65C1"
- "\u8499"
- "\u7BB1"
- "\u5428"
- "\u6CDB"
- "\u6015"
- "\u95F9"
- "\u6B20"
- "\u52AB"
- "\u7EB8"
- "\u5CB8"
- "\u6DD8"
- "\u8D4C"
- "\u7A97"
- "\u6D01"
- "\u5C97"
- "\u5A18"
- "\u6676"
- "\u52B2"
- "\u51ED"
- "\u65A4"
- "\u6D2A"
- "\u6DB2"
- "\u69DB"
- "\u517C"
- "\u6454"
- "\u695A"
- "\u660C"
- "\u83F2"
- "\u840C"
- "\u4F0D"
- "\u6CBF"
- "\u54A8"
- "\u996E"
- "\u5899"
- "\u6C88"
- "\u5761"
- "\u5BF8"
- "\u6EA2"
- "\u4ED3"
- "\u9274"
- "\u6148"
- "\u67EF"
- "\u65E6"
- "\u6B8A"
- "\u5760"
- "\u8BF8"
- "\u641E"
- "\u4F0A"
- "\u9738"
- "\u7ED1"
- "\u6C27"
- "\u5885"
- "\u8F7F"
- "\u86CB"
- "\u5FD9"
- "\u6EE8"
- "\u4E95"
- "\u903C"
- "\u4F2F"
- "\u764C"
- "\u71D5"
- "\u8D56"
- "\u6D66"
- "\u6F0F"
- "\u643A"
- "\u582A"
- "\u9605"
- "\u8BD7"
- "\u8D29"
- "\u8150"
- "\u503E"
- "\u94FA"
- "\u65FA"
- "\u6A2A"
- "\u900A"
- "\u5141"
- "\u7A84"
- "\u9E21"
- "\u5531"
- "\u8D3F"
- "\u62E8"
- "\u780D"
- "\u731B"
- "\u78B3"
- "\u5835"
- "\u9080"
- "\u5195"
- "\u680F"
- "\u59C6"
- "\u8033"
- "\u7ED5"
- "\u89C8"
- "\u8058"
- "\u7433"
- "\u971E"
- "\u6316"
- "\u5E9E"
- "\u5F7B"
- "\u9881"
- "\u633A"
- "\u6C89"
- "\u6284"
- "\u5BAB"
- "\u6BB4"
- "\u5783"
- "\u573E"
- "\u5C38"
- "\u6DB5"
- "\u5A03"
- "\u5A77"
- "\u7275"
- "\u817E"
- "\u5367"
- "\u5076"
- "\u6270"
- "\u6FB3"
- "\u8FC8"
- "\u864E"
- "\u8D21"
- "\u8BCD"
- "\u58C1"
- "\u5BBE"
- "\u6377"
- "\u5FCD"
- "\u4F69"
- "\u558A"
- "\u62BD"
- "\u690D"
- "\u70BC"
- "\u5978"
- "\u5410"
- "\u629B"
- "\u7965"
- "\u8389"
- "\u6CC4"
- "\u68B0"
- "\u4E52"
- "\u8F9B"
- "\u75AF"
- "\u51EF"
- "\u626B"
- "\u706F"
- "\u6DC0"
- "\u6BC1"
- "\u9B3C"
- "\u5A74"
- "\u6DEB"
- "\u51BB"
- "\u7BEE"
- "\u804A"
- "\u5E05"
- "\u4E54"
- "\u6CAA"
- "\u7FBD"
- "\u820D"
- "\u88C2"
- "\u5FFD"
- "\u5706"
- "\u62D4"
- "\u6717"
- "\u5BBF"
- "\u9EBB"
- "\u7720"
- "\u73AE"
- "\u5854"
- "\u78B0"
- "\u602A"
- "\u62BC"
- "\u6500"
- "\u9A70"
- "\u6B23"
- "\u8E0F"
- "\u5DE9"
- "\u5E9F"
- "\u8270"
- "\u4E73"
- "\u53E5"
- "\u4FA6"
- "\u5144"
- "\u8350"
- "\u5BD3"
- "\u53A6"
- "\u8D1D"
- "\u7EB5"
- "\u8096"
- "\u675C"
- "\u5FD8"
- "\u4E22"
- "\u642C"
- "\u66FC"
- "\u74F6"
- "\u9E4F"
- "\u9ED8"
- "\u60E8"
- "\u6CE1"
- "\u6108"
- "\u6566"
- "\u6D1E"
- "\u529D"
- "\u9896"
- "\u9177"
- "\u989C"
- "\u5DE1"
- "\u810F"
- "\u4EFF"
- "\u7F8A"
- "\u6324"
- "\u5EC9"
- "\u9EA6"
- "\u584C"
- "\u541B"
- "\u654C"
- "\u4E4C"
- "\u4FE9"
- "\u6A0A"
- "\u90AE"
- "\u70EF"
- "\u8BE6"
- "\u8212"
- "\u5951"
- "\u6F2B"
- "\u80DE"
- "\u9B54"
- "\u5B8B"
- "\u4F10"
- "\u8C28"
- "\u59FF"
- "\u59D1"
- "\u9686"
- "\u7EB9"
- "\u5085"
- "\u8336"
- "\u8457"
- "\u8C0B"
- "\u656C"
- "\u90C1"
- "\u9A71"
- "\u83CC"
- "\u60AC"
- "\u5FAA"
- "\u644A"
- "\u95EA"
- "\u4F2A"
- "\u9E3F"
- "\u5A1C"
- "\u6F8E"
- "\u6E43"
- "\u7089"
- "\u6697"
- "\u95EF"
- "\u7EEA"
- "\u6C70"
- "\u7A3F"
- "\u54AC"
- "\u5362"
- "\u6CC9"
- "\u6D8C"
- "\u857E"
- "\u59FB"
- "\u718A"
- "\u7A00"
- "\u6447"
- "\u540A"
- "\u684C"
- "\u4FCA"
- "\u54ED"
- "\u8D60"
- "\u9038"
- "\u5413"
- "\u8D6B"
- "\u51E1"
- "\u4FF1"
- "\u51AF"
- "\u5DE7"
- "\u6DAF"
- "\u5566"
- "\u8BBC"
- "\u6070"
- "\u629A"
- "\u8087"
- "\u950B"
- "\u51F6"
- "\u8D2F"
- "\u6084"
- "\u706D"
- "\u5180"
- "\u7CD5"
- "\u4F38"
- "\u80D6"
- "\u8179"
- "\u90CA"
- "\u658C"
- "\u946B"
- "\u5389"
- "\u80A9"
- "\u5723"
- "\u6D6E"
- "\u5999"
- "\u9970"
- "\u5C16"
- "\u5C0A"
- "\u90B1"
- "\u8BDE"
- "\u5C61"
- "\u6478"
- "\u916C"
- "\u95F2"
- "\u6670"
- "\u5339"
- "\u953B"
- "\u7532"
- "\u6572"
- "\u9065"
- "\u52D2"
- "\u5151"
- "\u7199"
- "\u7A3D"
- "\u8521"
- "\u60DC"
- "\u732B"
- "\u6012"
- "\u9A7B"
- "\u9887"
- "\u6D53"
- "\u5BB4"
- "\u4EC1"
- "\u8D4F"
- "\u78E8"
- "\u60B2"
- "\u9A82"
- "\u8F74"
- "\u59DC"
- "\u732A"
- "\u5272"
- "\u6B49"
- "\u73BB"
- "\u6D69"
- "\u756A"
- "\u6E21"
- "\u808C"
- "\u8DF5"
- "\u76FE"
- "\u751C"
- "\u6EBA"
- "\u5C3A"
- "\u5FC6"
- "\u76D0"
- "\u6CE5"
- "\u8584"
- "\u77DB"
- "\u7545"
- "\u6291"
- "\u9897"
- "\u848B"
- "\u7A0D"
- "\u788E"
- "\u5E1D"
- "\u7483"
- "\u6380"
- "\u62D0"
- "\u7262"
- "\u5E7B"
- "\u4ED4"
- "\u7CAE"
- "\u827E"
- "\u626D"
- "\u5C3F"
- "\u520A"
- "\u4ED1"
- "\u9ECE"
- "\u57C3"
- "\u81C2"
- "\u90BB"
- "\u82D7"
- "\u8854"
- "\u6842"
- "\u6F6D"
- "\u5C65"
- "\u8D3E"
- "\u997C"
- "\u60E9"
- "\u8BF1"
- "\u65CB"
- "\u7BC7"
- "\u8FBD"
- "\u65ED"
- "\u903E"
- "\u8C46"
- "\u6F58"
- "\u5806"
- "\u7518"
- "\u90A6"
- "\u6C0F"
- "\u62E6"
- "\u7855"
- "\u68CB"
- "\u88E4"
- "\u4E53"
- "\u59DA"
- "\u5398"
- "\u9093"
- "\u9676"
- "\u8428"
- "\u5F17"
- "\u8F85"
- "\u5EF7"
- "\u5401"
- "\u6760"
- "\u7EEE"
- "\u7444"
- "\u5939"
- "\u69FD"
- "\u7978"
- "\u8881"
- "\u52FE"
- "\u8D41"
- "\u5E16"
- "\u8170"
- "\u6F02"
- "\u88D5"
- "\u5634"
- "\u58EE"
- "\u5F2F"
- "\u554A"
- "\u6C64"
- "\u57AB"
- "\u9B4F"
- "\u5021"
- "\u680B"
- "\u7891"
- "\u9888"
- "\u6691"
- "\u9B45"
- "\u88F8"
- "\u758F"
- "\u96C7"
- "\u6BC5"
- "\u5FE0"
- "\u7586"
- "\u845B"
- "\u51E4"
- "\u5C48"
- "\u60A6"
- "\u9988"
- "\u6321"
- "\u95EB"
- "\u6C2E"
- "\u5146"
- "\u8C8C"
- "\u5395"
- "\u8C23"
- "\u98A0"
- "\u731C"
- "\u75B2"
- "\u6846"
- "\u63FD"
- "\u80C1"
- "\u61BE"
- "\u79E9"
- "\u8273"
- "\u5E3D"
- "\u6C1B"
- "\u8377"
- "\u6CEA"
- "\u5251"
- "\u61C2"
- "\u94BB"
- "\u9075"
- "\u8D2A"
- "\u8D3C"
- "\u72F1"
- "\u59E3"
- "\u5BFA"
- "\u80F6"
- "\u5435"
- "\u50AC"
- "\u524A"
- "\u4E11"
- "\u6B3A"
- "\u8083"
- "\u59A5"
- "\u70E6"
- "\u7070"
- "\u64C5"
- "\u4F63"
- "\u8427"
- "\u867E"
- "\u978B"
- "\u6367"
- "\u901D"
- "\u7325"
- "\u74DC"
- "\u9178"
- "\u5948"
- "\u53A8"
- "\u7D2B"
- "\u4FA0"
- "\u5851"
- "\u5A07"
- "\u8F96"
- "\u8206"
- "\u64E6"
- "\u67CF"
- "\u6F84"
- "\u78CA"
- "\u8650"
- "\u8F70"
- "\u66F9"
- "\u5220"
- "\u9F3B"
- "\u67F3"
- "\u5C6F"
- "\u7B3C"
- "\u7687"
- "\u7CD6"
- "\u73CD"
- "\u75BC"
- "\u67DC"
- "\u6361"
- "\u5740"
- "\u80A0"
- "\u635E"
- "\u62DC"
- "\u5CFB"
- "\u5439"
- "\u4E43"
- "\u7626"
- "\u809A"
- "\u8D24"
- "\u5E15"
- "\u5CB3"
- "\u52E4"
- "\u745C"
- "\u9505"
- "\u6CAB"
- "\u4FD7"
- "\u6615"
- "\u5E06"
- "\u8302"
- "\u9189"
- "\u586B"
- "\u9971"
- "\u722C"
- "\u8F69"
- "\u6EDE"
- "\u871C"
- "\u6C57"
- "\u98D9"
- "\u8010"
- "\u4EA8"
- "\u5AB3"
- "\u5F6D"
- "\u84C4"
- "\u8776"
- "\u70AE"
- "\u9F20"
- "\u5496"
- "\u7434"
- "\u5BA0"
- "\u68CD"
- "\u6398"
- "\u8328"
- "\u5751"
- "\u6E58"
- "\u5B5F"
- "\u52A3"
- "\u707F"
- "\u866B"
- "\u5F66"
- "\u55B7"
- "\u63CF"
- "\u8FA9"
- "\u5C34"
- "\u5C2C"
- "\u5F25"
- "\u5B64"
- "\u5CE1"
- "\u51F8"
- "\u903B"
- "\u8FB0"
- "\u5B54"
- "\u62AC"
- "\u99A8"
- "\u851A"
- "\u6021"
- "\u96EF"
- "\u7816"
- "\u5D07"
- "\u80A2"
- "\u67F1"
- "\u9614"
- "\u5F7C"
- "\u8352"
- "\u6EDA"
- "\u8461"
- "\u8404"
- "\u6602"
- "\u76C6"
- "\u6028"
- "\u77AC"
- "\u659C"
- "\u65A9"
- "\u775B"
- "\u526A"
- "\u63D2"
- "\u68DA"
- "\u4E32"
- "\u6C83"
- "\u67D4"
- "\u80A4"
- "\u58F3"
- "\u80F8"
- "\u9655"
- "\u51C9"
- "\u5D1B"
- "\u9E23"
- "\u7F55"
- "\u8877"
- "\u9634"
- "\u76F2"
- "\u4F1E"
- "\u6212"
- "\u8E22"
- "\u72FC"
- "\u57CB"
- "\u917F"
- "\u65E8"
- "\u6208"
- "\u6349"
- "\u8DEA"
- "\u8D3A"
- "\u8C2D"
- "\u6D82"
- "\u840E"
- "\u6ECB"
- "\u660F"
- "\u6247"
- "\u9F0E"
- "\u6960"
- "\u9A73"
- "\u6EAA"
- "\u6851"
- "\u94A7"
- "\u8361"
- "\u75D5"
- "\u739B"
- "\u8EB2"
- "\u8C10"
- "\u60A8"
- "\u53F9"
- "\u6876"
- "\u6655"
- "\u4E19"
- "\u7487"
- "\u549A"
- "\u70C2"
- "\u6749"
- "\u6323"
- "\u7A9D"
- "\u4EB5"
- "\u82B8"
- "\u6E1D"
- "\u82B3"
- "\u5986"
- "\u819C"
- "\u714C"
- "\u5C18"
- "\u4FAF"
- "\u8D4B"
- "\u6E23"
- "\u8D2B"
- "\u6843"
- "\u9875"
- "\u541E"
- "\u80C0"
- "\u7AF9"
- "\u809D"
- "\u96FE"
- "\u5AC1"
- "\u8F88"
- "\u6124"
- "\u7410"
- "\u6B96"
- "\u5A9B"
- "\u5BC4"
- "\u50F5"
- "\u902E"
- "\u806A"
- "\u7C97"
- "\u5BD2"
- "\u5F04"
- "\u5893"
- "\u8C0C"
- "\u6254"
- "\u5F79"
- "\u5446"
- "\u9756"
- "\u8482"
- "\u82AC"
- "\u7FFC"
- "\u5582"
- "\u5B75"
- "\u8C0E"
- "\u7845"
- "\u74A8"
- "\u5580"
- "\u76FC"
- "\u76D2"
- "\u614C"
- "\u70EB"
- "\u79E6"
- "\u68B3"
- "\u97E6"
- "\u888B"
- "\u9493"
- "\u5915"
- "\u7897"
- "\u5BE8"
- "\u5858"
- "\u884D"
- "\u5792"
- "\u537F"
- "\u6EE9"
- "\u6251"
- "\u7ED8"
- "\u8FB1"
- "\u708E"
- "\u94C5"
- "\u80BF"
- "\u8870"
- "\u53A2"
- "\u8EBA"
- "\u7EBD"
- "\u786B"
- "\u7750"
- "\u7FC1"
- "\u6170"
- "\u800D"
- "\u7F20"
- "\u72E0"
- "\u8109"
- "\u65A5"
- "\u8102"
- "\u8DB4"
- "\u94A9"
- "\u6B67"
- "\u6905"
- "\u8E29"
- "\u63B7"
- "\u633D"
- "\u9510"
- "\u52D8"
- "\u9022"
- "\u90DD"
- "\u5BAA"
- "\u80C3"
- "\u7C92"
- "\u77A9"
- "\u8F9F"
- "\u7686"
- "\u4EF0"
- "\u8155"
- "\u532A"
- "\u9675"
- "\u94A5"
- "\u7F1D"
- "\u95F8"
- "\u72AC"
- "\u9521"
- "\u5F0A"
- "\u51DD"
- "\u81ED"
- "\u8D81"
- "\u62FE"
- "\u5938"
- "\u63A9"
- "\u8000"
- "\u70AD"
- "\u94EC"
- "\u53E0"
- "\u574A"
- "\u632A"
- "\u87F9"
- "\u88F9"
- "\u72EE"
- "\u8F90"
- "\u964C"
- "\u6345"
- "\u75AB"
- "\u5179"
- "\u970D"
- "\u9508"
- "\u5A1F"
- "\u8681"
- "\u5962"
- "\u543B"
- "\u4F83"
- "\u6656"
- "\u6273"
- "\u51A4"
- "\u5F70"
- "\u8E48"
- "\u7574"
- "\u86C7"
- "\u6FE0"
- "\u5561"
- "\u5821"
- "\u4FA3"
- "\u6492"
- "\u94ED"
- "\u638F"
- "\u594E"
- "\u8702"
- "\u54B8"
- "\u7A77"
- "\u7784"
- "\u9042"
- "\u78BE"
- "\u533F"
- "\u74F7"
- "\u8231"
- "\u5239"
- "\u67C4"
- "\u502A"
- "\u7779"
- "\u8BD1"
- "\u6DC7"
- "\u731D"
- "\u6D45"
- "\u80BA"
- "\u6E7F"
- "\u987D"
- "\u7F69"
- "\u80C6"
- "\u5319"
- "\u6E34"
- "\u59AE"
- "\u7F9E"
- "\u8106"
- "\u9B44"
- "\u9502"
- "\u7EA4"
- "\u70AB"
- "\u88D9"
- "\u80BE"
- "\u50B2"
- "\u819D"
- "\u53D4"
- "\u5565"
- "\u6495"
- "\u7272"
- "\u7334"
- "\u8FA8"
- "\u915D"
- "\u522E"
- "\u60D1"
- "\u6E17"
- "\u55BB"
- "\u6674"
- "\u6DD1"
- "\u7FA1"
- "\u6155"
- "\u64C2"
- "\u9A9A"
- "\u7EBA"
- "\u5495"
- "\u50E7"
- "\u6094"
- "\u5782"
- "\u762B"
- "\u5265"
- "\u8230"
- "\u6D4F"
- "\u9C8D"
- "\u8DFB"
- "\u4EAD"
- "\u64B0"
- "\u5378"
- "\u83B2"
- "\u7EB1"
- "\u7CCA"
- "\u6735"
- "\u5CA9"
- "\u7709"
- "\u51FD"
- "\u7CDF"
- "\u4ED7"
- "\u60F9"
- "\u7426"
- "\u8D1E"
- "\u6C22"
- "\u6977"
- "\u8393"
- "\u7792"
- "\u5960"
- "\u52C3"
- "\u9524"
- "\u59A8"
- "\u5E37"
- "\u6D3D"
- "\u4E5E"
- "\u727A"
- "\u4EA9"
- "\u7C3F"
- "\u6591"
- "\u7FD8"
- "\u7948"
- "\u5507"
- "\u8015"
- "\u626F"
- "\u598D"
- "\u574E"
- "\u8C31"
- "\u76EF"
- "\u6CFC"
- "\u608D"
- "\u838E"
- "\u6C41"
- "\u56CA"
- "\u7529"
- "\u8FA3"
- "\u6D78"
- "\u607C"
- "\u76D4"
- "\u70E4"
- "\u575D"
- "\u5DC5"
- "\u6CB8"
- "\u62B9"
- "\u90B9"
- "\u973E"
- "\u6016"
- "\u72B9"
- "\u64CE"
- "\u8FC4"
- "\u6068"
- "\u4E27"
- "\u575E"
- "\u8896"
- "\u8D64"
- "\u840D"
- "\u723D"
- "\u7A46"
- "\u5A36"
- "\u95F7"
- "\u634D"
- "\u8180"
- "\u4F88"
- "\u7B4B"
- "\u901B"
- "\u5029"
- "\u7EB2"
- "\u906E"
- "\u5FA1"
- "\u59E8"
- "\u6DEE"
- "\u5BB0"
- "\u53C9"
- "\u7EF5"
- "\u60E7"
- "\u94A6"
- "\u5ECA"
- "\u9CC4"
- "\u7802"
- "\u6D46"
- "\u79BD"
- "\u548F"
- "\u763E"
- "\u997F"
- "\u75F4"
- "\u7EF3"
- "\u789F"
- "\u97F5"
- "\u7693"
- "\u5ED6"
- "\u5CAD"
- "\u86D9"
- "\u5154"
- "\u82BD"
- "\u5256"
- "\u5AD6"
- "\u6614"
- "\u54C0"
- "\u8513"
- "\u8C26"
- "\u6EE5"
- "\u8D42"
- "\u6E0A"
- "\u6363"
- "\u4F51"
- "\u5F08"
- "\u4ED9"
- "\u6FA1"
- "\u9AA4"
- "\u4FA8"
- "\u5949"
- "\u78C5"
- "\u6168"
- "\u7B5B"
- "\u5632"
- "\u7AE3"
- "\u7BAD"
- "\u8367"
- "\u8116"
- "\u5F64"
- "\u8C6B"
- "\u8E81"
- "\u79C9"
- "\u9E64"
- "\u5E7A"
- "\u6E14"
- "\u7F62"
- "\u8D2C"
- "\u94F2"
- "\u5375"
- "\u9017"
- "\u7267"
- "\u852C"
- "\u82D1"
- "\u6CA6"
- "\u904F"
- "\u67F4"
- "\u5E99"
- "\u517D"
- "\u8036"
- "\u9B42"
- "\u6E9C"
- "\u7F09"
- "\u4FCF"
- "\u8574"
- "\u82DB"
- "\u51D1"
- "\u5A7F"
- "\u94F8"
- "\u515C"
- "\u8E6D"
- "\u9E2D"
- "\u6734"
- "\u808B"
- "\u566A"
- "\u711A"
- "\u574D"
- "\u5564"
- "\u9489"
- "\u621A"
- "\u8C0D"
- "\u632B"
- "\u8247"
- "\u4F59"
- "\u5DF7"
- "\u5C60"
- "\u548B"
- "\u8A79"
- "\u886B"
- "\u6D74"
- "\u7239"
- "\u5B5D"
- "\u7624"
- "\u9716"
- "\u5D29"
- "\u7538"
- "\u60BC"
- "\u64D2"
- "\u6D47"
- "\u96D5"
- "\u7AD6"
- "\u5E10"
- "\u8424"
- "\u9761"
- "\u6F20"
- "\u50BB"
- "\u64BC"
- "\u5D14"
- "\u7B52"
- "\u810A"
- "\u561B"
- "\u81E3"
- "\u79BE"
- "\u9F9F"
- "\u5524"
- "\u5440"
- "\u58E4"
- "\u704C"
- "\u90B5"
- "\u7A3B"
- "\u5DFE"
- "\u8469"
- "\u9965"
- "\u7F14"
- "\u820C"
- "\u7A9C"
- "\u79FD"
- "\u8305"
- "\u9753"
- "\u9631"
- "\u949E"
- "\u6F7C"
- "\u785D"
- "\u58A9"
- "\u8759"
- "\u8760"
- "\u5AC2"
- "\u8258"
- "\u56A3"
- "\u94C3"
- "\u6252"
- "\u4F6C"
- "\u7AED"
- "\u8D4E"
- "\u508D"
- "\u71AC"
- "\u60A0"
- "\u6328"
- "\u6CCA"
- "\u6512"
- "\u576A"
- "\u7130"
- "\u87BA"
- "\u8587"
- "\u86DB"
- "\u725F"
- "\u5FCC"
- "\u6127"
- "\u9175"
- "\u8FED"
- "\u9976"
- "\u60DF"
- "\u94AE"
- "\u95F5"
- "\u78A7"
- "\u5F98"
- "\u5F8A"
- "\u6EAF"
- "\u68C9"
- "\u6B6A"
- "\u6342"
- "\u868A"
- "\u9530"
- "\u5C41"
- "\u7578"
- "\u80AA"
- "\u8E72"
- "\u5254"
- "\u6986"
- "\u6487"
- "\u745F"
- "\u8BB6"
- "\u98D8"
- "\u84B8"
- "\u8BE0"
- "\u5BC2"
- "\u7F44"
- "\u83B9"
- "\u9E45"
- "\u6CE3"
- "\u5D16"
- "\u73CA"
- "\u8BB3"
- "\u7FF0"
- "\u8718"
- "\u4EF2"
- "\u71E5"
- "\u83F1"
- "\u6EE2"
- "\u714E"
- "\u86EE"
- "\u77BB"
- "\u8611"
- "\u83C7"
- "\u9699"
- "\u6346"
- "\u8549"
- "\u9063"
- "\u5B9B"
- "\u8086"
- "\u4E38"
- "\u78C1"
- "\u73A5"
- "\u5D4C"
- "\u97F6"
- "\u679D"
- "\u54AA"
- "\u6109"
- "\u5455"
- "\u6DE4"
- "\u8A93"
- "\u8F84"
- "\u4FEF"
- "\u6850"
- "\u8205"
- "\u84C9"
- "\u6E2D"
- "\u6C2F"
- "\u6E85"
- "\u96C1"
- "\u9F9A"
- "\u607A"
- "\u5996"
- "\u997D"
- "\u8346"
- "\u67AF"
- "\u4EC7"
- "\u575F"
- "\u6F9C"
- "\u9E9F"
- "\u85E4"
- "\u730E"
- "\u6D12"
- "\u8339"
- "\u788C"
- "\u754F"
- "\u6DA4"
- "\u4FDE"
- "\u52FF"
- "\u853D"
- "\u7F50"
- "\u5C39"
- "\u5830"
- "\u5112"
- "\u82AE"
- "\u5B5A"
- "\u54D7"
- "\u6390"
- "\u77F6"
- "\u690E"
- "\u9610"
- "\u9A74"
- "\u8749"
- "\u7115"
- "\u9102"
- "\u803B"
- "\u70AF"
- "\u886C"
- "\u5A49"
- "\u6101"
- "\u68A8"
- "\u4E1B"
- "\u8C05"
- "\u81A8"
- "\u66D9"
- "\u9E7F"
- "\u9A84"
- "\u7F05"
- "\u5306"
- "\u8D43"
- "\u84B2"
- "\u7741"
- "\u7131"
- "\u707C"
- "\u5203"
- "\u8783"
- "\u7455"
- "\u8BB9"
- "\u7985"
- "\u81C0"
- "\u59D7"
- "\u5A9A"
- "\u545B"
- "\u51F0"
- "\u701A"
- "\u57D4"
- "\u5F13"
- "\u961A"
- "\u6E5B"
- "\u5955"
- "\u625B"
- "\u9F7F"
- "\u631F"
- "\u9AD3"
- "\u72ED"
- "\u6808"
- "\u9A8F"
- "\u5D2D"
- "\u6151"
- "\u6BBF"
- "\u796D"
- "\u50FB"
- "\u8E6C"
- "\u5BE1"
- "\u5466"
- "\u97A0"
- "\u9171"
- "\u7470"
- "\u9992"
- "\u5764"
- "\u8D9F"
- "\u81FB"
- "\u5492"
- "\u8C79"
- "\u755C"
- "\u5189"
- "\u7ECE"
- "\u5C8C"
- "\u7504"
- "\u7EDE"
- "\u5BB5"
- "\u5EB8"
- "\u6B47"
- "\u6320"
- "\u6C28"
- "\u4E59"
- "\u8335"
- "\u5C94"
- "\u6DC4"
- "\u7898"
- "\u6DCB"
- "\u84EC"
- "\u9885"
- "\u7FB9"
- "\u6D51"
- "\u6627"
- "\u7FE0"
- "\u5CE5"
- "\u60D5"
- "\u777F"
- "\u82A6"
- "\u8680"
- "\u9893"
- "\u971C"
- "\u94B0"
- "\u6A58"
- "\u5824"
- "\u51F3"
- "\u6EB6"
- "\u952F"
- "\u5E42"
- "\u69B4"
- "\u5A3C"
- "\u6C79"
- "\u832B"
- "\u538C"
- "\u7EF0"
- "\u5D0E"
- "\u6E83"
- "\u64AC"
- "\u6CBE"
- "\u62C7"
- "\u75B5"
- "\u54E6"
- "\u5F27"
- "\u5F18"
- "\u54BD"
- "\u846C"
- "\u9601"
- "\u7AFF"
- "\u7BE1"
- "\u96B6"
- "\u8BDF"
- "\u716E"
- "\u4E18"
- "\u803F"
- "\u5F6C"
- "\u655E"
- "\u6CFB"
- "\u5937"
- "\u9685"
- "\u6E0E"
- "\u6DF9"
- "\u9A86"
- "\u918B"
- "\u9706"
- "\u6DA9"
- "\u9640"
- "\u53D9"
- "\u6897"
- "\u51B6"
- "\u655B"
- "\u75EA"
- "\u8BBD"
- "\u75A4"
- "\u8782"
- "\u8292"
- "\u5E62"
- "\u709C"
- "\u6BEF"
- "\u6A59"
- "\u62E2"
- "\u4FE8"
- "\u4ED5"
- "\u6C30"
- "\u94BE"
- "\u5450"
- "\u682A"
- "\u813E"
- "\u70E8"
- "\u78D5"
- "\u859B"
- "\u7A96"
- "\u82B7"
- "\u8715"
- "\u8845"
- "\u6B79"
- "\u54D2"
- "\u8BE1"
- "\u6467"
- "\u6F06"
- "\u87D1"
- "\u5288"
- "\u5475"
- "\u7D6E"
- "\u6296"
- "\u5A05"
- "\u94DD"
- "\u9709"
- "\u82AD"
- "\u8F9C"
- "\u660A"
- "\u5618"
- "\u54D1"
- "\u67A2"
- "\u8110"
- "\u5E90"
- "\u94A0"
- "\u9CCC"
- "\u77E9"
- "\u9506"
- "\u5A67"
- "\u6C9B"
- "\u9972"
- "\u7184"
- "\u7FE1"
- "\u5C79"
- "\u818F"
- "\u9619"
- "\u6402"
- "\u9523"
- "\u5E4C"
- "\u6A44"
- "\u6984"
- "\u6756"
- "\u65F7"
- "\u77EB"
- "\u5188"
- "\u821F"
- "\u814A"
- "\u8042"
- "\u62E3"
- "\u905B"
- "\u52CB"
- "\u7A98"
- "\u97E7"
- "\u54B1"
- "\u62CE"
- "\u6912"
- "\u63E3"
- "\u6BB7"
- "\u63EA"
- "\u4F3D"
- "\u8D31"
- "\u743C"
- "\u83E1"
- "\u95FA"
- "\u662D"
- "\u96CF"
- "\u8E4A"
- "\u9EDB"
- "\u79B9"
- "\u978D"
- "\u4E56"
- "\u6C5D"
- "\u752B"
- "\u5F5D"
- "\u6CF8"
- "\u8BEC"
- "\u62FD"
- "\u6BFD"
- "\u6405"
- "\u8475"
- "\u65F1"
- "\u52C9"
- "\u8DF7"
- "\u7554"
- "\u8098"
- "\u5742"
- "\u6F29"
- "\u6DA1"
- "\u5018"
- "\u919B"
- "\u66E6"
- "\u94C0"
- "\u674F"
- "\u68D5"
- "\u5E7D"
- "\u88F4"
- "\u962E"
- "\u6577"
- "\u8304"
- "\u6CA7"
- "\u527D"
- "\u6073"
- "\u6DF3"
- "\u8431"
- "\u88B1"
- "\u4EA5"
- "\u75F1"
- "\u8154"
- "\u5AC9"
- "\u7CB9"
- "\u710A"
- "\u8BC0"
- "\u7CAA"
- "\u6714"
- "\u9EEF"
- "\u8C1C"
- "\u7728"
- "\u7941"
- "\u66A7"
- "\u9B41"
- "\u8F97"
- "\u7A57"
- "\u5026"
- "\u527F"
- "\u888D"
- "\u606D"
- "\u7099"
- "\u5A34"
- "\u73AB"
- "\u950F"
- "\u718F"
- "\u7AA5"
- "\u5815"
- "\u609F"
- "\u6643"
- "\u7F2A"
- "\u9A7F"
- "\u6CF7"
- "\u96C0"
- "\u60EB"
- "\u73BA"
- "\u5243"
- "\u6590"
- "\u8882"
- "\u68AD"
- "\u54C4"
- "\u90AA"
- "\u5C82"
- "\u817B"
- "\u5AE9"
- "\u6995"
- "\u8C34"
- "\u6F47"
- "\u7EAC"
- "\u4FAE"
- "\u7FC5"
- "\u9576"
- "\u5777"
- "\u5F6A"
- "\u7977"
- "\u531D"
- "\u803D"
- "\u841D"
- "\u7A91"
- "\u747E"
- "\u6EE4"
- "\u62F1"
- "\u54E8"
- "\u8822"
- "\u90A2"
- "\u6D9E"
- "\u6064"
- "\u6CFE"
- "\u8C24"
- "\u7011"
- "\u8236"
- "\u61C8"
- "\u5FF1"
- "\u70F9"
- "\u665F"
- "\u8E1E"
- "\u5241"
- "\u73C9"
- "\u5E9A"
- "\u6664"
- "\u58F6"
- "\u783E"
- "\u55C5"
- "\u5992"
- "\u5308"
- "\u80F0"
- "\u7EEF"
- "\u837C"
- "\u722A"
- "\u831C"
- "\u6866"
- "\u8707"
- "\u829C"
- "\u7384"
- "\u846B"
- "\u8682"
- "\u7ECA"
- "\u6401"
- "\u970F"
- "\u7C98"
- "\u4F5F"
- "\u96CD"
- "\u57AE"
- "\u7F81"
- "\u5A25"
- "\u78B1"
- "\u78F7"
- "\u948A"
- "\u6BD9"
- "\u8BFF"
- "\u7EF8"
- "\u634F"
- "\u9074"
- "\u754A"
- "\u53AE"
- "\u5DEB"
- "\u7316"
- "\u7357"
- "\u63B4"
- "\u8F8D"
- "\u8721"
- "\u8D63"
- "\u7B75"
- "\u8299"
- "\u849C"
- "\u7F06"
- "\u4FEA"
- "\u9E70"
- "\u7B0B"
- "\u6BCB"
- "\u5586"
- "\u9E6D"
- "\u8774"
- "\u6C40"
- "\u8BFD"
- "\u6854"
- "\u7BF7"
- "\u83BD"
- "\u6816"
- "\u996A"
- "\u4F3A"
- "\u6233"
- "\u8C0A"
- "\u9704"
- "\u4F84"
- "\u6ED4"
- "\u778E"
- "\u76B1"
- "\u86DF"
- "\u88D4"
- "\u70FD"
- "\u733F"
- "\u53EE"
- "\u7EF7"
- "\u817A"
- "\u66A8"
- "\u6CA5"
- "\u55A7"
- "\u56E4"
- "\u63A0"
- "\u9661"
- "\u81BA"
- "\u75D2"
- "\u9975"
- "\u620E"
- "\u891A"
- "\u4E10"
- "\u6E24"
- "\u5E1C"
- "\u5A04"
- "\u6D3C"
- "\u7984"
- "\u5A75"
- "\u7422"
- "\u8EAF"
- "\u79BA"
- "\u5CD9"
- "\u8E39"
- "\u601C"
- "\u7096"
- "\u5250"
- "\u7F1A"
- "\u8944"
- "\u67AB"
- "\u7EFD"
- "\u5EBE"
- "\u65A7"
- "\u7A74"
- "\u5BC7"
- "\u8747"
- "\u97AD"
- "\u960E"
- "\u77E2"
- "\u7CD9"
- "\u5DCD"
- "\u84BF"
- "\u6B92"
- "\u86F0"
- "\u56E7"
- "\u535C"
- "\u5B99"
- "\u73EE"
- "\u9E26"
- "\u749E"
- "\u7FDF"
- "\u9157"
- "\u8912"
- "\u8C41"
- "\u9551"
- "\u8037"
- "\u68E0"
- "\u57A6"
- "\u97EC"
- "\u836B"
- "\u7AA8"
- "\u9E3D"
- "\u7FB2"
- "\u61D2"
- "\u8EAC"
- "\u5315"
- "\u7280"
- "\u543C"
- "\u73C0"
- "\u6619"
- "\u6A31"
- "\u8E7F"
- "\u6289"
- "\u82CD"
- "\u6C5B"
- "\u94C9"
- "\u9549"
- "\u5594"
- "\u90AF"
- "\u90F8"
- "\u5671"
- "\u74EF"
- "\u6CBC"
- "\u637B"
- "\u82EF"
- "\u8E7C"
- "\u9E8B"
- "\u9600"
- "\u715E"
- "\u8E1D"
- "\u7F2D"
- "\u83CA"
- "\u7AFA"
- "\u5CED"
- "\u6525"
- "\u7656"
- "\u809B"
- "\u6CD4"
- "\u62EF"
- "\u7A9F"
- "\u9773"
- "\u8235"
- "\u5631"
- "\u6631"
- "\u52FA"
- "\u543E"
- "\u4E2B"
- "\u89C5"
- "\u9187"
- "\u78CB"
- "\u5F99"
- "\u9668"
- "\u60FA"
- "\u6E0D"
- "\u70AC"
- "\u683D"
- "\u664F"
- "\u9882"
- "\u5974"
- "\u6994"
- "\u9A6D"
- "\u56BC"
- "\u8D61"
- "\u8C5A"
- "\u8537"
- "\u6893"
- "\u68A7"
- "\u54FD"
- "\u6657"
- "\u6C5E"
- "\u5AE3"
- "\u854A"
- "\u797A"
- "\u75B9"
- "\u58F9"
- "\u566C"
- "\u7682"
- "\u77D7"
- "\u609A"
- "\u61A7"
- "\u61AC"
- "\u62F7"
- "\u6241"
- "\u5ED3"
- "\u8E74"
- "\u5C9A"
- "\u745B"
- "\u5D34"
- "\u6817"
- "\u56DA"
- "\u6DBF"
- "\u7901"
- "\u6654"
- "\u6BA1"
- "\u7480"
- "\u6DDE"
- "\u968B"
- "\u8E35"
- "\u94B5"
- "\u714A"
- "\u8D58"
- "\u77A7"
- "\u5BDE"
- "\u964B"
- "\u9AB7"
- "\u9AC5"
- "\u79F8"
- "\u79C6"
- "\u592F"
- "\u8354"
- "\u8941"
- "\u8913"
- "\u7B28"
- "\u6CAE"
- "\u7785"
- "\u6002"
- "\u8317"
- "\u7525"
- "\u4E9F"
- "\u6773"
- "\u7166"
- "\u631A"
- "\u68F5"
- "\u7960"
- "\u55EF"
- "\u6795"
- "\u7C9F"
- "\u6CCC"
- "\u8700"
- "\u5BE5"
- "\u9050"
- "\u6D9D"
- "\u8FAB"
- "\u7C41"
- "\u7A8D"
- "\u804B"
- "\u900D"
- "\u8DE4"
- "\u51F9"
- "\u91DC"
- "\u5600"
- "\u55D2"
- "\u6DDD"
- "\u85DC"
- "\u7FF1"
- "\u785A"
- "\u53FC"
- "\u75F9"
- "\u817C"
- "\u8146"
- "\u4F0E"
- "\u9A8B"
- "\u6115"
- "\u8165"
- "\u62EE"
- "\u8F67"
- "\u766B"
- "\u6A61"
- "\u818A"
- "\u89D1"
- "\u5BC5"
- "\u7812"
- "\u8DBE"
- "\u9890"
- "\u6F33"
- "\u5CE8"
- "\u545C"
- "\u6DC6"
- "\u51FF"
- "\u58D5"
- "\u94E8"
- "\u8386"
- "\u7B77"
- "\u74A7"
- "\u8B6C"
- "\u5C96"
- "\u62A0"
- "\u7B1B"
- "\u53A5"
- "\u783A"
- "\u5589"
- "\u914C"
- "\u7C27"
- "\u9CB8"
- "\u8E0A"
- "\u7261"
- "\u5B1B"
- "\u7F1C"
- "\u5942"
- "\u71B9"
- "\u95FD"
- "\u998A"
- "\u80EF"
- "\u5587"
- "\u4F36"
- "\u589F"
- "\u715C"
- "\u8018"
- "\u69B7"
- "\u9A81"
- "\u7329"
- "\u8F99"
- "\u72F8"
- "\u6ED5"
- "\u8BF5"
- "\u7A92"
- "\u604D"
- "\u9AE6"
- "\u8BEB"
- "\u69A8"
- "\u71A0"
- "\u853A"
- "\u85AF"
- "\u6B46"
- "\u7CA4"
- "\u592D"
- "\u62CC"
- "\u550F"
- "\u5384"
- "\u541D"
- "\u7737"
- "\u5CEA"
- "\u62D9"
- "\u548E"
- "\u7CA5"
- "\u75F0"
- "\u7405"
- "\u7F9A"
- "\u8398"
- "\u61A8"
- "\u77B0"
- "\u7085"
- "\u5B5C"
- "\u4EA2"
- "\u7F2E"
- "\u712F"
- "\u5484"
- "\u6687"
- "\u77EE"
- "\u6C72"
- "\u7076"
- "\u95F0"
- "\u595A"
- "\u6C76"
- "\u73F2"
- "\u9E93"
- "\u618B"
- "\u5D02"
- "\u9573"
- "\u6B83"
- "\u5349"
- "\u8BE7"
- "\u77E3"
- "\u5C4E"
- "\u8046"
- "\u828B"
- "\u5C51"
- "\u7F42"
- "\u7C7D"
- "\u7EDA"
- "\u535E"
- "\u6789"
- "\u6C55"
- "\u61CB"
- "\u5AB2"
- "\u5567"
- "\u63A3"
- "\u5B09"
- "\u4EE8"
- "\u59EC"
- "\u61FF"
- "\u9985"
- "\u80FA"
- "\u6482"
- "\u776B"
- "\u86D0"
- "\u8403"
- "\u7708"
- "\u98DA"
- "\u6BD3"
- "\u6D85"
- "\u663C"
- "\u6A71"
- "\u9A7C"
- "\u6DA0"
- "\u8C29"
- "\u5A76"
- "\u819B"
- "\u62C4"
- "\u7EE3"
- "\u6805"
- "\u90AC"
- "\u6020"
- "\u9119"
- "\u54C9"
- "\u8DFA"
- "\u5E18"
- "\u6C93"
- "\u6400"
- "\u814C"
- "\u7FBF"
- "\u6CF5"
- "\u911E"
- "\u90E1"
- "\u70C3"
- "\u611A"
- "\u8559"
- "\u57A4"
- "\u950C"
- "\u67E0"
- "\u6AAC"
- "\u8471"
- "\u57A2"
- "\u532E"
- "\u5366"
- "\u61CA"
- "\u63BA"
- "\u53F1"
- "\u576F"
- "\u7CEF"
- "\u8986"
- "\u94C6"
- "\u742C"
- "\u62A1"
- "\u6F62"
- "\u68FA"
- "\u587E"
- "\u98D3"
- "\u8BC5"
- "\u7FE9"
- "\u63CD"
- "\u6A80"
- "\u9CDD"
- "\u8BAA"
- "\u7194"
- "\u675E"
- "\u5543"
- "\u6600"
- "\u7D0A"
- "\u6556"
- "\u7490"
- "\u8517"
- "\u69CC"
- "\u94D0"
- "\u6421"
- "\u78D0"
- "\u5B95"
- "\u6813"
- "\u53ED"
- "\u621F"
- "\u9877"
- "\u6FD2"
- "\u7AA6"
- "\u6441"
- "\u4FD0"
- "\u77B3"
- "\u8695"
- "\u9E4A"
- "\u8FC2"
- "\u757F"
- "\u74E3"
- "\u5A9E"
- "\u5BDD"
- "\u8E66"
- "\u55D1"
- "\u8892"
- "\u6B89"
- "\u7A1A"
- "\u4FD8"
- "\u642A"
- "\u6CBD"
- "\u5983"
- "\u55D3"
- "\u80EB"
- "\u753A"
- "\u83B4"
- "\u82E3"
- "\u75D8"
- "\u8511"
- "\u7696"
- "\u679E"
- "\u5FD0"
- "\u5FD1"
- "\u9774"
- "\u83C1"
- "\u59E5"
- "\u8BD9"
- "\u56B7"
- "\u7109"
- "\u6CA3"
- "\u9739"
- "\u96F3"
- "\u50DA"
- "\u5C27"
- "\u560E"
- "\u8BE9"
- "\u54AB"
- "\u67EC"
- "\u60EE"
- "\u72C4"
- "\u5300"
- "\u88C6"
- "\u9ECF"
- "\u91C9"
- "\u81B3"
- "\u6E3A"
- "\u82DF"
- "\u7476"
- "\u553E"
- "\u7620"
- "\u8BA7"
- "\u7766"
- "\u5F26"
- "\u5E87"
- "\u8884"
- "\u5669"
- "\u627C"
- "\u621B"
- "\u7980"
- "\u607F"
- "\u6EC1"
- "\u9EBE"
- "\u7B71"
- "\u7600"
- "\u892A"
- "\u69DF"
- "\u7F28"
- "\u7ED2"
- "\u72B7"
- "\u8338"
- "\u60CB"
- "\u55E4"
- "\u5BEE"
- "\u8902"
- "\u54B3"
- "\u7F00"
- "\u8C19"
- "\u6DA7"
- "\u70BD"
- "\u7F04"
- "\u9E5C"
- "\u780C"
- "\u8D2E"
- "\u5EB5"
- "\u96A7"
- "\u5364"
- "\u8DC6"
- "\u768B"
- "\u8757"
- "\u6D31"
- "\u572A"
- "\u9091"
- "\u9504"
- "\u835F"
- "\u6E1A"
- "\u82C7"
- "\u5B70"
- "\u9E43"
- "\u54FC"
- "\u5443"
- "\u741B"
- "\u75E3"
- "\u6479"
- "\u75FC"
- "\u956F"
- "\u5201"
- "\u79E7"
- "\u8169"
- "\u9CDE"
- "\u4E4D"
- "\u989A"
- "\u6177"
- "\u6C13"
- "\u60E6"
- "\u5351"
- "\u631D"
- "\u71A8"
- "\u6FEE"
- "\u80F3"
- "\u74E2"
- "\u7830"
- "\u6EA7"
- "\u9537"
- "\u9E20"
- "\u7292"
- "\u59DD"
- "\u8E44"
- "\u5BB8"
- "\u4FA5"
- "\u952D"
- "\u4F76"
- "\u6D4A"
- "\u5A6A"
- "\u78FA"
- "\u54A4"
- "\u8FE2"
- "\u6A90"
- "\u90BA"
- "\u6382"
- "\u6E32"
- "\u568E"
- "\u795B"
- "\u4F22"
- "\u53DB"
- "\u64AE"
- "\u752C"
- "\u6DCC"
- "\u701B"
- "\u673D"
- "\u9642"
- "\u5E3C"
- "\u94FF"
- "\u9535"
- "\u6F13"
- "\u9A6F"
- "\u9CA8"
- "\u6292"
- "\u8301"
- "\u67FF"
- "\u8C94"
- "\u8C85"
- "\u949D"
- "\u9CC5"
- "\u568F"
- "\u66AE"
- "\u745A"
- "\u8364"
- "\u8713"
- "\u57A3"
- "\u98A4"
- "\u6EA5"
- "\u81C3"
- "\u622E"
- "\u67A3"
- "\u4F7C"
- "\u62D7"
- "\u54C6"
- "\u55E6"
- "\u60DA"
- "\u9E25"
- "\u501A"
- "\u55E8"
- "\u8238"
- "\u8D50"
- "\u59CA"
- "\u6194"
- "\u60B4"
- "\u94F0"
- "\u9EDD"
- "\u5C7F"
- "\u79C3"
- "\u563B"
- "\u695E"
- "\u68F1"
- "\u8888"
- "\u88DF"
- "\u6C74"
- "\u63C9"
- "\u9ACB"
- "\u60B8"
- "\u69BB"
- "\u901E"
- "\u667E"
- "\u5C4C"
- "\u95F3"
- "\u75CA"
- "\u889C"
- "\u6249"
- "\u7436"
- "\u6452"
- "\u637A"
- "\u5320"
- "\u7A88"
- "\u7A95"
- "\u98D2"
- "\u732C"
- "\u871A"
- "\u840B"
- "\u86AF"
- "\u8693"
- "\u9C9F"
- "\u6F88"
- "\u6A1F"
- "\u6096"
- "\u7396"
- "\u4FFE"
- "\u62BF"
- "\u5F77"
- "\u5F7F"
- "\u8671"
- "\u72D9"
- "\u9CB6"
- "\u69FF"
- "\u70D8"
- "\u630E"
- "\u72F0"
- "\u72DE"
- "\u9083"
- "\u77AA"
- "\u4FDA"
- "\u6D95"
- "\u8C2C"
- "\u776C"
- "\u8737"
- "\u5162"
- "\u954D"
- "\u7837"
- "\u83E0"
- "\u6026"
- "\u51C4"
- "\u536F"
- "\u7352"
- "\u6E00"
- "\u8F98"
- "\u6EC7"
- "\u71CE"
- "\u564E"
- "\u874E"
- "\u7DA6"
- "\u9122"
- "\u634E"
- "\u77BF"
- "\u873F"
- "\u8712"
- "\u79A7"
- "\u6988"
- "\u9539"
- "\u6BAD"
- "\u7235"
- "\u76F9"
- "\u6DD6"
- "\u557C"
- "\u74EE"
- "\u9CD6"
- "\u9556"
- "\u73D1"
- "\u7F79"
- "\u6B86"
- "\u6396"
- "\u67DE"
- "\u7F38"
- "\u7EC5"
- "\u68D8"
- "\u7949"
- "\u80F1"
- "\u6B93"
- "\u55E1"
- "\u55F7"
- "\u7B8D"
- "\u5729"
- "\u8012"
- "\u5A55"
- "\u8151"
- "\u8426"
- "\u9E5E"
- "\u73DC"
- "\u5575"
- "\u7459"
- "\u8446"
- "\u9021"
- "\u55FD"
- "\u9955"
- "\u992E"
- "\u96BC"
- "\u599E"
- "\u997A"
- "\u53E8"
- "\u914B"
- "\u6059"
- "\u6CD7"
- "\u5F29"
- "\u9A9C"
- "\u94CE"
- "\u9176"
- "\u869D"
- "\u70C1"
- "\u533E"
- "\u4FAC"
- "\u85FB"
- "\u99A5"
- "\u9AA5"
- "\u69D0"
- "\u7F15"
- "\u693F"
- "\u8886"
- "\u740A"
- "\u7A23"
- "\u85E9"
- "\u8FF8"
- "\u8E42"
- "\u8E8F"
- "\u96BD"
- "\u4FF8"
- "\u90EB"
- "\u7C38"
- "\u7825"
- "\u9AB8"
- "\u63AE"
- "\u659B"
- "\u5578"
- "\u748B"
- "\u579B"
- "\u672D"
- "\u908B"
- "\u9062"
- "\u8572"
- "\u54C7"
- "\u78B4"
- "\u909B"
- "\u5D03"
- "\u89D0"
- "\u7B19"
- "\u88F3"
- "\u6CDE"
- "\u868C"
- "\u918D"
- "\u9190"
- "\u62F4"
- "\u821C"
- "\u6C85"
- "\u61F5"
- "\u8C15"
- "\u5E1A"
- "\u87B3"
- "\u567C"
- "\u556A"
- "\u6F31"
- "\u90DC"
- "\u7889"
- "\u572D"
- "\u8C00"
- "\u8F76"
- "\u8200"
- "\u5472"
- "\u5576"
- "\u6C1F"
- "\u740F"
- "\u5785"
- "\u5A29"
- "\u4E7E"
- "\u93D6"
- "\u727E"
- "\u80AE"
- "\u5555"
- "\u540F"
- "\u6D93"
- "\u6C26"
- "\u9525"
- "\u684E"
- "\u543F"
- "\u70CA"
- "\u659F"
- "\u6C7E"
- "\u5C90"
- "\u8004"
- "\u800B"
- "\u55F2"
- "\u80DB"
- "\u759A"
- "\u9A87"
- "\u7663"
- "\u78E1"
- "\u4F91"
- "\u6F3E"
- "\u789A"
- "\u7409"
- "\u60EC"
- "\u9041"
- "\u8038"
- "\u5CB1"
- "\u7CD7"
- "\u7F19"
- "\u80B4"
- "\u68B5"
- "\u50EE"
- "\u9E35"
- "\u60AF"
- "\u5B6A"
- "\u8385"
- "\u622C"
- "\u9701"
- "\u7C07"
- "\u9035"
- "\u501C"
- "\u50A5"
- "\u998B"
- "\u84C1"
- "\u8859"
- "\u86C0"
- "\u852B"
- "\u5D27"
- "\u541F"
- "\u7430"
- "\u552C"
- "\u6E25"
- "\u5CB7"
- "\u4EE1"
- "\u6D8E"
- "\u9E33"
- "\u9E2F"
- "\u954A"
- "\u59A7"
- "\u5B37"
- "\u5AE6"
- "\u5AD4"
- "\u6C90"
- "\u4F09"
- "\u5D9D"
- "\u9522"
- "\u7B50"
- "\u8725"
- "\u8734"
- "\u6CF1"
- "\u9A85"
- "\u5406"
- "\u64A9"
- "\u602F"
- "\u53E9"
- "\u54DF"
- "\u556C"
- "\u5CAC"
- "\u7B03"
- "\u73B3"
- "\u7441"
- "\u909D"
- "\u54A3"
- "\u77DC"
- "\u562D"
- "\u9997"
- "\u5A40"
- "\u9ED4"
- "\u951F"
- "\u5570"
- "\u7FCC"
- "\u94E0"
- "\u8C89"
- "\u737E"
- "\u9163"
- "\u6963"
- "\u4F43"
- "\u7435"
- "\u8306"
- "\u7699"
- "\u51CB"
- "\u655D"
- "\u5323"
- "\u5D58"
- "\u5B93"
- "\u830E"
- "\u6942"
- "\u7AF2"
- "\u762A"
- "\u4F97"
- "\u94E3"
- "\u85B0"
- "\u7832"
- "\u7FA3"
- "\u6DFC"
- "\u895F"
- "\u598A"
- "\u5A20"
- "\u7F61"
- "\u7601"
- "\u6930"
- "\u70D9"
- "\u5457"
- "\u8343"
- "\u768E"
- "\u6B9A"
- "\u814B"
- "\u9ABC"
- "\u8153"
- "\u69AD"
- "\u9698"
- "\u5509"
- "\u94EE"
- "\u72E9"
- "\u62A8"
- "\u5CC1"
- "\u7CB1"
- "\u9602"
- "\u53A9"
- "\u83A0"
- "\u5429"
- "\u5490"
- "\u778C"
- "\u870A"
- "\u606C"
- "\u8191"
- "\u8E09"
- "\u8DC4"
- "\u988D"
- "\u6710"
- "\u759D"
- "\u6BC2"
- "\u79E3"
- "\u821B"
- "\u708A"
- "\u6F2F"
- "\u6CE0"
- "\u5598"
- "\u64B5"
- "\u72E1"
- "\u733E"
- "\u94C2"
- "\u949B"
- "\u835E"
- "\u62ED"
- "\u4E1E"
- "\u6F2D"
- "\u7ECC"
- "\u57DC"
- "\u63B0"
- "\u72C8"
- "\u951C"
- "\u83E9"
- "\u5F1B"
- "\u5BF0"
- "\u79E4"
- "\u705E"
- "\u9ECD"
- "\u84DF"
- "\u5D5B"
- "\u6989"
- "\u5E44"
- "\u988A"
- "\u7F24"
- "\u6726"
- "\u80E7"
- "\u51A5"
- "\u781D"
- "\u9540"
- "\u5919"
- "\u71CA"
- "\u835A"
- "\u6D48"
- "\u82E1"
- "\u773A"
- "\u966C"
- "\u5BD0"
- "\u4F58"
- "\u6FD1"
- "\u4EC4"
- "\u6954"
- "\u80DA"
- "\u5D69"
- "\u6D19"
- "\u8BD3"
- "\u961C"
- "\u6D5A"
- "\u89CA"
- "\u89CE"
- "\u66F0"
- "\u6035"
- "\u5156"
- "\u7A20"
- "\u5D4B"
- "\u824B"
- "\u7BEA"
- "\u7425"
- "\u739F"
- "\u8934"
- "\u891B"
- "\u55B1"
- "\u865E"
- "\u9B47"
- "\u51C7"
- "\u5F89"
- "\u561F"
- "\u81C6"
- "\u728A"
- "\u54CE"
- "\u9751"
- "\u4FFA"
- "\u586C"
- "\u59AF"
- "\u5A0C"
- "\u8708"
- "\u86A3"
- "\u6063"
- "\u6C8F"
- "\u78F4"
- "\u970E"
- "\u8DB8"
- "\u9E92"
- "\u6C2A"
- "\u7F07"
- "\u6C81"
- "\u7583"
- "\u6078"
- "\u7629"
- "\u6684"
- "\u61A9"
- "\u796F"
- "\u60F0"
- "\u6E89"
- "\u6CB1"
- "\u8BF2"
- "\u7B08"
- "\u64D8"
- "\u4EB3"
- "\u5B7A"
- "\u5FEA"
- "\u779F"
- "\u64DE"
- "\u7638"
- "\u63AC"
- "\u5501"
- "\u8E5A"
- "\u5321"
- "\u7C95"
- "\u9CB7"
- "\u6CD3"
- "\u53F5"
- "\u55E3"
- "\u772F"
- "\u70B7"
- "\u73FA"
- "\u6F15"
- "\u8C11"
- "\u54AF"
- "\u55EC"
- "\u7F30"
- "\u5372"
- "\u58D1"
- "\u9776"
- "\u968D"
- "\u5520"
- "\u6FE1"
- "\u76CE"
- "\u9A8A"
- "\u8171"
- "\u9798"
- "\u62E7"
- "\u75EB"
- "\u5BA6"
- "\u8BF6"
- "\u690B"
- "\u9F3E"
- "\u6E4D"
- "\u6BD7"
- "\u916A"
- "\u8D66"
- "\u7095"
- "\u7118"
- "\u5958"
- "\u9082"
- "\u9005"
- "\u5984"
- "\u9A90"
- "\u5352"
- "\u55B5"
- "\u89E5"
- "\u772C"
- "\u7EA3"
- "\u61B7"
- "\u8983"
- "\u5B40"
- "\u828A"
- "\u5B62"
- "\u60F6"
- "\u8FE5"
- "\u7EB0"
- "\u5480"
- "\u9E3E"
- "\u7BAB"
- "\u6666"
- "\u6CEF"
- "\u781A"
- "\u542D"
- "\u7962"
- "\u63E9"
- "\u5228"
- "\u73CF"
- "\u64B8"
- "\u5140"
- "\u75C9"
- "\u631B"
- "\u80E4"
- "\u5DFF"
- "\u7EB6"
- "\u9541"
- "\u54FA"
- "\u5494"
- "\u5693"
- "\u7A3C"
- "\u7116"
- "\u59A4"
- "\u59A9"
- "\u6F5E"
- "\u96CC"
- "\u683E"
- "\u4F8D"
- "\u7172"
- "\u5ADA"
- "\u7AFD"
- "\u606A"
- "\u9708"
- "\u8D5D"
- "\u83BA"
- "\u7736"
- "\u6853"
- "\u69CE"
- "\u9991"
- "\u6DAE"
- "\u67AD"
- "\u5F87"
- "\u6D35"
- "\u578C"
- "\u6635"
- "\u8936"
- "\u55BD"
- "\u812F"
- "\u5B71"
- "\u9068"
- "\u8C1A"
- "\u70F7"
- "\u643D"
- "\u916F"
- "\u67B7"
- "\u6849"
- "\u54A7"
- "\u7ABF"
- "\u62C8"
- "\u6593"
- "\u8DDB"
- "\u8E76"
- "\u761F"
- "\u4FED"
- "\u975B"
- "\u810D"
- <sos/eos>
token_type: char
train_data_path_and_name_and_type:
- - dump/fbank_pitch/srctexts
- text
- text
train_dtype: float32
train_shape_file:
- exp/lm_stats/train/text_shape.char
use_amp: false
use_preprocessor: true
val_scheduler_criterion:
- valid
- loss
valid_batch_bins: null
valid_batch_size: null
valid_batch_type: null
valid_data_path_and_name_and_type:
- - dump/fbank_pitch/dev/text
- text
- text
valid_max_cache_size: null
valid_shape_file:
- exp/lm_stats/valid/text_shape.char
write_collected_feats: false
espnet: 0.9.0
files:
asr_model_file: exp/asr_train_asr_conformer3_raw_char_batch_bins4000000_accum_grad4_sp/valid.acc.ave_10best.pth
lm_file: exp/lm_train_lm_transformer_char_batch_bins2000000/valid.loss.ave_10best.pth
python: "3.7.3 (default, Mar 27 2019, 22:11:17) \n[GCC 7.3.0]"
timestamp: 1603088092.704853
torch: 1.6.0
yaml_files:
asr_train_config: exp/asr_train_asr_conformer3_raw_char_batch_bins4000000_accum_grad4_sp/config.yaml
lm_train_config: exp/lm_train_lm_transformer_char_batch_bins2000000/config.yaml
#!/usr/bin/env python3
"""
ONNX Inference Pipeline for AISHELL Dataset
This script implements a complete ONNX inference pipeline similar to asr_inference.sh,
but using Python instead of shell scripts for easier maintenance and customization.
Features:
- Data loading and preparation
- ONNX model inference
- Batch processing support
- RTF (Real Time Factor) calculation
- WER (Word Error Rate) evaluation
- Parallel processing
Usage:
python asr_inference_python.py --onnx_exp exp/conformer_onnx --test_sets "test dev"
python asr_inference_python.py --onnx_exp exp/conformer_onnx --batch_size 4 --use_quantized
"""
import argparse
import logging
import os
import sys
import time
from pathlib import Path
from typing import Dict, List, Optional, Tuple
import numpy as np
import soundfile as sf
from multiprocessing import Pool, cpu_count
# Import espnet_onnx modules
try:
from espnet_onnx import Speech2Text
except ImportError:
print("Error: espnet_onnx is not installed. Please install it first.")
sys.exit(1)
# Set up logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
class ASRInferencePipeline:
"""Complete ONNX inference pipeline for ASR"""
def __init__(self, args):
self.args = args
self.setup_directories()
def setup_directories(self):
"""Set up directory structure"""
self.onnx_exp = Path(self.args.onnx_exp)
if not self.onnx_exp.exists():
raise FileNotFoundError(f"ONNX experiment directory not found: {self.onnx_exp}")
# Create inference directory
inference_tag = "decode_onnx"
if self.args.use_quantized:
inference_tag += "_quantized"
inference_tag += f"_batch{self.args.batch_size}"
self.inference_dir = self.onnx_exp / inference_tag
self.inference_dir.mkdir(exist_ok=True)
logger.info(f"Inference directory: {self.inference_dir}")
def load_data(self, test_set):
"""Load data from directory structure or wav.scp file"""
data_dir = Path(self.args.data_dir) / test_set
wav_data = []
text_data = {}
utt2spk = {}
# First try to load from standard Kaldi format (wav.scp, text, utt2spk)
wav_scp_path = data_dir / "wav.scp"
if wav_scp_path.exists():
logger.info(f"Loading data from standard Kaldi format: {wav_scp_path}")
# Load wav.scp
with open(wav_scp_path, 'r', encoding='utf-8') as f:
for line in f:
parts = line.strip().split()
if len(parts) < 2:
continue
utt_id, audio_path = parts[0], ' '.join(parts[1:])
wav_data.append((utt_id, audio_path))
# Load text
text_path = data_dir / "text"
if text_path.exists():
with open(text_path, 'r', encoding='utf-8') as f:
for line in f:
parts = line.strip().split()
if len(parts) < 2:
continue
utt_id, text = parts[0], ' '.join(parts[1:])
text_data[utt_id] = text
# Load utt2spk
utt2spk_path = data_dir / "utt2spk"
if utt2spk_path.exists():
with open(utt2spk_path, 'r', encoding='utf-8') as f:
for line in f:
parts = line.strip().split()
if len(parts) < 2:
continue
utt_id, spk_id = parts[0], parts[1]
utt2spk[utt_id] = spk_id
else:
# Try to load from directory structure (speaker directories containing wav files)
logger.info(f"Loading data from directory structure: {data_dir}")
# Check if data_dir exists
if not data_dir.exists():
raise FileNotFoundError(f"Data directory not found: {data_dir}")
# Look for speaker directories (like S0724)
for speaker_dir in data_dir.iterdir():
if speaker_dir.is_dir() and speaker_dir.name.startswith('S'):
speaker_id = speaker_dir.name
logger.info(f"Found speaker directory: {speaker_id}")
# Look for wav files in speaker directory
for wav_file in speaker_dir.glob('*.wav'):
if wav_file.is_file():
# Create utt_id from speaker_id and wav filename
utt_id = f"{speaker_id}_{wav_file.stem}"
audio_path = str(wav_file)
wav_data.append((utt_id, audio_path))
utt2spk[utt_id] = speaker_id
logger.debug(f"Added utterance: {utt_id} -> {audio_path}")
if not wav_data:
# Try one more approach: look for wav files directly in test_set directory
logger.info(f"Looking for wav files directly in: {data_dir}")
for wav_file in data_dir.glob('*.wav'):
if wav_file.is_file():
utt_id = wav_file.stem
audio_path = str(wav_file)
wav_data.append((utt_id, audio_path))
utt2spk[utt_id] = "unknown"
logger.debug(f"Added utterance: {utt_id} -> {audio_path}")
if not wav_data:
raise FileNotFoundError(f"No audio files found in: {data_dir}\n" +
"Please check if the directory contains wav files or a wav.scp file")
logger.info(f"Loaded {len(wav_data)} utterances from {test_set}")
return wav_data, text_data, utt2spk
def split_data(self, wav_data, num_jobs):
"""Split data into chunks for parallel processing"""
chunk_size = (len(wav_data) + num_jobs - 1) // num_jobs
chunks = []
for i in range(num_jobs):
start = i * chunk_size
end = min((i + 1) * chunk_size, len(wav_data))
if start < end:
chunks.append(wav_data[start:end])
return chunks
def initialize_model(self):
"""Initialize ONNX model"""
try:
# Use espnet_onnx's Speech2Text class
from espnet_onnx import Speech2Text
providers = ['CPUExecutionProvider']
if self.args.device == 'gpu':
providers = ['CUDAExecutionProvider', 'CPUExecutionProvider']
model = Speech2Text(
# tag_name=str(self.onnx_exp.name),
model_dir=str(self.onnx_exp),
providers=providers,
use_quantized=self.args.use_quantized
)
logger.info("ONNX model initialized successfully")
return model
except Exception as e:
logger.error(f"Error initializing model: {e}")
raise
def process_chunk(self, chunk, onnx_exp, use_quantized, device, test_set, job_id):
"""Process a chunk of data"""
results = {}
processing_times = {}
try:
# Initialize model in this process
from espnet_onnx import Speech2Text
providers = ['CPUExecutionProvider']
if device == 'gpu':
providers = ['CUDAExecutionProvider', 'CPUExecutionProvider']
model = Speech2Text(
tag_name=str(onnx_exp.name),
model_dir=str(onnx_exp),
providers=providers,
use_quantized=use_quantized
)
logger.info(f"Model initialized in process {job_id}")
except Exception as e:
logger.error(f"Error initializing model in process {job_id}: {e}")
# Return empty results
for utt_id, _ in chunk:
results[utt_id] = []
processing_times[utt_id] = {'error': f'Model initialization failed: {e}'}
return results, processing_times
for utt_id, audio_path in chunk:
try:
# Load audio
start_time = time.time()
audio, rate = sf.read(audio_path)
audio_load_time = time.time() - start_time
# Perform inference
infer_start = time.time()
model_results = model(audio)
infer_time = time.time() - infer_start
# Store results
results[utt_id] = model_results
processing_times[utt_id] = {
'total': time.time() - start_time,
'audio_load': audio_load_time,
'inference': infer_time,
'audio_length': len(audio) / rate
}
if job_id == 0 and len(results) % 10 == 0:
logger.info(f"Processed {len(results)} utterances in job {job_id}")
except Exception as e:
logger.error(f"Error processing {utt_id}: {e}")
results[utt_id] = []
processing_times[utt_id] = {'error': str(e)}
return results, processing_times
def run_inference(self, test_set, wav_data):
"""Run inference on test set"""
test_dir = self.inference_dir / test_set
test_dir.mkdir(exist_ok=True, parents=True)
log_dir = test_dir / "logdir"
log_dir.mkdir(exist_ok=True)
# Split data
num_jobs = min(self.args.inference_nj, len(wav_data))
chunks = self.split_data(wav_data, num_jobs)
logger.info(f"Processing {test_set} with {num_jobs} parallel jobs")
# Run parallel processing
results = {}
processing_times = {}
if num_jobs > 1:
# Use multiprocessing
with Pool(num_jobs) as pool:
tasks = []
for i, chunk in enumerate(chunks):
task = pool.apply_async(
self.process_chunk,
(chunk, self.onnx_exp, self.args.use_quantized, self.args.device, test_set, i)
)
tasks.append(task)
# Collect results
for task in tasks:
chunk_results, chunk_times = task.get()
results.update(chunk_results)
processing_times.update(chunk_times)
else:
# Single process - initialize model here
try:
from espnet_onnx import Speech2Text
providers = ['CPUExecutionProvider']
if self.args.device == 'gpu':
providers = ['CUDAExecutionProvider', 'CPUExecutionProvider']
model = Speech2Text(
tag_name=str(self.onnx_exp.name),
model_dir=str(self.onnx_exp),
providers=providers,
use_quantized=self.args.use_quantized
)
logger.info("Model initialized in main process")
# Process chunk
for utt_id, audio_path in chunks[0]:
try:
# Load audio
start_time = time.time()
audio, rate = sf.read(audio_path)
audio_load_time = time.time() - start_time
# Perform inference
infer_start = time.time()
model_results = model(audio)
infer_time = time.time() - infer_start
# Store results
results[utt_id] = model_results
processing_times[utt_id] = {
'total': time.time() - start_time,
'audio_load': audio_load_time,
'inference': infer_time,
'audio_length': len(audio) / rate
}
if len(results) % 10 == 0:
logger.info(f"Processed {len(results)} utterances")
except Exception as e:
logger.error(f"Error processing {utt_id}: {e}")
results[utt_id] = []
processing_times[utt_id] = {'error': str(e)}
except Exception as e:
logger.error(f"Error initializing model: {e}")
# Return empty results
for utt_id, _ in chunks[0]:
results[utt_id] = []
processing_times[utt_id] = {'error': f'Model initialization failed: {e}'}
# Save processing times for RTF calculation
times_path = log_dir / "processing_times.json"
import json
with open(times_path, 'w', encoding='utf-8') as f:
json.dump(processing_times, f, indent=2, ensure_ascii=False)
logger.info(f"Inference completed for {test_set}")
return results, processing_times
def save_results(self, test_set, results):
"""Save inference results"""
test_dir = self.inference_dir / test_set
recog_dir = test_dir / "1best_recog"
recog_dir.mkdir(exist_ok=True)
# Save text results
text_path = recog_dir / "text"
token_path = recog_dir / "token"
score_path = recog_dir / "score"
with open(text_path, 'w', encoding='utf-8') as f_text, \
open(token_path, 'w', encoding='utf-8') as f_token, \
open(score_path, 'w', encoding='utf-8') as f_score:
for utt_id, model_results in sorted(results.items()):
if not model_results:
f_text.write(f"{utt_id} <empty>\n")
continue
# Get first result
text, tokens, token_ids, hyp = model_results[0]
# Write results
f_text.write(f"{utt_id} {text}\n")
f_token.write(f"{utt_id} {' '.join(tokens)}\n")
f_score.write(f"{utt_id} {hyp.score}\n")
logger.info(f"Results saved for {test_set}")
def calculate_rtf(self, test_set, processing_times):
"""Calculate Real Time Factor"""
test_dir = self.inference_dir / test_set
log_dir = test_dir / "logdir"
# Calculate RTF
total_audio_time = 0
total_processing_time = 0
valid_utterances = 0
for utt_id, times in processing_times.items():
if 'error' in times:
continue
if 'audio_length' in times and 'total' in times:
total_audio_time += times['audio_length']
total_processing_time += times['total']
valid_utterances += 1
if valid_utterances > 0:
rtf = total_processing_time / total_audio_time
avg_audio_time = total_audio_time / valid_utterances
avg_processing_time = total_processing_time / valid_utterances
rtf_results = {
'rtf': rtf,
'total_audio_time': total_audio_time,
'total_processing_time': total_processing_time,
'valid_utterances': valid_utterances,
'avg_audio_time': avg_audio_time,
'avg_processing_time': avg_processing_time
}
# Save RTF results
rtf_path = log_dir / "rtf_results.json"
import json
with open(rtf_path, 'w', encoding='utf-8') as f:
json.dump(rtf_results, f, indent=2)
logger.info(f"RTF for {test_set}: {rtf:.4f}")
logger.info(f"Average audio length: {avg_audio_time:.2f}s")
logger.info(f"Average processing time: {avg_processing_time:.2f}s")
return rtf_results
else:
logger.warning(f"No valid utterances for RTF calculation in {test_set}")
return None
def calculate_wer(self, test_set, results, text_data):
"""Calculate Word Error Rate"""
test_dir = self.inference_dir / test_set
score_dir = test_dir / "score"
score_dir.mkdir(exist_ok=True)
# Prepare reference and hypothesis
references = []
hypotheses = []
valid_utterances = 0
for utt_id, model_results in results.items():
if utt_id not in text_data:
continue
if not model_results:
continue
# Get reference and hypothesis
reference = text_data[utt_id]
hypothesis = model_results[0][0] if model_results else ""
if reference and hypothesis:
references.append(reference)
hypotheses.append(hypothesis)
valid_utterances += 1
if valid_utterances == 0:
logger.warning(f"No valid utterances for WER calculation in {test_set}")
return None
# Calculate WER
try:
# Use jiwer if available
import jiwer
wer = jiwer.wer(references, hypotheses)
cer = jiwer.cer(references, hypotheses)
wer_results = {
'wer': wer * 100,
'cer': cer * 100,
'num_utterances': valid_utterances,
'references': references,
'hypotheses': hypotheses
}
# Save WER results
wer_path = score_dir / "wer_results.json"
import json
with open(wer_path, 'w', encoding='utf-8') as f:
json.dump(wer_results, f, indent=2, ensure_ascii=False)
# Save detailed results
detail_path = score_dir / "wer_details.txt"
with open(detail_path, 'w', encoding='utf-8') as f:
f.write(f"WER: {wer*100:.2f}%\n")
f.write(f"CER: {cer*100:.2f}%\n")
f.write(f"Number of utterances: {valid_utterances}\n\n")
for i, (ref, hyp) in enumerate(zip(references, hypotheses)):
f.write(f"Utterance {i+1}:\n")
f.write(f"Reference: {ref}\n")
f.write(f"Hypothesis: {hyp}\n\n")
logger.info(f"WER for {test_set}: {wer*100:.2f}%")
logger.info(f"CER for {test_set}: {cer*100:.2f}%")
return wer_results
except ImportError:
logger.warning("jiwer not installed, skipping WER calculation")
logger.warning("Install with: pip install jiwer")
return None
except Exception as e:
logger.error(f"Error calculating WER: {e}")
return None
def process_test_set(self, test_set):
"""Process a single test set"""
logger.info(f"Processing test set: {test_set}")
# Load data
wav_data, text_data, utt2spk = self.load_data(test_set)
if not wav_data:
logger.warning(f"No data found for {test_set}")
return
# Run inference
results, processing_times = self.run_inference(test_set, wav_data)
# Save results
self.save_results(test_set, results)
# Calculate RTF
self.calculate_rtf(test_set, processing_times)
# Calculate WER
if text_data:
self.calculate_wer(test_set, results, text_data)
else:
logger.warning(f"No reference text found for WER calculation in {test_set}")
logger.info(f"Completed processing {test_set}")
def run(self):
"""Run the complete pipeline"""
logger.info("Starting ONNX inference pipeline")
start_time = time.time()
# Process each test set
for test_set in self.args.test_sets.split():
self.process_test_set(test_set)
# Print summary
total_time = time.time() - start_time
logger.info(f"\n=== Pipeline Summary ===")
logger.info(f"Total processing time: {total_time:.2f} seconds")
logger.info(f"Test sets processed: {self.args.test_sets}")
logger.info(f"ONNX experiment: {self.args.onnx_exp}")
logger.info(f"Batch size: {self.args.batch_size}")
logger.info(f"Device: {self.args.device}")
logger.info(f"Parallel jobs: {self.args.inference_nj}")
# Print detailed results
for test_set in self.args.test_sets.split():
test_dir = self.inference_dir / test_set
# Print WER results
wer_path = test_dir / "score" / "wer_results.json"
if wer_path.exists():
import json
with open(wer_path, 'r', encoding='utf-8') as f:
wer_results = json.load(f)
logger.info(f"\n=== {test_set} WER Results ===")
logger.info(f"WER: {wer_results.get('wer', 'N/A'):.2f}%")
logger.info(f"CER: {wer_results.get('cer', 'N/A'):.2f}%")
logger.info(f"Utterances: {wer_results.get('num_utterances', 0)}")
# Print RTF results
rtf_path = test_dir / "logdir" / "rtf_results.json"
if rtf_path.exists():
import json
with open(rtf_path, 'r', encoding='utf-8') as f:
rtf_results = json.load(f)
logger.info(f"\n=== {test_set} RTF Results ===")
logger.info(f"RTF: {rtf_results.get('rtf', 'N/A'):.4f}")
logger.info(f"Total audio time: {rtf_results.get('total_audio_time', 0):.2f}s")
logger.info(f"Total processing time: {rtf_results.get('total_processing_time', 0):.2f}s")
logger.info("\nPipeline completed successfully!")
def main():
"""Main function"""
import argparse
parser = argparse.ArgumentParser(
description="ONNX Inference Pipeline for AISHELL Dataset",
formatter_class=argparse.ArgumentDefaultsHelpFormatter
)
# Required arguments
parser.add_argument(
"--onnx_exp",
type=str,
required=True,
help="ONNX experiment directory"
)
# Data arguments
parser.add_argument(
"--data_dir",
type=str,
default="./data",
help="Data directory containing test sets"
)
parser.add_argument(
"--test_sets",
type=str,
default="test",
help="Test sets to process (space-separated)"
)
# Inference arguments
parser.add_argument(
"--batch_size",
type=int,
default=1,
help="Batch size for inference"
)
parser.add_argument(
"--device",
type=str,
default="cpu",
choices=["cpu", "gpu"],
help="Device to use for inference"
)
parser.add_argument(
"--inference_nj",
type=int,
default=4,
help="Number of parallel jobs for inference"
)
parser.add_argument(
"--use_quantized",
action="store_true",
help="Use quantized ONNX models"
)
# Logging
parser.add_argument(
"--log_level",
type=str,
default="INFO",
choices=["DEBUG", "INFO", "WARNING", "ERROR"],
help="Logging level"
)
args = parser.parse_args()
# Set logging level
logging.getLogger().setLevel(args.log_level)
# Run pipeline
try:
pipeline = ASRInferencePipeline(args)
pipeline.run()
except Exception as e:
logger.error(f"Error running pipeline: {e}")
import traceback
traceback.print_exc()
sys.exit(1)
if __name__ == "__main__":
main()
\ No newline at end of file
python asr_inference_onnx.py \
--onnx_exp /home/sunzhq/workspace/yidong-infer/conformer/onnx_models/transformer_lm \
--test_sets "test" \
--data_dir /data/datasets/0/data_aishell/wav \
# --batch_size 4
# --tag_name transformer_lm
# # 使用量化模型
# python asr_inference_onnx.py --onnx_exp exp/conformer_onnx --use_quantized --batch_size 4
# # 使用GPU加速
# python asr_inference_onnx.py --onnx_exp exp/conformer_onnx --device gpu --inference_nj 8
# - --onnx_exp : ONNX实验目录(必需)
# - --data_dir : 数据目录(默认:./data)
# - --test_sets : 测试集名称(默认:test)
# - --batch_size : 批量大小(默认:1)
# - --device : 推理设备(cpu/gpu,默认:cpu)
# - --inference_nj : 并行任务数(默认:4)
# - --use_quantized : 使用量化模型
\ No newline at end of file
# import onnxruntime as ort
# import numpy as np
# # 直接加载ONNX模型查看输入要求
# model_path = "/root/.cache/espnet_onnx/transformer_lm/full/default_encoder.onnx"
# try:
# sess = ort.InferenceSession(model_path, providers=['CPUExecutionProvider'])
# input_details = sess.get_inputs()
# print("ONNX模型输入要求:")
# for inp in input_details:
# print(f" 名称: {inp.name}, 形状: {inp.shape}, 类型: {inp.type}")
# except Exception as e:
# print(f"加载模型失败: {e}")
# import os
# import onnx
# import onnxruntime as ort
# import numpy as np
# # 检查ONNX模型文件
# model_path = "/root/.cache/espnet_onnx/transformer_lm/full/default_encoder.onnx"
# print("检查模型文件...")
# if os.path.exists(model_path):
# model_size = os.path.getsize(model_path)
# print(f"模型大小: {model_size} bytes")
# # 加载模型查看结构
# try:
# model = onnx.load(model_path)
# print(f"模型IR版本: {model.ir_version}")
# print(f"生产者: {model.producer_name} {model.producer_version}")
# print(f"模型输入: {len(model.graph.input)} 个")
# print(f"模型输出: {len(model.graph.output)} 个")
# print(f"节点数量: {len(model.graph.node)}")
# # 查找Where节点
# where_nodes = [node for node in model.graph.node if node.op_type == "Where"]
# print(f"找到 {len(where_nodes)} 个Where节点")
# for i, node in enumerate(where_nodes[:3]): # 只显示前3个
# print(f" Where节点 {i}: {node.name}")
# print(f" 输入: {[input for input in node.input]}")
# print(f" 输出: {[output for output in node.output]}")
# except Exception as e:
# print(f"加载模型失败: {e}")
# else:
# print(f"模型文件不存在: {model_path}")
import onnxruntime as ort
import numpy as np
model_path = "/root/.cache/espnet_onnx/transformer_lm/full/default_encoder.onnx"
print("=== 检查模型实际输入 ===")
sess = ort.InferenceSession(model_path, providers=['CPUExecutionProvider'])
# 详细检查输入
print("模型输入详细信息:")
for inp in sess.get_inputs():
print(f"\n输入: {inp.name}")
print(f" 形状: {inp.shape}")
print(f" 类型: {inp.type}")
# 打印每个维度
for i, dim in enumerate(inp.shape):
print(f" 维度[{i}]: {dim}")
# 尝试不同的输入名称
print("\n=== 尝试不同的输入名称 ===")
# 创建测试数据
batch_size = 1
time_frames = 100
n_mels = 80
dummy_feats = np.random.randn(batch_size, time_frames, n_mels).astype(np.float32)
# 获取所有可能的输入名称
input_names = [inp.name for inp in sess.get_inputs()]
print(f"模型接受的输入名称: {input_names}")
# 尝试所有可能的输入组合
test_inputs = []
# 常见的输入名称模式
common_names = [
'feats', 'speech', 'input', 'x',
'feats_length', 'speech_lengths', 'lengths', 'ilens'
]
for name in input_names:
print(f"\n测试输入: {name}")
# 根据名称猜测类型
if 'length' in name.lower() or 'lens' in name.lower():
# 可能是长度输入
dummy_input = np.array([time_frames], dtype=np.int64)
else:
# 可能是特征输入
dummy_input = dummy_feats
try:
outputs = sess.run(None, {name: dummy_input})
print(f" 成功! 使用单一输入: {name}")
print(f" 输出数量: {len(outputs)}")
for i, out in enumerate(outputs):
print(f" 输出{i}: {out.shape}")
break
except:
print(f" 失败: 单一输入{name}")
# 尝试多输入
if len(input_names) > 1:
print(f"\n尝试多输入组合: {input_names}")
# 准备输入字典
input_dict = {}
for name in input_names:
if 'length' in name.lower() or 'lens' in name.lower():
input_dict[name] = np.array([time_frames], dtype=np.int64)
else:
input_dict[name] = dummy_feats
try:
outputs = sess.run(None, input_dict)
print(f" 成功! 使用多输入")
for i, out in enumerate(outputs):
print(f" 输出{i}: {out.shape}")
except Exception as e:
print(f" 失败: {e}")
\ No newline at end of file
#!/usr/bin/env python3
"""
将已导出的ONNX模型转换为支持指定batch_size的模型
"""
import onnx
import onnx.shape_inference
import argparse
import os
def modify_onnx_batch_size(model_path, output_path, target_batch_size=24):
"""修改ONNX模型的batch_size
Args:
model_path: 输入模型路径
output_path: 输出模型路径
target_batch_size: 目标batch_size,-1表示动态batch,其他值表示固定batch
"""
# 加载模型
model = onnx.load(model_path)
# 获取模型输入信息
print(f"原始模型输入信息:")
for i, input_info in enumerate(model.graph.input):
print(f" Input {i}: {input_info.name}")
if input_info.type.tensor_type.HasField("shape"):
shape = input_info.type.tensor_type.shape
print(f" 原始形状: ", end="")
for j, dim in enumerate(shape.dim):
if dim.HasField("dim_value"):
print(f"{dim.dim_value}", end=" ")
elif dim.HasField("dim_param"):
print(f"{dim.dim_param}", end=" ")
print()
# 修改输入形状
for input_info in model.graph.input:
if input_info.type.tensor_type.HasField("shape"):
shape = input_info.type.tensor_type.shape
# 修改第一个维度(batch_size)
if len(shape.dim) > 0:
if target_batch_size == -1:
# 动态batch_size模式
if shape.dim[0].HasField("dim_value"):
shape.dim[0].dim_param = "batch_size"
shape.dim[0].ClearField("dim_value")
elif shape.dim[0].HasField("dim_param"):
# 已经是动态维度,保持不变
pass
else:
# 其他情况,设为动态维度
shape.dim[0].dim_param = "batch_size"
else:
# 固定batch_size模式
shape.dim[0].dim_value = target_batch_size
if shape.dim[0].HasField("dim_param"):
shape.dim[0].ClearField("dim_param")
# 修改输出形状
for output_info in model.graph.output:
if output_info.type.tensor_type.HasField("shape"):
shape = output_info.type.tensor_type.shape
if len(shape.dim) > 0:
if target_batch_size == -1:
# 动态batch_size模式
if shape.dim[0].HasField("dim_value"):
shape.dim[0].dim_param = "batch_size"
shape.dim[0].ClearField("dim_value")
else:
# 固定batch_size模式
if shape.dim[0].HasField("dim_value"):
shape.dim[0].dim_value = target_batch_size
elif shape.dim[0].HasField("dim_param"):
shape.dim[0].ClearField("dim_param")
shape.dim[0].dim_value = target_batch_size
# 运行形状推断
model = onnx.shape_inference.infer_shapes(model)
# 保存修改后的模型
onnx.save(model, output_path)
print(f"模型已保存到: {output_path}")
print(f"目标batch_size: {'动态' if target_batch_size == -1 else target_batch_size}")
# 验证修改结果
print(f"修改后模型输入信息:")
model_modified = onnx.load(output_path)
for i, input_info in enumerate(model_modified.graph.input):
print(f" Input {i}: {input_info.name}")
if input_info.type.tensor_type.HasField("shape"):
shape = input_info.type.tensor_type.shape
print(f" 修改后形状: ", end="")
for j, dim in enumerate(shape.dim):
if dim.HasField("dim_value"):
print(f"{dim.dim_value}", end=" ")
elif dim.HasField("dim_param"):
print(f"{dim.dim_param}", end=" ")
print()
def batch_convert_models(input_dir, output_dir, target_batch_size=24):
"""批量转换目录中的所有ONNX模型"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
onnx_files = [f for f in os.listdir(input_dir) if f.endswith('.onnx')]
print(f"找到 {len(onnx_files)} 个ONNX文件:")
for file in onnx_files:
print(f" - {file}")
for file in onnx_files:
input_path = os.path.join(input_dir, file)
output_path = os.path.join(output_dir, file)
print(f"\n正在转换: {file}")
try:
modify_onnx_batch_size(input_path, output_path, target_batch_size)
print(f"✓ {file} 转换成功")
except Exception as e:
print(f"✗ {file} 转换失败: {e}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='修改ONNX模型的batch_size')
parser.add_argument('--input', type=str, required=True, help='输入ONNX文件或目录路径')
parser.add_argument('--output', type=str, required=True, help='输出路径')
parser.add_argument('--batch_size', type=int, default=24, help='目标batch_size(-1表示动态batch)')
parser.add_argument('--batch_mode', action='store_true', help='批量模式,处理目录中的所有ONNX文件')
args = parser.parse_args()
if args.batch_mode:
# 批量模式
batch_convert_models(args.input, args.output, args.batch_size)
else:
# 单个文件模式
modify_onnx_batch_size(args.input, args.output, args.batch_size)
\ No newline at end of file
# 批量转换所有模型
python convert_onnx_batch_size.py \
--input /home/sunzhq/workspace/yidong-infer/conformer/onnx_models/transformer_lm/full \
--output /home/sunzhq/workspace/yidong-infer/conformer/onnx_models_batch24 \
--batch_size 24 \
--batch_mode
\ No newline at end of file
import librosa
import os
sr=16000
audio_dir = "/data/datasets/1/data_aishell/wav/test"
dir_list = os.listdir(audio_dir)
tmp = []
# print(dir_list)
for index in dir_list:
audio_paths = os.listdir(os.path.join(audio_dir,index))
for audio_path in audio_paths:
y, sr = librosa.load(os.path.join(audio_dir,index,audio_path), sr=sr)
if len(y)/sr == 14.6999375:
print(os.path.join(audio_dir,index,audio_path))
tmp.append(len(y)/sr)
# print(sorted(tmp))
# print(audio_paths)
# y, sr = librosa.load(audio_path, sr=16000)
# print(f"音频总长: {len(y)/sr:.2f}秒 ({len(y)}采样点)")
\ No newline at end of file
# ESPnet Conformer语音识别推理分析报告
## 一、推理执行参数配置
### 1.1 命令行参数
```bash
python3 -m espnet2.bin.asr_inference \\
--batch_size 1 \\
--ngpu 1 \\
--data_path_and_name_and_type dump/0/raw/test/wav.scp,speech,kaldi_ark \\
--key_file exp/asr_train_asr_conformer_raw_zh_char_sp/0/test/logdir/keys.1.scp \\
--asr_train_config exp/asr_train_asr_conformer_raw_zh_char_sp/config.yaml \\
--asr_model_file exp/asr_train_asr_conformer_raw_zh_char_sp/valid.acc.ave_10best.pth \\
--output_dir exp/asr_train_asr_conformer_raw_zh_char_sp/0/test/logdir/output.1 \\
--config conf/decode_asr_rnn.yaml \\
--lm_train_config exp/lm_train_lm_transformer_zh_char/config.yaml \\
--lm_file exp/lm_train_lm_transformer_zh_char/valid.loss.ave_10best.pth
```
### 1.2 关键参数说明
- **batch_size**: 1(单样本推理)
- **ngpu**: 1(使用1个GPU)
- **数据格式**: Kaldi格式的音频数据
- **模型文件**: 训练好的Conformer模型(10个最佳模型平均)
- **语言模型**: Transformer语言模型
## 二、模型架构配置
### 2.1 ASR模型(Conformer)
- **词汇表大小**: 4233个字符
- **编码器类型**: Conformer(12层)
- **解码器类型**: Transformer(6层)
- **输出维度**: 256维
- **注意力头数**: 4个
### 2.2 语言模型(Transformer)
- **词汇表大小**: 4233个字符
- **编码器层数**: 16层
- **隐藏维度**: 512维
- **前馈网络维度**: 2048维
## 三、推理逻辑流程
### 3.1 模型加载阶段
```python
# 模型权重加载
model.load_state_dict(torch.load(model_file, map_location=device))
# 设备设置: cuda, dtype=float32
```
### 3.2 推理设备配置
- **计算设备**: CUDA(GPU加速)
- **数据类型**: float32
- **自动混合精度**: 禁用(autocast=False)
### 3.3 束搜索解码器
```python
BatchBeamSearch(
nn_dict=ModuleDict(
decoder=TransformerDecoder(...), # 6层Transformer解码器
lm=TransformerLM(...) # 16层Transformer语言模型
)
)
```
## 四、推理过程详细分析
### 4.1 音频特征提取
- **输入音频长度**: 67263个采样点
- **STFT变换**: 用于频谱特征提取
- **特征维度**: 原始音频特征(raw)
### 4.2 解码器输入
- **解码器输入长度**: 130个时间步
- **束搜索算法**: BatchBeamSearch实现
- **搜索策略**: 基于CTC和注意力机制的联合解码
### 4.3 文本后处理
- **Tokenizer**: CharTokenizer
- **空格符号**: <space>
- **非语言符号**: 空集合
## 五、性能优化配置
### 5.1 内存优化
- **单样本推理**: 减少内存占用
- **梯度计算**: 推理模式下禁用
- **模型缓存**: 预加载模型权重
### 5.2 计算优化
- **GPU并行**: 单个GPU上的并行计算
- **矩阵运算**: 优化的线性代数运算
- **注意力机制**: 多头注意力并行计算
## 六、警告信息分析
### 6.1 安全性警告
```
FutureWarning: You are using `torch.load` with `weights_only=False`
```
- **建议**: 在未来的PyTorch版本中设置`weights_only=True`
- **影响**: 当前版本无安全风险
### 6.2 兼容性警告
```
WARNING: Using legacy_rel_pos and it will be deprecated
WARNING: Using legacy_rel_selfattn and it will be deprecated
```
- **说明**: 使用旧版相对位置编码
- **影响**: 功能正常,未来需要升级
### 6.3 功能弃用警告
```
UserWarning: stft with return_complex=False is deprecated
```
- **说明**: STFT函数参数即将变更
- **影响**: 当前功能正常
## 七、推理性能指标
### 7.1 时间统计
- **模型加载时间**: ~7秒(17:28:27 - 17:28:34)
- **特征提取时间**: ~8秒(17:28:35 - 17:28:43)
- **总推理时间**: 约15秒
### 7.2 资源使用
- **GPU内存**: 中等使用(单样本推理)
- **CPU使用**: 并行处理多个作业
- **I/O操作**: 音频文件读取和结果写入
## 八、技术特点总结
### 8.1 架构优势
- **端到端设计**: 音频输入直接到文本输出
- **混合模型**: CTC + 注意力机制联合训练
- **语言模型集成**: 提升识别准确率
### 8.2 性能特点
- **实时性**: 支持流式推理
- **准确性**: 基于束搜索的多候选解码
- **可扩展性**: 支持多GPU并行推理
### 8.3 适用场景
- **中文语音识别**: 针对AISHELL数据集优化
- **离线推理**: 批量处理音频文件
- **研究用途**: 模型性能评估和比较
## 九、改进建议
### 9.1 性能优化
- 启用自动混合精度训练(AMP)
- 实现批量推理支持(batch_size > 1)
- 优化内存使用策略
### 9.2 功能增强
- 支持实时流式推理
- 添加多语言支持
- 集成更先进的解码算法
---
**报告生成时间**: 2026-02-02
**分析文件**: asr_inference.1.log
**模型版本**: ESPnet 202304
**框架版本**: PyTorch 2.4.1
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment