機器之心分析師網絡
作者:王子嘉
編輯:H4O
非結構化數據是指沒有按照預定義的方式組織或缺少特定數據模型的數據,比如我們常見的文章、對話等等。
而本文著重提及的結構化數據則是指數據點之間具有清晰的、可定義的關係,並包含一個預定義的模型的數據(如圖 1 所示)。看起來結構化數據應該更容易處理,而基於機器學習的特性(特徵提取),大家更多的注意力集中在了對文本這類非結構化數據的處理,好像對於結構化數據的處理過去都不怎麼熱門。但是隨著機器學習的發展,過去傳統的結構化數據分析方法已經不能滿足我們的需求了,而且這些結構化數據其實都是質量很高的數據,如何在神經網絡中利用這些數據也是很重要的任務。
圖 1:結構化數據和非結構化數據(圖源:https://www.zhihu.com/question/360304708)
因此,本文會先簡單介紹結構化數據,有了對結構化數據的理解,本文又介紹了利用傳統方法和深度學習處理結構化數據的基本思路以及為什麼要處理結構化數據。同時,結構化數據的語義學習也是一個讓結構化數據「升華」的重要一步,於是我們又結合近期的幾篇論文列舉了結構化數據預訓練的方式。最後,我們列舉了幾個處理結構化數據常見的下遊任務和數據集,以便想做更深入研究的小夥伴自取。值得注意的是,本文主要介紹結構化數據處理的主幹架構,而不是對多篇論文的解讀,所以無法包含論文中所有的精彩的創新點,只選取了對結構化數據處理流程有用的大框架內容進行講解。
1. 傳統方法——樹
雖然絕大多數數據是非結構化格式的,但是結構化數據普遍存在於各類商業應用軟體和系統中,例如產品數據存儲,交易日誌,ERP 和 CRM 系統中都存在大量結構化數據,這些結構化數據仍應用著陳舊的數據技術處理,如基於規則的系統,決策樹等。這樣的方法需要人工進行特徵提取,操作繁瑣且需要耗費大量人力進行數據標籤 [1] 。
在正式介紹處理結構化數據的傳統方法之前,先回憶一下什麼是非結構化數據,也就是通常使用的雜亂無章的文本數據。非結構化數據通常是不能用結構化數據的常規方法以傳統方式進行分析或處理的,所以這也成為 AI 領域一個常見的難題,要理解非結構化數據通常需要輸入整段文字,以識別其潛在的特徵,然後查看這些特徵是否出現在池中的其他文本中。因此,在處理此類任務時,深度學習以其出色的特徵提取能力一騎絕塵,於是所有人都開始想著把神經網絡用在結構化數據上——建個全連接層,把每一列的內容作為輸入,再有一個確定好的標籤,就可以進行訓練和推理了。
然而,在現實中,人們更傾向於使用樹來處理結構化數據。因為非結構化數據雖然是「非常規的」,但我們通常處理的都是單一類型的數據,比如像素、體素、音頻頻率、雷達反向散射、傳感器測量結果等等。但是在結構化數據中,我們往往需要處理多種不同的數據類型;這些數據類型大致可以分為兩大類:數值數據(圖像,數字等等)和類別數據。這也帶給了我們很多難題 [2]。
以類別數據為例,因為包含神經網絡在內的大多數算法都還不能直接處理這些數據,所以我們需要在訓練之前對這些數據進行預處理,編碼變量有很多可選的方法,比如標籤 / 數值編碼和 one-hot 編碼(如圖 2 所示)。
圖 2:編碼方式(圖源:https://www.jiqizhixin.com/articles/2017-12-04-7)
但是這時問題就來了,如果我們使用 one-hot 或任意標籤編碼這個變量,那麼我們就要假設各個層次之間都分別有相等和任意的距離 / 差別,但是我們知道肯定不是這樣的。舉個很簡單的例子,在商業場景,假設我們得到了一周的銷售額,想要預測下周的,這個時候,周五周六的差距跟周六周日的差距明顯不同(周末內和周末外,再加上公司的 996),所以模型也應該知道這一點。但是,神經網絡的連續性本質限制了它們在類別變量上的應用。因此,用整型數表示類別變量然後就直接應用神經網絡,不能得到好的結果[3]。
樹就不用考慮這麼多了,它們不需要假設類別變量是連續的,因為它們可以按需要進行分支來找到各個狀態,因此在這些基於結構化數據的應用中,我們更容易見到樹的影子。但是簡單的只使用樹,有很多困難的任務是無法完成的,最常見的例子就是基於結構化數據的問答,樹模型就很難處理這種多源任務。而深度學習模型的能力很強大,只需要找到合適的方法,就能讓其也在這一領域大放異彩。
假設我們列中的信息是一個星期中的某一天。如果我們使用 one-hot 或任意標籤編碼這個變量,那麼我們就要假設各個層次之間都分別有相等和任意的距離 / 差別。
2. 新型利器——深度學習
正如前面所說,我們希望能夠體現這些變量之間的距離,而體現距離本質上就是在尋找這些結構化數據的語義,對於 NLPer 們來說,聽到這個是不是就覺得無比熟悉了?那麼到底該怎麼做呢?嵌入到新空間唄!但是在真的嵌入之前,我們還是要先了解將深度學習應用於結構化數據的挑戰在哪。在讀完很多篇結構化數據的論文後,就可以發現目前要解決的問題主要有:
數據清洗。要在結構化數據 AI 應用上有所成果,首先需要解決人工數據清洗和準備的問題,找到極少或者沒有人為幹預的自動化方法,才能使得這一應用可落地可拓展。
異構數據。處理結構化數據的其中一大挑戰在於,結構化數據可能是異構的,同時組合了不同類型的數據結構,例如文本數據、定類數據、數字甚至圖像數據。其次,數據表有可能非常稀疏。想像一個 100 列的表格,每列都有 10 到 1000 個可能值(例如製造商的類型,大小,價格等),行則有幾百萬行。由於只有一小部分列值的組合有意義,可以想像,這個表格可能的組合空間有多麼「空」。
語義理解。這就是 NLPer 們常見的任務了,找到這些結構化數據的語義特徵。處理結構化數據並不僅僅依賴於數據本身的特徵 (稀疏,異構,豐富的語義和領域知識),數據表集合 (列名,欄位類型,域和各種完整性約束等)可以解碼各數據塊之間的語義和可能存在的交互的重要信息。也就是說,存儲在資料庫表中的信息具有強大的底層結構,而現有的語言模型(例如 BERT)僅受過訓練以編碼自由格式的文本。
對於異構數據的處理非常複雜,本文暫時不做涉及,後文主要對多篇論文中數據清洗和預訓練的過程進行總結,同時會從學術角度介紹部分當前需要應用結構化數據的下遊任務。儘管大部分需要處理結構化數據的任務都是基於企業需求的,但是學術角度上總結的下遊任務更加通用,在解決具體的企業需求時,可以基於這些通用任務的方案提出更加具體的解決方案。
同時,現有的語言模型除了不能很好地表徵結構信息外,還有一些其他的問題——這些表格可能很巨大,而語言模型本身的計算量也很巨大,當兩個「巨大」碰到一起時,所需要的計算量可想而知。同時並且使用佔用大量資源的 LM 對所有行進行天真的編碼在計算上是棘手的。最後,與大多數基於文本的 QA 任務(例如 SQuAD,Rajpurkar 等人,2016)不同,QA 任務可以表述為通用答案跨度選擇問題,並可以通過帶有附加分類層的預訓練模型來解決,而語義解析是高度領域化的,具體來說,神經解析器的體系結構與其基礎資料庫的結構緊密關聯(例如,基於 SQL 的系統和其他類型的 DB 使用不同的編碼器模型。
3. 結構化數據清洗
數據清洗一直是一個令人頭疼的問題,不管是在企業中,還是在學術的較新領域中,一個優秀的對髒亂差數據進行清洗的方案一定是不可或缺的。除了某些特定的需求外,經過預處理之後的結構化數據,應該滿足以下特點:
所有值都是數字–機器學習算法取決於所有數據都是數字。這意味著我們需要替換缺少的值,非數字值(在類別或文本列中的內容)需要替換為數字標識符。
標識並清除具有無效值的記錄(例如,有軌電車網絡所在地理區域之外的位置,或者無效的有軌電車 ID 的車輛 ID)。消除無效值的原因是為了防止模型使用無法反映實際問題的數據進行訓練。
識別並消除了無關的類別。例如,我們知道「方向」列應僅包含 5 個有效值(指南針點和一個指示「兩個方向」的標識符)。所有記錄都需要使用相同的一致類別。
基於此,本小節會對論文中數據清洗的方式以及集成的數據清洗工具進行簡單總結。
3.1 全面的數據預處理工具——HoloClean
HoloClean 是一個統計推斷引擎,用於清洗、加強數據的開源集成工具(github: https://github.com/HoloClean/HoloClean)。作為弱監督的機器學習系統,HoloClean 利用可用的規則、值相關性、參考數據以及其他多種標準來構建概率模型,以準確地捕獲數據生成過程,並將該模型用於各種數據管理任務。HoloClean 允許數據從業者和科學家節省大量時間來構建零碎的清潔解決方案,而以聲明性的方式有效地交流其領域知識,從而能夠從嘈雜,不完整和錯誤的數據中進行準確的分析,預測和見解。這裡面訓練的模型主要是為了理解數據的生成和「汙染」過程,因此這些模型可用於結構化數據的準備和清洗,例如錯誤檢測、預測缺失值、錯誤校正、空值補齊、數據融合等。
這個項目也一直在更新自己的論文,也就是說還處於非常好的維護狀態中,在不想自己進行數據預處理,又有一定的計算資源的情況下,直接求助集成工具不失為一個很好地選擇。
3.2 手動預處理
如果自己手裡的算力並不充足,或是對於預處理的需求較為具體,可以考慮手動定義數據清洗的規則,在 TaBERT[4]中,就進行了極其完備的預處理:
(1)刪除名稱超過 10 個 token 的列;
(2)過濾具有兩個以上非 ASCII 字符或 20 個 token 的單元;
(3)清除空或重複的行和列;
(4)篩選少於三行四列的表;
(5)利用 spaCy,通過對列標記的 NER 標籤進行多數表決來識別列的數據類型(文本或實值);
(6)旋轉垂直方向的表。
當然,除了這些以外,基於自己的任務,也可以做不同的預處理調整。尤其是對於 「rubbish in, rubbish out」深度學習來說,好的預處理方案是極其重要的。
在預處理完成後,就可以正式進入預訓練階段了。
4. 結構化數據預訓練
正如第二節所說,為了能夠在結構化數據中更好地應用神經網絡,我們需要把結構化數據嵌入到一個新的空間中去,以實現結構化數據的表徵。在這方面,非結構化數據的處理中已經做了很好地表率,也就是文本的預訓練。但是具體怎麼預訓練,預訓練的任務有什麼,是一個很具有挑戰性也很值得去探索的方向。因此,本小節對論文中出現的預訓練目標和方式進行了簡單總結。
4.1 TaBERT:: Pretraining for Joint Understanding of Textual and Tabular Data [4]
圖 3:TaBERT 框架(圖源自原論文)
從論文的題目可以看出,TaBERT 聯合自然語言描述和表格數據(也就是結構化數據的一種表示形式)進行了預訓練,圖 3 顯示了 TaBERT 的預訓練過程,首先給定一個自然語言描述 u 和表格 T,模型從表中選取與描述最相關的幾行作為資料庫內容的快照(圖 3,A),然後對其中的每一行進行線性化,圖 3(B)中最下方的內容,就是線性化的結果,其實就是將表格內容平攤開了,如果想更詳細的了解線性化過程,可以去讀一下原論文。然後,線性化的表格和自然語言描述就被輸入到 Transformer 中,輸出編碼後的單詞向量和列值向量。隨後編碼後的所有行被送入垂直自注意力編碼層(圖 3(C)中的 Vertical Self-Attention Layer,本質上是為了在不同列中傳播信息),一個列值(一個單詞)通過計算同一列的值(同一單詞)的垂直排列向量的自注意力得到。最終經過池化層得到單詞和列的表示(圖 3C 中最上方)[6]。
了解完了 TaBERT 產生 embedding 的方式,就該了解一下 TaBERT 具體是怎麼進行預訓練的了。具體來說,TaBert 使用不同的目標來學習上下文和結構化表的表示。對於自然語言上下文,使用遮蔽語言模型(MLM)目標,在句子中遮蔽 15% 的 token。而對於列的表示,TaBert 設計了兩個學習目標:
遮蔽列預測(Masked Column Prediction,MCP)目標使模型能夠恢復被遮蔽的列名和數據類型。具體來說就是從輸入表中隨機選取 20% 的列,在每一行的線性化過程中遮蔽掉它們的名稱和數據類型。給定一列的表示,訓練模型使用多標籤分類目標來預測其名稱和類型。直觀來說,MCP 使模型能夠從上下文中恢復列的信息。
單元值恢復(Cell Value Recovery,CVR)目標能夠確保單元值信息能夠在增加垂直注意力層之後能夠得以保留。具體而言,在 MCP 目標中,列 ci 被遮蔽之後(單元值未被遮蔽),CVR 通過這一列某一單元值的向量表示 s 來恢復這一單元值的原始值。由於一個單元值可能包含多個 token,TaBert 使用了基於範圍(span)的預測目標,即使用位置向量 e_k 和單元的表示 s 作為一個兩層網絡的輸入,來預測一個單元值的 token。
4.2 TaPaS: Weakly Supervised Table Parsing via Pre-training[5]
圖 4:TaPas 模型(下)、單元值預測(右上)和集合操作預測(左上)(圖源自原論文)
Jonathan Herzig 等人提出的 TaPas 本意不是為了預訓練,更多的是針對具體應用的方法(端到端的模型)—— 不需要生成邏輯表達式,直接通過表格回答問題。如圖 4 所示,該模型首先將表格平鋪成單詞序列,並將單詞分割成 wordpiece(token),並將其連接到問題 token 之後。此外模型還添加了兩個分類層,用於選擇單元格和對單元格進行操作的聚合操作符。
在預訓練時,類似於 TaBert,TaPas 也採用了 MLM(masked language model)作為預訓練目標。同時作者利用了數據集中的 label 還嘗試添加了另一個訓練目標:判斷表格是否符合文本描述,但是發現對於其任務並沒有提升。為了提升訓練效率,TaPas 將序列的長度控制在一定範圍以內。為了適應這一點作者在進行預訓練時,從描述中隨機選取 8~16 個單詞的文本片段。對於表,首先添加每個列和單元格的第一個單詞,然後逐漸添加單詞知道達到最大序列長度。為每個表生成 10 個這樣的序列。
為了更好地理解 TAPAS 的使用過程,我們以「Average time as champion for top 2 wrestlers?」這個問題為例,看一下 TAPAS 具體是怎麼工作的。因為 TAPAS 還是基於 BERT 的,所以圖 5 所示的嵌入過程大家應該還算熟悉,只不過在 BERT 的基礎上,TAPAS 加入了 colomn embedding 還有 row embedding 這類學習到的嵌入。同時,為了表示每列中數字的序列(order),還加入了一種 rank embedding,比如 3749 比 3103 大,所以 3103 是 rank1,而 3749 是 rank0。得到了這些單獨的 embedding 之後,這些 embedding 又通過累加的方式合併在一起。
圖 5:基於 BERT 的結構化數據 embedding 生成過程。圖源:https://ai.googleblog.com/2020/04/using-neural-networks-to-find-answers.html
剛剛算出的最終的 embedding 會被送進 BERT,然後得到我們最終的輸出(如圖 6 所示):
1)每個表單元格都會有一個分數,以表示該單元格成為答案的一部分的概率;
2)一個聚合操作,指示應用哪個操作 (如果有的話) 來生成最終答案。
回到我們例子裡的問題,可以看到模型應該選擇「combined days」列的前兩個單元格(右上角,因為概率較高),同時應該應用「average」操作(左上角)。
圖 6:預測結果
圖源:https://ai.googleblog.com/2020/04/using-neural-networks-to-find-answers.html
4.3 Bridging Textual and Tabular Data for Cross-Domain Text-to-SQL Semantic Parsing [7]
圖 7:BRIDGE 編碼器工作原理(圖源自原論文)
BRIDGE 是一個聯合表示問題、關係資料庫模式和資料庫值的通用框架,可以廣泛應用於需要聯合文本 - 表格數據理解的各種問題。如圖 7 所示,輸入問題中的兩個詞 「houses」和「apartments」都分別與兩個 DB 欄位匹配。這些匹配的值被附加到混合序列中對應的欄位名中(圖 7 上方五顏六色的部分,也就是後面所說的序列化)。與 TaBERT 相比,其最大的不同就是在預訓練時同時處理不同源的表格。將 TaBERT 應用於 Spider 數據中的任務時,它是先分別對每個表進行編碼,並通過分層注意建模相互關係。相比之下,如剛剛所說,BRIDGE 序列化了關係資料庫模式,並使用 BERT 建模跨表依賴關係。
具體來說,BRIDGE 將關係 DB 連接到問題上,形成了混合標記序列。在圖 5 中,問題是「Show names of properties that are either houses or apartments」,也就是混合標記序列的最前端的 CLS 到 SEP 之間的內容。然後後面的 T 代表表格的名字,C 代表後面的內容是列的名字。在這個基礎上,作者提取了錨文本(Anchor text),也就是 houses 和 apartments,以使得問題和關係 DB 對齊。然後將這些錨文本放到混合序列中對應的欄位裡,也就是 V 後面的內容。這些東西會被輸入到 BERT 和 Bi-LSTM 中,最終通過 decoder 生成對應的 Clause,也就是圖 7 左下角的內容。
5. 結構化數據下遊任務
在完成了結構化數據的預訓練後,就可以開始在下遊任務上進行 fine-tune 了。因為本文主要介紹的還是與文本聯合的預訓練,所以下遊任務也主要是那些同時需要理解文本和結構化數據的任務。在介紹具體的任務前,要先介紹一下出鏡率很高的兩個基準數據集。
Spider 是一個 Text-to-SQL 數據集,包含 10181 條數據和超過 200 個資料庫。每一條數據包括:一條描述、一個資料庫(包含一個或多個表)、和一條標註的 SQL 語句。SQL 語句通常需要連接多個表進行查詢,比如:SELECT COUNT(*) FROM Country JOIN Lang ON Country.Code = Lang.CountryCode WHERE Name = 'Aruba' 。
WikiTableQuestions 是一個弱監督語義解析數據集,包含來自維基百科的 22033 條句子和 2108 個半結構化的網絡表格。與 Spider 數據集相比,WikiTableQuestions 並不涉及奪標的連接,但是需要對表中的一系列條目進行組合、多步推理。
5.1 Text-to-SQL
這基本是在這些論文中最常見的下遊任務了,簡單來說,就是在給定關係型資料庫(或表)的前提下,由用戶的提問生成相應的 SQL 查詢語句。
圖 8:Text-to-SQL (Spider 數據集的一個例子)。圖源:[8]
圖 8 展示了一個具體的例子,問題為:有哪些系的教員平均工資高於總體平均值,請返回這些系的名字以及他們的平均工資值。可以看到該問題對應的 SQL 語句是很複雜的,並且有嵌套關係。
面向表格的語義解析(如 Text-to-SQL)不同於一般的問答任務,不僅需要編碼通用文本(如:「哪個國家的 GDP 最高」),還需要編碼結構化的數據(如:有關各國經濟情況的若干表格)。在這裡,如何理解資料庫表格中的結構信息(如:資料庫名稱、數據類型、列名以及資料庫中存儲的值等)以及自然語言表達和資料庫結構的關係(如:GDP 可能指的是表中的「國民生產總值」一列)就成為了較為關鍵的挑戰點。
這個任務可以拓展成語義解析任務,具體來說,就是根據用戶定義的語法,將自然語言描述翻譯成中間表示,中間表示可以轉換為特定領域的查詢語言(如 SQL)。比如 TaBert 中就是使用 IRNet 中的 SemQL(可以理解為 SQL 的簡化版本)作為底層的語法表示。
同時這個任務還有一個簡化版本,具體來說就是不需要生成邏輯查詢語言,直接從表格中找到問題的答案,具體來說就是更加 end-to-end,但是任務也就更加複雜。在具體實驗的時候用的數據集也是 spider,只不過跳過了生成查詢語句的過程。
5.2 弱監督的語義解析
語義分析的目標是將語言表示映射到一個可執行程序中。之前的語義分析統計學習工作採用了監督學習模式,其中訓練樣本包括成對的語句和程序。然而大規模的收集訓練樣本是非常困難的,因為需要大量熟悉正規語言的專家標註者。因此,越來越多的人開始研究弱監督語義解析。在這個任務中,訓練樣本對應於語句 - 符號對,其中符號是針對語境執行程序的結果,如圖 9 所示。一般來說,符號收集工作更加簡單,它可以由非專家來完成。
圖 9:弱監督的語義解析。圖源:[9]
因此,弱監督語義解析是指從其執行結果中推斷出正確查詢的強化學習任務。與有監督的語義解析相比,弱監督語義解析更具有挑戰性。因為解析器無法直接獲取正確的查詢,必須在執行結果的獎勵信號的指導下,在指數級的空間中進行搜索。
6. 總結
讀到最後,就應該懂了為什麼我在一開始先介紹非結構化數據,現在的任務大多都是基於特定任務的非結構化數據和結構化數據的結合,如果回到最初語言模型的初衷,那我們的問題就是如何得到一種更易於廣泛應用的結構化數據預訓練模型,這樣才能挖掘出非結構化數據的寶藏,從而靈活的應用到不同的下遊任務中去。如果結構化數據的完全通過非結構化數據來進行預訓練,如何讓得到的表徵可以更加通用,是個非常值得研究的未來方向。同時,如何解決內容異構也是一個極具挑戰但是極有價值的問題,不同於簡單的多任務學習,這裡的異構內容的異構性可能是非常大的,所以這也是一個非常值得探索的方向。
References
[1] 結構化數據不應該被人工智慧遺忘!Accessed at:https://www.leiphone.com/news/202002/XgDRsBy1ged0A8sn.html
[2] 如何用深度學習處理結構化數據?Accessed at:https://www.jiqizhixin.com/articles/2017-12-04-7
[3] Cheng Guo, Felix Berkhahn (2016, April, 22) Entity Embeddings of Categorical Variables. Retrieved fromhttps://arxiv.org/abs/1604.06737.
[4] Yin, P., Neubig, G., Yih, W. T., & Riedel, S. (2020). TaBERT: Pretraining for Joint Understanding of Textual and Tabular Data.arXiv preprint arXiv:2005.08314.
[5] Istrate, R., Scheidegger, F., Mariani, G., Nikolopoulos, D., Bekas, C., & Malossi, A. C. I. (2019). TAPAS: Weakly Supervised Table Parsing via Pre-training.Proceedings of the AAAI Conference on Artificial Intelligence,33(01), 3927-3934. https://doi.org/10.1609/aaai.v33i01.33013927
[6] ACL2020表格預訓練工作速覽. Accessed at:https://cloud.tencent.com/developer/article/1688287
[7] Xi Victoria Lin, Richard SocherandCaiming Xiong. 「Bridging Textual and Tab-ular Data for Cross-Domain Text-to-SQL Semantic Parsing」.in:Findings of theAssociation for Computational Linguistics: EMNLP 2020. Online: Associationfor Computational Linguistics,november2020,pages4870–4888.
[8] Yu, Tao, et al. "Spider: A large-scale human-labeled dataset for complex and cross-domain semantic parsing and text-to-sql task."arXiv preprint arXiv:1809.08887(2018).
[9] Goldman, Omer, et al. "Weakly-supervised semantic parsing with abstract examples."arXiv preprint arXiv:1711.05240(2017).
關於機器之心全球分析師網絡 Synced Global Analyst Network
機器之心全球分析師網絡是由機器之心發起的全球性人工智慧專業知識共享網絡。在過去的四年裡,已有數百名來自全球各地的 AI 領域專業學生學者、工程專家、業務專家,利用自己的學業工作之餘的閒暇時間,通過線上分享、專欄解讀、知識庫構建、報告發布、評測及項目諮詢等形式與全球 AI 社區共享自己的研究思路、工程經驗及行業洞察等專業知識,並從中獲得了自身的能力成長、經驗積累及職業發展。