有沒有遇過想打開文獻 PDF 想進行複製卻複製出很奇怪的格式的時候? 比較喜歡 Markdown、LaTex 不喜歡 PDF? 那你或許會喜歡 Meta 新開源的工具:Nougat PS. 這篇不會介紹背後技術,僅嘗試安裝與嘗試的過程
個人對看 Paper 用 PDF 其實又愛又恨。愛在方便不同裝置閱讀,尤其可以在 iPad 上做筆記。但是對於一些格式真是很討厭,例如文字排版複製下來會亂掉(雖然本來就不能亂複製,但我節錄做統整筆記的習慣就很不方便),還有 Table 只能用截圖、數學公式不好複製等等。所以我個人其實比較喜歡 Markdown 或 LaTex 這種格式,我還能自己編輯、補充東西上去給自己看。於是看到 Meta 開源一個新工具「Nougat」就很想試試看。另外想說既然開部落格了,順便以後就也記錄一下嘗試新東西的過程,也能當踩坑紀錄(?)
需要的先備知識
這篇文章不偏向完全初學者,有些基礎東西要先知道,例如 Python 虛擬環境、VS Code、怎麼安裝 Pytorch、CUDA、知道 Hugging Face 的 Transformers、知道 ORC 等等的。
安裝環境與坑的建議
先說我的環境給大家參考:
OS: Window 10
RAM: 64GB, 3200 MHz
CPU: 11th Gen Intel(R) Core(TM) i9-11900H @ 2.50GHz
GPU: NVIDIA GeForce RTX 3080 Laptop GPU
Virtual Python Environment: 3.9
CUDA: 11.8
Pytorch: Stable (2.0.1)
這次沒有用 WSL,是直接弄在 Windows 上,大家可以根據自己需求安裝。
Nougat 是會用到 GPU 的,在做轉換文件的時候比較快,但是也可以用 CPU 來跑,這邊是直接用 GPU 了,所以沒有比較到兩者的速度(不專業紀錄者x)。
根據 Nougat 的 Github 是要 Python 3.9 以上,為了避免各種套件版本問題,我就開了個現在很多套件都支援的 3.9 的虛擬 Python 環境來用。
坑來了:
在安裝的時候一開始直接按照指示 pip install nougat-ocr
了,過程中也會幫你裝 pytorch、hugging face 相關的東西,畢竟這個工具是 ORC 應用(看名字就知道)。
但是直接測試的時候發現又找不到 GPU 用了 🙂
所以這邊建議先自己安裝 Pytorch,再回來安裝 nougat
。至於怎麼安裝 Pytorch 就看各位環境然後跟著官方教學做了,至少個人覺得比 Tensorflow GPU 好裝多了。
其他還有一些坑是裝 Hungging Face 的 Transformers 的,但還算小事,基本上報什麼 Error,就補裝什麼指定版本套件就好。
裝好 Pytorch 記得先測試能不能抓到 GPU:
import torch
torch.cuda.is_available()
如果有 True
就行了。
PDF 轉換與過程
基本上裝好後就按照官方指令:
nougat "pdf檔路徑.pdf" --out "輸出的資料夾路徑"
如果沒有指定 --out
,到時會告訴你他把檔案存到哪裡去。
其他參數:
usage: nougat [-h] [--batchsize BATCHSIZE] [--checkpoint CHECKPOINT] [--out OUT] pdf [pdf ...]
positional arguments:
pdf PDF(s) to process.
optional arguments:
-h, --help show this help message and exit
--batchsize BATCHSIZE, -b BATCHSIZE
Batch size to use. Defaults to 6 which runs on 24GB VRAM.
--checkpoint CHECKPOINT, -c CHECKPOINT
Path to checkpoint directory
--out OUT, -o OUT Output directory.
開始轉換會用到一點點 GPU 而已,測試了幾篇不同文章,大多是這個使用率:
用 GPU 的話時間不會太長,一分鐘不到,但我只是轉換過頂多 20 幾頁的 Paper,不確定長篇文的情況。
轉好就會有一個同名只是副檔名為 .mmd
的檔案出現在輸出的資料夾了~
另外如果資料夾下發現已經有轉換後的 .mmd
就會 Skip 不做轉換。
轉 PDF 變 Mathpix Markdown 的閱讀
Nougat 標榜的幾個特點就是能把學術文章轉成 Markdown,其中數學公式 LaTex 跟 Table 也可以一併很好的轉換,所以他其實不是單純的 Markdown( .md
),轉變完的檔案副檔名是 .mmd
才對。
所以如果把轉完的檔案貼到 Notion 之類本來可以看 Markdown 的地方,其實還不能完美呈現結果。官方其實就有寫「In the output directory every PDF will be saved as a .mmd
file, the lightweight markup language, mostly compatible with Mathpix Markdown (we make use of the LaTeX tables).」
這裡看各位需求,我是裝了 VS Code plugin 的:
給大家看幾個效果,以下圖片左邊都是 .mmd
原始檔案的樣子,右邊是用 Mathpix Markdown VS Code Plugin 做 Preview 轉換後的樣子:
- 帶有行內數學式子的時候
- 數學式子 Block
- Table
缺點
其實效果還蠻好的,整體排版也都在,但是有個大缺點是圖片會不見。
另外如果碰到文章內有內容會跟語法衝突的標記(例如說 dataset 裡面的 label 怎麼做標記之類的),那就會影響內容呈現。
後記
Nougat 另外也有提供 API 版,如果想透過 API 調用模型就要 pip install "nougat-ocr[api]"
。這部分我還沒做嘗試,需要的請看他們 Github。
還有生成 Dataset 的部分是需要 pip install "nougat-ocr[dataset]"
也還沒做嘗試。
以後有空再來玩玩剩下的。
如果以上內容有錯,歡迎在下方留言反饋給我,也歡迎大家留下自己嘗試後的體驗心得~