正則表達式與神經網絡的深度融合

2021-01-15 PaperWeekly


本文介紹了上海科技大學屠可偉研究組與樂言科技的一項合作研究,提出了將正則表達式規則與神經網絡深度融合的新思路。該論文已被 EMNLP 2020 接收為長文。


論文標題:

Cold-Start and Interpretability: Turning Regular Expressions into Trainable Recurrent Neural Networks

論文連結:

http://faculty.sist.shanghaitech.edu.cn/faculty/tukw/emnlp20reg.pdf

神經網絡發展至今,在很多自然語言處理任務上獲得了很大的成功。在有足夠多標註數據的情況下,神經網絡往往效果驚人。但是,當標註數據匱乏時,神經網絡的性能就會大打折扣。此外,神經網絡缺少可解釋性以及難以融入外部知識的問題也一直為人所詬病。與之對應的,基於符號主義的規則系統,如正則表達式(regular expression, RE),通常由人類專家基於領域知識構建,具備著良好的可解釋性,可用於沒有任何數據的冷啟動場景,並且可以通過規則的增刪和修改來快速應對目標任務的變化。因此,儘管神經網絡和深度學習如火中天,在工業界實際應用場景中,基於規則的方法仍然有著穩固的地位。規則系統的缺點在於完全依賴於人類專家,無法自動從數據中學習,因而在數據資源豐富的場景下難以達到和神經網絡相近的效果。為了結合兩者的優點,近年來如何將規則更好地融入神經網絡成為了一個重要的研究方向。現有的工作主要利用規則去約束神經網絡,通常使用多任務學習 (multitask learning)、知識蒸餾(knowledge distillation)等方法,或是根據規則的啟發設計新的神經網絡結構。然而,兩類方法仍然需要大量數據用於訓練,並且前者的神經網絡本身仍然是一個黑盒子,缺乏可解釋性,後者後者難以利用已有規則進行轉化或是通過專家手工構建。在這篇論文中,我們提出了直接由正則表達式轉化而來的神經網絡:FA-RNN (Finite Automata - Recurrent Neural Networks),將其使用在文本分類任務上,使得基於 FA-RNN 的系統在未經訓練的情況下與正則表達式文本分類系統有著相似的準確率。同時,FA-RNN 兼備神經網絡可訓練、可泛化的優點。我們發現,FA-RNN 在 zero-shot 以及 low-resource 場景下,由於人類知識的融入,與基於神經網絡的基線模型相比有著明顯的優勢;在全部數據的場景下,FA-RNN 與基線模型有著相當的性能。另外,經過訓練的 FA-RNNs 可以近似地表示成非確定性有限狀態自動機(non-deterministic finite automata, NFA), 進而可以近似地轉化為正則表達式,因此有著更好的可解釋性。

正則表達式是在工業中最常用的規則之一。我們以意圖分類數據集 ATIS 中的一個類別 [distance] 為例:根據常識,如果問句裡面包含「how far」,「how long」或者 「distance」,那麼通常這句話就與[詢問距離]有關。因此我們可以對這個類別撰寫出下表第二行的正則表達式,去匹配如第三行所示的句子(其中 $* 表示任意詞出現任意次)。

▲ 表一

對計算理論有一定基礎的讀者可能會知道,任何正則表達式都能轉化為非確定性有限自動機(NFA),如上表的第四行,而任何 NFA 也可以表述成一個正則表達式。並且有以下重要的關係:如果讀完了一個句子,自動機能夠從開始狀態(s0)走到結束狀態(s2),那麼,該自動機接受了這個句子,並且其等價的正則表達式也匹配了這個句子。我們會發現,這個有限狀態自動機可以用一個三維張量,以及兩個向量表示,張量的三個緯度分別是詞表大小 V,自動機狀態數 S,以及狀態數 S,可以看成是由每個單詞對應的轉移矩陣 stack 起來組成。兩個向量分別表示了自動機的初始狀態以及結束狀態。如下圖所示,對於一個句子,我們可以得到每一個單詞的轉移矩陣,若該矩陣的第 i 行第 j 列為 1,則表示可以通過該單詞從狀態 si 轉移到 sj。因此,我們可以用前向算法(forward algorithm)或者維特比算法(viterbi algorithm)來計算句子被該自動機接受的分數。


▲ 圖一

我們以前向算法為例:讀完整個句子之後,從開始狀態到達任一結束狀態的路徑數可以表示為:


我們只要改換一下 notation 以及公式的形式,這個計算過程就可以被看成一個 RNN。其中 A 是指自動機(automata),x 為句子。


ht 類似 RNN 中的隱狀態向量,他的維度等於自動機狀態數。ht 的每一個維度就表示:在讀了 t 個單詞之後,有多少條路徑能夠從開始狀態到該維度對應的自動機狀態。接下來我們描述一個基於正則表達式的文本分類系統。如下圖的上半部分所示,我們針對輸入句子運行所有的正則表達式,得到匹配結果,然後通過一些邏輯操作,將匹配的結果整合。例如,如果一句話只被針對 A 類別的正則表達式匹配,那麼他的標籤是 A 類別;如果這句話被 A,B 兩個類別都匹配,那麼我們可以通過事先定義一個優先級關係來選出更可能的類別。這些都可以用邏輯操作來實現。所以,正則表達式的分類系統先匹配(matching),再整合匹配結果(aggregation)來得到句子的標籤。


如果直接由 RE 轉化而來,FA-RNN 的參數需要包括三維張量 (VxSxS)。這個三維張量相比於傳統的詞向量矩陣 (VxD) 過於大了,並且不包含詞向量中存在的語義信息。我們利用了張量秩分解(tensor rank decomposition,CP decomposition)的技術,用 ER, D1, D2 三個大小分別為 VxR, SxR 與 SxR 的矩陣來近似表示原來的張量,其中,S 為自動機狀態數,R 為 rank 數。原來公式 (1)  中的迭代公式由此變為了:


記 t 時刻的輸入為 x_t, 我們可以把 ER 看成一個只包含規則信息的詞嵌入矩陣,vt 則是 ER 矩陣的對應行選出的 R 維詞向量。由此,我們模型的參數量大大減少,相當甚至更少於 LSTM, GRU 等循環神經網絡。接下來我們介紹我們結合詞向量(如:glove)的方法。為了結合 D 維度的詞向量,我們利用一個 DxR 的矩陣 G 將詞向量從 D 映射到 R 維空間,這個矩陣 G 可以初始化為詞嵌入矩陣 Ew 的違逆乘上 ER。我們再引入一個 0,1 之間的超參數來結合 vt 與 G 映射後的兩個 R 緯詞向量,控制接受多少詞向量語義的信息,更新公式變為如下:


我們將這個模型稱之為 FA-RNN。經過了張量分解、詞向量結合之後,在 zero-shot 的場景中,FA-RNN 仍然能夠得到和規則系統接近的準確率。例如在 ATIS 數據集(Hemphill et al., 1990)中,規則系統的準確率為 87.01%,FA-RNN 仍然能夠達到 86.53% 的準確率,而大部分的神經網絡初始的準確率近似於隨機。另外,我們提出了 FA-RNN 的雙向以及門控變體,不過模型可解釋性相應下降了。有了 FA-RNN,我們就可以用它構造規則系統的「神經網絡版本」,如圖二的下半部分所示。FA-RNN 的最後一個「hidden state」包含了正則表達式的匹配信息,我們可以通過一個 MLP 來整合匹配結果。第一個 linear 層取出所有自動機的接收狀態(final state)的值,第二個 linear 層可以利用 soft logic 進行簡單的邏輯操作,並且最終得到每個類別的分數。這些分數的理想值為非負正數。可以看到,我們的模型結構非常類似於傳統的 RNN+MLP,同時模型輸出的結果完全與規則系統一致。與規則系統不同的是,我們可以直接將模型輸出的標籤分數利用 cross-entropy 損失函數進行訓練。

實驗以及實驗結果

我們比較了結構對應的傳統神經網絡。具體結構為 BiRNN / BiGRU / BiLSTM / CNN / DAN 給句子做 encoding,用 Linear 層輸出每個 label 的 score。除此之外,我們使用了一些已有方法將規則與傳統神經網絡結合。分別是 Luo et, al 提出的三種利用正則表達式匹配結果的方式(+i: 將正則表達式匹配結果作為額外的特徵輸入,+o: 利用 RE 結果直接改變輸出 logits, +io 前兩者結合),以及兩種基於知識蒸餾的方式,分別記為 +kd(Hinton et al., 2015)以及 +pr(Hu et al. 2016)。我們在三個文本分類數據集上實驗,分別是 ATIS (Hemphill et al., 1990), Question Classification (QC) (Li and Roth, 2002) 以及 SMS (Alberto et al., 2015). 我們使用了 glove 詞向量。下表顯示了數據集以及規則的統計信息以及樣例。

我們發現,FA-RNN 在 zero-shot 以及 low-resource 的場景下有著明顯的優勢,並且在 full-shot 上仍然能夠得到與傳統簡單神經網絡方法以及其經過規則加強後相似的準確率。結果如下:

▲ 表四:few-shot 、full dataset 準確率

3.3 模型可解釋性的探索

訓練過後的 FA-RNN 參數可以還原出 VxSxS 的三維的張量。不過不再是非零即一了,因此不再對應非確定性有限自動機 (NFA),而對應了帶權有限狀態自動機(weighted finite automata, WFA)。由於 FA-RNN 與計算模型 WFA 的對應關係,我們認為他相比較傳統神經網絡有著更強的可解釋性。進一步地,我們可以設定一個閾值,將 WFA 中大於閾值的認為是 1,小於的認為是 0,從而將 WFA 轉化為 NFA,並將 NFA 轉化為人類可讀的正則表達式。下圖展示了 ATIS 數據集中在訓練前與訓練後針對 [aircraft] 類別的自動機變化。可以看到,新的自動機可以考慮更全面的情況,例如識別到句子中有 jet, 737(boeing) 的時候認為該句子在描述 aircraft。


我們發現,訓練過後的 FA-RNN 轉化為的正則表達式,雖然是有損的轉化,也能達到和訓練之前的系統相近甚至更高的準確率。在 QC 數據集上提升了 9.2% 的準確率,在 ATIS 上提升了 0.45%,在 SMS 上稍有下降 (-1.2%)。

我們提出了直接由正則表達式轉化而來的神經網絡:FA-RNN ,並將其應用在文本分類任務上,使得基於 FA-RNN 的系統在未經訓練的情況下與正則表達式文本分類系統有著相似的準確率。通過實驗發現,與基線模型相比,由於知識的融合,FA-RNN 的文本分類系統在 zero-shot 與 low-resource 場景下有著更好的效果,在全部數據的訓練場景下也有著不錯的競爭力。同時,FA-RNN 可以轉化為計算模型 WFA,甚至正則表達式,因此有著更好的可解釋性。

上海科技大學信息學院屠可偉老師研究組主要從事自然語言處理、機器學習等人工智慧領域的研究,目前側重於研究語言結構的表示、學習與應用。


研究組近幾年已發表頂會論文數十篇,其中三篇無監督句法解析的論文已被美國卡內基梅隆大學自然語言處理課程列為閱讀材料,另一篇論文是 ACL2018 句法領域的最高分論文。2020 年到目前為止,研究組已發表 ACL論文4篇,EMNLP 論文3篇,EMNLP Findings 論文4篇。


研究組現招收碩士研究生(推免生)、博士後和研究助理,歡迎有興趣的同學聯繫屠老師。

http://faculty.sist.shanghaitech.edu.cn/faculty/tukw/


如何才能讓更多的優質內容以更短路逕到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。


總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。 


PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得技術乾貨。我們的目的只有一個,讓知識真正流動起來。


📝 來稿標準:

• 稿件確係個人原創作品,來稿需註明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向) 

• 如果文章並非首發,請在投稿時提醒並附上所有已發布連結 

• PaperWeekly 默認每篇文章都是首發,均會添加「原創」標誌


📬 投稿郵箱:

• 投稿郵箱:hr@paperweekly.site 

• 所有文章配圖,請單獨在附件中發送 

• 請留下即時聯繫方式(微信或手機),以便我們在編輯發布時和作者溝通




🔍


現在,在「知乎」也能找到我們了

進入知乎首頁搜索「PaperWeekly」

點擊「關注」訂閱我們的專欄吧



關於PaperWeekly


PaperWeekly 是一個推薦、解讀、討論、報導人工智慧前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號後臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群裡。


相關焦點

  • 正則表達式在VBA中間是如何應用?正則表達式的實現方式?
    Hi,大家好,本章節開始將會從零開始和大家用圖文的方式,讓你從零基礎學會正則表達式!有興趣的小夥伴可以持續關注我,或者在專欄中進行查看自我學習,願與君攜手前行!在上一個章節說到正則表達式的入門級知識點,本節將會與大家分享一下正則表達式的是具體實現方式是怎麼樣的?
  • 進展|神經網絡正則變換
    正則變換是物理、力學家和天文學家處理哈密頓體系的經典方法。通過找到合適的變量替換,正則變換可以簡化、甚至是徹底求解哈密頓體系的動力學。例如,19世紀法國科學家夏爾·德勞奈發表了約1800頁的解析推導,試圖使用正則變換化簡「日-地-月」的三體問題。
  • Python程式語言:如何運用正則表達式
    這篇文章,小編要和大家分享的知識是Python語言的正則表達式,以及自己學到的使用方法!學會正則表達式可以幫助我們抓取網絡信息,正則表達式又叫Re庫!這裡我們要了解什麼是正則表達式,正則表達式是用來簡潔表達一組字符串的表達式!
  • 【第160期】指尖上的正則表達式–入門篇
    美國新澤西州的Warren McCulloch和出生在美國底特律的Walter Pitts這兩位神經生理方面的科學家,研究出了一種用數學方式來描述神經網絡的新方法,他們創新地將神經系統中的神經元描述成了小而簡單的自動控制元,從而作出了一項偉大的工作革新。
  • Python「正則表達式」詳解(上)
    大家好,今天我們一起學習以下Python中的「正則表達式」,說到正則表達式,大家可能比較陌生,不過我卻要告訴你,你每天都在使用正則表達式,不要不承認,就問你最常見的,瀏覽器每天用不?淘寶經常逛不?你在搜索框裡輸入幾個文字,按下回車,就出來大量結果,你想想這是怎麼辦到的,是正則表達式,可以好不誇張的講,沒有正則表達式,就沒有搜尋引擎。
  • 給JAVA程式設計師的正則表達式一課
    「不會正則表達式,就算寫遍代碼也嘛不是」。說到正則表達式,可能動態語言的碼農Perl,Python,JS甚至是Golang的開發人員可能都熟悉。對Java碼農來說,可能CURD手到擒來,Spring Stuts Hibernat耳聞能詳,但是說到Regex RE模式,可能熟練的少。那麼,今天蟲蟲就來給廣大Java碼農來補補正則的課。
  • 使用JavaScript對正則表達式進行解析
    我的目的不是要嚇你,一旦我們了解了正則表達式那它就變得很簡單:讓人畏懼.....今天,我們將揭開正則表達式的神秘面紗,看到它的含義,它的用途以及如何設計正則表達式來解決問題。1、什麼是正則表達式?正則表達式是描述數據字符串中模式的一種方式。
  • 正則表達式A - 方法及特殊字符用法
    課程大綱 1.正則表達式的概念及作用 2.正則表達式的創建方法 3.正則表達式的用法 正則表達式概念: 正則表達式是由普通字符及特殊字符組成的對字符串進行過濾的邏輯公式 正則表達式的創建方式: 1.字面量方式創建 (隱式創建): var reg = /正則表達式/gi;
  • Python 正則表達式-函數用法分析
    Python正則表達式的主要作用是檢索、替換符合匹配規則的文本,什麼時候檢索,什麼時候替換,我們根據需求,選擇最合適的函數。【函數一】compile(pattern, flags=0)我們編寫的正則表達式 pattern,指定使用的模式 flags 默認為0 即不使用任何模式【函數二】 purge()這個函數的作用是清除緩存中的正則表達式【函數三】escape(pattern)如果需要操作的文本中含有正則的元字符時,需要將元字符加上反斜扛
  • PHP正則表達式的快速學習方法
    此外,象JavaScript這種客戶端的腳本語言也提供了對正則表達式的支持。由此可見,正則表達式已經超出了某種語言或某個系統的局限,成為人們廣為接受的概念和功能。正則表達式可以讓用戶通過使用一系列的特殊字符構建匹配模式,然後把匹配模式與數據文件、程序輸入以及WEB頁面的表單輸入等目標對象進行比較,根據比較對象中是否包含匹配模式,執行相應的程序。
  • 正則表達式:如何匹配一個或多個字符?
    讀懂正則表達式就這麼簡單匹配純文本Ben是一個正則表達式。因為本身是純文本,所以看起來可能不像是一個正則表達式,但它的確是。正則表達式可以包含純文本(甚至可以只包含純文本)。當然,像這樣使用正則表達式是一種浪費,但把它作為我們學習正則表達式的起點還是很不錯的。
  • Python:正則表達式基本符號總結
    字符串是我們在編程的時候很常用的一種數據類型,檢查會在字符串裡面查找一些內容,對於比較簡單的查找,字符串裡面就有一些內置的方法可以處理,對於比較複雜的字符串查找,或者是有一些內容經常變化的字符串裡面查找,那麼字符串內置的查找方法已經不好使了,滿足不了我們的要求,這個時候就得用正則表達式了,正則表達式就是用來匹配一些比較複雜的字符串。
  • python正則表達式使用方法說明
    曾光紅/文 (同步發布豆瓜網)一、導入re庫python使用正則表達式要導入re庫。import re在re庫中。正則表達式通常被用來檢索查找、替換那些符合某個模式(規則)的文本。二、使用正則表達式步驟1、尋找規律;2、使用正則符號表示規律;3、提取信息,如果每一個字符都能匹配,則匹配成功;一旦有匹配不成功的字符則匹配失敗。
  • 學習Python正則表達式
    Python中的正則表達式(re)就可以解決這個問題!正則表達式正則表達式是一個具有特殊字符的序列。它有助於檢查字符串中的每個字符,看它是否與某個模式匹配:哪些字符在什麼位置出現了多少次。正則表達式還有其他可以實現的功能嗎?』位置當然,在開始的時候,我們提到的RE也可以檢測到位置。因此,如果客戶在句子的開頭寫上電話號碼,你可以這樣做:text = '111-1234567! That is my number! The other one is 7654321!'
  • 正則表達式在線檢測工具推薦
    正則表達式(Regular Expression)在web開發中的應用非常廣泛,很多時候使用它會給開發帶來極大的便利。但是,正則表達式的編寫和使用是個比較複雜的過程。很多時候,即使將表達式寫出來了,也不能保證正確。那麼,有沒有便捷的檢測方法呢?——有。
  • 精通正則表達式的 12 個有用資源
    而正則表達式用來處理這樣的任務可以說是輕而易舉,而且代碼量很少。另外一方面,正則表達式被認為是非常難學的(@紅薯 深以為然),但其實不盡然。這裡有 12 個很棒的資源可以讓你學習並精通正則表達式。RegExplained 是一個很簡單的實時的對正則表達式的匹配過程進行解釋的工具。
  • 正則表達式 – 匹配規則
    正則表達式 - 匹配規則基本模式匹配一切從最基本的開始。模式,是正規表達式最基本的元素,它們是一組描述字符串特徵的字符。模式可以很簡單,由普通的字符串組成,也可以非常複雜,往往用特殊的字符表示一個範圍內的字符、重複出現,或表示上下文。
  • Python正則表達式由淺入深(二)
    在前兩篇連載文章中,我們學習了re模塊的match()、search()、findall()方法,以及學習了使用正則表達式中常用的元字符、限定符、選擇字符、中括號來搭配這些方法來靈活處理常見的數據匹配問題。這本篇文章分鐘,我們將會進一步學習正則表達式中其他符合,包括令初學者非常頭疼的分組問題。
  • 正則表達式和 CPU 100%有什麼故事?
    沒關係,我們一點點從正則表達式的原理開始講起。正則表達式引擎正則表達式是一個很方便的匹配符號,但要實現這麼複雜,功能如此強大的匹配語法,就必須要有一套算法來實現,而實現這套算法的東西就叫做正則表達式引擎。
  • Python正則表達式:特殊符號和字符
    正表達式為高級的文本模式匹配,抽取,與/或文本形式的搜索和替換功能提供了基礎。簡而言之,正則表達式(簡稱regex)是由一些字符和特殊符號組成的字符串,它描述了模式的重複或者表達多個字符。python通過標準庫中的re模塊來支持正則表達式。