Chuyển tới nội dung chính

BPE học từ vựng như thế nào

Ngữ liệu sửa đượcTừng bước hợp nhấtTính lại thật

BPE học từ vựng như thế nào

Bài trước dùng một từ vựng mảnh viết sẵn. Không ai ngồi viết nó bằng tay. Byte Pair Encoding học từ vựng đó từ ngữ liệu, bằng một phép lặp đơn giản đến mức bạn bấm tay được từng bước.

Byte Pair Encoding (Sennrich, Haddow và Birch, 2016) chỉ làm đúng một việc, lặp đi lặp lại: đếm xem cặp ký hiệu kề nhau nào hay đi cùng nhau nhất trong ngữ liệu, rồi dán hai ký hiệu đó lại thành một ký hiệu mới. Ban đầu mọi từ đều bị xé thành ký tự rời, kèm ký hiệu </w> đánh dấu hết từ. Sau mỗi lần dán, từ vựng dài thêm đúng một mục.

Ngữ liệu mặc định dưới đây chính là ví dụ trong bài báo gốc: low xuất hiện 5 lần, lower 2 lần, newest 6 lần, widest 3 lần. Hãy bấm nút hợp nhất vài lần và nhìn bảng tần suất đổi theo.

Huấn luyện BPE · bấm từng bước hợp nhất
Từ vựng 11Token 95Mảnh / từ 5.94
✎ sửa đượcmột dòng: từ và số lần
Bước 0. Chưa hợp nhất gì: mỗi từ còn là một chuỗi ký tự rời, cộng thêm </w> ở cuối.

Tần suất cặp kề nhau, tính lại ở bước 0

CặpTần suấtSố từ chứaThấy ở
e+s92newest, widest
s+t92newest, widest
t+</w>92newest, widest
w+e82lower, newest
l+o72low, lower
o+w72low, lower
n+e61newest
e+w61newest

còn 6 cặp nữa, tần suất thấp hơn

Mỗi từ đang bị cắt thế nào

  • low×5low</w>4 mảnh
  • lower×2lower</w>6 mảnh
  • newest×6newest</w>7 mảnh
  • widest×3widest</w>7 mảnh

Từ vựng: 11 ký hiệu ban đầu + 0 mảnh học được

low</w>ernstid
0
bước hợp nhất đã chạy
11
mục trong từ vựng
95
token trên toàn ngữ liệu
5.94
mảnh trung bình mỗi từ

Bước đầu tiên luôn là e cộng s. Không phải vì ai chọn sẵn, mà vì bảng tần suất nói thế: cặp đó có mặt 6 lần trong newest và 3 lần trong widest, tổng 9, cao nhất bảng. Bước hai là es cộng t, cũng 9. Bước ba là est cộng </w>, vẫn 9, và đây là chỗ ký hiệu kết thúc từ tỏ ra hữu ích: est nằm cuối từ được học thành một mảnh riêng, khác hẳn est nằm giữa từ. Nhờ vậy hậu tố mới trở thành một đơn vị có nghĩa với mô hình.

Thử sửa ngữ liệu để thấy các con số này không hề được nhúng sẵn. Đổi newest 6 thành newest 1, tần suất cặp e s tụt xuống còn 4 và cặp thắng ở bước một đổi thành l o với tần suất 7. Toàn bộ đường đi phía sau đổi theo. Đó là ý nghĩa của câu "từ vựng được học từ dữ liệu": ngữ liệu khác thì mảnh học được cũng khác, và một bộ tách token huấn luyện trên báo chí sẽ cắt bệnh án theo kiểu rất khác.

Số bước hợp nhất chính là núm chỉnh kích thước từ vựng

Nhìn ô "mục trong từ vựng" khi bạn bấm: nó tăng đều đặn 1 sau mỗi bước, không bao giờ hơn. Từ vựng cuối cùng bằng số ký hiệu ban đầu (ở ví dụ này là 10 ký tự cộng </w>, tức 11) cộng với số bước bạn cho chạy. Trong thực tế, người ta không dừng theo cảm tính mà đặt trước một con số, kiểu 32000 hoặc 50000 mục, rồi cho chạy đúng bấy nhiêu bước hợp nhất. Vậy nên câu "mô hình này có từ vựng 32k" thực chất là câu "chúng tôi cho BPE chạy khoảng 32 nghìn lần dán".

Đi kèm là ô "token trên toàn ngữ liệu", và nó chỉ có thể giảm hoặc giữ nguyên sau mỗi bước. Đây là đánh đổi trung tâm của bài trước, giờ hiện ra bằng số: từ vựng lớn thì chuỗi ngắn (rẻ khi tính, ngữ cảnh chứa được nhiều chữ hơn) nhưng bảng nhúng phình to. Ngữ liệu mẫu bắt đầu ở 95 token và 11 mục từ vựng, kết thúc ở 16 token và 26 mục.

Từ hay gặp thành một mảnh, từ hiếm vẫn vỡ vụn

Bấm tới bước 8 rồi nhìn cột bên phải. newest đã gom thành đúng một mảnh, trong khi lower vẫn còn bốn mảnh là low, e, r, </w>. Chú ý rằng lower ngắn hơn newest, nên đây không phải chuyện độ dài. Nó xuất hiện 2 lần so với 6 lần, thế thôi. Các cặp bên trong từ hay gặp leo lên đầu bảng trước và được dán trước.

Hành vi này là lý do bộ tách token hiện đại hoạt động tốt. Từ thông dụng tốn đúng một token. Từ hiếm, tên riêng, lỗi chính tả, thuật ngữ chuyên ngành thì vỡ ra thành các mảnh quen thuộc thay vì biến thành một token "không biết". Bạn cũng thấy luôn mặt trái: một cái tên hiếm có thể ngốn năm bảy token, và với những mô hình tính tiền theo token thì thứ tiếng nào ít có mặt trong ngữ liệu huấn luyện sẽ đắt hơn hẳn.

Vài chi tiết trong sim đáng để ý:

  • Cột "số từ chứa" khác cột tần suất. Một cặp có thể đạt tần suất cao chỉ nhờ một từ lặp nhiều lần, và mảnh học được khi đó rất hẹp.
  • Hòa tần suất được xử lý bằng cách chọn cặp gặp trước khi quét ngữ liệu từ trái sang phải. Ở bước hai, es tt </w> cùng bằng 9, cặp trước thắng. Bản cài đặt khác có thể phá hòa theo cách khác và cho ra từ vựng hơi lệch.
  • Ngữ liệu mẫu Cặp chồng nhau cho thấy một điểm dễ sai: trong aaa thì cặp a a nằm chồng lên nhau nên bảng đếm được 2, mà dán từ trái sang phải chỉ dán được 1 lần, ra aa a. Bấm một bước trên ngữ liệu đó: cặp thắng ghi tần suất 13 nhưng tổng token chỉ rơi từ 36 xuống 27.

Số bước hợp nhất chính là núm chỉnh kích thước từ vựng: dừng sớm thì từ vựng nhỏ mà mỗi từ vỡ thành nhiều mảnh, chạy lâu thì ngược lại. Bài kích thước từ vựng, độ phủ và đuôi dài Zipf đo đúng cái đánh đổi đó bằng số, trên từ vựng gồm từ nguyên thay vì mảnh.

Điều rút ra

BPE không phải một từ vựng, nó là một quy trình. Cho nó ngữ liệu khác hoặc số bước hợp nhất khác thì bạn nhận được bộ tách token khác, và mọi con số đếm theo token của bạn cũng đổi theo. Khi báo cáo kết quả, nói rõ bộ tách token và kích thước từ vựng cũng quan trọng ngang với nói tên mô hình.

Câu hỏi tự kiểm0/3 đúngchưa trả lời
  1. 1Trên ngữ liệu mẫu của bài báo, vì sao bước hợp nhất đầu tiên là cặp e cộng s?
  2. 2Muốn từ vựng nhỏ lại thì chỉnh cái gì?
  3. 3Sau 8 bước trên ngữ liệu mẫu, newest chỉ còn một mảnh còn lower vẫn bị cắt làm bốn. Vì sao?