lstm_attention 可视化
众所周知,情感分析一直是NLP领域的一大热门,深度学习爆发之前,基于机器学习的情感分析层出不穷。基于支持向量机、随机森林模型的,bag_of_words、tf-idf等作为特征入模,判断句子的情感。
随着深度学习的兴起,word2vec,ELMO,fastText,bert等词向量编码的方式也随之兴起,较之于bag_of_words,其利用稠密矩阵可以准确的表达词与词之间的关系,大大加快了运算速度与分类效果。
基于深度学习的分类模型也逐渐兴起:LSTM、GRU、RNN等循环神经网络及其变体在情感分析中占据一席之地,这种基于句子前后关联关系判断句子属性的方式具有其他机器学习方法有着极大的优势。
CNN卷积神经网络在计算机视觉中发挥无与伦比的优势,那么卷积神经网络在自然语言处理是否有优势呢?TextCNN,DPCNN等卷积神经网络变体开始应用于情感分析,人们发现浅层神经网络(TEXTCNN)在提取句子特征时有着较大的优势。
深度学习一直有着黑盒子之称,那么如何赋予黑盒子予以可解释性?
RNN+ATTENTION基于RNN(LSTM/GRU)返回的(seq_len)维的向量可以判断该句话每次词的重要性,基于ATTENTION返回的词重要性可以进行情感分析的可解释性。
而在jupyter notebook 里面可以对预测的句子进行词重要性可视化展示,直观展示哪些词的重要性较高。
def highlight(word, attn):
html_color = '#%02X%02X%02X' % (255, int(255*(1 - attn)), int(255*(1 - attn)))
return '<span style="background-color: {}">{}</span>'.format(html_color, word)
def mk_html(seq, attns):
html = ""
for ix, attn in zip(seq, attns):
html += ' ' + highlight(
ix,attn
)
return html + "<br><br>\n
from IPython.display import HTML, display
import jieba
import numpy as np
sd = "基于深度学习的分类模型也逐渐兴起:lstm、GRU、RNN等循环神经网络及其变体在情感分析中占据一席之地,这种基于句子前后关联关系判断句子属性的方式具有其他机器学习方法有着极大的优势cnn卷积神经网络在计算机视觉中发挥无与伦比的优势,那么卷积神经网络在自然语言处理是否有优势呢?textcnn,dpcnn等卷积神经网络变体开始应用于情感分析,人们发现浅层神经网络(textcnn)在提取句子特征时有着较大的优势。深度学习一直有着黑盒子之称,那么如何赋予黑盒子予以可解释性?rnn+atttention 基于rnn(lstm/gru)返回的(seq_len)维的向量可以判断该句话每次词的重要性,基于attention 返回的词重要性可以进行情感分析的可解释性。而在jupyter notebook 里面可以对预测的句子进行词重要性可视化展示,直观展示哪些词的重要性较高。"
sd = jieba.lcut(sd) #分词后的句子
fea_imp = torch.randn(len(sd)).abs() #随机数生成词重要性
text = mk_html(sd,fea_imp)
display(HTML(text))
结果如下图所示,由于数据和词重要性均为随机选取,因此无特别意义

函数代码转载至github,做了简单修改,使之直观易于理解
网友评论