文本分类任务中,输入为一条由词语组成的文本,模型判断这条文本的类别。
1.基本文本模型
模型一:使用RNN(LSTM)的最后一个状态判断类别,是最基本的RNN模型。如图:
<>pic<>
LSTM的最后一个状态,或者说是该LSTM结点的最后一个time step 包含了整个句子的信息。将这个信息传入一个普通的全连接的神经网络。最终得到一个分类。比如一个句子传入模型后被判断为威胁类别。如果是二分类,使用sigmoid实现,若是多分类,使用softmax实现。
这个过程中涉及到embedding,就是用向量来表示一个词语,或者说是对词语的进一步编码。第一次编码是将词语转化为数字,两者一一对应。
不使用one-hot 编码,深度学习领域使用embedding的方式对词语进行编码。具体如何做,如下:
词语 | id1 | id2 | id3 | id4 | id5 |
---|---|---|---|---|---|
海洋 | 0.11 | 0.52 | 0.45 | 1.27 | 0.72 |
阳光 | 0.63 | 0.24 | 1.12 | 0.27 | 1.27 |
冲浪 | 0.72 | 0.22 | 0.23 | 0.37 | 0.46 |
我把每一个出现了的词用长度为5的向量表示。并且embedding中的数值是变量,在训练模型时,所有数值是要被学习(更新)的。从而使得每个词语对应的向量与词语意思更相关。
当把输入编码成一个向量时,过程就更类似对图像的处理了(两者还是很不一样)。输入与输出都是向量。
2.双向文本模型
上述基本模型有个问题:虽然LSTM可以选择性地保存信息,但是,随后一个词语还是会与其较近的词语由更大的关系,而弱化较早以前的词语。所以更早些的信息可能不会被保存下来。双向RNN就是用来解决这个问题的,如图:
<>pic<>
特点:
- 信息正向传播,并且逆向传播。
- 把每一个词语经过这个LSTM的输出,做组合(拼接,pooling等)
- 最终将组合结果传入一个全连接层
3.HAN
特点:
- 分层,第一层词语编码,第二层句编码。
- 每一层增加一个类似LSTM内部门的操作,成为Attention 机制