谷葆春
(北京信息科技大學(xué) 計(jì)算機(jī)學(xué)院,北京 100101)
對于大多數(shù)中小投資者來說,由于信息獲取的滯后性和非系統(tǒng)性,在和專業(yè)機(jī)構(gòu)、游資以及很多量化資金的較量中,經(jīng)常成為被收割的對象,難以獲取滿意的收益。因?yàn)樵谕顿Y市場公司數(shù)量眾多,散戶的精力有限,缺少投研能力,因此沒辦法做到了解和熟悉大部分公司的基本面。
美國的AlphaSense公司已經(jīng)開發(fā)出新一代的金融知識引擎系統(tǒng),它可以從新聞、財(cái)報(bào)各種行業(yè)網(wǎng)站等獲取大量數(shù)據(jù)、信息、知識形式的“素材”,然后通過自己的邏輯和世界觀將這些素材組織成投資決策。國內(nèi)目前還沒有類似的系統(tǒng),因此本文為中小投資者提供了一種在短時(shí)間內(nèi)獲取公司較多有價(jià)值投資信息的方法。
使用Seq2Seq深度學(xué)習(xí)模型,可以通過在Encoder端輸入新聞、財(cái)報(bào)、公告和研報(bào)等數(shù)據(jù),在Decoder端輸出相關(guān)重要信息的摘要,從而為投資者節(jié)省大量的時(shí)間,并為他們的買入和賣出提供輔助決策。
文本摘要是對特定的文本信息,實(shí)現(xiàn)抽取或概括其主要含義,同時(shí)能保留原文本重要內(nèi)容的一種文本生成任務(wù)。文本摘要技術(shù)一方面能對文本進(jìn)行簡潔、準(zhǔn)確的總結(jié),節(jié)省用戶閱讀和獲取信息的時(shí)間,另一方面?zhèn)鬟_(dá)了原文內(nèi)的主要內(nèi)容,保證了用戶獲得信息的有效性。
摘要分為抽取式和生成式兩種。抽取式摘要主要從文中選取跟中心思想最接近的一個(gè)或幾個(gè)句子,組成最后的摘要;而生成式摘要?jiǎng)t是在理解原文內(nèi)容的基礎(chǔ)上,用自己的語言概括原文的核心思想,從而達(dá)到生成最后摘要的目的。
(1)早期的LSTM方法;
(2)早期的Encoder-Decoder模型,如lstm2lstm;
(3)Seq2Seq + Attention模型;
(4)Self-Attention和Transformer,自注意力機(jī)制;
(5)預(yù)訓(xùn)練+微調(diào),例如Bert與PreSumm等。
近兩年雖然Bert模型在許多摘要任務(wù)中有著較為出色的表現(xiàn),但Seq2Seq + Attention模型仍然有自己的應(yīng)用場景??紤]到普通用戶的資源情況,本文采取Seq2Seq + Attention模型實(shí)現(xiàn)相關(guān)金融數(shù)據(jù)的摘要處理方式。
Seq2Seq即Sequence to Sequence,也就是序列到序列的意思,模型結(jié)構(gòu)如圖1所示。在文本摘要中輸入序列為新聞或財(cái)報(bào)等原文,而輸出序列為生成的原文摘要。Seq2Seq模型拼接了兩個(gè)RNN系統(tǒng)的模型,分別稱為模型的編碼器Encoder部分和解碼器Decoder部分。Encoder將變長源序列映射為定長語義向量并組合在一起,而Decoder將該向量映射回變長目標(biāo)序列。
圖1 Seq2Seq模型
給定輸入序列=(,,…,),編碼器將其轉(zhuǎn)換成一個(gè)向量:
=(,,…,)
(1)
=(,-1)
(2)
是時(shí)刻的隱層狀態(tài),由當(dāng)前輸入和上一個(gè)單元的輸出共同決定,是由整個(gè)序列的隱層向量得到的向量表示,由最后一個(gè)編碼器輸出,是解碼器從編碼器接收的唯一信息。
解碼可以看作編碼的逆過程,根據(jù)給定的語義向量和之前已經(jīng)生成的輸出序列,,…,-1來預(yù)測下一個(gè)輸出的單詞。
=argmax()=
(3)
(|,,…,-1,)=(-1,,)
(4)
表示時(shí)刻預(yù)測的結(jié)果,是解碼器Decoder的隱藏層。
Encoder-Decoder模型很經(jīng)典,但其局限性在于編碼和解碼之間的唯一聯(lián)系是固定長度的語義向量,即編碼器要將整個(gè)序列的信息壓縮進(jìn)一個(gè)固定長度的向量中。這有兩個(gè)弊端,一是語義向量無法完全表示整個(gè)序列的信息,壓縮損失了一定的數(shù)據(jù)。二是先輸入的內(nèi)容攜帶的信息會(huì)被后輸入的信息稀釋掉。輸入序列越長,問題越嚴(yán)重。這樣在解碼的時(shí)候一開始沒有獲得輸入序列足夠的信息,解碼時(shí)準(zhǔn)確率也會(huì)打一定折扣。
為了解決上述問題,Attention模型被提出。Attention模型在輸出的時(shí)候,產(chǎn)生一個(gè)注意力范圍表示接下來輸出時(shí)重點(diǎn)關(guān)注的輸入序列部分,再根據(jù)關(guān)注的區(qū)域來產(chǎn)生下一個(gè)輸出,如此反復(fù)。Attention模型增加了模型的訓(xùn)練難度,但它提升了文本生成的效果。
在解碼時(shí),由提示當(dāng)前輸出對應(yīng)的源序列的隱層狀態(tài),而不是在每步解碼中都用同一個(gè)語義向量,用表示每步使用的語義向量后如下:
p(|,,…,-1,)=(-1,,)
(5)
=(-1,-1,)
(6)
其中,為某一步解碼時(shí)的隱層狀態(tài),引入了相應(yīng)信息,為激活函數(shù)。
代表對源序列信息的注意力,對不同輸入的隱層狀態(tài)分配不同的權(quán)重,由于輸入輸出序列往往長度不相同,此步還起到了對齊作用,整個(gè)構(gòu)成了一個(gè)alignment model,定義():
(7)
其中為解碼階段的第步,為源序列的第個(gè)輸入。
引入注意力機(jī)制后,輸入的隱層狀態(tài)不再經(jīng)過整個(gè)源序列編碼過程的傳遞,而直接作用于語義向量,減少了信息損失。
的定義為:
(8)
一個(gè)softmax層可以將歸一化為,是注意力得分,即量化輸入的隱層狀態(tài)被第個(gè)輸出分配的注意力,定義為:
=tan(-1+)
(9)
其中,tan為激活函數(shù),是將輸入輸出隱層狀態(tài)進(jìn)行線性組合的注意力得分計(jì)算方式,另外還有dot product等不同的設(shè)計(jì),但最終是都為了讓相關(guān)輸入的隱層狀態(tài)與當(dāng)前輸出的隱層狀態(tài)有更高的得分。
擁有更高注意力得分的輸入,在語義向量的計(jì)算中有更高權(quán)重,從而為當(dāng)前輸出的引入了主要的信息,解碼過程的語義向量不再是無差別,而是基于源序列與目標(biāo)序列的依賴關(guān)系建模得到。
模型訓(xùn)練時(shí),通過反向傳播讓輸出更接近結(jié)果,更新隱層狀態(tài)與注意力函數(shù)的參數(shù)。
總而言之,通過訓(xùn)練,注意力機(jī)制可以對關(guān)系較大的輸入輸出賦以較大權(quán)重(兩者在轉(zhuǎn)換中對齊的概率更大),對位置信息進(jìn)行了建模,從而減少了信息損失,能專注于更重要的信息進(jìn)行序列預(yù)測。
step_1:數(shù)據(jù)預(yù)處理
數(shù)據(jù)集采用的是網(wǎng)上的新浪微博數(shù)據(jù),每篇文章由正文和標(biāo)題組成,標(biāo)題作為正文數(shù)據(jù)的摘要,總數(shù)量為45萬個(gè)樣本,選取其中的40萬個(gè)數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)。每篇正文平均字?jǐn)?shù)為45個(gè)字,字?jǐn)?shù)標(biāo)準(zhǔn)差為11,最多字?jǐn)?shù)為513,最少字?jǐn)?shù)為14。標(biāo)題平均字?jǐn)?shù)為11個(gè)字,字?jǐn)?shù)標(biāo)準(zhǔn)差為3,最多字?jǐn)?shù)為34,最少字?jǐn)?shù)為2。
使用jieba分詞器對正文和標(biāo)題數(shù)據(jù)進(jìn)行分詞操作,然后在正文中去掉停用詞,標(biāo)題中的停用詞則不用去除,因?yàn)槿サ敉S迷~之后,標(biāo)題的意思會(huì)變得不連貫。
對標(biāo)題數(shù)據(jù)加上開始標(biāo)記“GO”和結(jié)束標(biāo)記“EOS”。對長度不同的正文數(shù)據(jù),以最長長度為基準(zhǔn),長度不足的填充數(shù)據(jù)“PAD”。
step_2:使用詞向量
使用維基百科中文詞向量實(shí)現(xiàn)中文詞匯到向量的映射,該詞向量表有35萬個(gè)詞語。有些詞語沒有出現(xiàn)在該表中,則對這些詞語(UNK)需要單獨(dú)構(gòu)造詞向量。
正文中如果有過多的UNK,或是長度超過設(shè)置的最大長度(80),則該數(shù)據(jù)會(huì)被去除。因?yàn)檫^長的正文數(shù)據(jù)會(huì)造成生成的摘要效果不佳。
step_3:建立模型
先構(gòu)造基本LSTM單元,其隱層結(jié)點(diǎn)的數(shù)量為256個(gè),后面接一個(gè)dropout層。采用雙向RNN網(wǎng)絡(luò),把2層LSTM基本網(wǎng)絡(luò)堆疊在一起,形成編碼Encoder層。雙向RNN網(wǎng)絡(luò)是當(dāng)前的輸出除了與前面的序列有關(guān)系,與后面的序列也有關(guān)系的網(wǎng)絡(luò)形式。
對于Decoder層的構(gòu)造,首先是把sequence_length等參數(shù)傳進(jìn)來,然后同樣構(gòu)造2層RNN網(wǎng)絡(luò),在訓(xùn)練時(shí),直接將標(biāo)題數(shù)據(jù)作為輸入,而不是將上一步的結(jié)果作為輸入。而在測試時(shí),則使用上一步的結(jié)果作為輸入。
step_4:訓(xùn)練模型
指定好Scope域,保證訓(xùn)練好的權(quán)重參數(shù),可以在測試時(shí)重復(fù)使用。訓(xùn)練的各項(xiàng)參數(shù)分別是每次的batch_size為64,學(xué)習(xí)率為0.0005。損失函數(shù)采用tensorflow的sequence_loss判斷預(yù)測結(jié)果與目標(biāo)值是否一致。
step_5:測試數(shù)據(jù)及結(jié)果評測
測試時(shí),首先恢復(fù)之前的Seq2Seq模型,讀取保存的session,輸入測試數(shù)據(jù),測試數(shù)據(jù)采用樣本數(shù)據(jù)中剩下的5萬個(gè)數(shù)據(jù),將網(wǎng)絡(luò)前向傳播執(zhí)行一次,最后生成的摘要數(shù)據(jù)保存在摘要文件中。中文文本摘要采用LawRouge評價(jià)器,它支持Rouge-1、Rouge-2以及Rouge-L三種評價(jià)。使用files_rouge.get_scores方法對模型輸出摘要文件列表和參考摘要文件列表進(jìn)行評價(jià),再用三個(gè)評價(jià)的加權(quán)平均作為最終評價(jià):0.2*scores['rouge-1']['f']+ 0.4*scores['rouge-2']['f']+ 0.4*scores['rouge-l']['f']。 最后的結(jié)果為0.8949,生成的摘要結(jié)果滿足了用戶的需求。
對于投資者來說,及時(shí)、準(zhǔn)確地獲取公司基本面和消息面的信息,才能對股票等投資標(biāo)的下一步的走勢和節(jié)奏進(jìn)行合理的判斷。本文采用Seq2Seq + Attention模型,對公司新聞、研報(bào)和財(cái)報(bào)等信息實(shí)現(xiàn)自動(dòng)摘要生成,總體結(jié)果令人滿意。后續(xù)的改進(jìn)方向是能形成自己的邏輯和世界觀,從而將這些素材組織成投資決策,對于摘要的準(zhǔn)確性提高則可以考慮結(jié)合Bert模型。