陳肖宇,王偉
(1.北京航空航天大學數學科學學院,北京 100191;2.數學、信息與行為教育部重點實驗室(北京航空航天大學),北京 100191;3.北京航空航天大學大數據科學與腦機智能高精尖創新中心,北京 100191)
數學是自然科學的基礎,廣泛應用于科學、技術、工程等各個領域。以數學知識為核心的科學、技術、工程、數學(Science,Technology,Engineering,Mathematics,STEM)文檔規模已十分巨大并仍在快速增長。如何使機器對這類文檔進行自動分析和處理,以充分高效地利用其中所蘊含的數學知識,對知識傳播和科技發展都是一個具有研究價值的課題[1-2]。STEM 文檔區別于普通文檔的關鍵之處在于其包含大量的數學文本,即由數學術語、抽象的數學符號以及結構復雜的數學表達式混合組成的文本[3-4],這為文本理解和應用提出了新的挑戰,例如:數學文本搜索、數學文本糾錯、表現型到可計算型的數學文本自動轉換、數學知識發現等任務的實現[5-6]都需要計算機能夠理解和處理數學內容,而其中一個基本且關鍵的問題是如何抽取數學文本的語義。
數學文本語義抽取的主要目標是獲得文本中抽象的數學符號及表達式所蘊藏的含義,使抽象的形式具體化,從而達到機器理解的目的。Quoc 等[7]提出基于規則匹配的概念-描述-公式(Concept-Description-Formula,CDF)方法,針對Wikipedia 文本中的數學表達式,抽取其在文中相應的文字描述作為其語義,該方法首先利用OpenNLP(Open Natural Language Processing)對數學文本進行解析,然后基于Be-Comp 規則提取語義三元組(C,D,F),最后通過文本匹配的方式校驗其正確性。Kristianto 等[8]將表達式在文中的文字描述抽取看作是一個二分類問題:首先將每個數學表達式與其文字描述候選項配對(稱為候選對);然后提取候選對的特征并利用支持向量機對數據集進行學習,判斷配對是否正確。另一方面,Pagel 等[9]主要研究數學表達式中標識符的語義抽取問題,首先獲得數學文本的MathML 格式,通過MathML 中的<mi>標簽判定數學符號是否為標識符;然后利用標識符和文字描述之間的位置信息對候選文字描述的概率分布進行建模;接著對候選文字描述進行打分,分數最高的則為標識符對應的文字描述即其語義。而Alexeeva 等[10]首先基于Odin Grammer[11]獲取文本中的孤立標識符及其相應的文字描述,然后利用這些標識符對數學表達式進行分詞,進而將表達式中的標識符關聯到相應的文字描述。
目前語義抽取的研究對象都是開放領域的數學文本[12-13],所獲得的語義只針對數學標識符或者數學表達式[14-16]中的一種,語義信息并不充分。本文將研究對象限定在具體領域的數學文本,提出一套領域相關的數學符號及表達式語義抽取的系統化方法,首先建立領域概念的層次結構并將文本中以表達式形式出現的實體鏈接到某個細分概念上作為其語義;然后根據上下文提取文本中抽象數學符號指代的實體進而獲得其語義;最后,從表達式的內部結構出發,根據已獲得的數學符號語義,遞歸地獲取整個數學表達式的語義。以線性代數文本作為研究實例,得到了更為豐富和精確的語義信息,輔助領域相關文本從人類可讀的形式轉化為機器可理解、可計算的形式。
為了明確描述本文的研究問題,下面列出本文所使用的一些相關概念的含義。
1)數學標識符:數學表達式的基本組成部分,主要包括一個字母符號或者帶有一個或多個上下標的字母符號,例如:A、α1或α。
2)實體:最初源于哲學,指客觀存在并且可以相互區分的事物。本文所指實體是以數學表達式形式出現的抽象領域概念的具體實例。例如在線性代數領域,是抽象概念“矩陣”的一個具體實例,在本文中稱為線性代數領域的一個實體。
3)語義抽取:對事物含義的識別和獲取,而含義通常需要通過概念進行界定和表達。本文所指語義抽取是識別數學文本中數學標識符、實體及表達式對應的領域概念,進而根據概念的定義對文本內容進行操作和處理,以達到文本機器理解的目的。
本文主要研究領域相關數學文本中數學標識符、實體及表達式的語義抽取問題。相較于普通文本,數學文本包含大量抽象的數學符號及結構復雜的數學表達式。相同的數學符號通常具有多重語義(如“0”可以表示數字零,也可以表示零向量或零矩陣;“+”可以表示數之間的加法,也可以表示函數或矩陣之間的加法),并且在文本中經常指代不同的領域實體,因此如何對數學符號進行語義消歧,發現并處理“一詞多義”現象,是語義抽取的一個關鍵問題。另一方面,數學表達式一般由標識符、實體、運算符以及領域專有符號等多種符號混合組成,如何對數學表達式進行分詞,即界定各個符號的邊界,是語義抽取的基本問題。由于運算符和領域專有符號的語義可以通過領域本身或者標識符和實體的語義確定,因此本文主要研究標識符和實體的語義抽取問題。
本章重點闡述領域相關數學文本的語義抽取方法。首先從總體上介紹方法的框架,提出語義抽取的基本任務,并給出數學表達式分詞任務的算法設計;然后描述方法核心模塊的實現,包括數學實體、標識符及表達式的語義抽取流程;最后,給出用于存儲語義抽取結果的語義表的設計方法。
數學文本的編碼格式主要包括以LaTeX 為代表的基于命令的排版格式和以MathML 為代表的基于XML 的標記語言格式。由于不同格式之間可以通過工具相互轉換,并且考慮到LaTeX 相較于標記語言具有更類似于自然語言的結構,更易于利用自然語言處理的相關技術,因此,本文以LaTeX編碼的數學文本作為語義抽取的對象,方法框架如圖1 所示。給定LaTeX 文檔,首先將其切分成以句子為粒度的集合;然后提取其中包含的數學標識符和表達式,對數學表達式進行分詞,得到數學項集合;接下來遍歷數學項集合,分別對其中的實體和標識符進行語義抽取,并將抽取結果記錄在語義表中;最后,將數學表達式解析成二叉樹,利用語義表中的語義信息,遞歸地獲取表達式的語義。

圖1 語義抽取方法框架Fig.1 Framework of semantic extraction method
語義抽取基本任務主要包括段落切分、分句、表達式的提取和分詞。由于LaTeX 格式的數學表達式通常由特殊符號(如“$”“[”“]”等)界定,因此可以定位這些特殊符號以提取文本中的數學表達式。又由于LaTeX 格式的數學表達式具有序列結構,因此可以使用正向最長匹配(Forward Maximum Match,FMM)算法對表達式進行分詞。正向最長匹配算法是基于規則的分詞方法,通過與詞典匹配,在以某個下標為起點遞增查詞的過程中,優先輸出更長的單詞。本文根據LaTeX 語法,使用由正則表達式編寫的規則作為詞典,可以匹配具有相同模式的多個子表達式,而不僅僅匹配具體的某個符號。分詞算法如下:
算法1 數學表達式分詞。
輸入 expression 表達式。
輸出 tokenList 列表。

使用正則表達式對數學表達式進行分詞的方式易于擴展,只需維護規則庫中的規則。當遇到未出現過的符號時,將此符號添加到規則庫中即可達到解耦的效果。
實體是數學表達式的組成部分之一,在領域相關文本中,實體是領域概念具體形式的表達,實體語義抽取的目的是將文本中出現的實體與相應的領域概念關聯,即實體語義鏈接,進而通過領域知識庫獲得其具體的語義。以線性代數領域為例,首先根據領域概念之間的繼承或包含關系,構建領域概念的層次化結構,以獲取精細化的語義信息,如圖2~3 分別表示行列式和矩陣概念的層次結構。

圖2 行列式概念的層次化結構Fig.2 Hierarchical structure of determinant concept
由于數學概念通常具有明確且形式化的定義,因此可以根據概念的定義建立相應的識別算法或規則,用于判斷數學實體歸屬哪個概念。本文首先基于正則表達式從線性代數領域文本中提取矩陣和行列式的實體;然后設計實現了相應的概念識別算法;進而遍歷上文所述的概念層次化結構,將實體映射到更精細化的領域概念上。例如,利用正則表達式“.*egin{[pbv]matrix}.*end{[pbv]matrix}”從文本中提取實體,然后通過概念識別算法分析實體結構特征,將其關聯到“單位陣”這個概念上。

圖3 矩陣概念的層次化結構Fig.3 Hierarchical structure of matrix concept
標識符語義抽取是數學文本語義抽取任務中最關鍵的部分,也是數學表達式語義抽取的必要前提。相較于實體,標識符具有完全抽象性,因而無法像實體那樣通過對其自身結構特征的分析和處理將其關聯到相應的領域概念上。在數學文本中,通常會明確地指明所使用標識符的具體含義。因此,可以對標識符的上下文進行分析以來獲取相應語義,即將標識符鏈接到其指代對象所屬的領域概念上。具體而言,標識符的語義抽取過程主要包括如下兩部分。
2.4.1 標識符的指代提取
標識符的含義在數學文本中主要以兩種方式指明:實體指代和文字描述。實體指代是通過等號將以數學表達式形式存在的實體與標識符之間建立解釋說明關系。例如:對而言,實體即為標識符A的具體含義。而文字描述則是通過自然語言的形式對標識符的含義進行說明,如在語句“B是一個n階方陣”中,“n階方陣”即是對標識符B的含義說明。因此,標識符指代提取的主要目的是從文本中獲取標識符所指代的實體或者其含義的文字描述。對于前者,可以通過解析數學表達式得到以等號為中心的左右兩部分,再進一步判斷即可準確提取標識符所指代的實體;對于后者,盡管以自然語言形式存在,但數學文本的表達通常遵循相對固定的語法結構,因此可以使用模式匹配的方法,從語句中獲取標識符含義的文字描述(見算法2)。
算法2 標識符文字描述的提取。
輸入 expression 表達式,sentence 語句。
輸出 TextDesc 標識符的文字描述。

算法2 中patternSet 是從領域文本的多種語句形式中總結提煉出的模板集合。目前該集合共包含5 個模板(如表1所示),其中:TextDesc 表示所要提取的文字描述;<ID>是占位符,表示語句中出現的標識符;字母a 表示語句中其他表達式。

表1 語句模板列表Tab.1 List of sentence templates
2.4.2 標識符語義鏈接
在數學文本中,標識符往往會多次重復使用,相同的標識符在不同的語句中可能具有相同或不同的含義。為了有效地管理和記錄這些復用標識符的指代信息,實現標識符的精準語義鏈接,本文設計一種基于哈希表的存儲結構,并通過對標識符的上下文分析,實現其指代信息的動態更新。
1)標識符的指代存儲。
在對標識符進行語義抽取的過程中,使用哈希表實時存儲標識符的指代信息,將標識符作為鍵,相應的指代信息作為值。同一個標識符在不同語句中的含義可能不同,將標識符的指代信息未發生改變的語句所確定的文本范圍稱為標識符的作用域。為了區分標識符作用域的類型,引入局部哈希表和全局哈希表。局部哈希表中標識符的作用域是部分文本,當某個標識符的指代信息發生改變時,新的指代信息將替換原有值,從而達到實時處理的目的。而全局哈希表中標識符的作用域則是整個文本。由于這種鍵-值存儲和處理形式類似于字典,為了敘述方便,將局部哈希表和全局哈希表分別稱為局部字典(localDict)和全局字典(globalDict)。根據標識符指代信息的不同形式,局部字典又可分為實體指代字典(refEntityDict)和文字描述字典(textDescDict)。
為了界定標識符的作用域并解決這兩類字典的更新問題,采取以段落為單位分而治之的方法。根據段落在文本中的不同角色,將段落劃分為DefineClass、MulPropertyClass、GeneralClass 以及OtherClass 四個類別,其中:DefineClass 是文本中的定義段落,主要對領域概念和術語的內涵進行解釋;MulPropertyClass 是多性質段落,在文本中往往以多條性質、規律、公式等的組合形式出現;GeneralClass 是一般段落,可以用來敘述一個例題、定理、證明或推論等;以上三種類型之外的所有段落歸為OtherClass。由于各個類別段落的文本具有比較明顯的特征,因此可以利用關鍵字匹配的方式對給定數學文本中的所有段落進行分類。針對不同類別的段落,用于存儲標識符指代信息的字典更新策略如圖4 所示。

圖4 標識符的指代存儲Fig.4 Mention storage of identifier
2)標識符的語義鏈接。
基于所構建的局部和全局字典,可以將標識符鏈接到領域概念上。首先將段落拆分成語句列表,遍歷此列表,將每個語句中的數學表達式進行分詞獲得數學項集合,其中的元素稱為數學項,然后按照實體指代字典>文字描述字典>全局字典的優先級順序(如圖5 所示),將每個數學項與字典中的標識符匹配,得到相應的值,如果是數學實體,則利用實體語義鏈接獲取標識符對應的領域概念;如果是文字描述,則可直接獲取相應的領域概念,最終將語義鏈接結果保存到2.6 節所述的語義表中。

圖5 標識符語義鏈接流程Fig.5 Semantic linking procedure of identifier
表達式的語義主要依賴于其所包含的符號語義,即當一個表達式中所有符號語義明確之后,整個表達式語義也將唯一確定。由于LaTeX 格式的數學表達式序列字符串形式,需要將其轉化為樹結構以便將符號語義組合成表達式語義。表達式樹中的葉子節點為標識符或其他符號對象,非葉子節點為運算符,由于常見的運算符都是一元或二元運算符,因此表達式樹一般表示為二叉樹。數學表達式的序列表示形式包括前綴表達式、中綴表達式和后綴表達式。日常使用的數學表達式多為中綴表達,而后綴表達更易于計算機處理,因此先將中綴形式的表達式轉成后綴表達式,再將其解析成表達式樹(如圖6 所示)。基于表達式樹的結構,從葉子節點的語義信息出發,遞歸地獲取每個子樹的語義,進而得到整個表達式的語義信息(見算法3)。

圖6 中綴表達式轉化為表達式樹Fig.6 Conversion from infix expression to expression tree
算法3 表達式語義抽取。
輸入 exprTree表達式樹;semanticDict標識符語義字典。
輸出 exprTreeSemantic 表達式樹的語義。

為了敘述方便,將數學文本中包含的標識符、實體和表達統稱為抽取對象。為了存儲所抽取的語義信息,并且實現語義信息與抽取對象之間的反向關聯,本文設計了一種七元組的語義表結構(如表2 所示)。

表2 語義表(部分)Tab.2 List of semantics(Part)
表2 中:第1 列存儲抽取對象的指代信息,即實體指代或文字描述;第2 列存儲由指代信息進一步得到的領域概念;第3 列存儲所處的段落序數;第4 列存儲在當前段落中的語句序數;第5 列存儲在當前語句中的表達式序數;第6 列和第7 列存儲在當前表達式的起始和結束位置。后五列存儲抽取對象在文本中的位置。這種定位方式不僅可以將語義信息獨立于文本之外,不影響文本的結構,而且文本內容的增刪改操作也不影響語義信息被準確地定位到抽取對象上。
本文的實驗數據來自2016 年由北京航空航天大學出版社出版的《線性代數(第3 版)》[17]。首先將文本掃描成圖片格式,然后使用數學文本識別工具Mathpix 將包含數學文本的圖片轉化成LaTeX 格式,并通過手工校對的方式來獲得高質量的數學文本數據。選取6 節有代表性的文本作為實驗數據,表3 統計了其中包含的所有實體、標識符以及表達式的數量。

表3 實驗數據統計Tab.3 Experimental data statistics
文本中一些標識符的含義屬于線性代數領域之外的一般領域,例如,在文本“如果行列式某一行(列)元素有公因數k,則k可以提到行列式符號外邊”中,標識符“k”所指代的對象是一個公因數,屬于線性代數領域之外的概念。另外,一些表達式如A=,或m=n的含義是實體指代或兩個數相等,也屬于線性代數領域之外的概念。為了更有針對性地評價所提出的領域相關數學文本語義抽取方法,只保留表3 中具有線性代數領域語義的抽取對象,并按照如下語義標注原則構建了評價數據集(如表4 所示)。

表4 評價數據集Tab.4 Evaluation dataset
1)對于標識符,標注的語義是可以從文本中的文字描述或實體指代明確獲得的領域概念,不包括從標識符所在的表達式中推斷出此標識符的語義信息。例如對于文本“已知,求滿足條件FX=XF(稱F與X相乘可換)的矩陣X”,X的語義標注是“矩陣”而非“2 階方陣”。
2)對于實體,標注的語義是基于實體本身的形式獲取的所屬領域概念。
3)對于表達式,標注的語義是基于標識符和實體的語義標注,通過表達式中的運算關系推導出的整個表達式所屬的領域概念。
為了全面地評價語義抽取結果,本文使用了以下兩個標準:strict matching 和soft matching。對于一個抽取對象,按照strict matching 標準,所識別出的領域概念必須精確地和標注的語義相同才認為是抽取正確;而按照soft matching 標準,所識別出的領域概念只需包含所標注的語義就認為是抽取正確。例如,對于文本“B是一個n階方陣,E是n階單位陣,稱f(B)=amBm+am-1Bm-1+… +a1B+a0E為方陣B的多項式”,按照strict matching 標準,需要識別出表達式中的B指代的對象是一個“n階方陣”才被認為抽取正確;而按照soft matching 標準,識別出B指代的對象是一個“方陣”即被認為抽取正確。對于這兩個標準,分別使用如下三種指標來評價抽取結果:
1)精確率P。是指抽取結果中抽取正確的對象占抽取結果中所有對象的比率,用于衡量抽取的準確程度。
2)召回率R。是指抽取結果中抽取正確的對象占評價數據集中所有抽取對象的比率,用于衡量抽取結果的全面性。
3)F1。通過計算精確率和召回率的調和平均來綜合評價抽取結果。
按照strict matching 和soft matching 兩個標準分別使用上述三個評價指標對抽取結果進行評價,如表5 所示。

表5 語義抽取結果評價Tab.5 Evaluation of semantic extraction results
從表5 可以看出,所提出的基于規則的語義抽取方法在兩種標準下都取得了較高的精確率和召回率。但由于文本中少量標識符的作用域超出所設定的段落范圍,其指代信息無法被獲取,導致抽取結果無法完全覆蓋標注數據集中的標注對象,因而召回率相對偏低。例如:對兩個相鄰的段落文本“設H=(aij)m×k,K=(bij)k×s,M=(cij)s×n,容易看出,(HK)M與H(KM)都是m×n階矩陣,因此只需證明①中等式兩端的對應元素相等即可”和“由矩陣乘法的定義可知,……上式右端正好是矩陣H(KM)中第i行、第j列的元素……”,前一段落屬于OtherClass 類,后一段落所屬GeneralClass 類,當獲取前一段落中標識符H、K、M實體指代分別為(aij)m×k、(bij)k×s、(cij)s×n后,再對后一段落的表達式H(KM)中標識符H、K、M進行語義抽取時,由于后一段落無法繼承上一段落的標識符指代信息,因而無法正確地抽取出后一段落中標識符H、K、M的語義信息;對表達式而言,由于其語義受標識符語義信息的影響,無法正確獲取表達式H(KM)的語義。
對實體而言,其語義抽取結果主要受實體本身特征是否清晰、明確等因素影響。例如,由于實體的特征不夠明確,因而實體識別算法的結果為“行列式”,而人工標注結果為“2n階行列式”,影響了實體語義抽取在strict matching 標準下的精確率。
使用Python 實現了所提出的語義抽取方法,輸入LaTeX格式的數學文本,輸出用于記錄所有抽取對象語義信息的語義表。為了呈現語義抽取結果,進一步實現了一個轉換程序,能夠將輸入的LaTeX 格式數學文本自動轉化為富語義信息的HTML 格式文檔,并在瀏覽器中交互式地展示文本的語義信息,即當鼠標停留在實體、標識符或表達式上時,自動彈出相應文本的語義信息(如圖7 所示),幫助閱讀者更方便地理解數學文本內容。這種將靜態的機器可讀數學文本自動轉化成動態的人可理解文檔的方式可以進一步應用于數學相關的出版、教育等領域。實現方法是在服務器端使用Java結合Servlet 處理數學文本及其語義表,前端使用Javascript 和JQuery 完成實時交互,并利用MathJax 實現數學表達式的網頁端展示。

圖7 線性代數用戶界面Fig.7 Linear algebra user interface
本文針對領域相關的數學文本提出了一套基于規則的語義抽取方法,自動識別實體、標識符和表達式三類文本所屬的領域概念。由于目前缺少相關的標注和評價數據集,本文以線性代數領域為例,將線性代數教科書文本作為研究實例,實驗結果表明該方法具有較高的精確率和召回率。該方法還具有可解釋性和可擴展性,當應用于其他領域時,只需替換方法中所使用的規則即可。另外,本文展示了一種動態呈現數學文本語義信息的方式,自動生成富語義信息的數學文本用戶界面。
數學文本的語義抽取是數學文本機器理解和處理的必要前提,接下來將進一步優化標識符的上下文分析方法和流程,提高語義抽取的召回率和精確率,并研究利用所抽取的語義信息賦能下游任務的實現,例如,將LaTeX 等布局型數學文本同義轉換成計算機代數系統可以處理的格式,實現文本的自動計算和糾錯。