2 điểm bởi GN⁺ 2024-08-20 | 1 bình luận | Chia sẻ qua WhatsApp
  • Đây là một thử nghiệm nhằm phân loại khoảng 8,4 triệu tệp PDF của SafeDocs bằng metadata URL thay vì nội dung gốc, để gắn nhãn cho một kho tài liệu lớn với chi phí thực tế hơn
  • Thay vì toàn bộ 8TB PDF, dự án sử dụng khoảng 8GB metadata và nhãn do LLM tạo ra, áp dụng cách tiếp cận teacher/student kiểu FineWeb vào bài toán phân loại URL PDF
  • Một bộ phân loại học sâu đơn lẻ chỉ đạt 59,14% độ chính xác với Alibaba-large-gte-1.5, nhưng tổ hợp embedding URL và XGBoost đã tăng lên 85,26% sau khi dò siêu tham số
  • Các ensemble XGBoost và LinearRegressor dựa trên TF-IDF cũng lần lượt đạt 67,52%70,68%, cho thấy các phương pháp NLP truyền thống đơn giản đã vượt mốc baseline học sâu ban đầu
  • Bộ dữ liệu nhãn cuối cùng, embedding, thông tin tải dữ liệu gốc và mã nguồn đều được công khai để có thể tái sử dụng cho phân loại PDF hoặc thử nghiệm pipeline dữ liệu cho mô hình VLM/Omni

Kho PDF SafeDocs và mục tiêu phân loại

  • Common Crawl là kho lưu trữ web Internet, và khi gặp PDF thì nó không lưu toàn bộ tệp mà chỉ lưu 1MB đầu tiên rồi cắt bỏ phần còn lại
  • SafeDocs hoặc CC-MAIN-2021-31-PDF-UNTRUNCATED là một corpus được tạo bằng cách tải lại các PDF trong snapshot Common Crawl thành phiên bản không bị cắt
  • Bộ dữ liệu này gồm khoảng 8,4 triệu PDF, với tổng dung lượng 8TB khi giải nén
  • Mục tiêu là phân loại PDF theo nhãn chủ đề
    • Ví dụ: PDF Linear Algebra sẽ vào nhóm Math
    • Ví dụ: giáo trình Anatomy sẽ vào nhóm Medicine

Tạo nhãn bằng metadata URL

  • Thay vì xử lý trực tiếp toàn bộ 8TB nội dung gốc, dự án dùng metadata của bộ dữ liệu gốc
    • Metadata có dung lượng khoảng 8GB văn bản
    • Cột chính là url
  • Tên tệp trong URL có thể là manh mối để suy đoán tính chất tài liệu
    • Ví dụ: Introduction_to_Python_Programming_-_WEB.pdf
    • Tên tệp này cho thấy tài liệu có khả năng liên quan đến giáo dục hoặc kỹ thuật
  • Cách gắn nhãn được lấy từ phương pháp của FineWeb
    • LLM đóng vai trò teacher tạo nhãn từ văn bản phi cấu trúc
    • Một bộ phân loại nhỏ hơn đóng vai trò student được huấn luyện bằng các nhãn đã tạo
  • Dùng prompt và Llama-3-70B qua API together để tạo 100.000 nhãn ban đầu
  • Do phân bố nhãn mất cân bằng và có nhiều lớp nhỏ, các nhãn có ít hơn 250 mẫu được gộp vào other
  • Sau đó lấy tối đa 5.000 mẫu từ mỗi nhãn để cân bằng, tạo ra bộ dữ liệu gắn nhãn gồm tổng cộng 59.000 mẫu

Thử fine-tune mô hình embedding

  • Cách tiếp cận đầu tiên là đưa văn bản URL vào mô hình embedding và fine-tune nó cho bài toán phân loại
  • FineWeb Edu dùng snowflake-arctic-embed-m, nhưng thí nghiệm này cũng xem xét các mô hình đứng đầu trên Massive Text Embeddings Benchmark
  • Các mô hình cỡ khoảng 7B tham số được đánh giá là khó phân loại nhanh 8 triệu PDF, nên tác giả thử các ứng viên nhỏ hơn
    • Stella_en_400M
    • gte-large-1.5
    • Arctic Embed
    • all-mpnet-base
    • distillbert
    • flant-t5-small
    • bert-base-uncased
  • Sử dụng Hugging Face để cố định mô hình nền và chỉ huấn luyện embedding cùng classification head, nên có thể chạy ngay cả trên notebook
  • Trong cách làm này, mô hình tốt nhất là Alibaba-large-gte-1.5, với độ chính xác 59,14%

Đẩy hiệu năng bằng XGBoost

  • Cách tiếp cận thứ hai là không dùng trực tiếp mô hình embedding làm bộ phân loại, mà tạo embedding URL rồi dùng chúng làm đầu vào cho XGBoost
  • Sau khi biến văn bản thành embedding, XGBoost được huấn luyện như trên dữ liệu dạng bảng
  • Dự án đã tạo embedding cho toàn bộ liên kết PDF, với dung lượng khoảng 40GB khi giải nén
    • Dữ liệu embedding được công khai trên Kaggle
  • Thay vì một bộ phân loại lớn duy nhất, tác giả huấn luyện bộ phân loại nhị phân cho từng lớp
  • Hiệu năng trung bình của mô hình XGBoost dùng embedding như sau
    • accuracy: 0.839750
    • precision: 0.859758
    • recall: 0.819733
    • f1: 0.838937
  • Cách tiếp cận này cho độ chính xác cao hơn 24,83 điểm phần trăm so với cách học sâu ban đầu

Kết quả với TF-IDF và LinearRegressor

  • Cách tiếp cận thứ ba là tạo đặc trưng văn bản bằng TF-IDF mà không dùng embedding học sâu
  • TF-IDF là phương pháp gán trọng số cao hơn cho các từ xuất hiện nhiều trong một tài liệu nhưng hiếm trong toàn bộ corpus
  • Hiệu năng XGBoost dựa trên TF-IDF như sau
    • accuracy: 0.675200
    • precision: 0.683185
    • recall: 0.646316
    • f1: 0.662497
  • Dự án cũng thử ensemble LinearRegressor dựa trên TF-IDF
    • accuracy: 0.706802
    • precision: 0.723558
    • recall: 0.663038
    • f1: 0.690286
  • Cả hai cách đều cho độ chính xác cao hơn baseline học sâu ban đầu là 59,14%

Thử lại học sâu với nhiều nhãn LLM hơn

  • Mục tiêu cho bộ phân loại học sâu đơn lẻ được đặt ở mức 70% độ chính xác, nên tác giả tạo thêm nhiều nhãn hơn
  • Các nhãn bổ sung gồm 400.000 mẫu được tạo bằng Llama3.1-7B
    • Lý do dùng mô hình nhỏ hơn trước là để giảm chi phí suy luận
  • Thử nghiệm cho thấy hiệu năng cải thiện khi lượng dữ liệu tăng lên
  • Lấy cảm hứng từ bài The Llama 3 Herd of Models của Meta, tác giả thử roberta-basegte-large hiện có
  • gte-large đạt tối đa 69,22% độ chính xác trên bộ dữ liệu huấn luyện

Hiệu năng cuối cùng theo từng mô hình

  • Kết quả thí nghiệm như sau
Model Name Accuracy
gte-large naïve (59k labels) 59.14%
XGBoost embeddings 83.97%
XGBoost Tf-Idf 67.52%
LinearRegressor Tf-Idf 70.68%
gte-large naïve (400k labels) 69.22%
XGBoost Embeddings HyperParameter Sweep 85.26%
  • Cuối cùng, mô hình tốt nhất là XGBoost embeddings
  • Mô hình XGBoost dùng embedding với dò siêu tham số cho kết quả cao nhất, đạt 85,26% độ chính xác

Phân loại toàn bộ corpus và trực quan hóa

  • Mã cuối cùng có cấu trúc đơn giản: nạp embedding vào bộ nhớ rồi thực hiện dự đoán
  • Việc dự đoán nhãn cho toàn bộ PDF mất khoảng 1 giờ
    • Không dùng GPU vì cấu hình chạy không được thiết lập để tận dụng GPU
  • Kết quả dự đoán và embedding được trực quan hóa bằng PCA và UMAP
  • PCA hiển thị khoảng 8,5 triệu điểm của toàn bộ bộ dữ liệu trong một ảnh
  • UMAP được chạy bằng cách thuê một máy lớn hơn
    • Azure Standard_E48s_v3
    • 48 core
    • 384GB RAM
    • 768GB đĩa
    • UMAP đã chạy đến 6,5 triệu điểm; vượt mức đó thì gần như chạm giới hạn bộ nhớ

Dữ liệu và mã nguồn được công khai

  • Bộ dữ liệu cuối cùng được công khai trên Hugging Face repo
  • Nếu chỉ cần embedding, có thể tải từ Kaggle dataset
  • Thông tin tải bộ dữ liệu SafeDocs gốc có tại S3 bucket
  • Mã phân loại nằm trong đường dẫn classify_metadata của GitHub monorepo
  • PDF là định dạng trộn lẫn dữ liệu và hình ảnh, nên có thể sẽ được dùng thường xuyên hơn trong các pipeline huấn luyện mô hình VLM/Omni

1 bình luận

 
GN⁺ 2024-08-20
Ý kiến trên Hacker News
  • Khoảng năm 2009, tôi từng làm một công việc trực quan hóa tương tự trên khoảng 5,7 triệu bài báo nghiên cứu (PDF, kho ngữ liệu không công khai) của các nhà xuất bản khoa học như Elsevier, Springer
    Newton, G., A. Callahan & M. Dumontier. 2009. Semantic Journal Mapping for Search Visualization in a Large Scale Article Digital Library. Second Workshop on Very Large Digital Libraries at the European Conference on Digital Libraries (ECDL) 2009. https://lekythos.library.ucy.ac.cy/bitstream/handle/10797/14...
    Tôi là tác giả đầu tiên

    • Chắc hẳn đã tốn khối công sức để khai thác toàn bộ các bài báo này
      Nếu benchmark năm 2009 là 13 giờ, tôi tò mò bây giờ tính toán sẽ hoàn tất nhanh đến mức nào
      Nếu là thời nay thì có lẽ mọi người sẽ nhét dữ liệu đó vào UMAP
    • Tôi tò mò thứ tự tác giả được quyết định như thế nào
      Và cũng tò mò liệu dấu ampersand & có ý nghĩa khác với and không, hay chỉ là định dạng trích dẫn
  • Một trong những lợi ích ngày nay ít được bàn đến của embedding là có thể áp dụng gần như nguyên vẹn các kỹ thuật mô hình hóa thống kê hiện có, đồng thời tránh được những tinh tế và cạm bẫy của các bước tiền xử lý NLP phổ biến như stemming
    Bài viết này đặc biệt cho thấy rõ vì sao việc dùng ngay LLM embedding làm bước đầu tiên của NLP, nhất là với tài liệu dài, lại thực tế

    • Ý là có thể áp dụng các kỹ thuật thống kê lên chính embedding à? Tôi tò mò nó hoạt động như thế nào
  • Tôi là tác giả bài viết. Không ngờ bài này lên đầu HN; cứ hỏi bất cứ điều gì

    • Tôi tò mò liệu có tài liệu nào đáng giới thiệu để học kiểu phân tích này không
      Tôi đã xem qua code và thấy nhiều thứ lạ; có vẻ vấn đề không nằm ở bản thân Python mà là có nhiều kỹ thuật phân tích tôi chưa biết
    • Bạn có nhắc đến độ chính xác của nhiều kỹ thuật đã dùng; bạn có thể giải thích thêm cách tính độ chính xác đó không
      Các PDF đã được phân loại sẵn rồi à?
  • Đây là một bài viết thú vị và nhiều chi tiết. Tuy nhiên, khi huấn luyện nhị phân one-vs-rest, nếu cân bằng lớp rồi dùng xác suất lớn nhất khi suy luận, xác suất có thể không được hiệu chuẩn đúng và gây vấn đề
    Tôi tò mò liệu bạn có thực hiện hiệu chuẩn xác suất riêng trước khi lấy argmax không

  • Ngay từ năm 2006 đã có nhiều bộ torrent sách giáo khoa dung lượng 1TB
    Bây giờ chắc kích thước và số lượng còn lớn hơn

    • Đó là trước khi việc tích trữ những tài liệu như vậy để tạo ra các mô hình kinh doanh mập mờ thực sự bùng lên
      Tôi nhớ đến tận năm 2008, việc tìm sách giáo khoa, sách lời giải, các PDF liên quan và tài liệu khác còn dễ hơn nhiều so với 6–8 năm sau đó
      Khác biệt lớn nhất là nhiều trang như Chegg bắt đầu hút các tài liệu đó vào rồi bán lại bằng cách này hay cách khác
    • Cá nhân tôi có khoảng 350GB service manual, datasheet, catalog và ấn phẩm định kỳ
      Phần lớn là tài liệu điện tử và kỹ thuật, lấy từ torrent khoảng 2 năm trước khi tôi muốn thử nghịch GraphQL và tài liệu OSR
    • Nếu muốn thì trên Anna's Archive có nhiều torrent quy mô hàng chục TB
  • Tôi có khoảng 20–40TB PDF (trước khi khử trùng lặp)
    8TB đúng là nhiều, nhưng hoàn toàn chưa gần với toàn bộ quy mô PDF trên thế giới

    • Tôi tò mò bạn sưu tầm những gì. Chủ yếu là mirror những thứ như LibGen à?
      Tôi cũng có một bộ sưu tập ebook, PDF, manga để đọc khá lớn, nhưng khó hình dung một thư viện 20TB lớn đến mức nào
    • Tôi tò mò bạn có định công khai không. Hay điều đó không được phép với dataset đó?
      Rõ ràng là có nhiều PDF hơn 8TB rất nhiều. Có lẽ trong đó có nhiều bản trùng, nhưng do có nhiều hình ảnh nên khử trùng lặp chắc không hiệu quả lắm
  • Bài viết thú vị và vui. Tôi đã thử nghiệm nhiều giải pháp LLM/AI tạo sinh để trích xuất dữ liệu dạng bảng từ PDF, nhưng kết quả kém hơn kỳ vọng
    Chúng làm tốt với việc trích xuất chuỗi văn bản hoặc tóm tắt, chẳng hạn trả lời tổng tiền là bao nhiêu hay được in khi nào, nhưng để xuất ổn định ra CSV thì vẫn có khá nhiều sai số

  • Tuyệt. Ở Airtrain, chúng tôi cũng thấy embedding rất có giá trị trong việc tạo mô hình phân loại
    Nếu muốn làm việc với nhiều văn bản và embedding, gần đây chúng tôi đã khử trùng lặp và tạo embedding cho toàn bộ fineweb-edu (cũng được nhắc trong bài), rồi đưa dataset kết quả lên Hugging Face: https://huggingface.co/datasets/airtrain-ai/fineweb-edu-fort...

  • Ý tưởng rất hay. Dạo này tôi không có nhiều thời gian rảnh, nhưng cách đây không lâu tôi đã nghĩ đến việc làm một dự án tương tự mà cũng khác đôi chút
    Tôi muốn tạo một công cụ mã nguồn mở để tải xuống dữ liệu chuỗi thời gian hữu ích cho khoa học xã hội. Ví dụ như chuỗi thời gian của bình luận mạng xã hội về giá thực phẩm
    Nhờ LLM, có vẻ đã mở ra nhiều góc nghiên cứu mới mà mọi người vẫn chưa dùng nhiều
    Nếu một ngày nào đó làm side project đó, có lẽ tôi sẽ mượn vài ý tưởng hay từ đây

  • Công việc rất tuyệt. Bạn đã kết hợp nhiều cách tiếp cận, tương tự những gì thư viện quốc gia thỉnh thoảng làm. Tôi cũng từng thử đủ kiểu embedding → classifier hoặc LDA
    Tôi tò mò về prompt: https://github.com/snat-s/m/blob/main/classify_metadata/prom...
    Cái này chẳng phải về cơ bản giống như prompt yêu cầu phân loại theo loại URL sao?