翟高粵 高乾龍
摘 要:文本情感分析是對(duì)帶有情感色彩的主觀性文本進(jìn)行分析、處理、歸納和推理的過程。本文先介紹文本情感分析的本質(zhì)和任務(wù),然后引入Transformer并進(jìn)行其結(jié)構(gòu)、原理和位置編碼概念介紹;最后對(duì)整個(gè)項(xiàng)目結(jié)構(gòu)關(guān)鍵部分進(jìn)行模塊分析和功能說明。
關(guān)鍵詞:深度學(xué)習(xí);Transformer;文本情感分析;多頭注意力機(jī)制
自然語言處理NLP的一項(xiàng)重要處理就是情感分析Sentiment Analysis,它在社交內(nèi)容的分析以及電商評(píng)論反饋分析中,都占有很高的分析價(jià)值。文本情感分析任務(wù)本質(zhì)是自然語言序列的特征提取和基于特征的分類問題。相比于生成類NLP任務(wù),文本情感分析任務(wù)的核心是自然語言特征的提取。文本特征提取一直是NLP主流的研究方向,從RNN到AutoEncoder再到BERT都是在特征提取方法上進(jìn)行改進(jìn)的。本文將Transformer的Encoder作為特征提取器,然后接上全連接的神經(jīng)網(wǎng)絡(luò)進(jìn)行分類擬合,根據(jù)擬合結(jié)果判斷情感傾向。接下來我們先介紹一下Transformer相關(guān)理論知識(shí),以便能夠更好地理解模型結(jié)構(gòu)的設(shè)計(jì)。
一、Transformer簡(jiǎn)介
Transformer結(jié)構(gòu)是谷歌在《Attention is all you need》論文中提出的。論文中提出的transformer這種新的結(jié)構(gòu),將其應(yīng)用在機(jī)器翻譯的領(lǐng)域上,取得了很好的效果。自從Attention機(jī)制在提出之后,加入Attention的Seq2Seq模型在各個(gè)任務(wù)上都有了提升,所以現(xiàn)在的seq2seq模型指的都是結(jié)合rnn和attention的模型。但傳統(tǒng)的基于RNN的Seq2Seq模型難以處理長(zhǎng)序列的句子,無法實(shí)現(xiàn)并行,并且面臨對(duì)齊的問題。
二、Transformer原理
(一)Transformer的基本結(jié)構(gòu)
從設(shè)計(jì)結(jié)構(gòu)上看,Transformer延續(xù)了Seq2Seq的Encoder-Decoder 結(jié)構(gòu):對(duì)輸入的數(shù)據(jù)進(jìn)行Encoder編碼提取特征,然后將Encoder的輸出和標(biāo)注數(shù)據(jù)一起輸入Decoder,最后計(jì)算字典內(nèi)每個(gè)詞的出現(xiàn)概率,選取最大概率對(duì)應(yīng)的詞作為最終輸出。在Transformer結(jié)構(gòu)中, Feed Forward是前饋神經(jīng)網(wǎng)絡(luò)層,其作用是將Multi-headAttention(多頭注意力)層輸出的數(shù)據(jù)進(jìn)行非線性變換后輸出。其結(jié)構(gòu)如圖1所示。
(二)多頭注意力機(jī)制
注意力機(jī)制由來已久,從結(jié)構(gòu)特點(diǎn)來看大致分為軟注意力(Soft Attention)機(jī)制、硬注意力(Hard Attention)機(jī)制、全局注意力 (Global Attention)機(jī)制、局部注意力(Local Attention)機(jī)制和多頭注意力(Multi-head Attention)機(jī)制。這里重點(diǎn)介紹和Transformer結(jié)構(gòu)密切相關(guān)的多頭注意力機(jī)制。
多頭注意力機(jī)制是在Attention Is All You Need論文中提出的,多頭注意力是由多個(gè)Scaled Dot-Product Attention(放縮點(diǎn)積注意力,點(diǎn)積是我們常用的計(jì)算相似度的方法之一,放縮指內(nèi)積的大小是可控的)堆疊而得到的。與常見的注意力機(jī)制相比,放縮點(diǎn)積注意力機(jī)制主要是在相似計(jì)算和內(nèi)積調(diào)節(jié)控制方面進(jìn)行了改進(jìn)。放縮點(diǎn)積注意力的計(jì)算過程大概是這樣的:首先計(jì)算每個(gè)Q與K矩陣的相似度,然后使用softmax對(duì)相似度向量進(jìn)行歸一化處理得到 權(quán)重,最后將權(quán)重向量與V矩陣加權(quán)求和得到最終的attention值。Q與K的相似度計(jì)算過程是這樣的:首先使用MatMul函數(shù)計(jì)算Q和K的相似度(MatMul是一種點(diǎn)積函數(shù))。為了能夠更好地控制計(jì)算 的復(fù)雜度,使用Scale函數(shù)對(duì)MatMul的計(jì)算結(jié)果進(jìn)行縮放。
多頭注意力其實(shí)就是每一次放縮點(diǎn)積注意力的計(jì)算結(jié)果,那么計(jì)算多次就是多頭注意力。在每次計(jì)算時(shí)Q、K、V使用不同的參數(shù)進(jìn)行線性變換,這樣雖然進(jìn)行了多次放縮點(diǎn)積注意力的計(jì)算,但每次計(jì)算的結(jié)果是不同的。對(duì)輸入數(shù)據(jù)進(jìn)行不同的線性變換操作是特征增強(qiáng)的一種手段,因?yàn)橹辽購睦碚撋显黾恿擞行卣鳎梢蕴岣呱窠?jīng)網(wǎng)絡(luò)模型的預(yù)測(cè)效果。
(三)位置編碼
在Transformer結(jié)構(gòu)中沒有使用任何RNN或其變體結(jié)構(gòu),這樣Transformer就存在一個(gè)天然的缺陷:沒有辦法提取序列的位置順序特征。我們知道自然語言的數(shù)據(jù)是有時(shí)序性的,一個(gè)詞在句子中出現(xiàn)的 位置不同可以導(dǎo)致整個(gè)句子的意思完全不同。為了解決這個(gè)缺陷,在Transformer結(jié)構(gòu)中使用了位置編碼(Positional Encoding)來提取各個(gè)詞的位置信息,并作為Encoder或Decoder的輸入。Transformer位置編碼的實(shí)現(xiàn)方式是:通過正余弦函數(shù)交替編碼提取位置信息,然后將所提取的每個(gè)詞的位置信息與每個(gè)詞的 Embedding輸出相加作為Encoder或Decoder的輸入。正弦函數(shù)編碼能夠更好地體現(xiàn)不同詞之間的位置關(guān)系,因?yàn)閷?duì)于正弦函數(shù)來說,在一定的范圍內(nèi)變化可以近似于線性變換。
三、項(xiàng)目工程結(jié)構(gòu)設(shè)計(jì)
整個(gè)項(xiàng)目工程結(jié)構(gòu)分為兩部分:文件夾和代碼文件,在編程實(shí)踐中建議采用文件夾和代碼文件的方式來設(shè)計(jì)項(xiàng)目工程結(jié)構(gòu)。所謂的文件夾和代碼文件的方式是指把所有的Python代碼文件放在根目錄下,其他需要存放的靜態(tài)文件、訓(xùn)練數(shù)據(jù)文件和模型文件等都放在文件夾中。
本項(xiàng)目分為五個(gè)部分:配置工具(getConfig.py)、數(shù)據(jù)預(yù)處理器(data_util.py)、神經(jīng)網(wǎng)絡(luò)模型(textClassiferModel.py)、執(zhí)行器(execute.py)和應(yīng)用程序(app.py)。配置工具提供通過配置文件來全局配置神經(jīng)網(wǎng)絡(luò)超參數(shù)的功能;數(shù)據(jù)預(yù)處理器提供數(shù)據(jù)加載功能;神經(jīng)網(wǎng)絡(luò)模型是由Transformer的Encoder部分和全連接神經(jīng)網(wǎng)絡(luò)組成的網(wǎng)絡(luò)結(jié)構(gòu);執(zhí)行器提供保存訓(xùn)練模型、預(yù)測(cè)模型等功能;應(yīng)用程序是一個(gè)基于Flask的用于人機(jī)交互的簡(jiǎn)單Web應(yīng)用程序。在文件夾中,model_data存放訓(xùn)練導(dǎo)出的模型文件;train_data存放訓(xùn)練數(shù)據(jù);web_templates存放HTML、JS等靜態(tài)文件。
(一)配置工具類實(shí)現(xiàn)
在實(shí)際的項(xiàng)目中,我們往往需要對(duì)參數(shù)進(jìn)行頻繁的調(diào)整,因此可以定義一個(gè)工具類來讀取配置文件中的配置參數(shù),這樣在調(diào)參時(shí)只需要對(duì)配置文件中的參數(shù)進(jìn)行調(diào)整,即可實(shí)現(xiàn)對(duì)全部參數(shù)的調(diào)整。
(二)數(shù)據(jù)預(yù)處理實(shí)現(xiàn)
數(shù)據(jù)預(yù)處理中需要實(shí)現(xiàn)的功能比較多,包括word2num、字典的生成、輸入數(shù)據(jù)和標(biāo)簽數(shù)據(jù)的處理、npz文件的保存等。
(三)神經(jīng)網(wǎng)絡(luò)模型設(shè)計(jì)
在神經(jīng)網(wǎng)絡(luò)模型實(shí)現(xiàn)中,根據(jù)實(shí)際需要我們只實(shí)現(xiàn)了Transformer的Encoder部分,把這部分的輸出作為對(duì)文本信息的提取輸入到一個(gè)全連接神經(jīng)網(wǎng)絡(luò)中進(jìn)行文本分類任務(wù)的訓(xùn)練。
(四)執(zhí)行器實(shí)現(xiàn)
執(zhí)行器實(shí)現(xiàn)的是模型創(chuàng)建、訓(xùn)練模型保存、模型加載和預(yù)測(cè)的功能,因此在編程實(shí)踐中我們定義了create_model、train和預(yù)測(cè)函數(shù)。
(五)WEB應(yīng)用實(shí)現(xiàn)
Web應(yīng)用主要完成頁面交互、圖像格式判斷、圖像上傳以及預(yù)測(cè)結(jié)果的返回展示。這里我們使用Flask這個(gè)輕量級(jí)Web應(yīng)用框架來實(shí)現(xiàn)簡(jiǎn)單的頁面交互和預(yù)測(cè)結(jié)果展示功能。
四、結(jié)論
Transformer是第一個(gè)用純attention搭建的模型,不僅計(jì)算速度更快,在翻譯任務(wù)上獲得了更好的結(jié)果,也為后續(xù)的BERT模型做了鋪墊。但也有一定的缺點(diǎn),比如有些rnn輕易可以解決的問題transformer沒做到,例如復(fù)制string,或者推理時(shí)碰到的sequence長(zhǎng)度比訓(xùn)練時(shí)更長(zhǎng)(因?yàn)榕龅搅藳]見過的position embedding),總的來說Transformer結(jié)構(gòu)是一個(gè)創(chuàng)新的結(jié)構(gòu),在大多數(shù)NLP處理方面表現(xiàn)非常優(yōu)秀。
參考文獻(xiàn):
[1] 張冬瑜等.基于Transformer和BERT的名詞隱喻識(shí)別[J],數(shù)據(jù)分析與知識(shí)發(fā)現(xiàn),2020(3).
[2] 張宇等.融入注意力機(jī)制的深度學(xué)習(xí)動(dòng)作識(shí)別方法[J],電訊技術(shù),2021(4).
[3] 閆濤. 深度學(xué)習(xí)算法實(shí)踐 [M]. 電子工業(yè)出版社出版社,2020.
[4] 王宇石等.一種基于卷積神經(jīng)網(wǎng)絡(luò)的違禁品探測(cè)系統(tǒng)及部署方法[J],科技創(chuàng)新與應(yīng)用,2020(7).