胡慶鋒
(里外(深圳)網(wǎng)絡科技有限公司,深圳 518000)
金融知識圖譜是金融行業(yè)語義理解和知識搜索的基礎技術,可以為風險評估、預測、反欺詐、精準營銷、智能搜索等提供技術支撐。在金融知識圖譜中,知識被表示為“事實”的集合,以(主語、謂語、賓語)三元組的形式表示,其中主語和賓語是實體,謂語是這些實體之間的關系。在金融知識圖譜的構建過程中,金融實體的實時識別是其中的關鍵技術之一[1]。根據(jù)2020 年美國股票市場算法自動交易的調(diào)查報告,約73%的股票交易是由計算機算法自動發(fā)出的交易決策。通過使用自然語言處理與金融知識圖譜技術,計算機的交易模型可以在第一時間知道上市公司的年度報告或季度業(yè)績報告中傳遞的關鍵信息,另外通過對互聯(lián)網(wǎng)新聞或帖子的內(nèi)容分析,計算機可以知道新聞中的事件傳達出怎樣的情緒,表達的情緒是積極的,消極的,或者中立的。這種情緒分析的結果再結合金融知識圖譜中的關聯(lián)信息可用于推理并再做出交易決策。
在社交網(wǎng)絡和網(wǎng)上論壇中,每時每刻都有新的信息在發(fā)布。如何利用金融知識圖譜從這些非正式文本中及時準確的識別其中的金融實體,捕捉關鍵信息并輔助投資決策是本文研究的重點。同時,互聯(lián)網(wǎng)上存在著大量的非正式文本,例如一個句子“what r ya talking abt”,其正式的寫法應該是“What are you talking about?”。這就為模型從非正式文本中提取信息提出了要求。非正式文本是指包含大量縮寫和拼錯單詞的文本。因此,系統(tǒng)必須糾正這些詞。系統(tǒng)應該能夠?qū)崟r生成非正式形式的文本以避免延遲問題。此外,在嘗試生成語法正確的文本時,不應改變文本的真實含義,因為這可能會對后續(xù)的任務產(chǎn)生反作用。
Reddit 已成為社交媒體驅(qū)動型交易員和投資者的活動中心,這些市場參與者已經(jīng)證明自己有能力影響市場,美國股市上的不少股票已經(jīng)被掀起了一場又一場的波動性風暴。典型例子如發(fā)生在2021 年1 月的游戲驛站軋空事件(或稱游戲驛站空頭擠壓事件,指美國電子產(chǎn)品銷售商游戲驛站(GameStop)股票發(fā)生持續(xù)軋空的現(xiàn)象,導致對部分對沖基金造成重大財務影響)。本文研究的社交文本數(shù)據(jù)來自于Reddit,雖然它似乎不太可能是這種金融事件的源頭,但是這個論壇一直是互聯(lián)網(wǎng)網(wǎng)民討論金融信息的中心之一。
Reddit 的很多子論壇是為投資者提供交流服務的,投資者可以自由的對市場上正在發(fā)生的事情進行大量討論。人類已經(jīng)無法實時閱讀如此龐雜的信息,因此我們設計了信息抽取模型來處理這些數(shù)據(jù)。
要獲取到Reddit 的帖子文本數(shù)據(jù),目前有兩種方法。第一種方法我們可以使用requests 庫直接與Reddit API 接口。第二種方法是使用PRAW庫(Python Reddit API Wrapper),它在訪問Reddit API 時添加了一個額外的抽象層。在這個項目中,我們將通過requests庫直接與Reddit API 交互。
在構建這樣的金融信息提取框架時,我們需要做的第一件事就是確定我們提取的數(shù)據(jù)實際上是關于什么的——為此我們將使用命名實體識別(named entity recognition)。
命名實體識別(named entity recognition)是自然語言處理中的基本任務之一。在本文中,金融知識圖譜中的實體包括公司名字,監(jiān)管機構,金融機構,投資基金,ETF(exchange-traded fund)等。要從互聯(lián)網(wǎng)上龐雜的數(shù)據(jù)中獲得想要的信息,第一步就是從各種正式或非正式的財經(jīng)新聞或帖子中識別公司實體。對于風控業(yè)務而言,如果模型對某公司的負面信息在識別時沒有召回,這種信息的遺漏可能會為業(yè)務造成巨大的損失,所以模型的召回率就非常關鍵。另一方面,對于計算機輔助投資決策或者算法自動交易的場景而言,實體識別的實時性也非常關鍵?;ヂ?lián)網(wǎng)上的新聞內(nèi)容是實時更新的,社交網(wǎng)絡中的帖子內(nèi)容也是實時更新的。所以對于以上金融業(yè)務場景,必須設計一種速度快,召回率高的金融實體識別模型。
隨著BERT[3]等大型預訓練語言模型的誕生,預訓練模型和CRF 的經(jīng)典組合,成為業(yè)界最常見的NER 模型。然而,由于BERT 模型規(guī)模巨大,其模型參數(shù)多,預測速度慢、容易過擬合等缺點也引起了學術界的廣泛關注。近兩年,各種輕量級版本的BERT 層出不窮,例如DistillBERT[8]、
FastBERT[7]、DistillBERT[8]、Albert[5]、Electra[2]等等。它們具有與BERT-base 相似的性能,但訓練和預測速度提高了數(shù)倍。其中最有影響力的模型是由Google 開源的Albert 和Electra。
模型的問題是一方面,在實際金融知識圖譜項目中,缺少高質(zhì)量的標注數(shù)據(jù)是許多算法工程師面臨的棘手問題。一些研究人員試圖開發(fā)一些在訓練數(shù)據(jù)稀疏的情況下提高訓練效果的策略。例如J.Foley 等人[4]探索將命名實體識別認為視為搜索任務。其中將感興趣的命名實體類作為搜索關鍵詞,而搜索出來的文檔則是為包含該實體的語料庫該類。他們還研究了如何構建了一些人工特征并基于NER-CRF 模型將它們轉換為搜索關鍵詞。L. Chen 等[6]提出了一種基于BERT 的遠程監(jiān)督下的兩階段訓練算法,從而避免去大量人工標注數(shù)據(jù)。
在社交網(wǎng)絡文本中,存在著大量的不規(guī)范文本,包括名稱縮寫,簡寫,拼寫錯誤等。例如蘋果公司可能寫為Apple Inc, Apple, APPL, APP 等。為解決非正式文本中的金融實體識別問題,我們采用了字符串編輯距離測量,實體在上下文共現(xiàn)頻率統(tǒng)計,實體名稱在嵌入式空間的距離類聚等技術挖掘清洗了一批公司實體及其簡寫和常見錯誤拼寫。構建了一個包含實體別名,簡寫與常見錯誤拼寫的金融知識圖譜。存儲知識圖譜常常需要一個圖數(shù)據(jù)庫,它使我們可以繞開傳統(tǒng)關系型數(shù)據(jù)庫的一些不便之處。在傳統(tǒng)數(shù)據(jù)庫中,當我們用它來處理大量包含互連關系的數(shù)據(jù)時,常常需要多表join 操作,導致性能下降。在金融應用場景中,存在大量互聯(lián)關系數(shù)據(jù),如果我們使用傳統(tǒng)數(shù)據(jù)庫,就會面臨應用層在獲取數(shù)據(jù)是性能下降的問題。本文使用了Dgraph,它是一個開源圖形數(shù)據(jù)庫,為Web 規(guī)模的生產(chǎn)環(huán)境構建,用Go 編寫。 Dgraph 數(shù)據(jù)庫可水平擴展,同時保持操作高效以支持實時運行任意復雜的查詢。這樣我們就可以高效地執(zhí)行分布式連接、過濾和排序這樣的復雜問題。
基于以上金融知識圖譜的數(shù)據(jù),我們構建了一個字典樹(trie-tree)對網(wǎng)絡論壇上的金融討論文本數(shù)據(jù)進行回標??偣驳幕貥朔钦浇鹑谖谋揪渥訛?5萬。基于這些自動生成的訓練數(shù)據(jù),我們對Albert(small)- CRF 模型進行了3 輪fine tune 訓練。注意訓練的輪次不宜太大,否則可能會產(chǎn)生過擬合問題。訓練完成之后,我們事先構建的包含1 萬非正式金融文本的測試數(shù)據(jù)上對模型進行了測試。測試環(huán)境:4 個TITAN Xp 型號的GPU 顯卡;CPU:48 核,內(nèi)存:128 GB。通過試驗結果我們可以發(fā)現(xiàn),Alber(tsmall)+Fine Tune 模型的準確率,召回率都優(yōu)于基準對比模型。模型的推斷速度達到了5129 QPS(quest per sencond),提升了金融實體識別的實時性,有利于快速找到金融決策信息。
表1 在互聯(lián)網(wǎng)非正式文本上進行金融實體識別的模型對比測試實驗
通過試驗我們發(fā)現(xiàn),采用基本的Ber(tbase)模型加上一層CRF,在互聯(lián)網(wǎng)非正式文本上即可用取的還不錯的識別效果,準確率89%,召回率79%。但是這種方法的識別速度是一個性能瓶頸,平均每秒鐘能處理1016個環(huán)聯(lián)網(wǎng)非正式金融文本句子。為了減少模型的參數(shù)數(shù)量,減少模型訓練時間和推理時間,我們采用了兩種參數(shù)減少技術。第一種技術是分解嵌入?yún)?shù)化(factorized embedding parameterization)。通過分解將大的詞匯嵌入矩陣分成兩個小矩陣,我們將隱層的層數(shù)與詞嵌入句子的大小的解耦了。這種分離使我們可以很容易的增加隱層的層數(shù),不會顯著增加詞嵌入的參數(shù)數(shù)量。第二種技術是跨層參數(shù)共享。這種技術可以防止參數(shù)增長隨著網(wǎng)絡的深度。這兩種技術都顯著減少了BERT 模型參數(shù)的數(shù)量,而且不會嚴重明顯影響準確性,從而提高參數(shù)效率。試驗中我們發(fā)現(xiàn)推理速度從1016 提高到了5000 左右,速度提升了5 倍,準確率只下降了2個百分點。其中艾伯特Alber(tsmall)+Fine Tune訓練到方法在互聯(lián)網(wǎng)金融文本中的準確率為92.7%,召回率93.6%,推理速度為每秒鐘5129 個句子文本。
本文給出了如何從Reddit 網(wǎng)絡論壇獲得實時的金融討論文本數(shù)據(jù),通過實體識別模型,識別文本中蘊含的金融實體。針對互聯(lián)網(wǎng)非正式文本存在著大量的不規(guī)范文本,包括名稱縮寫、簡寫、拼寫錯誤等,我們構建了一個包含實體別名,簡寫與常見錯誤拼寫的金融知識圖譜,并訓練了一個Albert(small)- CRF fine tune 模型。在試驗測試中,其模型的準確率,召回率都優(yōu)于基準對比模型。另外模型的推斷速度達到了5129 QPS(quest per sencond),提升了金融實體識別的實時性。