AnyModal - bu bir nechta "modallarni" (masalan, tasvirlar, matn yoki boshqa ma'lumotlar) yagona, izchil ish oqimiga birlashtirish uchun mo'ljallangan ramka. Alohida kutubxonalar bilan o'ynash yoki ko'rish va til modellarini ko'prik qilish uchun maxsus kod yozish o'rniga, AnyModal har bir komponent - tasvir kodlari, tokenizatorlar, til modellari - qattiq sozlashsiz ulanishi mumkin bo'lgan tizimli quvur liniyasini taqdim etadi. Ushbu qismlar orasidagi asosiy aloqalarni boshqarish orqali AnyModal sizga yuqori darajadagi jarayonga e'tiboringizni qaratish imkonini beradi: masalan, tasvirni oziqlantirish va matnli natijani olish.
Amalda, AnyModal tasvirga sarlavha qo'yish, tasniflash yoki bu erda ko'rsatilgan holatda LaTeX OCR kabi vazifalarni bajarishda yordam berishi mumkin. Ramka modulli bo'lgani uchun bir modelni boshqasiga almashtirish (masalan, boshqa ko'rish magistral yoki yangi til modeli) nisbatan oson bo'lib, uni tajriba yoki maxsus foydalanish holatlari uchun moslashuvchan qiladi.
Matematik ifodaning tasvirini haqiqiy LaTeX qatoriga aylantirish uchun kompyuterni ko'rish va tabiiy tilni qayta ishlashni birlashtirish kerak. Rasm kodlovchisining vazifasi tenglamadan “ortiqcha”, “minus” va boshqa belgilarni tanib olish kabi xususiyatlar yoki ramziy naqshlarni chiqarishdir. Keyin til komponenti ushbu xususiyatlardan LaTeX tokenlarini ketma-ketlikda bashorat qilish uchun foydalanadi.
AnyModal bilan LaTeX OCR ko'rish kodlovchisini til modeli bilan qanchalik tez bog'lashingiz mumkinligini namoyish etadi. Ushbu misol, ayniqsa, tenglamalarga qaratilgan bo'lsa-da, umumiy yondashuv tasvirdan matnga boshqa stsenariylarga, jumladan, yanada rivojlangan yoki maxsus matematik belgilarga ham kengaytirilishi mumkin.
Ushbu qo'llanmaning oxirida siz LaTeX OCR vazifalari uchun kichik VLM yaratish uchun Llama 3.2 1B va Google SigLIP bilan birga AnyModal-dan qanday foydalanishni bilib olasiz:
E'tibor bering, AnyModal/LaTeX-OCR-Llama-3.2-1B da chiqarilgan og'irliklar faqat 20% ni o'qitish orqali olinadi.
Siz butun ma'lumotlar to'plamini va ko'proq davrlarda mashq qilish orqali yaxshiroq modelga ega bo'lishingiz mumkin.
Mavjud tasvirlardan LaTeX yaratishga qiziquvchilar uchun bu yerda oldindan tayyorlangan og‘irliklar yordamida namoyish. Bu har qanday narsani noldan o'rgatish zaruratidan qochadi va AnyModalni harakatda ko'rish uchun tezkor yo'lni taklif qiladi. Quyida sizning muhitingizni sozlash, kerakli modellarni yuklab olish va xulosa chiqarishning qisqacha ko'rinishi keltirilgan.
AnyModal omborini klonlash:
git clone https://github.com/ritabratamaiti/AnyModal.git
Kerakli kutubxonalarni o'rnating:
pip install torch torchvision huggingface_hub PIL
Keyin Hugging Face Hub-da joylashtirilgan oldindan tayyorlangan vaznlarni yuklab oling:
from huggingface_hub import snapshot_download snapshot_download("AnyModal/Image-Captioning-Llama-3.2-1B", local_dir="latex_ocr_model")
Ushbu o'ziga xos og'irliklarni bu erda topish mumkin: LaTeX-OCR-Llama-3.2-1B Quchoqlangan yuzda
Keyin, ko'rish kodlovchisi va til modelini yuklang:
import llm import anymodal import vision from PIL import Image # Load language model and tokenizer tokenizer, model = llm.get_llm("meta-llama/Llama-3.2-1B") # Load vision-related components image_processor, vision_model, vision_hidden_size = vision.get_image_encoder('google/vit-base-patch16-224') vision_encoder = vision.VisionEncoder(vision_model) # Configure the multimodal pipeline multimodal_model = anymodal.MultiModalModel( input_processor=None, input_encoder=vision_encoder, input_tokenizer=vision.Projector(vision_hidden_size, llm.get_hidden_size(tokenizer, model), num_hidden=1), language_tokenizer=tokenizer, language_model=model, prompt_text="The LaTeX expression of the equation in the image is:" ) # Load the pretrained model weights multimodal_model._load_model("latex_ocr_model") multimodal_model.eval()
Nihoyat, tasvirni taqdim eting va LaTeX chiqishini oling:
# Replace with the path to your equation image image_path = "path_to_equation_image.png" image = Image.open(image_path).convert("RGB") processed_image = image_processor(image, return_tensors="pt") processed_image = {k: v.squeeze(0) for k, v in processed_image.items()} latex_output = multimodal_model.generate(processed_image, max_new_tokens=120) print("Generated LaTeX:", latex_output)
Ushbu oddiy qadamlar ketma-ketligi butun quvur liniyasini boshqaradi - tasvirni tahlil qilish, uni til modeli maydoniga proyeksiya qilish va mos keladigan LaTeX ni yaratish.
Modelni yangi ma'lumotlarga moslashtirish yoki ko'rish tili quvurining mexanikasini o'rganish kabi ko'proq nazorat qilishni xohlaydiganlar uchun o'quv jarayoni chuqurroq tushuncha beradi. Quyidagi bo'limlarda ma'lumotlar qanday tayyorlanishi, model komponentlari qanday birlashtirilganligi va ular birgalikda optimallashtirilganligi tasvirlangan.
Faqat oldindan tayyorlangan komponentlarga tayanishdan ko'ra, siz juftlashtirilgan tasvirlar va LaTeX yorliqlarining o'quv ma'lumotlar to'plamini olishingiz mumkin. Misollardan biri unsloth/LaTeX_OCR
maʼlumotlar toʻplami boʻlib, unda LaTeX satrlari bilan birga tenglamalar tasvirlari mavjud. Bog'liqlarni o'rnatgandan va ma'lumotlar to'plamini o'rnatgandan so'ng, o'qitish bosqichlari ma'lumotlar quvurini yaratish, modelni ishga tushirish va davrlar bo'ylab aylanishni o'z ichiga oladi.
Ma'lumotlar to'plamini tayyorlash va uni yuklash sxemasi:
from torch.utils.data import Subset import vision # Load training and validation sets train_dataset = vision.ImageDataset("unsloth/LaTeX_OCR", image_processor, split='train') val_dataset = vision.ImageDataset("unsloth/LaTeX_OCR", image_processor, split='test') # Optionally use a smaller subset for faster iteration subset_ratio = 0.2 train_dataset = Subset(train_dataset, range(int(subset_ratio * len(train_dataset)))) val_dataset = Subset(val_dataset, range(int(subset_ratio * len(val_dataset))))
Ushbu nuqtada siz yuqorida tavsiflangan AnyModal quvur liniyasini qurasiz yoki qayta ishlatasiz. Oldindan tayyorlangan og'irliklarni yuklash o'rniga, siz modelni noldan yoki qisman oldindan tayyorlangan nazorat punktlaridan o'rganishi uchun ishga tushirasiz.
multimodal_model = anymodal.MultiModalModel( input_processor=None, input_encoder=vision_encoder, input_tokenizer=vision.Projector(vision_hidden_size, llm.get_hidden_size(tokenizer, model), num_hidden=1), language_tokenizer=tokenizer, language_model=model, prompt_text="The LaTeX expression of the equation in the image is:" )
Keyin model parametrlarini optimallashtirish uchun o'quv tsiklini yaratishingiz mumkin. Umumiy yondashuv PyTorch's AdamW
optimallashtiruvchisidan foydalanadi va ixtiyoriy ravishda samaradorlik uchun aralash aniqlikdagi treningdan foydalanadi:
from tqdm import tqdm import torch optimizer = torch.optim.AdamW(multimodal_model.parameters(), lr=1e-4) scaler = torch.cuda.amp.GradScaler() train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, shuffle=True) num_epochs = 5 for epoch in range(num_epochs): for batch_idx, batch in tqdm(enumerate(train_loader), desc=f"Epoch {epoch+1} Training"): optimizer.zero_grad() with torch.cuda.amp.autocast(): logits, loss = multimodal_model(batch) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update()
Har bir davrdan keyin yoki hech bo'lmaganda trening tugashi bilan, modelni tasdiqlash to'plamida baholash uning yangi ma'lumotlarga umumlashtirilishini ta'minlashga yordam beradi:
val_loader = torch.utils.data.DataLoader(val_dataset, batch_size=16, shuffle=False) for batch_idx, batch in enumerate(val_loader): predictions = multimodal_model.generate(batch['input'], max_new_tokens=120) for idx, prediction in enumerate(predictions): print(f"Actual LaTeX: {batch['text'][idx]}") print(f"Generated LaTeX: {prediction}")
Ishlashni tasdiqlashdan tashqari, ushbu tekshirish bosqichi giperparametrlarni sozlash, boshqa asosiy modelga o'tish yoki ma'lumotlarga oldindan ishlov berishni takomillashtirish kabi yaxshilanishlarni boshqarishi mumkin. Ushbu o'quv bosqichlarini bajarish orqali siz ko'rish kodlovchisi va til modeli o'rtasidagi o'zaro aloqani yaxshiroq tushunasiz va ish jarayonini qo'shimcha vazifalar yoki ko'proq ixtisoslashgan domenlarga kengaytirishingiz mumkin.