lstm_attention 可視化
眾所周知,情感分析一直是NLP領(lǐng)域的一大熱門,深度學(xué)習(xí)爆發(fā)之前,基于機(jī)器學(xué)習(xí)的情感分析層出不窮?;谥С窒蛄繖C(jī)、隨機(jī)森林模型的,bag_of_words、tf-idf等作為特征入模,判斷句子的情感。
隨著深度學(xué)習(xí)的興起,word2vec,ELMO,fastText,bert等詞向量編碼的方式也隨之興起,較之于bag_of_words,其利用稠密矩陣可以準(zhǔn)確的表達(dá)詞與詞之間的關(guān)系,大大加快了運(yùn)算速度與分類效果。
基于深度學(xué)習(xí)的分類模型也逐漸興起:LSTM、GRU、RNN等循環(huán)神經(jīng)網(wǎng)絡(luò)及其變體在情感分析中占據(jù)一席之地,這種基于句子前后關(guān)聯(lián)關(guān)系判斷句子屬性的方式具有其他機(jī)器學(xué)習(xí)方法有著極大的優(yōu)勢。
CNN卷積神經(jīng)網(wǎng)絡(luò)在計算機(jī)視覺中發(fā)揮無與倫比的優(yōu)勢,那么卷積神經(jīng)網(wǎng)絡(luò)在自然語言處理是否有優(yōu)勢呢?TextCNN,DPCNN等卷積神經(jīng)網(wǎng)絡(luò)變體開始應(yīng)用于情感分析,人們發(fā)現(xiàn)淺層神經(jīng)網(wǎng)絡(luò)(TEXTCNN)在提取句子特征時有著較大的優(yōu)勢。
深度學(xué)習(xí)一直有著黑盒子之稱,那么如何賦予黑盒子予以可解釋性?
RNN+ATTENTION基于RNN(LSTM/GRU)返回的(seq_len)維的向量可以判斷該句話每次詞的重要性,基于ATTENTION返回的詞重要性可以進(jìn)行情感分析的可解釋性。
而在jupyter notebook 里面可以對預(yù)測的句子進(jìn)行詞重要性可視化展示,直觀展示哪些詞的重要性較高。
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 = "基于深度學(xué)習(xí)的分類模型也逐漸興起:lstm、GRU、RNN等循環(huán)神經(jīng)網(wǎng)絡(luò)及其變體在情感分析中占據(jù)一席之地,這種基于句子前后關(guān)聯(lián)關(guān)系判斷句子屬性的方式具有其他機(jī)器學(xué)習(xí)方法有著極大的優(yōu)勢cnn卷積神經(jīng)網(wǎng)絡(luò)在計算機(jī)視覺中發(fā)揮無與倫比的優(yōu)勢,那么卷積神經(jīng)網(wǎng)絡(luò)在自然語言處理是否有優(yōu)勢呢?textcnn,dpcnn等卷積神經(jīng)網(wǎng)絡(luò)變體開始應(yīng)用于情感分析,人們發(fā)現(xiàn)淺層神經(jīng)網(wǎng)絡(luò)(textcnn)在提取句子特征時有著較大的優(yōu)勢。深度學(xué)習(xí)一直有著黑盒子之稱,那么如何賦予黑盒子予以可解釋性?rnn+atttention 基于rnn(lstm/gru)返回的(seq_len)維的向量可以判斷該句話每次詞的重要性,基于attention 返回的詞重要性可以進(jìn)行情感分析的可解釋性。而在jupyter notebook 里面可以對預(yù)測的句子進(jìn)行詞重要性可視化展示,直觀展示哪些詞的重要性較高。"
sd = jieba.lcut(sd) #分詞后的句子
fea_imp = torch.randn(len(sd)).abs() #隨機(jī)數(shù)生成詞重要性
text = mk_html(sd,fea_imp)
display(HTML(text))
結(jié)果如下圖所示,由于數(shù)據(jù)和詞重要性均為隨機(jī)選取,因此無特別意義

函數(shù)代碼轉(zhuǎn)載至github,做了簡單修改,使之直觀易于理解