emoji情感分类器
一、用词嵌入,rnn、lstm算法,可以在很小的训练集的基础上,建立精确的分类器
1、简单的baseline
构建数据集:
小的数据集(X,Y)其中,X包含127个句子(字符串),Y包含0-4之间的标签,代表表情符号
训练数据集(127个),测试(56个实例)之间分割数据集
训练集:句子用词嵌入的平均值表示,算法使用,dense,
z = W*x+b
y = softmax(z)
像adore和love 有类似的嵌入,所以该算法甚至可以正确地概括一个它从未见过的词,如心,亲爱的,心爱的,也类似与爱,但是没有不快乐的正确答案,这种算法忽略了次序,所以不善于理解不快乐词汇,
结论:即使有127个训练样本,也可以获得一个好的模型,因为词向量较好的泛化型
没有关注词序,所以这部电影不好并且不令人愉快,表现不佳
建立一个LSTM模型,将词序列作为输入,该模型将能够考虑词序,将继续使用预先训练的词嵌入来表示单词,但会将他们输入到LSTM中,其工作是预测最合适的表情符号
2.2、小批量
使用小批量数据,训练kears,大多数深度学习框架要求同一个小批量中的所有序列具有相同的长度,这是允许矢量化工作的原因,使用填充,设置最大序列长度,
2.3、 嵌入层
在keras中,嵌入矩阵表示为“图层”,并将正整数(与单词对应的索引)映射到固定大小的密集向量(嵌入向量)。
该Embedding()图层将大小的整数矩阵(批量大小,最大输出长度)作为输入,对应与转换为索引列表(整数)的句子
该图层输出为(批量大小,最大输出长度,词向量维度)
sentences_to_indices()
2.4、定义函数Emojify_v2,输入是shape(m,max_len),输出是概率值,大小为(m,c=5)
输入参数为:input_shape,word_to_vec_map,word_to_indedx
输出:model
关键点:Input、LSTM、Dropout、Dense、softmax
注意点:
1、NLP任务的训练集小,则使用词嵌入可以显著帮助
2、keras(以及大多深度学习框架)中训练模型的一些重要细节
要使用小批量,序列需要填充,以便小批量的所有样本具有相同的长度
一个Embeding()图层可以用预测值初始化,这些值可以是固定,也可以是在数据集上进一步训练的,但是,如果标记数据集很小,则通常不值得尝试大量的预先训练的嵌入集
LSTM()有一个标志,return_sequences 来决定是否返回每个隐藏的状态或者仅返回最后一个状态
您可以立即使用Dropout(),LSTM()以调整网络