拿language model整体理一遍:
-----------------------------------------------------------------------
开始是拿到一堆训练数据,先决定你的词汇大小,也就是你的向量长度。
把高频词汇排序,去掉超过词汇大小的低频词汇,把词汇大小控制住。
再加入起始、结束符号。
-----------------------------------------------------------------------
例:
假如就有5个字:我看了足球,加上句子开始和句子结束符号,并全部编上序号。
开始($):0,我:2,看:3,了:4,足:5,球:6,句号:1
input和output是同一句话,但是output前移一位。
input: [$我看了足球]---->[023456]
output: [我看了足球。]---->[234561]
再把序号转成one-hot vector(只有序号的位置是1,其他位置都是0)。
一个句子就变成了一个矩阵:row是词汇数;colum是vector的dimension,也是词汇大小。
输入到网络的时候,一个一个vector输入。LSTM会记住之前的vector的信息。
-----------------------------------------------------------------------
Input layer:
content: a sequence of one-hot vectors
shape:[batch_size, timestep, one-vector dimension]
word embedding layer:
shape:[batch_size, timestep, embedding dimension]
LSTM/GRU:
shape:[batch_size, timestep, embedding dimension]
more LSTM/GRUs
...
softmax output layer:
这里可以输入出整个的矩阵,但一般只需要一个。也就是最后一个词。
-----------------------------------------------------------------------
比如输入信息:[$$我看了足]
输出只要[球]。
而这个球也是一个向量,每一维表示着最后一个字是你词汇中对应字的概率。
可能是[0.03,0.01,0.01,0.05,0.05,0.8,0.05]
-----------------------------------------------------------------------
不知道你的第一个问题是指什么。如果是光看输入的话,输入的句子长度可以不同。
但是任意一层的LSTM的输入和输出一定是长度一致的。
不过也并不意味着你的最终输入和最终输出的句子长度一定相等。比如不同语言之间的翻译模型。
-----------------------------------------------------------------------
记得没错的话就是这么个思路。不过我不是研究这方面的。如有错误请指出