第二十五周學習筆記

2021-09-10 04:38:19 字數 2424 閱讀 7782

本次實驗使用的是github上別人公開的**並參考了及其配套博文

為了構建截圖生成latex**的模型,首先需要準備資料,資料是**於arxiv.org上的**中公式latex原始碼和pdf截圖對(資料集),分為訓練集76053對-latex原始碼對和測試集9447對,一對示例資料如下

本文需要解決的問題是從數學公式截圖逆向生成latex原始碼的任務,需要構建乙個以截屏為輸入,latex**為輸出的模型。

思路1,ocr+編譯

解決數學公式截圖到生成latex原始碼的乙個最樸素的思想是將整個過程分為以下兩大步軸:

通過光學字元識別(ocr)得到中的字元

根據字元間的位置關係,編譯為latex原始碼 優點

兩個分步符合邏輯,簡單明瞭,依託於現有的技術,ocr容易實現

缺點當前ocr技術包多為各國語言的單個或混合封裝模組,沒有數學符號的模組,需要自行建立資料集訓練

由字元位置關係重構latex原始碼的編譯器需要大量的規則,編譯器的編碼難度預估與重寫latex編譯器的難度相當

思路2,深度神經網路端到端模型

所謂端到端模型,就是利用神經網路靈活的輸入輸出模式,設計乙個網路架構,使得原始輸入到神經網路中後,直接可以產出latex原始碼,從而省略複雜的影象預處理和特徵工程等工作,這些步驟將由網路自行學習完成,在大規模的訓練集訓練中,神經網路將有可能學習到截圖到**的直接對映。

優點乙個模型一步到位,無需在各個模組步驟中協調

缺點最終我們選擇深度神經網路端到端模型,啟發於機器翻譯的端到端模型,我們的模型也由乙個encoder和乙個decoder組成,二者都是神經網路,其中,encoder負責提取中的資訊並編碼為向量,decoder負責從該向量中解碼得到latex**,與機器翻譯中使用編碼和解碼文字的lstm作為encoder和decoder不同,我們需要能夠編碼的神經網路,即卷積神經網路

encoder

我們需要從中抓取重要特徵,因此我們使用在影象上表現突出的卷積神經網路(cnn)作為encoder,接受影象作為輸入,將影象轉化為低維的特徵向量。

decoder

得到低維的影象特徵表達後,即可使用decoder將之解碼得到latex原始碼,由於傳統的文字端到端模型中,decoder中的lstm初始隱變數為encoder中lstm的最後乙個隱變數,但因為encoder不再是乙個lstm網路,而是乙個卷積神經網路,因此,採取設定引數令神經網路自行擬合矩陣w和向量b來學習第乙個隱藏單元

損失函式

使用生成序列和目標序列的交叉熵作為損失函式(加上交叉熵公式)

模型總共迭代***,每輪訓練結束後會在測試集上執行當前模型,模型在訓練集和測試集的表現分別如下

訓練集表現

測試集表現

手動選擇一些測試集中的資料來測試模型的效果,選取了三個示例如下

輸入:輸出公式:

\alpha _ ^ \gamma _ + \ldots + \alpha _ ^ \gamma _ = 0 \quad ( r = 1 , . . . , r ) ; ,

輸入:輸出公式:

p _ ^ = \int \beta d \beta d ^ p d ^ \lambda \phi ( - p , - \lambda ) \left( - p ^ } } \right) \phi ( p , \lambda ) , .

輸入:輸出公式:

z = \sum _ w ( a | e , f , g | b , c , d | h ) ,

重新使用latex編譯結果為

可見模型對於複雜的公式,具有一定的識別能力

通過本次實驗,我們學習到了神經網路的有關知識,對於分類、聚類、結構化資料生成等人工智慧目標有了更好的了解。

本文構建了數學公式截圖到latex的端到端模型,借助網上的預處理好的訓練集,通過調參訓練,得到了在測試集上也具有一定準確率的模型,模型可以識別各種數學符號,也可以識別複雜數學公式中的各個成分從而實現**重建,雖然仍然存在一些錯誤,但是從實際應用考慮,已經可以作為書寫**的輔助工具,在實際應用中,人們可以先使用模型生成公式,再人工進行微小改動,即可完成公式的書寫,如此可以有效提高寫作的效率。

第二十五天

程序 資源分配的最小單元 程序的組成 程式 資料和程序控制塊 pcb 所有的排程都是提前準備的 程序的經典三態 執行 就緒 等待 父程序的id ppid 啟動程序的使用者id uid 排程演算法 1.先來先服務 2.短程序優先 3.高優先順序優先 4.時間片輪轉法 一般都是用這個 先來先服務演算法的...

第二十五天

學會了final的相關使用方法 明天學習abstract關鍵字 一 final關鍵字 final關鍵字是最終的意思,使用final修飾類,代表該類不能被繼承。final修飾方法表示該方法不能被重寫。final修飾變數,代表該變數是常量 1 final方法 使用final修飾方法時,該方法不能被重寫,...

linuxC學習第二十五天

只說明部分 自動宣告變數,預設時編譯器預設是auto。請求編譯器盡可能的將變數存在cpu的內部暫存器中。通過這種方式可以盡可能的提高效率。要注意的是,內部暫存器有限,不能全部放入暫存器中,因此只是盡可能的存放cpu的內部暫存器中 修飾靜態變數 全域性變數,區域性變數 靜態變數存放在記憶體的資料區 1...