黃若孜,張 謐
1(復旦大學 軟件學院,上海 201203)
2(復旦大學 上海市智能信息處理重點實驗室,上海 201203)
近年來,文本風格遷移是自然語言處理中的一個熱點,該領域深刻影響著很多NLP 應用的發展,比如在生成詩歌的任務中,利用風格遷移的方法來生成不同風格的詩歌[1].文本風格遷移的目標是將原文本重寫成其他的風格的新文本,新文本應該流暢逼真,同時保留原文本中與風格無關的其他的信息.舉例來說,從Yelp 數據集中可以拿到用戶對餐廳的評論,我們希望將這些評論從正面改為負面,此時文本的風格即為評論中包含的態度.對于這個任務,如果有評論的內容一一對應而態度相反的兩組文本集,我們可以很容易的設計一個Seq2Seq 的模型、有監督的進行訓練.然而,在大部分風格遷移的場景中,這樣的數據集是缺失的,于是很多研究者選擇利用沒有成對句子的數據集學習文本風格遷移的模型.
在已有的文本風格遷移的研究中,絕大部分工作都認為一個文本集的風格是一個認為給定的標簽,而不是從文本集中自動提取的表示.比如對于Yelp 數據集,評分大于(小于)3 的評論被認定為正面(負面)態度.從這個觀點出發,一種常見的思路是學習句子與風格無關的語義表示,然后利用這個表示和另一種風格的標簽恢復出句子[2-4],這實際上是假設句子包含的語義信息和風格信息是相互獨立的.具體來說,這些工作利用自編碼器將不同的風格的句子壓縮到一個共享的語義空間,并將來自不同風格文本集的語義表示的分布進行對齊,這可以通過附加一個分類器實現,分類器試圖區分出句子的域,而自編碼器試圖騙過這個分類器,經過對抗的訓練,最終使學到的語義表示不包含風格標簽的信息.
雖然上述基于對抗訓練的模型可以取得一定的效果,但是正如文獻[5,6]所指出,這些工作難以同時改變風格并且保留其他的語義信息.這些觀察表明,由于句子中風格和語義信息是以復雜的方式混雜在一起的,獨立性假設可能是不合理的.此外,基于對抗訓練的方法往往收斂緩慢,非常耗時.
在本文中,對于文本的風格,我們提出了新的觀點:如果可以將句子的全部語義信息壓縮到一個連續空間中,則得到的向量包含了該句子全部的語義信息.那么一組句子的風格,可以被其對應語義向量的高階統計量所捕捉.在具體的實驗設置中,我們選擇了協方差矩陣來捕捉文本的風格.圖1中,我們將Yelp 中的評論按照對應的評分劃分成小的文本集,并且分別計算其對應的協方差矩陣,然后我們對得到的四個矩陣進行特征值分解,保留了各自前50 維特征向量繪制成熱力圖.可以看到,隨著評論態度的變化,得到的特征向量的顏色呈規律性漸變.這說明了協方差矩陣確實能夠捕捉文本風格,甚至可以區分出風格的強度.

圖1 Yelp 對應不同評分的文本子集的協方差矩陣
基于這一觀點,我們提出了一種半監督學習的方法將句子映射到一個連續空間,使得來自不同文本集句子的連續表示是可分的.之后我們提出了一對矩陣變換的算子,將語義向量先后經過白化和風格化變換以實現風格遷移.
后文組織如下:第1 節介紹如何獲得文本集中風格的表示;第2 節介紹白化-風格化遷移算法;第3 節介紹實驗設置以及實驗結果;第4 節進行總結各前50 維特征向量的熱力圖.其中R5 對應最正面的評價的文本集,R1 對應最負面的評價的文本集.
對于句子x={x1,x2,···,xn},其中xi是詞表中的單詞,我們首先需要將句子嵌入到連續空間.雖然目前已有很多成熟的句嵌入算法[7,8],但是為了便于進行后續的風格遷移工作,我們需要該空間滿足以下兩個條件:
(1)句嵌入應該是無損的、可以被重建的.
(2)不同文本集得到向量應該是可分的.
其中第一點意味著該向量需要包含句子的全部信息,以便于我們從向量中恢復出原始的句子;第二點意味著,來自不同文本集的句子在該空間構成的分布應該盡可能不重疊.
我們首先利用映射函數E:x→z∈Rd,將句子從原始離散空間映射d維連續空間.為了滿足條件(1),我們需要一個逆向的映射函數D:z→y,重建文本y={y1,y2,···,yn}滿足y=x,這兩組映射構成一個自編碼器.由于原始文本和重建文本都是離散的序列,我們選擇用常見的Seq2Seq模型[9]來實現這個自編碼器.Seq2Seq 模型是一種基于循環神經網絡(RNN),對于成對的序列通過最小化重建誤差進行端到端訓練的模型,比如機器翻譯任務中,有英文和法文一一對應的訓練集,就可以使用Seq2Seq模型進行訓練.使用Seq2Seq 模型可以選擇不同的循環單元,在本文的實驗部分,我們驗證了使用長短期記憶網絡(LSTM),門控循環單元網絡(GRU),以及雙向的GRU 等都可以很好的獲取文本的風格.下面我們以LSTM 為例,對自編碼器的訓練目標進行說明.
用作編碼器的循環單元記為LSTME,第i次迭代得到的隱變量記做hi,經過下式所示編碼過程,原始句子被映射為語義向量z:

用作解碼的循環單元記做LSTMD,得到的隱變量記做si:

為了從隱變量預測出具體的詞,可以經過一個全連接層之后再做Softmax 變換,這樣就得到了詞表V中各個詞在當前位置i出現的概率,從這個概率中采樣單詞來生成句子:
其中,W1∈R|V|×d.
自編碼器的目標是重建出輸入的文本,可以通過最小化下式交叉熵損失函數來實現:
我們再來考慮第二個句嵌入的條件,為了使得來自不同文本集的向量的分布盡可能不重疊,可以加入一個分類器來半監督的訓練.假設有兩個文本集X1和X1,我們利用同一個自編碼器來將兩組文本映射到同一個d維空間,在這個空間中我們定義了如下分類器:

其中,f代表flatten 函數,作用是將矩陣展平成一個向量;W2∈Rd2是一個線性變換,可以產生一個標量,這個標量經過Sigmoid 函數得到一個概率值,表示該句子來自第一個文本集的可能性.我們為兩個文本集的文本標定標簽t為0 或1,然后利用如下目標函數進行訓練:

最終的訓練目標為:

其中,α是調節兩部分相對權重的超參數.
在日常的生活中,人們總是可以直觀感受到不同文本的風格差異.在很多語言學的文獻中[10],也已經有了一些成熟的理論來描述生活中的風格現象.為了得到機器可以理解的文本風格的表示,我們先給出該表示需要滿足的性質,這些性質與我們的經驗是一致的.
首先,文本的風格是一種統計現象.單一句子無法形成一種“風格”,而包含多個句子的文本集中蘊含著人類可以辨別的風格.因此我們要學到的表示是對文本集整體而言的.第二,文本的風格蘊含在文本的語義中.舉例來說,對于評論“The food is awful and I will not come again.”來說,如果認為情緒是一種風格,我們很難區分“not come”是句子的語義部分還是風格部分,這兩部分信息往往不是相互獨立的.最后,文本的風格是有不同強度的,如果將上面的句子改為“The food is so awful and I will never come again.”,盡管都是負面的評價,蘊含的情緒會比原句更強烈一點.
為了滿足這些性質,我們提出了用文本集語義向量的協方差矩陣來捕捉文本的風格.對于有N個句子的文本集,假設所有語義向量構成的集合為Z=[z1,z2,···,zN]∈Rd×N,則協方差矩陣為:

為了驗證該矩陣是否能夠捕捉文本的風格,我們用Yelp 數據集中評分為1、2、4、5 的評論各自構成文本集,取這4 個文本集的協方差矩陣的前50 維特征向量,進行了可視化.圖1表明,我們提出的表示確實可以捕捉文本集的風格,甚至可以區分風格的強度.
為了利用我們提取的風格表示控制文本集的風格,我們提出了一種基于矩陣變換的文本風格遷移方法:如果語義向量的協方差矩陣可以代表文本集的風格,我們可以直接將另一個文本集的協方差調整至和該文本集相同,從而實現風格的“對齊”.
由于協方差矩陣是半正定的,可以進行特征值分解:

其中,Λ是由S特征值構成的對角矩陣,P是由對應的特征向量構成的正交矩陣
如果有兩個文本集X1和X2,根據第1 節的方法,我們可以得到各自的風格表示S1和S2.現在想要將第二個文本集的風格遷移成和第一個文本集相同,為此我們對第二個文本集的語義向量組Z先后進行如下矩陣變換:
ZCA 白化:白化變換會拆除向量各維度之間的相關性,經過白化之后的向量協方差矩陣為單位矩陣:

風格化:風格化是白化的逆變換,可以按照第一個文本集的風格重新建立各維度直接的相關性.

上式展示了如何將文本集X2遷移為X1的風格,反之亦然.整個遷移的過程不需要訓練一個端到端的網絡結構,只需要進行矩陣變換.將變換后的向量用1.1 節定義的解碼器進行解碼,即得到了遷移之后的句子.
整個模型結構見圖2,兩側方框表示文本集,梯形框表示需要訓練的網絡結構,中心方框表示實現風格遷移的白化-風格化變換算子.整個算法步驟如下:

圖2 無學習的風格遷移方法

算法1.白化-風格化算法(1)預訓練:對于左側情緒分別為正負的兩個文本集,利用自編碼器進行重建,同時在隱層語義空間中利用一個分類器半監督的訓練,從而調整該空間的分布.(2)獲取風格表示:預訓練收斂以后,用得到的語義向量,得到兩個文本集的語義協方差矩陣.(3)風格遷移:利用白化-風格化變換算子將兩個文本集的語義向量進行風格遷移,遷移后的向量利用已經訓練好的解碼器進行解碼.
我們使用了Yelp 數據集進行了實驗,該數據集收集了Yelp 網站上用戶對餐廳的評價.其中每一句評價都與一個從1 到5 的分值相關聯,分值越高意味著該評價越正面.我們將該分值超過3 的作為情緒正面的文本,低于3 的作為情緒負面的文本,從而得到一組風格對立的文本集,在這一對文本集上,我們利用提出的白化-風格化算法進行風格遷移.經過上述處理的Yelp文本集的詞表大小為9603,訓練集中包含173000 個情緒正面的句子和26300 個情緒負面的句子,驗證集中分別包括37 614 和24 849 個句子,測試集分別包括76392和50278 個句子.
我們使用了以下兩個基于對抗訓練的基線模型:
CrossAligned[3]:該模型假設不同風格的文本集存在一個共享的、與風格無關的語義空間,該模型通過對抗的訓練來對齊不同文本集在這個空間的分布,以達到去除風格信息的目的.
StyleEmbedding[2]:該模型顯式地學習了不同風格的嵌入,將風格嵌入和語義向量一起作為解碼器的輸入,從而對于多種風格,只需要一個自編碼器.
本文使用了以下兩個指標來評估模型在不成對文本風格遷移上的表現:
Accuracy:為了評估生成的文本是否符合預期的風格,我們首先在訓練集上預訓練了一個文本風格的分類器,該分類器使用TextCNN 模型[11],在測試集上的分類準確率可達到97.23%.我們用該分類器對遷移之后的文本的分類準確率作為評估指標,也就是說,遷移之后的文本越多可以“騙過”風格分類器,在這一指標的表現越好.
BLEU:為了評估生成的文本在改變了風格的同時是否保留了源文本的內容信息,我們以源文本為參考文本計算了累積4-gramBLEU 值.BLEU 越高,意味著和源文本更加相似.
正如文獻[5,6]提出的,這兩個指標之間往往呈負相關.直觀來看,成功的改變句子的風格會不可避免的降低BLEU 值.所以我們需要一個綜合指標來判斷模型的效果,由于兩個指標的區間相同,我們簡單的取均值來評估,其他的綜合評估的方法留待之后的工作探索.
我們還考察了不同模型的效率,用不同模型的訓練時間來評判.所有實驗都在同一個Linux 服務器上運行,該服務器搭載Ubuntu 16.04 系統,使用Intel theanoXeon E5-2620 v4 的32 核處理器和兩塊NVIDIA GeForce GTX 1080 顯卡.
我們先使用CBOW 算法[12]將詞表嵌入到一個300維的連續空間中,然后固定學到的詞嵌入,利用我們提出的白化-風格化遷移算法在多種循環單元上進行了實驗.用到的網絡結構包括300 維的LSTM(WSLSTM),300 維的GRU(WS-GRU),以及兩個方向各150 維的雙向GRU(WS-BiGRU),我們也實驗了引入了注意力機制的效果(WS-attention).對所有的結構,在預訓練階段超參數 α都設置為1,訓練50 個epochs,此外我們還設置了一個沒有監督信息的對照組(WSunsupervised),超參 α設置為0;在之后的階段,除了LSTM 拼接了隱層狀態和單元狀態得到了600 維的語義向量,其他結構都使用300 維的隱層狀態作為句子的語義向量.
將基線模型和基于不同結構的白化-風格化算法的表現展示為圖3.可以看到本文設置的對照組WS-unsupervised 在保留語義內容上效果特別好,但是風格遷移的能力較差,這是因為在預訓練階段沒有引入風格類別的監督信號,這樣學到的語義空間不滿足我們提出的第二個條件,不同文本集得到語義向量不可分.在引入了監督信號后,Accuracy 得到的巨大的提高,同時BLEU 值有所下降,綜合表現優于WS-unsupervised.注意到,此時各種網絡結構下我們的模型都是優于兩個基線模型的,除了WS-attention,這是因為引入注意力機制后,得到的語義空間不滿足我們提出的第一個條件,語義信息不是無損的嵌入到這個空間里,很多信息是由編碼器直接提供給了解碼器.

圖3 實驗結果
表1展示了不同模型訓練到收斂的時間,可以看到,我們的模型只在預訓練階段需要端到端的學習一個自編碼器,風格遷移的階段是不需要學習的,整體效率遠遠高于基于對抗訓練的基線模型.

表1 不同模型的訓練時間(單位:s)
本文提出了一種從文本集中提取風格信息的方法,即將句子嵌入到連續的語義空間,利用這些語義向量的協方差矩陣來捕捉風格.利用提取到的風格表示,我們進一步提出了一種基于矩陣變換的風格遷移方法,即白化-風格化算法.實驗表明,該算法的效率遠遠高于基線模型,同時遷移的效果也更好.