تم إصدار Datalab يرفع، نموذج رؤية للأوزان المفتوحة 9B للاستخراج المنظم. تقوم بتمرير مخطط JSON إليه، ويقوم بإرجاع كائن JSON المطابق. يقرأ النموذج ملفات PDF والصور مباشرة، ثم يقوم بفك التشفير وفقًا للمخطط الخاص بك.
هذا هو النموذج الأول لـ Datalab المصمم للاستخراج فقط. يقوم الفريق بالفعل بشحن أدوات التعرف الضوئي على الحروف مفتوحة المصدر: chandra، وmarker، وsurya. يمتد الرفع الذي يعمل في استخراج الحقل المستند إلى المخطط.
رفع العشرات دقة المجال 90.2% وفقًا لمعيار Datalab المكون من 225 مستندًا. أفاد فريق البحث بأنه أقوى نموذج صغير قابل للاستضافة الذاتية تم اختباره. إنه يعمل بمتوسط 9.5 ثانية لكل مستند.
ما هو رفع Datalab؟
الرفع هو نموذج رؤية بمعلمة 9B للاستخراج المنظم. يقبل مخطط JSON القياسي كمدخل. تقوم بإرجاع JSON صالح لهذا الشكل كإخراج.
يتعامل النموذج مع المستندات متعددة الصفحات في مسار واحد. يمكنه قراءة القيم التي تمتد عبر الصفحات. يتم إدخال المستندات بأكملها مرة واحدة، وليس صفحة تلو الأخرى.
يتم شحن وضعين للاستدلال مع العبوة. يعمل الاستدلال المحلي من خلال HuggingFace. يتم تشغيل الاستدلال عن بعد من خلال خادم vLLM، الذي توصي به Datalab للإنتاج.
الرمز هو أباتشي 2.0. تستخدم الأوزان ترخيص OpenRAIL-M المعدل.
يدخل المصعد مجالًا صغيرًا ولكنه متزايد من نماذج الاستخراج المفتوحة. بعضها مصمم خصيصًا لهذا الغرض، مثل عائلة NuExtract. والبعض الآخر عبارة عن نماذج عامة للغة الرؤية تم ضغطها لاستخراجها، مثل Qwen3.5-9B. فهو يجمع بين قاعدة لغة الرؤية وفك التشفير المقيد بالمخطط والامتناع المدرب عن التصويت. وفقًا لمعيار Datalab، فهو يقود تلك المجموعة المفتوحة فيما يتعلق بالدقة الميدانية.
فك التشفير المقيد بالمخطط: الآلية الأساسية
خيار التصميم الرئيسي هو فك التشفير المقيد بالمخطط. يقوم Lift بفك تشفير مخرجاته مباشرة مقابل مخططك. والنتيجة هي دائمًا JSON صالح للشكل الصحيح.
وهنا ما يحدث تحت غطاء محرك السيارة. يقوم Lift أولاً بتحويل مخطط JSON الخاص بك إلى نموذج Pydantic. ثم يقوم بتطبيع ذلك في مخطط JSON صارم. يتم تمرير المخطط إلى خادم vLLM كقيد على تنسيق الاستجابة.
أثناء الإنشاء، يقوم الخادم بترجمة المخطط إلى قواعد نحوية. في كل خطوة، يعين النموذج احتمالًا لكل رمز تالٍ محتمل. تحدد القواعد أي الرموز المميزة هي استمرارات صالحة. يتم إخفاء الرموز المميزة التي قد تؤدي إلى كسر المخطط. يمكن للنموذج أن يأخذ عينة فقط مما تبقى.
هذا هو السبب في أن الإخراج يكون دائمًا صالحًا لـ JSON بالشكل الصحيح. يتم فرض البنية رمزًا مميزًا برمز مميز، ولا يتم التحقق منها بعد ذلك.
هناك حد حاد لهذا الضمان. فك التشفير المقيد يحكم البنية والأنواع، وليس المعنى. الحقل المكتوب كرقم سيحتوي على رقم. سواء كان يحمل صحيح الرقم هو سؤال منفصل. يمكن للنموذج أن يصدر قيمة صالحة ولكنها ببساطة خاطئة. الصلاحية ليست الصواب.
يعمل الرفع أيضًا على توسيع كل حقل للسماح بالقيمة الخالية. تقبل كل ورقة عددية في المخطط المترجم نوعها أو أنها فارغة. لذلك يمكن للنموذج أن يمتنع عن أي مجال دون كسر الهيكل. الامتناع عن التصويت هو سلوك مدرب وخاصية القيد.
تكتب مخطط JSON القياسي. تتضمن الأنواع المدعومة سلسلة، ورقمًا، وعددًا صحيحًا، ومنطقيًا، ومصفوفات من تلك، ومصفوفات من الكائنات، والكائنات المتداخلة. يرشد وصف الحقل النموذج عندما يكون الاسم غامضًا.
هذا هو المكان الذي يعيش فيه وضع الفشل الهادئ. لا يمكن ترجمة بعض البنيات: enum، وanyOf/oneOf، و$ref، وexcellentProperties. عندما لا يتمكن الرفع من تجميع المخطط الخاص بك، فإنه لا يتوقف. فإنه يسجل تحذيرا ويولد دون القيد. لقد انتهى الضمان الهيكلي لهذه الجولة، دون أي خطأ جسيم. قد يفشل الإخراج بعد ذلك في مطابقة المخطط الخاص بك على الإطلاق.
القاعدة العملية بسيطة. احتفظ بالمخططات داخل المجموعة الفرعية المدعومة. تحقق من صحة JSON الذي تم إرجاعه مقابل مخططك في اتجاه مجرى النهر. لا تفترض إخراجًا صالحًا لمجرد إرجاع المكالمة.
فيما يلي مخطط فاتورة بسيط:
{
"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"]
}
الامتناع افتراضيا
الاستخراج الحقيقي صعب لسبب غير واضح. وبعيدًا عن قراءة المجالات الموجودة، فإن التحدي الحقيقي لا يتمثل في اختراع مجالات غائبة.
إن النموذج الذي يهذي بالهوية الضريبية أسوأ من النموذج الذي لا يعيد أي شيء. الخطأ صامت ويصعب اكتشافه. تم تدريب المصعد على ترك الحقول المفقودة حقًا فارغة.
قم بوضع علامة على الحقل بأنه مطلوب فقط عندما يجب أن يظهر. الحقول الغائبة عن المستند تعود فارغة. يمنحك هذا مستخرجًا يمكنه الإبلاغ عن عدم وجود قيمة.
المعيار
قام Datalab بتقييم التحسين بناءً على معيار استخراج 225 مستندًا. يتراوح عدد المستندات من 6 إلى 64 صفحة، مع ما يقرب من 11000 حقل مسجل. تم زرع حالات الخصومة في جميع أنحاء المجموعة.
تتضمن هذه الحالات قيمًا عبر الصفحات وقوائم شاملة. وهي تتضمن أيضًا الحقول التي يجب تركها فارغة ومشتتات للانتباه. تم اختبار التجميع متعدد المصادر أيضًا.
تلقى كل نموذج نفس صور الصفحة المعروضة. قام كل منهم باستخراج كل مستند في مسار واحد. كان التسجيل عبارة عن تطابق تام حتمي مع الحقيقة الأرضية، مع التسامح الرقمي والسلاسل الطبيعية.
| نموذج | مقاس | الدقة الميدانية | دقة الوثيقة الكاملة | الكمون المتوسط* | سمات |
|---|---|---|---|---|---|
| واجهة برمجة تطبيقات داتالاب | — | 95.9% | 44.4% | 30.8 ثانية | الاستشهادات + التحقق |
| الجوزاء فلاش 3.5 | — | 91.3% | 40.0% | 28.1 ثانية | |
| يرفع | 9 ب | 90.2% | 20.9% | 9.5 ثانية | |
| فهم محتوى أزور | — | 83.4% | 22.2% | 73.7 ثانية | الاستشهادات |
| نوإكستراكت3 | 4 ب | 81.5% | 8.4% | 8.3 ثانية | |
| Qwen3.5-9B | 9 ب | 76.32% | 24.0% | 16.8 ثانية |
* لكل مستند، 8 طلبات متزامنة. تم تقديم النماذج المحلية (الرفع، Qwen3.5-9B، NuExtract3) مع vLLM على وحدة معالجة الرسومات واحدة. تم تشغيل Gemini وDatalab وAzure عبر واجهة برمجة التطبيقات (API). يختلف زمن الوصول باختلاف الأجهزة والحمل؛ تعامل معها على أنها نسبية.
هناك تفصيلان مهمان هنا. الدقة الميدانية هو جزء من الحقول الفردية المستخرجة بشكل صحيح. دقة الوثيقة الكاملة هو جزء من المستندات التي يكون كل حقل فيها صحيحًا.
فيما يتعلق بالدقة الميدانية، يقود الرفع النماذج ذاتية الاستضافة. إنه يقع أمام NuExtract3 وقاعدة Qwen3.5-9B. وهو أيضًا الأسرع بين النماذج الدقيقة في الجدول.
عند متوسط 9.5 ثانية، يكون الرفع أسرع بثلاث مرات تقريبًا من Gemini Flash 3.5. يبقى ضمن نقطة تقريبًا من دقة مجال هذا النموذج. تعد دقة المستند الكامل مقياسًا أصعب: يجب أن يكون كل حقل صحيحًا. هنا يصل معدل الرفع إلى 20.9%، متقدمًا على NuExtract3 فقط. تتصدر واجهات برمجة التطبيقات المستضافة بنسبة 44.4% و40.0%.
ملاحظة حول قراءة هذه الأرقام. هذا هو المعيار الخاص بـ Datalab، لذا تعامل معه كنتيجة بائع. إن تصميمها العدائي يكافئ النماذج التي تم ضبطها على الامتناع عن التصويت، وهذا هو الرفع. دقة المستند الكامل منخفضة لكل نموذج، حيث تصل إلى 44.4%. يعكس ذلك مدى صعوبة الاستخراج بتمريرة واحدة في المستندات الطويلة. الأرقام هي أيضا لقطة. تتغير النماذج.
هذه هي حقيقة استخراج نموذج واحد ومرور واحد على المستندات الصلبة. يخبرك أين يناسب المصعد. إنه ممتاز للاستخراج على المستوى الميداني الذي يغذي المراجعة البشرية أو التحليلات المجمعة. إنها ليست حتى الآن بمثابة نقطة انطلاق للأتمتة التي لا تعمل باللمس، ويجب أن يكون كل مجال مثاليًا. بالنسبة لهذا الميل الأخير، تضيف واجهة برمجة التطبيقات المستضافة لدى Datalab التحقق لكل حقل، والاستشهادات، ودرجات الثقة على نفس النهج.
سير عمل الممارس: من المخطط إلى البيانات المراجعة
ثلاث حالات استخدام تظهر شكل العمل. معالجة الفاتورة: تحديد رقم_الفاتورة، والإجمالي، وعناصر_الخط، ومعرف الضريبة المفقود يُرجع قيمة فارغة. مراجعة العقد: تحتوي الاتفاقية المكونة من صفحتين على قيمة عبر الصفحات، والتي يتم دمجها معًا في عملية الاستخراج ذات المسار الفردي. خطوط أنابيب الوثيقة: تثق قائمة انتظار الحسابات الدائنة في أن تواريخ الاستحقاق الغائبة تُرجع قيمة فارغة، مما يؤدي إلى تجنب الأخطاء الصامتة.
هنا واحد منهم باعتباره سير العمل الشامل. الهدف هو مجموعة بيانات نظيفة ومراجعة، وليس مخرجات نموذجية أولية.
1. تحديد المخطط. أضف وصفًا لأي حقل اسمه غير واضح. ضع علامة على الحقول الإلزامية حقًا فقط كما هو مطلوب.
2. تشغيل الاستخراج. تمرير المخطط والملف للرفع. استخدم الإملاء أو مسار الملف أو اسم المخطط المحفوظ.
3. فرع على النتيجة. سيتم مراجعة المكالمة الفاشلة أو الاستخراج الفارغ. يتم أيضًا مراجعة القيمة المطلوبة المفقودة، نظرًا لأن القيمة null هي امتناع عن التصويت، وليست خطأ.
4. تحقق قبل أن تثق. تحقق من JSON الذي تم إرجاعه مقابل مخططك. يؤدي هذا إلى اكتشاف الإجراء الاحتياطي الصامت عندما لا يمكن تجميع المخطط.
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)
بعض نصائح تصميم المخطط التي تؤتي ثمارها في الممارسة العملية:
- اكتب وصفًا للحقول الغامضة؛ إنها الرافعة الرئيسية للدقة.
- احتفظ بالمخططات داخل المجموعة الفرعية المدعومة، وتحقق من صحة الإخراج في اتجاه مجرى النهر.
- تفضل المخططات المسطحة والضحلة؛ من الصعب استخراج التعشيش العميق بشكل موثوق.
- يلزم تحديد الحقول بشكل مقتصد، بحيث يمكن أن تعود الفجوات الحقيقية فارغة.
- استخدم –page-range (CLI) أو page_range (Python) للحد من ملفات PDF الطويلة.
- أعد استخدام InferenceManager واحد عبر المكالمات لاستهلاك تحميل النموذج.
المضيف الذاتي مقابل المستضاف: أيهما يجب استخدامه
ترفع السفن كأوزان مفتوحة، ويقوم Datalab بتشغيل واجهة برمجة تطبيقات مستضافة على نفس النهج. إن الاختيار يتعلق بالقيود، وليس بالهيبة.
| يختار | متى |
|---|---|
| مصعد ذاتي الاستضافة (الأوزان المفتوحة) | تنطبق قواعد البيانات أو القواعد المحلية؛ أنت بحاجة إلى التحكم في التكاليف بكميات كبيرة؛ تريد التحكم في زمن الوصول على وحدات معالجة الرسومات الخاصة بك؛ يجب أن تعمل عمليات التشغيل دون اتصال بالإنترنت. |
| استضافة Datalab API | أنت بحاجة إلى التحقق من كل حقل، والاستشهادات، ودرجات الثقة؛ تريد أعلى دقة؛ فأنت تفضل عدم إدارة البنية التحتية؛ الحجم منخفض أو متفجر. |
تحذير واحد للاستضافة الذاتية. يحتاج الاستخدام التجاري إلى ترخيص بموجب شروط OpenRAIL-M المعدلة. إنه مجاني للبحث والاستخدام الشخصي والشركات الناشئة التي يقل تمويلها أو إيراداتها عن 5 ملايين دولار، وليس للاستخدام في المنافسة مع واجهة برمجة التطبيقات الخاصة بـ Datalab.
ابدء
أسرع مسار هو CLI. يتطلب Lift-pdf إصدار Python 3.12 أو أحدث.
pip install lift-pdf
# Serve the model with vLLM (recommended)
lift_vllm
# Extract against a schema
lift_extract input.pdf ./output --schema schema.json
ينتج كل ملف مخرجين.
واجهة برمجة تطبيقات Python صغيرة أيضًا:
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
تحقق من result.extraction لمعرفة الإملاء المطابق لمخططك. يشير الاستخراج الفارغ إلى فشل يمكنك فحصه. تستخدم الواجهة الخلفية HuggingFace –method hf وتحتاج إلى pip install Lift-pdf[hf].
استوديو المخطط يأتي كتطبيق Streamlit. فهو يتيح لك إنشاء المخططات وحفظها واختبارها مقابل مستنداتك الخاصة. قم بتثبيته باستخدام pip install Lift-pdf[app]، ثم قم بتشغيل Lift_app.
بالنسبة للإنتاج، يقوم Lift_vllm بتشغيل حاوية Docker بحجم دفعة متدرج وفقًا لوحدة معالجة الرسومات الخاصة بك. وحدات معالجة الرسوميات المدعومة هي: h100، a100-80، a100/a100-40، l40s، a10، l4، 4090، 3090، t4.
الشرح التفاعلي
الوجبات السريعة الرئيسية
- الرفع هو نموذج رؤية ذو أوزان مفتوحة 9B من Datalab والذي يستخرج JSON المطابق للمخطط من ملفات PDF والصور.
- يضمن فك التشفير المقيد بالمخطط بنية صالحة؛ يُرجع الامتناع المدرّب عن التصويت إلى صفر بدلاً من الحقول الغائبة الهلوسة.
- يغطي الضمان الهيكلي الشكل وليس المعنى، لذا تحقق من صحة المخرجات وراجع الحقول منخفضة الثقة.
- إنها تنشر أعلى دقة ميدانية بين النماذج ذاتية الاستضافة التي تم اختبارها (90.2%)، بمتوسط 9.5 ثانية لكل مستند.
- تبلغ دقة المستند الكامل 20.9% — متقدمة على NuExtract3 فقط — حيث تتصدر واجهات برمجة التطبيقات المستضافة.
- الرمز هو أباتشي 2.0؛ تم تعديل الأوزان OpenRAIL-M (مجانية للبحث والاستخدام الشخصي والشركات الناشئة التي تقل قيمتها عن 5 ملايين دولار من التمويل أو الإيرادات).
الروابط لتجربتها:
GitHub · HuggingFace · ساحة اللعب · واجهة برمجة التطبيقات والمستندات المستضافة
ملاحظة: شكرًا لفريق Datalab على القيادة الفكرية/الموارد الخاصة بهذه المقالة. قام فريق Datalab بدعم هذا المحتوى/المقالة للترويج لها.
اكتشاف المزيد من كحيل | أخبار التقنية
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.
