undertheseanlp / underthesea

Underthesea - Vietnamese NLP Toolkit
http://undertheseanlp.com
GNU General Public License v3.0
1.37k stars 271 forks source link

Improve tokenizer #568

Closed rain1024 closed 1 year ago

rain1024 commented 1 year ago

Ideas for tokenizer improvement

tiendung commented 1 year ago

1/ Với TV có lẽ cần bước tiền xử lý các âm tiết trước khi cho vào bộ wordpiece (của BERT). vì nhiều khi mình có nhiều cách bỏ dấu khác nhau và mã hóa (unicode) khác nhau. Nên chuẩn hoá về 1 dạng trước

2/ Giả sử tập huấn luyện chỉ toàn âm tiết tiếng Việt thì mình tìm hiểu các cách bẻ âm tiết thanh các đơn vị nhỏ hơn anh nghĩ là bài toán thú vị, vì lúc đó wordpiece (BPE based) sẽ ko còn nhiều giá trị (bởi dùng BPE để handle OOV mà tập âm tiết TV hầu như ko đổi - ko có OOV).

ví dụ nhé: nếu áp dụng BPE thì "á, à, ả, ã, ạ” là 5 symbols khác nhau hoàn toàn nhưng với tiếng Việt chúng có điểm chung: là nguyên âm a kết hợp với thanh điệu (tone). Và trong trường hợp viết ko dấu, gõ nhầm dấu thì việc giữ lại thể hiện nguyên âm + thanh điệu sẽ giúp máy tận dụng nguyên âm và sửa sai tốt hơn.

Kiểu như: Hà Lán, mà BPE bước 1 thì thành H à L á n, convert theo biểu diễn Telex thành Haf LAns chẳng hạn thì BPE bước 1 sẽ thành H a f L a n s ... tức là ta có symbols f và s để biểu diễn thanh điệu.

Ta có thể dùng bất kỳ cách biểu diễn nào miễn nó có lợi nhất cho tiếng Việt, Telex, VIQR, IPA hoặc tự nghĩ ra 1 cách riêng dễ nhớ, dễ dùng hơn ...

rain1024 commented 1 year ago

@tiendung

Với TV có lẽ cần bước tiền xử lý các âm tiết trước khi cho vào bộ wordpiece (của BERT). vì nhiều khi mình có nhiều cách bỏ dấu khác nhau và mã hóa (unicode) khác nhau. Nên chuẩn hoá về 1 dạng trước

Cái này em cũng đang làm một bộ chuẩn hoá, anh xem thử xem okie không nhé

pip install underthesea==1.3.5a3

Run text_normalize

>>> from underthesea import text_normalize
>>> text_normalize('Ðảm baỏ chất lựơng phòng thí nghịêm hoá học')
'Đảm bảo chất lượng phòng thí nghiệm hóa học'

Giả sử tập huấn luyện chỉ toàn âm tiết tiếng Việt thì mình tìm hiểu các cách bẻ âm tiết thanh các đơn vị nhỏ hơn anh nghĩ là bài toán thú vị, vì lúc đó wordpiece (BPE based) sẽ ko còn nhiều giá trị.

Cái này có gì benchmark được không anh nhỉ?

tiendung commented 1 year ago
>>> from underthesea import text_normalize
>>> text_normalize('Ðảm baỏ chất lựơng phòng thí nghịêm hoá học')
'Đảm bảo chất lượng phòng thí nghiệm hóa học'

Cool :)

Giả sử tập huấn luyện chỉ toàn âm tiết tiếng Việt thì mình tìm hiểu các cách bẻ âm tiết thanh các đơn vị nhỏ hơn anh nghĩ là bài toán thú vị, vì lúc đó wordpiece (BPE based) sẽ ko còn nhiều giá trị.

Cái này có gì benchmark được không anh nhỉ?

Được chứ bằng cách so sánh perf của BERT trên nhiều cách tknz khác nhau.

Tiếng Trung họ đã có thử nghiệm rồi Sub-Character Tokenization for Chinese Pretrained Language Models

Screen Shot 2022-09-11 at 10 58 20

Họ có thử nghiệm Char-based encoding (tương đương với syllable-based trong tiếng Việt) vs Pronunciation-based encoding (chữ tượng thanh) vs Glyph-based encoding (nét chữ tượng hình).

rain1024 commented 1 year ago

Họ có thử nghiệm Char-based encoding (tương đương với syllable-based trong tiếng Việt) vs Pronunciation-based encoding (chữ tượng thanh) vs Glyph-based encoding (nét chữ tượng hình).

Kết quả thế nào anh nhỉ?

tiendung commented 1 year ago

Kết quả thế nào anh nhỉ? more efficient and more robust.

more efficient: giảm số lượng tokens trong 1 câu, giúp tăng tốc huấn luyện ... more robust: chịu được typo tốt hơn ...

Em nên đọc hết paper để nắm được hết các khía cạnh thú vị. Ví dụ nhé:

1/ SubChar-Pinyin là biểu diễn dưới dạng phát âm, cho kq tốt nhất.

2/ Họ dùng sentence-piece để phân tách tokens nên các token vượt qua ranh giới từ (điểm khác biệt lớn với wordpiece). Trong hình trên phân tách kiểu sub-word có 12 tokens. Còn phân tách sub-char thì giảm còn 7 tokens.

3/ Trong SubChar-Pinyin, các con số khoanh tròn (1), (2), (3), (4) chính là thanh điệu. Họ để ở cuối âm tiết.

rain1024 commented 1 year ago

This issue was closed because it has been inactive for 7 days since being marked as stale.

Please feel free to reopen it if you need any further support.