AIニュース最前線
最新ニュースAI日報Hacker日報週報動画AIツールトレンド企業

AIニュース最前線

世界中のAI最新情報を日本語で毎時更新

最新ニュース日報トレンド企業プレミアムRSS
© 2026 ainew.jp特定商取引法に基づく表記
ニュース一覧元記事を開く
MarkTechPost·2026年6月24日 04:35·約16分で読める

Datalab が 9B オープンウェイトビジョンモデル「lift」をリリース:スキーマを用いた PDF から構造化 JSON を抽出

#Vision-Language Model#構造化データ抽出#Open Source AI#Datalab#スキーマ制約付き生成
TL;DR

Datalab が公開した 9B パラメータの「lift」モデルは、JSON スキーマを直接入力として受け取り、PDF や画像から構造化された JSON データを抽出する強力なオープンソースビジョンモデルである。

AI深層分析2026年6月24日 05:02
4
重要/ 5段階
深度40%
5
関連度30%
5
実用性20%
4
革新性10%
4

キーポイント

1

スキーマ制約付きデコーディングの採用

生成プロセス中に JSON スキーマを文法として適用し、トークンレベルで構造と型を強制することで、常に有効な JSON を出力する。

2

高精度な構造化抽出性能

Datalab 独自のベンチマーク(225 ドキュメント)でフィールド精度 90.2% を達成し、同サイズのオープンモデル群で最高水準を記録した。

3

多ページ文書のワンパス処理

単一のリクエストで複数ページのドキュメント全体を読み込み、ページ跨ぎの値も正しく抽出できる設計となっている。

4

スキーマ制限とフォールバック動作

enum や $ref などの一部の JSON Schema 構文はサポートされておらず、コンパイル失敗時には警告をログ出力して制約なしで生成する。このため、呼び出しが成功しても出力が必ずしもスキーマに一致しない可能性がある。

5

デフォルトのAbstention(不在フィールドの扱い)

モデルは存在しないフィールドを推測してハルシネーションするのではなく、文書にない場合は明示的に null を返すように訓練されている。これにより、欠落している値を正しく報告できる抽出器が実現される。

6

ベンチマーク結果と性能特徴

225件のドキュメント(計約1万1000項目)による評価で、9Bパラメータの lift はフィールド精度 90.2% を達成し、API ベースの競合モデルや大規模モデルと比較して高い精度と低レイテンシを両立している。

7

9B モデルの性能と速度バランス

Lift は自己ホスト可能なモデルの中でフィールド精度と速度が最も優れており、Gemini Flash 3.5 と同等の精度を維持しながら約3倍高速です。

影響分析・編集コメントを表示

影響分析

このリリースは、従来の OCR や汎用ビジョンモデルに依存していた文書処理のワークフローを、構造化データ抽出に特化した軽量なオープンソースソリューションへと転換させる重要な一歩です。特にスキーマ制約付きデコーディング技術の実装により、後工程でのバリデーションコストを排除し、信頼性の高い自動化システム構築を容易にします。

編集コメント

「有効性」と「正しさ」の区別を明確に示した点は、実務における期待値管理にとって極めて重要です。このモデルは、信頼性の高いデータ抽出パイプラインを構築するための強力な基盤となるでしょう。

Datalab は、構造化抽出用の 9B パラメータオープンウェイトビジョンモデル「lift」をリリースしました。ユーザーは JSON スキーマ(JSON Schema)を渡すだけで、それに一致する JSON オブジェクトが返されます。このモデルは PDF や画像を直接読み取り、指定されたスキーマに対してデコードを行います。

これは Datalab が抽出専用として完全に構築した最初のモデルです。同チームはすでにオープンソースの OCR ツール「chandra」「marker」「surya」を提供しています。「lift」はこの取り組みを、スキーマ駆動型のフィールド抽出へと拡張するものです。

Datalab の 225 ドキュメントからなるベンチマークにおいて、「lift」はフィールド精度で 90.2% を達成しました。研究チームはこれを、テストした中で最も強力な小規模自己ホスト可能モデルとして報告しています。1 ドキュメントあたりの処理時間は中央値で 9.5 秒です。

Datalab lift とは何か?

lift は、構造化抽出用の 9B パラメータビジョンモデルです。標準的な JSON スキーマ(JSON Schema)を入力として受け付けます。出力としては、その形状に一致する有効な JSON を返します。

このモデルは、単一のパスで複数ページにわたるドキュメントを処理できます。ページを跨いで記述された値も読み取ることが可能です。ドキュメント全体が一度に入力され、ページごとに逐次処理されるわけではありません。

パッケージには 2 つの推論モードが含まれています。ローカル推論は HuggingFace を経由して実行されます。一方、リモート推論は vLLM サーバー(vLLM server)を介して行われ、Datalab は本番環境向けにこちらを推奨しています。

コードは Apache 2.0 ライセンスです。重み(ウェイト)には、改変された OpenRAIL-M ライセンスが適用されています。

lift は、オープンな抽出モデルという小さくも成長中の分野に参入します。一部は NuExtract ファミリーのように目的別に構築されたものもあります。また、Qwen3.5-9B のように、抽出のために転用された汎用的なビジョン・ランゲージモデル(Vision-Language Model)もあります。lift は、ビジョン・ランゲージベースモデルに、スキーマ制約付きのデコーディングと訓練された拒否機能(trained abstention)を組み合わせました。Datalab のベンチマークでは、このオープングループの中でフィールド精度において首位を占めています。

スキーマ制約付きデコーディング:中核となるメカニズム

主な設計上の選択は、スキーマ制約付きデコーディングです。lift は出力を直接あなたのスキーマに対してデコードします。その結果、常に正しい形状の有効な JSON が生成されます。

内部で何が起こっているかを見てみましょう。lift はまず、JSON Schema を Pydantic モデルに変換します。その後、それを厳格な JSON Schema として正規化します。このスキーマは、response_format 制約として vLLM サーバーに渡されます。

生成中、サーバーはそのスキーマを文法(grammar)にコンパイルします。各ステップで、モデルは可能なすべての次のトークンに対して確率を割り当てます。文法がどのトークンが有効な継続かを定義します。スキームを破る可能性のあるトークンはマスク処理され除外されます。モデルは残ったもののみからサンプリングすることができます。

これが、出力が常に正しい形状の有効な JSON となる理由です。構造は後でチェックされるのではなく、トークンごとに強制されています。

この保証には明確な限界があります。制約付きデコーディング(constrained decoding)は構造と型を制御するものであり、意味までは制御しません。number として型付けされたフィールドは数値を受け取りますが、それが正しい数値かどうかは別の問題です。モデルは有効ではあるが単に誤った値を出力することがあります。有効性は正しさを保証するものではありません。

lift はすべてのフィールドを null を許容するように拡張します。コンパイル済みのスキーマ内の各スカラーリーフ(scalar leaf)は、その型または null を受け入れます。これにより、モデルは構造を壊すことなく任意のフィールドで回答を控えることができます。この「回答の控え」は訓練された動作であると同時に、制約による性質でもあります。

標準的な JSON Schema を記述します。サポートされる型には string(文字列)、number(数値)、integer(整数)、boolean(ブール値)が含まれ、これらからなる配列やオブジェクトの配列、ネストされたオブジェクトも可能です。フィールドの説明は、名前が曖昧な場合にモデルをガイドする役割を果たします。

ここには静かな失敗モードが存在します。enum、anyOf/oneOf、$ref、additionalProperties といった一部の構文はコンパイルできません。lift がスキーマのコンパイルに失敗した場合でも処理は停止せず、警告ログを出力して制約なしで生成を行います。その実行では構造保証が失われ、ハードエラーは発生しません。結果として、出力が完全にスキーマと一致しない可能性があります。

実用的なルールは単純です。スキーマはサポートされるサブセット内に保ちます。返された JSON は後段でスキーマに対して検証してください。呼び出しが成功したからといって、有効な出力が得られるとは仮定しないでください。

以下に簡単な請求書スキーマを示します:

json
{
  "type": "object",
  "properties": {
    "invoice_id": {"type": "string"},
    "total_amount": {"type": "number"}
  },
  "required": ["invoice_id", "total_amount"]
}

Copy CodeCopiedUse a different Browser

翻訳全文

デフォルトでの拒否

実際の抽出は、意外な理由により困難です。存在するフィールドを読み取るだけでなく、実際には欠落しているフィールドを創作しないことが真の課題となります。

税番号を誤って生成するモデルは、何も返さないモデルよりも悪いです。このエラーは静かに発生し、後続の処理で検出するのが困難です。lift は、本当に欠落しているフィールドについては明示的に null として出力するように訓練されています。

必須フィールドである場合のみ、そのフィールドを必須とマークしてください。文書に含まれていないフィールドは null として返されます。これにより、値が存在しないことを報告できる抽出器が得られます。

ベンチマーク

Datalab は、225 ドキュメントからなる抽出ベンチマークで lift を評価しました。各ドキュメントは 6 ページから 64 ページまであり、約 11,000 のスコアリング対象フィールドが含まれています。セット全体には敵対的なケースが仕込まれていました。

これらのケースには、ページを跨ぐ値や網羅的なリストが含まれます。また、null として残す必要があるフィールドや、ほぼ一致するが誤りであるダミーデータも含まれています。複数のソースからの集約についてもテストされました。

すべてのモデルは同じレンダリングされたページ画像を受け取りました。各モデルは、一度のパスで文書内のすべての項目を抽出しました。スコアリングは、数値的な許容範囲と正規化された文字列を含む、正解データに対する決定論的な完全一致評価でした。

モデル | サイズ | フィールド精度 | 全文書精度 | メディアンレイテンシ* | 特徴

Datalab API — 95.9% | 44.4% | 30.8s | 引用 + 検証

Gemini Flash 3.5 — 91.3% | 40.0% | 28.1s

lift (9B) | 90.2% | 20.9% | 9.5s

Azure Content Understanding — 83.4% | 22.2% | 73.7s | 引用

NuExtract (34B) | 81.5% | 8.4% | 8.3s

Qwen3.5-9B | 76.32% | 24.0% | 16.8s

*文書あたり、並列リクエスト数 8。ローカルモデル(lift, Qwen3.5-9B, NuExtract)は、単一の GPU で vLLM を使用して提供されました。Gemini、Datalab、Azure は API を経由して実行されました。レイテンシはハードウェアと負荷によって変動するため、相対的な指標として扱ってください。

ここで重要なのは 2 つの点です。フィールド精度とは、個別に抽出されたフィールドのうち正しく抽出されたものの割合を指します。全文書精度とは、すべてのフィールドが正しい文書の割合を指します。

フィールド精度においては、lift が自己ホスト可能なモデルの中で首位に立ちます。これは NuExtract3 や Qwen3.5-9B ベースモデルよりも優れています。また、表内の正確なモデルの中では最も高速です。

メディアン 9.5 秒という速度は、Gemini Flash 3.5 と比較して約 3 倍速いです。フィールド精度においては、そのモデルとほぼ 1 ポイントの差しかありません。全文書精度はより厳しい指標であり、すべてのフィールドが正確でなければなりません。ここで lift は 20.9% を記録し、NuExtract3 のみを上回っています。ホスト型 API が首位を争っており、それぞれ 44.4% と 40.0% です。

これらの数値を読む際の注意。これは Datalab 独自のベンチマークであるため、ベンダーによる結果として捉えてください。その敵対的(adversarial)な設計は、拒否(abstain)するように調整されたモデルに有利に働くものであり、今回の「lift」もその一例です。全ドキュメントの精度はすべてのモデルで低く、最高でも 44.4% に留まります。これは、長文ドキュメントにおける単一パスでの抽出がいかに困難かを反映しています。また、これらの数値は特定の時点のスナップショットに過ぎず、モデルは常に変化します。

これは、難易度の高いドキュメントに対する単一パス・単一モデルによる抽出の現実です。これが「lift」がどこに適合するかを示しています。人間が関与するレビューや集計分析を支援するフィールドレベルでの抽出には極めて優れていますが、まだゼロタッチで全フィールドが完璧であるべき自動化のための即座の置き換え(drop-in)としては不十分です。この最後の 1 マイルのために、Datalab のホスト型 API は、同じアプローチに基づき、フィールドごとの検証、出典(citations)、および信頼度スコアを追加します。

実践者のワークフロー:スキーマからレビュー済みデータへ

3 つのユースケースが作業の形状を示しています。請求書処理では、invoice_number、total、line_items を定義し、税番号(tax_id)が存在しない場合は null を返します。契約レビューでは、2 ページにわたる合意文書の価値を、単一パス抽出でページをまたいで結合します。ドキュメントパイプラインでは、請求処理キューが、期限日が存在しない場合に null を返すことを信頼し、沈黙するエラー(silent errors)を防ぎます。

以下に、エンドツーエンドのワークフローの一例を示します。目標は生のモデル出力ではなく、クリーンでレビュー済みのデータセットです。

  1. スキーマを定義する。名前が自明でないフィールドには説明を追加してください。本当に必須のフィールドのみを required としてマークしてください。

⟦CODE_0⟧

  1. 抽出を実行する。スキーマとファイルを lift に渡します。辞書、ファイルパス、または保存済みのスキーマ名を使用できます。
  1. 結果に基づいて分岐します。呼び出しが失敗した場合や抽出結果が null の場合はレビューへ送ります。必須値が欠落している場合も、null はエラーではなく保留(abstention)を表すため、同様にレビューへ送ります。
  1. 信頼する前に検証してください。返された JSON をスキーマに対してチェックします。これにより、スキーマのコンパイルに失敗した際に発生する沈黙的なフォールバックを検出できます。

Copy CodeCopiedUse a different Browser

from lift import extract

schema = {

"type": "object",

"properties": {

"invoice_number": {"type": "string", "description": "Invoice identifier"},

"total": {"type": "number", "description": "Total amount due"},

"due_date": {"type": "string", "description": "Payment due date, ISO 8601"},

"line_items": {

"type": "array",

"items": {

"type": "object",

"properties": {

"description": {"type": "string"},

"amount": {"type": "number"}

}

}

}

},

"required": ["invoice_number", "total"]

}

result = extract("invoice.pdf", schema)

if result.error or result.extraction is None:

queue_for_review("invoice.pdf", reason="extraction_failed")

else:

data = result.extraction

# A required field can still be null. That is abstention, not a crash.

if data.get("total") is None:

queue_for_review("invoice.pdf", reason="missing_total")

else:

save(data)

実務で役立つスキーマ設計のいくつかのポイント:

曖昧なフィールドには説明を記述してください。これが精度向上のための主要な手段です。

スキーマはサポートされているサブセット内に保ち、後段で出力を検証してください。

フラットで浅いスキーマを好んで使用してください。深いネストは信頼性を持って抽出するのが困難です。

必須フィールドは必要最小限にマークし、真の欠落部分は null を返せるようにしてください。

長い PDF の処理には –page-range(CLI)または page_range(Python)を使用して対象ページを制限してください。

モデル負荷を分散させるため、呼び出し間で 1 つの InferenceManager を再利用してください。

セルフホスト型とホスト型:どちらを使うべきか

lift はオープンウェイトとして提供され、Datalab は同じアプローチに基づくホスト API を運用しています。この選択は権威ではなく制約に関するものです。

ChooseWhen(選択の基準)

セルフホスト型の lift(オープンウェイト)データ主権やオンプレミス規則が適用される場合;高ボリュームでのコスト制御が必要である場合;自社の GPU 上でレイテンシを制御したい場合;オフラインで実行可能である必要がある場合。

ホスト型 Datalab API フィールドごとの検証、出典の提示、信頼度スコアが必要な場合;最高精度を求めている場合;インフラ管理をしたくない場合;ボリュームが低いかバースト性がある場合。

セルフホスティングに関する注意点として、商用利用には改変された OpenRAIL-M 規約に基づくライセンスが必要です。研究、個人利用、および資金調達額または収益が 500 万ドル以下のスタートアップ企業にとっては無料ですが、Datalab の API と競合する用途での使用は禁止されています。

はじめに

最速の導入方法は CLI です。lift-pdf には Python 3.12 以降が必要です。

コードをコピーしました別のブラウザを使用してください

pip install lift-pdf

vLLM でモデルをサーブします(推奨)

lift_vllm

スキーマに対して抽出を実行します

lift_extract input.pdf ./output --schema schema.json

各ファイルから 2 つの出力が生成されます。.json ファイルにはスキーマに一致する抽出結果が格納され、_metadata.json にはデバッグ用のページ数、トークン数、エラー情報が含まれます。

Python API も同様に簡潔です:

コードをコピーしました別のブラウザを使用してください

from lift import extract

スキーマ:辞書、パス、インライン JSON 文字列、またはライブラリ名

result = extract("document.pdf", "schema.json")

if result.extraction is not None:

data = result.extraction # スキーマに一致する辞書

result.extraction を確認して、スキーマに一致する辞書を確認してください。抽出結果が null の場合は失敗を示しており、詳細を検査できます。HuggingFace バックエンドを使用するには –method hf を指定し、pip install lift-pdf[hf] でインストールする必要があります。

Schema Studio は Streamlit アプリとして提供されています。これにより、独自のドキュメントに対してスキーマの作成、保存、テストが可能になります。pip install lift-pdf[app] でインストールし、lift_app を実行してください。

本番環境向けに、lift_vllm は GPU に合わせてバッチサイズをスケーリングした Docker コンテナを起動します。対応する GPU は以下の通りです:h100, a100-80, a100/a100-40, l40s, a10, l4, 4090, 3090, t4。

インタラクティブ解説

主なポイント

lift は Datalab が開発した 9B オープンウェイトのビジョンモデルで、PDF や画像からスキーマに一致する JSON を抽出します。

スキーマ制約付きデコーディングにより有効な構造が保証され、訓練された拒否機能によって欠落しているフィールドを推測(ハルシネーション)するのではなく null を返します。

構造的な保証は形状に関するものであり意味まではカバーしないため、出力の検証と低信頼度のフィールドの確認が必要です。

自己ホスト可能なモデルの中で最も高いフィールド精度(90.2%)を達成し、文書あたりの中央値処理時間は 9.5 秒です。

文書全体の精度は 20.9% で、これはホスト型 API がリードする中で NuExtract3 に次ぐ第 2 位です。

コードライセンスは Apache 2.0 です。モデルウェイトは修正版 OpenRAIL-M(研究・個人利用および資金調達額または収益が 500 万ドル以下のスタートアップに無料)として提供されます。

試すためのリンク:

GitHub · HuggingFace · Playground · Hosted API & docs

注記:本記事の先駆的な知見とリソースを提供してくださった Datalab チームに感謝いたします。Datalab チームは、このコンテンツ/記事のプロモーションを支援しています。

「Datalab Releases lift: A 9B Open-Weights Vision Model That Extracts Structured JSON From PDFs Using Schemas」という投稿は、MarkTechPost で最初に公開されました。

原文を表示

Datalab has released lift, a 9B open-weights vision model for structured extraction. You pass it a JSON schema, and it returns a JSON object that matches. The model reads PDFs and images directly, then decodes against your schema.

This is Datalab’s first model built purely for extraction. The team already ships open-source OCR tools: chandra, marker, and surya. lift extends that work into schema-driven field extraction.

lift scores 90.2% field accuracy on Datalab’s 225-document benchmark. The research team reports it as the strongest small self-hostable model they tested. It runs at a median of 9.5 seconds per document.

What is Datalab lift?

lift is a 9B-parameter vision model for structured extraction. It accepts standard JSON Schema as input. It returns valid JSON of that shape as output.

The model handles multi-page documents in a single pass. It can read values that span across pages. Whole documents go in at once, not page by page.

Two inference modes ship with the package. Local inference runs through HuggingFace. Remote inference runs through a vLLM server, which Datalab recommends for production.

The code is Apache 2.0. The weights use a modified OpenRAIL-M license.

lift enters a small but growing field of open extraction models. Some are purpose-built, like the NuExtract family. Others are general vision-language models pressed into extraction, like Qwen3.5-9B. It pairs a vision-language base with schema-constrained decoding and trained abstention. On Datalab’s benchmark, it leads that open group on field accuracy.

Schema-Constrained Decoding: The Core Mechanism

The main design choice is schema-constrained decoding. lift decodes its output directly against your schema. The result is always valid JSON of the correct shape.

Here is what happens under the hood. lift first turns your JSON Schema into a Pydantic model. It then normalizes that into a strict JSON Schema. The schema is passed to the vLLM server as a response_format constraint.

During generation, the server compiles the schema into a grammar. At each step, the model assigns a probability to every possible next token. The grammar defines which tokens are valid continuations. Tokens that would break the schema are masked out. The model can only sample from what remains.

This is why the output is always valid JSON of the right shape. The structure is enforced token by token, not checked afterward.

There is a sharp limit to this guarantee. Constrained decoding governs structure and types, not meaning. A field typed as number will hold a number. Whether it holds the correct number is a separate question. The model can emit a valid value that is simply wrong. Validity is not correctness.

lift also widens every field to allow null. Each scalar leaf in the compiled schema accepts its type or null. So the model can abstain on any field without breaking the structure. Abstention is both trained behavior and a property of the constraint.

You write standard JSON Schema. Supported types include string, number, integer, boolean, arrays of those, arrays of objects, and nested objects. A field description guides the model when a name is ambiguous.

This is also where a quiet failure mode lives. Some constructs cannot be compiled: enum, anyOf/oneOf, $ref, and additionalProperties. When lift cannot compile your schema, it does not stop. It logs a warning and generates without the constraint. The structural guarantee is gone for that run, with no hard error. Output may then fail to match your schema at all.

The practical rule is simple. Keep schemas inside the supported subset. Validate the returned JSON against your schema downstream. Do not assume valid output just because the call returned.

Here is a simple invoice schema:

Copy CodeCopiedUse a different Browser

{

"type": "object",

"properties": {

"invoice_number": {"type": "string", "description": "Invoice identifier"},

"total": {"type": "number", "description": "Total amount due"},

"line_items": {

"type": "array",

"items": {

"type": "object",

"properties": {

"description": {"type": "string"},

"amount": {"type": "number"}

}

}

}

},

"required": ["invoice_number", "total"]

}

Abstention by Default

Real extraction is hard for a non-obvious reason. Beyond reading fields that exist, the real challenge is not inventing fields that are absent.

A model that hallucinates a tax ID is worse than one returning nothing. The error is silent and hard to catch downstream. lift is trained to leave genuinely missing fields null.

Mark a field required only when it must appear. Fields absent from a document come back null. This gives you an extractor that can report a value is not present.

Benchmark

Datalab evaluated lift on a 225-document extraction benchmark. Documents ran 6 to 64 pages each, with roughly 11,000 scored fields. Adversarial cases were planted throughout the set.

Those cases include cross-page values and exhaustive lists. They also include fields that must be left null and near-miss distractors. Multi-source aggregation was tested as well.

Every model received the same rendered page images. Each extracted every document in a single pass. Scoring was a deterministic exact-match against ground truth, with numeric tolerance and normalized strings.

ModelSizeField accuracyFull-document accuracyMedian latency*Features

Datalab API—95.9%44.4%30.8sCitations + Verification

Gemini Flash 3.5—91.3%40.0%28.1s

lift9B90.2%20.9%9.5s

Azure Content Understanding—83.4%22.2%73.7sCitations

NuExtract34B81.5%8.4%8.3s

Qwen3.5-9B9B76.32%24.0%16.8s

  • Per document, 8 concurrent requests. Local models (lift, Qwen3.5-9B, NuExtract3) were served with vLLM on a single GPU. Gemini, Datalab, and Azure ran via API. Latency varies with hardware and load; treat it as relative.

Two details matter here. Field accuracy is the fraction of individual fields extracted correctly. Full-document accuracy is the fraction of documents where every field is correct.

On field accuracy, lift leads the self-hostable models. It sits ahead of NuExtract3 and the Qwen3.5-9B base. It is also the fastest of the accurate models in the table.

At 9.5s median, lift is roughly 3x faster than Gemini Flash 3.5. It stays within about a point of that model’s field accuracy. Full-document accuracy is a harder metric: every field must be correct. Here lift scores 20.9%, ahead of only NuExtract3. The hosted APIs lead, at 44.4% and 40.0%.

A note on reading these numbers. This is Datalab’s own benchmark, so treat it as a vendor result. Its adversarial design rewards models tuned to abstain, which lift is. Full-document accuracy is low for every model, topping out at 44.4%. That reflects how hard single-pass extraction is on long documents. The numbers are also a snapshot; models change.

This is the reality of single-pass, single-model extraction on hard documents. It tells you where lift fits. It is excellent for field-level extraction that feeds a human-in-the-loop review or aggregate analytics. It is not yet a drop-in for zero-touch, every-field-must-be-perfect automation. For that last mile, Datalab’s hosted API adds per-field verification, citations, and confidence scores on the same approach.

A Practitioner Workflow: From Schema to Reviewed Data

Three use cases show the shape of the work. Invoice processing: define invoice_number, total, and line_items, and a missing tax_id returns null. Contract review: a two-page agreement carries a value across pages, which single-pass extraction stitches together. Document pipelines: an accounts-payable queue trusts that absent due dates return null, avoiding silent errors.

Here is one of them as an end-to-end workflow. The goal is a clean, reviewed dataset, not raw model output.

  1. Define the schema. Add a description to any field whose name is not obvious. Mark only truly mandatory fields as required.
  1. Run extraction. Pass the schema and the file to lift. Use a dict, a file path, or a saved schema name.
  1. Branch on the result. A failed call or a null extraction goes to review. A missing required value also goes to review, since null is abstention, not an error.
  1. Validate before you trust. Check the returned JSON against your schema. This catches the silent fallback when a schema could not be compiled.

Copy CodeCopiedUse a different Browser

from lift import extract

schema = {

"type": "object",

"properties": {

"invoice_number": {"type": "string", "description": "Invoice identifier"},

"total": {"type": "number", "description": "Total amount due"},

"due_date": {"type": "string", "description": "Payment due date, ISO 8601"},

"line_items": {

"type": "array",

"items": {

"type": "object",

"properties": {

"description": {"type": "string"},

"amount": {"type": "number"}

}

}

}

},

"required": ["invoice_number", "total"]

}

result = extract("invoice.pdf", schema)

if result.error or result.extraction is None:

queue_for_review("invoice.pdf", reason="extraction_failed")

else:

data = result.extraction

# A required field can still be null. That is abstention, not a crash.

if data.get("total") is None:

queue_for_review("invoice.pdf", reason="missing_total")

else:

save(data)

A few schema-design tips that pay off in practice:

Write a description for ambiguous fields; it is your main lever on accuracy.

Keep schemas inside the supported subset, and validate output downstream.

Prefer flat, shallow schemas; deep nesting is harder to extract reliably.

Mark fields required sparingly, so genuine gaps can return null.

Use –page-range (CLI) or page_range (Python) to limit long PDFs.

Reuse one InferenceManager across calls to amortize model load.

Self-Host vs. Hosted: Which to Use

lift ships as open weights, and Datalab runs a hosted API on the same approach. The choice is about constraints, not prestige.

ChooseWhen

Self-hosted lift (open weights)Data residency or on-prem rules apply; you need cost control at high volume; you want latency control on your own GPUs; runs must work offline.

Hosted Datalab APIYou need per-field verification, citations, and confidence scores; you want the highest accuracy; you would rather not manage infrastructure; volume is low or bursty.

One caveat for self-hosting. Commercial use needs a license under the modified OpenRAIL-M terms. It is free for research, personal use, and startups under $5M in funding or revenue, and not for use in competition with Datalab’s API.

Getting Started

The fastest path is the CLI. lift-pdf requires Python 3.12 or newer.

Copy CodeCopiedUse a different Browser

pip install lift-pdf

Serve the model with vLLM (recommended)

lift_vllm

Extract against a schema

lift_extract input.pdf ./output --schema schema.json

Each file produces two outputs. <filename>.json holds the extraction matching your schema. <filename>_metadata.json holds page count, token count, and error info for debugging.

The Python API is equally small:

Copy CodeCopiedUse a different Browser

from lift import extract

schema: a dict, a path, an inline JSON string, or a library name

result = extract("document.pdf", "schema.json")

if result.extraction is not None:

data = result.extraction # dict matching the schema

Check result.extraction for the dict matching your schema. A null extraction signals a failure you can inspect. The HuggingFace backend uses –method hf and needs pip install lift-pdf[hf].

Schema Studio ships as a Streamlit app. It lets you build, save, and test schemas against your own documents. Install it with pip install lift-pdf[app], then run lift_app.

For production, lift_vllm launches a Docker container with batch size scaled to your GPU. Supported GPUs are: h100, a100-80, a100/a100-40, l40s, a10, l4, 4090, 3090, t4.

Interactive Explainer

Key Takeaways

lift is Datalab’s 9B open-weights vision model that extracts schema-matching JSON from PDFs and images.

Schema-constrained decoding guarantees valid structure; trained abstention returns null instead of hallucinating absent fields.

The structural guarantee covers shape, not meaning, so validate output and review low-confidence fields.

It posts the highest field accuracy among self-hostable models tested (90.2%), at 9.5s median per document.

Full-document accuracy is 20.9% — ahead of only NuExtract3 — where the hosted APIs lead.

Code is Apache 2.0; weights are modified OpenRAIL-M (free for research, personal use, and startups under $5M in funding or revenue).

The links to try it:

GitHub · HuggingFace · Playground · Hosted API & docs

Note:Thanks to the Datalab team for the thought leadership/ Resources for this article. Datalab team has supported this content/article for promotion.

The post Datalab Releases lift: A 9B Open-Weights Vision Model That Extracts Structured JSON From PDFs Using Schemas appeared first on MarkTechPost.

この記事をシェア

関連記事

TLDR AI★42026年6月23日 09:00

SpaceX、オープンソースAIスタートアップのReflectionと最大63億ドルの計算資源契約を締結

SpaceXは、Open-source AIスタートアップであるReflection AIと、最大63億ドル規模の契約を結びました。これにより、ReflectionはSpaceXが保有するスーパーコンピュータ「Project Colossus」およびNvidia製GB300を活用してオープンソースAIモデルの学習が可能になります。

Interconnects★42026年6月22日 23:52

GLM-5.2 はオープンエージェントにおける大きな一歩となる

Z.ai が Claude Fable 5 の輸出規制の影響下で最新モデル GLM-5.2 を発表し、これはオープンエージェント分野において重要な進展であると評価されている。

MarkTechPost★42026年6月16日 18:21

Hermes エージェントが非同期サブエージェントを追加、親チャットのブロックを解消

Nous Research はオープンソースの個人エージェント「Hermes Agent」を更新し、委任ツールで子エージェント(サブエージェント)を非同期実行可能にした。これにより、委任された作業が親チャットの実行をブロック不再するようになった。

今日のまとめ

AI日報で今日の重要ニュースをまとめ読み

ニュース一覧に戻る元記事を読む