[ad_1]
Thế giới của các mô hình ngôn ngữ lớn (LLM) không ngừng phát triển, với những tiến bộ mới đang nổi lên nhanh chóng. Một lĩnh vực thú vị là sự phát triển của LLM đa phương thức (MLLM), có khả năng hiểu và tương tác với cả văn bản và hình ảnh. Điều này mở ra vô số khả năng cho các nhiệm vụ như hiểu tài liệu, trả lời câu hỏi trực quan, v.v.
Gần đây tôi đã viết một bài viết chung về một mô hình như vậy mà bạn có thể xem tại đây:
Nhưng trong phần này, chúng ta sẽ khám phá sự kết hợp mạnh mẽ: mô hình InternVL và kỹ thuật tinh chỉnh QLoRA. Chúng tôi sẽ tập trung vào cách chúng tôi có thể dễ dàng tùy chỉnh các mô hình như vậy cho bất kỳ trường hợp sử dụng cụ thể nào. Chúng tôi sẽ sử dụng những công cụ này để tạo quy trình hiểu rõ về biên nhận nhằm trích xuất thông tin chính như tên công ty, địa chỉ và tổng số tiền mua hàng với độ chính xác cao.
Dự án này nhằm mục đích phát triển một hệ thống có thể trích xuất chính xác thông tin cụ thể từ các biên lai được quét bằng khả năng của InternVL. Nhiệm vụ này đưa ra một thách thức đặc biệt, không chỉ đòi hỏi khả năng xử lý ngôn ngữ tự nhiên (NLP) mạnh mẽ mà còn cả khả năng diễn giải bố cục trực quan của hình ảnh đầu vào. Điều này sẽ cho phép chúng tôi tạo một quy trình từ đầu đến cuối, không có OCR, thể hiện khả năng khái quát hóa mạnh mẽ trên các tài liệu phức tạp.
Để đào tạo và đánh giá mô hình của chúng tôi, chúng tôi sẽ sử dụng SROIE tập dữ liệu. SROIE cung cấp 1000 hình ảnh biên nhận được quét, mỗi hình ảnh được chú thích bằng các thực thể chính như:
- Công ty: Tên của cửa hàng hoặc doanh nghiệp.
- Ngày: Ngày mua.
- Địa chỉ: Địa chỉ cửa hàng.
- Complete: Tổng số tiền đã thanh toán.
Chúng tôi sẽ đánh giá hiệu suất của mô hình bằng cách sử dụng điểm tương tự mờ, một thước đo đo lường mức độ tương tự giữa các thực thể được dự đoán và thực thể thực tế. Số liệu này dao động từ 0 (kết quả không liên quan) đến 100 (dự đoán hoàn hảo).
InternVL là một họ LLM đa phương thức từ OpenGVLab, được thiết kế để thực hiện xuất sắc các tác vụ liên quan đến hình ảnh và văn bản. Kiến trúc của nó kết hợp mô hình tầm nhìn (như InternViT) với mô hình ngôn ngữ (như InternLM2 hoặc Phi-3). Chúng tôi sẽ tập trung vào biến thể Mini-InternVL-Chat-2B-V1–5, một phiên bản nhỏ hơn rất phù hợp để chạy trên GPU cấp độ người tiêu dùng.
Điểm mạnh chính của InternVL:
- Hiệu quả: Kích thước nhỏ gọn của nó cho phép đào tạo và suy luận hiệu quả.
- Độ chính xác: Mặc dù nhỏ hơn nhưng nó vẫn đạt được hiệu suất cạnh tranh ở nhiều tiêu chuẩn khác nhau.
- Khả năng đa phương thức: Nó kết hợp liền mạch khả năng hiểu hình ảnh và văn bản.
Demo: Bạn có thể khám phá bản demo trực tiếp của InternVL đây.
Để nâng cao hơn nữa hiệu suất của mô hình, chúng tôi sẽ sử dụng QLoRA, một kỹ thuật tinh chỉnh giúp giảm đáng kể mức tiêu thụ bộ nhớ trong khi vẫn duy trì hiệu suất. Đây là cách nó hoạt động:
- Lượng tử hóa: LLM được đào tạo trước được lượng tử hóa thành độ chính xác 4 bit, giảm dung lượng bộ nhớ của nó.
- Bộ điều hợp xếp hạng thấp (LoRA): Thay vì sửa đổi tất cả các tham số của mô hình được đào tạo trước, LoRA thêm các bộ điều hợp nhỏ, có thể huấn luyện vào mạng. Các bộ điều hợp này nắm bắt thông tin cụ thể về nhiệm vụ mà không yêu cầu thay đổi mô hình chính.
- Đào tạo hiệu quả: Sự kết hợp giữa lượng tử hóa và LoRA cho phép tinh chỉnh hiệu quả ngay cả trên GPU có bộ nhớ hạn chế.
Hãy đi sâu vào mã. Trước tiên, chúng tôi sẽ đánh giá hiệu suất cơ bản của Mini-InternVL-Chat-2B-V1–5 mà không cần tinh chỉnh:
quant_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
)mannequin = InternVLChatModel.from_pretrained(
args.path,
device_map={"": 0},
quantization_config=quant_config if args.quant else None,
torch_dtype=torch.bfloat16,
)
tokenizer = InternLM2Tokenizer.from_pretrained(args.path)
# set the max variety of tiles in `max_num`
mannequin.eval()
pixel_values = (
load_image(image_base_path / "X51005255805.jpg", max_num=6)
.to(torch.bfloat16)
.cuda()
)
generation_config = dict(
num_beams=1,
max_new_tokens=512,
do_sample=False,
)
# single-round single-image dialog
query = (
"Extract the corporate, date, deal with and whole in json format."
"Reply with a legitimate JSON solely."
)
# print(mannequin)
response = mannequin.chat(tokenizer, pixel_values, query, generation_config)
print(response)
Kết quả:
```json
{
"firm": "SAM SAM TRADING CO",
"date": "Fri, 29-12-2017",
"deal with": "67, JLN MENHAW 25/63 TNN SRI HUDA, 40400 SHAH ALAM",
"whole": "RM 14.10"
}
```
Mã này:
- Tải mô hình từ trung tâm Ôm Mặt.
- Tải hình ảnh biên nhận mẫu và chuyển đổi nó thành tensor.
- Đặt câu hỏi yêu cầu người mẫu trích xuất thông tin liên quan từ hình ảnh.
- Chạy mô hình và xuất thông tin được trích xuất ở định dạng JSON.
Đánh giá zero-shot này cho thấy kết quả ấn tượng, đạt được điểm tương tự mờ trung bình là 74,24%. Điều này chứng tỏ khả năng hiểu biên lai và trích xuất thông tin của InternVL mà không cần tinh chỉnh.
Để tăng thêm độ chính xác, chúng tôi sẽ tinh chỉnh mô hình bằng QLoRA. Đây là cách chúng tôi triển khai nó:
_data = load_data(args.data_path, fold="prepare")# Quantization Config
quant_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
)
mannequin = InternVLChatModel.from_pretrained(
path,
device_map={"": 0},
quantization_config=quant_config,
torch_dtype=torch.bfloat16,
)
tokenizer = InternLM2Tokenizer.from_pretrained(path)
# set the max variety of tiles in `max_num`
img_context_token_id = tokenizer.convert_tokens_to_ids(IMG_CONTEXT_TOKEN)
print("img_context_token_id", img_context_token_id)
mannequin.img_context_token_id = img_context_token_id
mannequin.config.llm_config.use_cache = False
mannequin = wrap_lora(mannequin, r=128, lora_alpha=256)
training_data = SFTDataset(
knowledge=_data, template=mannequin.config.template, tokenizer=tokenizer
)
collator = CustomDataCollator(pad_token=tokenizer.pad_token_id, ignore_index=-100)
img_context_token_id = tokenizer.convert_tokens_to_ids(IMG_CONTEXT_TOKEN)
print("img_context_token_id", img_context_token_id)
mannequin.img_context_token_id = img_context_token_id
print("mannequin.img_context_token_id", mannequin.img_context_token_id)
train_params = TrainingArguments(
output_dir=str(BASE_PATH / "results_modified"),
num_train_epochs=EPOCHS,
per_device_train_batch_size=1,
gradient_accumulation_steps=16,
optim="paged_adamw_32bit",
save_steps=len(training_data) // 10,
logging_steps=len(training_data) // 50,
learning_rate=5e-4,
lr_scheduler_type="cosine",
warmup_steps=100,
weight_decay=0.001,
max_steps=-1,
group_by_length=False,
max_grad_norm=1.0,
)
# Coach
fine_tuning = SFTTrainer(
mannequin=mannequin,
train_dataset=training_data,
dataset_text_field="###",
tokenizer=tokenizer,
args=train_params,
data_collator=collator,
max_seq_length=tokenizer.model_max_length,
)
print(fine_tuning.mannequin.print_trainable_parameters())
# Coaching
fine_tuning.prepare()
# Save Mannequin
fine_tuning.mannequin.save_pretrained(refined_model)
Mã này:
- Tải mô hình đã bật lượng tử hóa.
- Kết thúc mô hình bằng LoRA, thêm các bộ điều hợp có thể huấn luyện được.
- Tạo một tập dữ liệu từ tập dữ liệu SROIE.
- Xác định các đối số đào tạo như tốc độ học tập, kích thước lô và kỷ nguyên.
- Khởi tạo một huấn luyện viên để xử lý quá trình đào tạo.
- Huấn luyện mô hình trên tập dữ liệu SROIE.
- Lưu mô hình tinh chỉnh.
Dưới đây là mẫu so sánh giữa mô hình cơ sở và mô hình tinh chỉnh QLoRA:
Floor Fact: {
"firm": "YONG TAT HARDWARE TRADING",
"date": "13/03/2018",
"deal with": "NO 4,JALAN PERJIRANAN 10, TAMAN AIR BIRU, 81700 PASIR GUDANG, JOHOR.",
"whole": "72.00"
}
Prediction Base: KO
```json
{
"firm": "YONG TAT HARDWARE TRADING",
"date": "13/03/2016",
"deal with": "JM092487-D",
"whole": "67.92"
}
```
Prediction QLoRA: OK
{
"firm": "YONG TAT HARDWARE TRADING",
"date": "13/03/2018",
"deal with": "NO 4, JALAN PERUBANAN 10, TAMAN AIR BIRU, 81700 PASIR GUDANG, JOHOR",
"whole": "72.00"
}
Sau khi tinh chỉnh với QLoRA, mô hình của chúng tôi đạt được kết quả đáng chú ý 95,4% điểm tương tự mờ, một sự cải thiện đáng kể so với hiệu suất cơ bản (74,24%). Điều này chứng tỏ sức mạnh của QLoRA trong việc nâng cao độ chính xác của mô hình mà không yêu cầu tài nguyên tính toán lớn (đào tạo 15 phút trên 600 mẫu trên GPU RTX 3080).
Chúng tôi đã xây dựng thành công quy trình hiểu rõ về biên nhận bằng cách sử dụng InternVL và QLoRA. Cách tiếp cận này cho thấy tiềm năng của LLM đa phương thức cho các nhiệm vụ trong thế giới thực như phân tích tài liệu và trích xuất thông tin. Trong trường hợp sử dụng ví dụ này, chúng tôi đã đạt được 30 điểm về chất lượng dự đoán bằng cách sử dụng vài trăm ví dụ và thời gian tính toán vài phút trên GPU tiêu dùng.
Bạn có thể tìm thấy cách triển khai mã đầy đủ cho dự án này đây.
Sự phát triển của LLM đa phương thức chỉ mới bắt đầu và tương lai có nhiều khả năng thú vị. Lĩnh vực xử lý tài liệu tự động có tiềm năng to lớn trong kỷ nguyên MLLM. Những mô hình này có thể cách mạng hóa cách chúng tôi trích xuất thông tin từ hợp đồng, hóa đơn và các tài liệu khác, yêu cầu dữ liệu đào tạo tối thiểu. Bằng cách tích hợp văn bản và hình ảnh, họ có thể phân tích bố cục của các tài liệu phức tạp với độ chính xác chưa từng có, mở đường cho việc quản lý thông tin thông minh và hiệu quả hơn.
Tương lai của AI là đa phương thức và InternVL và QLoRA là những công cụ mạnh mẽ giúp chúng tôi khai thác tiềm năng của nó với ngân sách điện toán nhỏ.
Liên kết:
Mã số: https://github.com/CVxTz/doc-llm
Nguồn tập dữ liệu: https://rrc.cvc.uab.es/?ch=13&com=introduction
Giấy phép tập dữ liệu: được cấp phép theo giấy phép Giấy phép quốc tế Creative Commons Ghi công 4.0.
[ad_2]
Source link