![]()
![]()
![]()
![]()
![]()
التضمينات متعددة الوسائط من 64 إلى 768 أبعاد • دردشة معلمة 1B
نصوص قصيرة • صور • مقاطع فيديو • مستندات طويلة
onnx • coreml • pytorch
Python • JavaScript • Swift

مرحبًا بكم في Uform ، مكتبة منظمة العفو الدولية متعددة الوسائط تنوعا بقدر ما هي فعالة. ستساعدك نماذج التضمين الصغيرة UForm على فهم المحتوى المرئي والنصي والبحث عنه عبر لغات مختلفة. من ناحية أخرى ، لا تدعم النماذج التوليدية الصغيرة Uform عوامل الاستخدام للمحادثات والدردشة ، ولكنها رائعة لتسمية التسمية التوضيحية السريعة والإجابة على أسئلة مرئية (VQA). من خلال نماذج المحولات المخصصة المخصصة للمدربة ، يمكن أن يعمل ذلك في أي مكان من مزرعة الخادم إلى هاتفك الذكي.
f32 إلى i8 دون أن تفقد الكثير من الاستدعاء.للدقة والمعايير السرعة ، الرجوع إلى صفحة التقييم.
| نموذج | حدود | اللغات | بنيان |
|---|---|---|---|
uform3-image-text-english-large ؟ | 365 م | 1 | 12 طبقة بيرت ، VIT-L/14 |
uform3-image-text-english-base | 143 م | 1 | 4 طبقة بيرت ، فيت ب/16 |
uform3-image-text-english-small ؟ | 79 م | 1 | 4 طبقة بيرت ، VIT-S/16 |
uform3-image-text-multilingual-base | 206m | 21 | 12 طبقة بيرت ، فيت ب/16 |
| نموذج | حدود | غاية | بنيان |
|---|---|---|---|
uform-gen2-dpo ؟ | 1.2 ب | الدردشة ، تسميات التسمية التوضيحية ، VQA | QWEN1.5-0.5B ، VIT-H/14 |
uform-gen2-qwen-500m | 1.2 ب | الدردشة ، تسميات التسمية التوضيحية ، VQA | QWEN1.5-0.5B ، VIT-H/14 |
uform-gen | 1.5 ب | التسمية التوضيحية للصور ، VQA | Llama-1.3b ، Vit-B/16 |
أولا ، pip install uform . ثم ، قم بتحميل النموذج:
from uform import get_model , Modality
processors , models = get_model ( 'unum-cloud/uform3-image-text-english-small' )
model_text = models [ Modality . TEXT_ENCODER ]
model_image = models [ Modality . IMAGE_ENCODER ]
processor_text = processors [ Modality . TEXT_ENCODER ]
processor_image = processors [ Modality . IMAGE_ENCODER ]التضمين الصور:
import requests
from io import BytesIO
from PIL import Image
image_url = 'https://media-cdn.tripadvisor.com/media/photo-s/1b/28/6b/53/lovely-armenia.jpg'
image = Image . open ( BytesIO ( requests . get ( image_url ). content ))
image_data = processor_image ( image )
image_features , image_embedding = model_image . encode ( image_data , return_features = True )استفسارات التضمين:
text = 'a cityscape bathed in the warm glow of the sun, with varied architecture and a towering, snow-capped mountain rising majestically in the background'
text_data = processor_text ( text )
text_features , text_embedding = model_text . encode ( text_data , return_features = True )لمزيد من التفاصيل تحقق من:
النماذج التوليدية متوافقة مع
from transformers import AutoModel , AutoProcessor
model = AutoModel . from_pretrained ( 'unum-cloud/uform-gen2-dpo' , trust_remote_code = True )
processor = AutoProcessor . from_pretrained ( 'unum-cloud/uform-gen2-dpo' , trust_remote_code = True )
prompt = 'Question or Instruction'
image = Image . open ( 'image.jpg' )
inputs = processor ( text = [ prompt ], images = [ image ], return_tensors = 'pt' )
with torch . inference_mode ():
output = model . generate (
** inputs ,
do_sample = False ,
use_cache = True ,
max_new_tokens = 256 ,
eos_token_id = 151645 ,
pad_token_id = processor . tokenizer . pad_token_id
)
prompt_len = inputs [ 'input_ids' ]. shape [ 1 ]
decoded_text = processor . batch_decode ( output [:, prompt_len :])[ 0 ]لمزيد من التفاصيل تحقق من:
اعتمادًا على التطبيق ، يمكن أن يتم الانخفاض في التضمينات إلى تمثيلات رقمية أصغر دون أن تفقد الكثير من الاستدعاء. يوصى بالتحول من f32 إلى f16 في جميع الحالات تقريبًا ، إلا إذا كنت تعمل على أجهزة قديمة جدًا دون دعم نصف الدقة. من الممكن أيضًا التحول إلى i8 مع التحجيم الخطي ، ولكن سيكون ملحوظًا في الاستدعاء على مجموعات أكبر مع ملايين الإدخالات القابلة للبحث. وبالمثل ، بالنسبة للتضمينات ذات الأبعاد العالية (512 أو 768) ، تتمثل الإستراتيجية الشائعة في تحديدها في تمثيلات أحادية القياس للبحث بشكل أسرع.
import numpy as np
f32_embedding : np . ndarray = model . encode_text ( text_data , return_features = False )
f16_embedding : np . ndarray = f32_embedding . astype ( np . float16 )
i8_embedding : np . ndarray = ( f32_embedding * 127 ). astype ( np . int8 )
b1_embedding : np . ndarray = np . packbits (( f32_embedding > 0 ). astype ( np . uint8 ))النهج البديل في القياس الكمي هو استخدام تضمينات Matryoshka ، حيث يتم شرائح التضمينات إلى أجزاء أصغر ، ويتم إجراء البحث بطريقة هرمية.
import numpy as np
large_embedding : np . ndarray = model . encode_text ( text_data , return_features = False )
small_embedding : np . ndarray = large_embedding [:, : 256 ]
tiny_embedding : np . ndarray = large_embedding [:, : 64 ]يتم دعم كلا النهجين أصليًا بواسطة محرك البحث في ناقلات USEARCH ومكتبات SIMSIMD Numerics. عند التعامل مع مجموعات صغيرة (تصل إلى ملايين الإدخالات) والبحث عن حسابات مسافة جيب التمام منخفضة الكلية ، يمكنك تحقيق تحسين الأداء 5x-2500x على الشعلة ، النوم ، Scipy ، و Vanilla Python باستخدام Simsimd.
from simsimd import cosine , hamming
distance : float = cosine ( f32_embedding , f32_embedding ) # 32x SciPy performance on Apple M2 CPU
distance : float = cosine ( f16_embedding , f16_embedding ) # 79x SciPy performance on Apple M2 CPU
distance : float = cosine ( i8_embedding , i8_embedding ) # 133x SciPy performance on Apple M2 CPU
distance : float = hamming ( b1_embedding , b1_embedding ) # 17x SciPy performance on Apple M2 CPUوبالمثل ، عند التعامل مع مجموعات كبيرة (تصل إلى مليارات الإدخالات لكل خادم) والبحث عن بحث عالي الإنتاجية ، يمكنك تحقيق تحسن 100x في الأداء على FAISS وغيرها من حلول البحث المتجه باستخدام USEARCH. فيما يلي بعض الأمثلة:
from usearch . index import Index
f32_index = Index ( ndim = 64 , metric = 'cos' , dtype = 'f32' ) # for Matryoshka embeddings
f16_index = Index ( ndim = 64 , metric = 'cos' , dtype = 'f16' ) # for Matryoshka embeddings
i8_index = Index ( ndim = 256 , metric = 'cos' , dtype = 'i8' ) # for quantized embeddings
b1_index = Index ( ndim = 768 , metric = 'hamming' , dtype = 'b1' ) # for binary embeddingsPytorch هو اعتماد ثقيل للحمل ، خاصة إذا كنت تعمل على الحافة أو أجهزة إنترنت الأشياء. باستخدام وقت تشغيل الفانيليا ONNX ، يمكن للمرء أن يقلل بشكل كبير من استهلاك الذاكرة ونشر زمن النشر.
$ conda create -n uform_torch python=3.10 -y
$ conda create -n uform_onnx python=3.10 -y
$ conda activate uform_torch && pip install -e " .[torch] " && conda deactivate
$ conda activate uform_onnx && pip install -e " .[onnx] " && conda deactivate
$ du -sh $( conda info --envs | grep ' uform_torch ' | awk ' {print $2} ' )
> 5.2G ~ /conda/envs/uform_torch
$ du -sh $( conda info --envs | grep ' uform_onnx ' | awk ' {print $2} ' )
> 461M ~ /conda/envs/uform_onnxيمكن تقليل معظم هذا الوزن إلى 100 ميجابايت لكل من النموذج ووقت التشغيل. يمكنك اختيار واحد من العديد من مزودي تنفيذ ONNX المدعوين ، والذي يتضمن Xnnpack و Cuda و Tensorrt لأجهزة GPUs Nvidia و Openvino على Intel و DirectML على Windows و ROCM على AMD و COREML على أجهزة Apple والمزيد.
يمكن استخدام النماذج التوليدية لتجارب تشبه الدردشة في سطر الأوامر. لذلك ، يمكنك استخدام أداة uform-chat CLI ، والتي تتوفر في حزمة UForm.
$ pip install uform
$ uform-chat --model unum-cloud/uform-gen2-dpo --image=zebra.jpg
$ uform-chat --model unum-cloud/uform-gen2-dpo
> --image= " https://bit.ly/3tIVg9M "
> --device= " cuda:0 "
> --fp16