输入是向量序列的情况
在进行语义情感分析时,判断其是积极还是消极的,对于语句的处理,往往是将词转化为向量,而一个句子则是一组向量序列,需要将这组向量序列输入到模型中,才能输出其是积极还是消极的。
对于词汇的编码,有很多方法,其一,独热编码,即有多少词汇,则向量的维度即是多少,这种方法可以让词汇之间没有关联。可以看到特点,其编码只有一个维度是1,其余均为0.
其二,词嵌入。将词汇表示成向量,其向量中包含语义的信息,所以可以通过向量计算出事物之间的关联。相似的事物会相距较近。
一段声音信号也可以看作是一组向量,其声音信号的窗口大小通常设置为25ms,其移动步长设置为10ms,如果1分钟中的语音,那么就需要用60s/10ms=6000个向量来进行描述。
图也是一组向量,例如社交其实可以看作一个图,每个节点可以看作一个人,每个人其实就是一个向量,向量中包含了该人的相关信息(性别,出生日期等)。
输入和输出数量相同
什么情况会出现这种情况?比如词性标注,一个句子中的每个词表示成一个向量,但是经过模型需要输出该词的词性,即多少个词向量作为输入,需要输出多少个词性标签。
同时语音识别也是如此,通过一个向量判断是什么音标。社交网络中,某个人对某个物品的购买情况。
输入是一个序列,输出是一个标签
做语义情感分析时,一段语句是由一组向量描述的,通过模型进行输出的结果只是一个情感标签;语音识别,通过一组语音向量去识别是谁说的。
序列到序列任务
语音识别,通过一组语音向量作为输入,模型输出语音中的表达文字。这个时候的输入和输出不一定数量相同。
自注意力机制原理
图6.11序列标注,可以看出采用的是对每一个词向量单独进行标注,但我们可以观察到第一个saw是动词,而第二个saw是名词。简单的全连接是不可以的,图6.12是把所有的词向量都丢入全连接层里面,但是这个窗口的大小怎么控制,如果其语句词汇过长,其参数过多,不仅计算量大,而且容易过拟合。所以需要借助自注意力机制。
自注意力模型是输入几个向量,输出相同的向量,只是输出的向量其包含的整个句子的联系,将该向量在输入到全连接层就可以解决上述问题。
其实自注意力模型考虑所有的输入才输出结果b,那其内部具体怎么实现的呢?
向量b1的产生过程,如上图所示,其决定是否相关,那么如何计算呢?有两种方法,一种点积,另一种是相加。
图6.20可以看到query即a1左乘矩阵获得的,借助query和其他key进行点积运算,可以算出相关系数,借助softmax激活函数,可以使得其对应的相关系数进行转化,其加和为1,更加直观。
其实可以看出来如果大,则b1更接近于v2。
其具体的过程如下:
多头自注意力
多头自注意力相较于自注意力改进了不少。可以看出输入x左乘Wq矩阵得到的q,q在左乘两个矩阵分别得到q1,q2,当然k,v也同样如此。
可以看到后面标号为1的是进行一起的计算,后面标号为2的进行一起的计算,两者分开进行计算,