ngram语言模型有两个难以逾越的鸿沟,数据稀疏与缺乏长距离语言约束
rnn:可以获得长距离信息,但是很难获得风场距离的信息,理由是随着长度的增加,远距离信息通过概率相乘的结果趋向于零
kaldi rnnlm 学习
向量层:将词汇表嵌入到一个固定维度的实数空间中,有两个作用:降低输入的维度,增加语义信息。
softmax层:将循环神经网络的输出转化为一个单词表中每个单词的输出概率。包含两个步骤:使用一个线性映射将循环神经网络的输出映射为一个与词汇表大小相同的向量,该步输出叫做logits;2. 调用softmax将logits转化为和为1的概率
统计词频:unigram_probs.txt
rnnlm/get_unigram_probs.py --vocab-file=$dir/config/words.txt \
--unk-word="<SPOKEN_NOISE>" \
--data-weights-file=$dir/config/data_weights.txt \
$text_dir | awk 'NF==2' >$dir/config/unigram_probs.txt
0 0.0
1 5.677980732005511e-10
2 5.677980732005511e-10
3 0.00019065313190446504
4 0.00021921836828825837
5 0.00020410577696540876
.
.
.
337300 5.677980732005511e-10
337301 5.677980732005511e-10
337302 5.677980732005511e-10
337303 5.677980732005511e-10
337304 0.0
337305 0.07458654427367836
337306 0.0
选择特征:
# choose features
rnnlm/choose_features.py --unigram-probs=$dir/config/unigram_probs.txt \
--use-constant-feature=true \
--top-word-features=50000 \
--min-frequency 1.0e-03 \
--special-words='<s>,</s>,<brk>,<SPOKEN_NOISE>' \
$dir/config/words.txt > $dir/config/features.txt
features.txt
0 constant 0.01
1 special <s> 1.0
2 special </s> 0.037
3 special <brk> 1.0
4 special <SPOKEN_NOISE> 1.0
5 unigram 0.02657446768669987 0.004196046965775188
6 length 0.007
7 word 。 0.035
8 word 的 0.048
9 word 我 0.064
.
.
.
50515 match 那个 0.29
50516 match 问题 0.23
50517 match 需要 0.31
网络结构:
input dim=800 name=input
relu-renorm-layer name=tdnn1 dim=800 l2-regularize=0.001 input=Append(0, IfDefined(-1))
fast-lstmp-layer name=lstm1 cell-dim=800 recurrent-projection-dim=200 non-recurrent-projection-dim=200 l2-regularize=0.001
relu-renorm-layer name=tdnn2 dim=800 l2-regularize=0.001 input=Append(0, IfDefined(-2))
fast-lstmp-layer name=lstm2 cell-dim=800 recurrent-projection-dim=200 non-recurrent-projection-dim=200 l2-regularize=0.001
relu-renorm-layer name=tdnn3 dim=800 l2-regularize=0.001 input=Append(0, IfDefined(-1))
output-layer name=output l2-regularize=0.001 include-log-softmax=false dim=800
准备初始网络
rnnlm/prepare_rnnlm_dir.sh --unigram-factor 200.0 \
$text_dir $dir/config $dir
rnnlm :
(1)网络结构
input dim=800 name=input
relu-renorm-layer name=tdnn1 dim=800 l2-regularize=0.001 input=Append(0, IfDefined(-1))
fast-lstmp-layer name=lstm1 cell-dim=800 recurrent-projection-dim=200 non-recurrent-projection-dim=200 l2-regularize=0.001
relu-renorm-layer name=tdnn2 dim=800 l2-regularize=0.001 input=Append(0, IfDefined(-2))
fast-lstmp-layer name=lstm2 cell-dim=800 recurrent-projection-dim=200 non-recurrent-projection-dim=200 l2-regularize=0.001
relu-renorm-layer name=tdnn3 dim=800 l2-regularize=0.001 input=Append(0, IfDefined(-1))
output-layer name=output l2-regularize=0.001 include-log-softmax=false dim=800
(2)嵌入层:词太大
(3)softmax层怎么处理:
(4)训练方法
(5)rescore方法:
(6)结果