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