/vi

Xây dựng tập dữ liệu 500GB (20% done) văn bản tiếng Việt để huấn luyện mô hình ngôn ngữ lớn

Primary LanguagePython

Thử nghiệm trên 4 GPUs A100 160G

Phần cứng tài trợ bởi Nvidia Việt Nam

Chuẩn bị huấn luyện và các thử nghiệm (DONE)

Mỗi mô hình huấn luyện mất 12h (3 lượt x 4h mỗi lượt). Model-5 mất 24h (do x2 data)

  • Chuẩn bị 6GB dữ liệu laws để thử nghiệm với mô hình 1.2 tỉ params

  • Quản lý lấy mẫu huấn luyện

    • Lấy mẫu theo chiều xuôi sao cho mỗi token đc train 1 lần với bigdata
    • Thêm khoảng trượt data_shift để thay đổi cửa sổ lấy mẫu ở lần huấn luyện lặp lại tiếp theo
  • Tokenize dữ liệu và lưu dưới định dạng binidx theo kịch bản lấy mẫu

    • Tknz theo symato_2944 (~5g filtered text = ~2 tỉ tokens)
    • Tknz theo symato_16k (~5g filtered text = ~1.1 tỉ tokens)
      • Tỉ lệ nén bằng 91% sentencepiece_16k trên toàn bộ tập dữ liệu và tập trung nén âm tiết
    • Tknz theo symato_16k_refined (~5g filtered text = ~1.2 tỉ tokens)
      • Tỉ lệ nén bằng 86% sentencepiece_16k trên toàn bộ tập dữ liệu và tập trung nén âm tiết
      • So sánh khả năng nén trên dữ liệu thuần âm tiết tiếng Việt để thấy kết quả vượt trội của symato
      • So sánh khả năng nén trên dữ liệu phi âm tiết để xem nên tích hợp BPE vào symato tới mức độ nào để cân bằng giữa hai loại dữ liệu thuần âm tiết và phi âm tiết.
      • So sánh với Phở-Bert tknz trên một tập dữ liệu ngoài laws, lưu ý Phở-Bert cần tách từ trước khi đưa vào tknz, Symato không cần và chịu thiệt thòi do chỉ được huấn luyện trên laws.
  • Huấn luyện các mô hình sau với dữ liệu laws:

    • Model-1: symato_2944 3 lượt:

      • Lấy mẫu ngẫu nhiên
      • Cách lấy mẫu mới đảm bảo mỗi token được huấn luyện 1 lần
    • Model-2: symato_16k 3 lượt:

      • Mỗi mẫu huấn luyện 1 lần data_shift = 0
      • Mỗi mẫu huấn luyện 1 lần data_shift = 170
      • Mỗi mẫu huấn luyện 1 lần data_shift = 340
    • Model-3: sentencepiece_16k 3 lượt:

      • Mỗi mẫu huấn luyện 1 lần data_shift = 340
      • Mỗi mẫu huấn luyện 1 lần data_shift = 170
      • Mỗi mẫu huấn luyện 1 lần data_shift = 0
    • Model-4: symato_16k_refined 3 lượt:

      • Mỗi mẫu huấn luyện 1 lần data_shift = 0
      • Mỗi mẫu huấn luyện 1 lần data_shift = 170
      • Mỗi mẫu huấn luyện 1 lần data_shift = 340

>> I'M HERE <<

  • Model-5: Huấn luyện một mô hình kết hợp cả 2 cách tknz => Thử nghiệm mới!
    • Viết code trộn 2 loại dữ liệu tknz theo 2 cách khác nhau
    • Mỗi mẫu huấn luyện 1 lần data_shift = 0
    • Mỗi mẫu huấn luyện 1 lần data_shift = 170
    • Mỗi mẫu huấn luyện 1 lần data_shift = 340

Cần tìm thêm

Cần làm thêm

  • dedup truongnews và oscar_vi

Mấu chốt

  • Làm thế nào để có metrics đánh giá "độ tốt" của văn bản?

    • Để có thể chọn văn bản từ tốt tới xấu cho đến một độ lớn nhất định thì dừng lại
    • Để khi huấn luyện chọn ra một tỉ lệ nhất định các văn bản tốt huấn luyện trước?
  • Làm thế nào để lọc ra văn bản vừa "tốt" vừa "đa dạng" từ nhiều nguồn?

    • Cân bằng về số lượng tokens giữa các categories?

DONE


Công cụ mạnh để xử lý ngữ liệu lớn

RESEARCH

Vấn đề phát sinh: cần có hệ thống quản lý dữ liệu văn bản

  • Crawl dữ liệu nên đi theo từng website và có bộ parser riêng cho web đó để lọc nội dung chuẩn ngay từ đầu, tránh bị lẫn sạn. Có APIs để cung cấp json/xml cho apps càng tốt.

  • Crawl dữ liệu như bot của search engine, quản lý văn bản như quản lý search engine quản lý cơ sở dữ liệu

  • Các bài toán quản trị meta data của văn bản:

    • Đánh số thứ tự (id)
    • Độ dài văn bản (theo chars, tokens, paragraphs ...)
    • Full text search indexing
    • n-gram indexing (2,3-gram)
    • MinHash (để dedup)
    • Lưu nguồn văn bản (url)
    • Lĩnh vực (domains) và phân loại (categories)
    • Thời gian cập nhật
  • Các truy vấn trên CSDL văn bản:

    • Tìm cho tôi 1000 văn bản có độ dài ngắn nhất
    • Tìm cho tôi các văn bản có chủ đề "văn hóa"
    • Thống kê số lượng văn bản theo từng chủ đề