- 単純な文字認識のレベルを超え、文書全体をMarkdown構造に変換する高性能な画像-to-Markdown OCRモデル
- 数式はLaTeX形式に変換し、画像には自動説明を追加、表はHTML/Markdown表として出力して、LLM活用に最適化された出力を生成
- 署名、ウォーターマーク、チェックボックスなどを認識し、
<signature>, <watermark>, ☐/☑ 形式に変換するなど、文書要素ごとの処理能力に優れる
- Hugging FaceのTransformersまたはvLLMサーバーを通じて手軽に利用でき、
docextライブラリによりWebアプリ形式でも使用可能
- さまざまな文書タイプと複雑なレイアウトに対して精度と構造化レベルが非常に高く、契約書、フォーム、レポートなどで非常に有用
プロジェクト概要と重要性
- Nanonets-OCR-sは一般的なOCR(光学文字認識)機能を超え、文書の意味と構造を分析して結果をMarkdown形式で出力する革新的なモデル
- 数式、画像、表、チェックボックス、署名、ウォーターマークをそれぞれ区別し、意味のあるタグ付けと表現方式(LaTeX、HTML、Markdownなど)に変換して、downstream作業やLLM(大規模言語モデル)ベースの文書処理に適した形で提供
- 既存のオープンソースOCRプロジェクトと比べて、複雑な文書構造と多様なセマンティック要素の抽出において、より高い性能と自動化ワークフローへの適用可能性を示す
- Qwen2.5-VL-3B-Instructモデルをファインチューニングしたバージョンで、多様な文書構成要素を識別し、意味のあるマークアップでタグ付けする
主な特徴
- LaTeX数式認識
- 文書に含まれる数式や数学公式を、inline(
$...$)またはdisplay($$...$$)の種類に応じて自動的にLaTeX構文へ変換・出力
- インテリジェントな画像説明
- 各画像について、
<img> タグ内に画像の性質、スタイル、内容などを詳細に記述
- ロゴ、チャート、グラフなど多様な画像も文脈や意味とともに説明し、LLM活用に適した入力へ変換
- 署名の検出と分離
- 署名画像をテキストと区別し、別個の
<signature> タグに入れて処理
- 法務・ビジネス文書の自動処理において活用価値が高い
- ウォーターマーク抽出
- 文書に挿入されたウォーターマークのテキストを検出し、
<watermark> タグ内に別途整理
- チェックボックスおよびラジオボタン変換
-
- ☐(未チェック)、☑(チェック済み)、☒(拒否)形式の標準Unicode記号として出力
- アンケート、申請書などフォーム系文書の処理信頼性を向上
- 複雑な表構造の抽出
- 複雑なテーブルもMarkdownおよびHTMLテーブル形式に変換し、高い活用性を提供
主な活用方法
Pythonコード例
- Hugging Faceのtransformersライブラリを活用して手軽にモデルを読み込み、実行可能
- 画像を入力すると、テキスト、表、数式、画像説明、ウォーターマークなどを構造化されたMarkdown形式で結果として提供
- ページ番号やウォーターマークは
, などで区切ってラップ
- チェックボックスはUnicodeシンボル(☐、☑)で出力
vLLMベースの活用
- vLLMサーバーにモデルを登録し、OpenAI互換APIで手軽に接続・活用可能
- 画像入力時に、テキスト、表、数式、ウォーターマークなどを一貫した形式で変換して出力
docextパッケージの活用
docext という別パッケージを通じて、追加のコマンド実行だけで Nanonets-OCR-s を文書構造化にすぐ適用できる
- GitHubドキュメント を参照可能
2件のコメント
Hacker Newsのコメント
私はNanonetsで働いており、3B規模のVLMモデル「Nanonets-OCR-s」を公開できてとても楽しみにしている
このモデルは、文書をクリーンで構造化されたMarkdownへ変換することに最適化された軽量モデル
文書の構造と文脈(テーブル、数式、画像、図表、ウォーターマーク、チェックボックスなど)を学習しているため
主な機能として、LaTeX数式認識(インライン数式とブロック数式を正しく区別して変換)、組み込み画像の説明(imgタグを利用、チャート/ロゴ/図表などに対応)、署名の検出と分離(signatureブロック内に出力)、ウォーターマーク抽出(watermarkタグとして保存)、賢いチェックボックス/ラジオボタン処理(Unicode変換で後処理の信頼性を向上)、複雑なテーブル構造の抽出(複数行/複数列のテーブルもMarkdownとHTMLでうまく出力)がある
実際に試してみたいなら、Huggingface や Docext Colab を参照できる
Docextの正しいリンクは README.md
使用しているLLMで幻覚(hallucination)が起きるのか気になる
画像自体を抽出できるのか、それとも依然として別途抽出工程が必要なのか気になる
レストランのメニュー写真やPDFをJSONスキーマに合わせてパースするのに(おそらく後処理用LLMの助けも借りて)使えるのか、それとも大規模マルチモーダルLLMのほうがこうした用途に向いているのか気になる
Shipibo(ペルーの先住民言語)-スペイン語辞書を英語辞書に翻訳しようとして、いくつものLLMを試したが、2カラムや奇妙な改行、定義内でShipiboとスペイン語が混在していて理解が難しい
しかもスキャン品質も良くない
このモデルを一度試してみるべきだと思う
何十年分ものWordとPowerPointに保存された資料をすべて取り込み、それぞれの要素を別フォーマットで再利用できるよう標準化された形に変換するソリューションをずっと探していた
これはそのシステムを構築するために不可欠な中核ビルディングブロック
今度はアーカイブや履歴機能が必要で、つまり各要素を簡単にアーカイブして呼び出せるようになるとよい
本当に素晴らしい仕事
こうしたモデルがMarkdownだけを目標にしているのが残念
実際にはMarkdownにはさまざまなバージョンがあり、脚注や参考文献、図版などのサポートが不足している
もっと構造的で明確な仕様を持つフォーマットが必要
実際には、私たちはMarkdownに変換しながら同時にセマンティックタグ付けも学習させている
たとえば式はLaTeXとして抽出し、画像(図表、挿絵など)はimgタグで詳細に記述する
署名(signature)、ウォーターマーク(watermark)、ページ番号などにもタグを使う
複雑なテーブル(複数行/複数列)はMarkdownではなくHTMLテーブルとして出力する
「構造化Markdown」という概念自体にはLLM OCRモデルそのもの以上に期待していたが、結局は特定要素にタグ付けする程度で、モデル外での活用度はやや限定的だと感じる
docling(https://github.com/docling-project/docling) と比べて、どんな長所短所があるのか気になる
Datalab/Marker(https://github.com/datalab-to/marker) とどう違うのか気になる
多くのPDF->MD変換器を比較したが、今のところMarkerが最も良かったものの完璧ではない
個人的な経験では、複雑な数式とコードが混在した論文の変換にはMarkerがかなり向いている
たとえばFortranの逆ラプラス変換に関する論文で、数式(インライン/ディスプレイ混在)とモノスペースのコードブロックが入り交じったページをMarkerで処理すると、インラインの $\sigma_0$ が "<sup>s</sup> 0" に、$f(t)$ が "<i>f~</i>~t*!" のように壊れてしまう
このモデルは、そのような箇所を正確にネイティブ出力できるのが強み
参考スクリーンショット(https://imgur.com/a/Q7UYIfW)
自分でも横断比較を始めたばかりなので、候補リストを教えてもらえたら本当にありがたいという依頼
自分でPowerShellでこのモデルを任意のPDFに適用するスクリプトを作った
実際に試したところ、GPU(1080 8GB)が古いため実行速度はかなり遅く(1ページあたり少なくとも5分以上)
もしCloud Run(外部GPU対応)で動くPDF to markdown変換ユーティリティを試してみたいなら知らせてほしいという意見
完成したらリンクも共有する予定
たった今Cloud Runで動かしてサンプル結果を報告した
animate.pdf の一部結果を見ると、タイトル、著者、出版社、白黒イラスト(imgタグで説明)、Googleデジタイズタグがうまく抽出されている
目次もテーブル形式で完璧に取り出されている
速度が遅い点を除けば、機能と精度には非常に満足している
Cloud Runを使ったPDF to markdownサービスにとても興味がある
複数列または複数行テーブルを含む文書(例: このPDF の1ページ目のrowspan、29ページ目のcolspanなど)をどう処理するのか気になる
英語以外のテキスト認識性能がどうなのか気になる
従来のLLMベースOCRは、そうした外国語対応性能が伝統的OCRよりかなり劣ると理解している
私の経験では、画像に対してGoogle翻訳とChatGPTを直接使う場合、ChatGPTのほうが常に優れている
特に日本語の手書きメニューでも、翻訳や説明までしっかりやってくれる
多言語対応への言及がないモデルは、実際には英語以外のPDFで性能が大きく落ちる
さらにベースモデル(Qwen-2.5-VL-3B)は多言語対応
Redditでは中国語でもうまく動くという投稿を見たことがある(リンク)
韓国語のカード領収書サンプルを処理してみたが、速度は遅いものの、かなり完璧に読み取れている。