undertheseanlp / underthesea

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

Word tokenizing issue with vietnamese human names. #679

Closed cnydo closed 1 year ago

cnydo commented 1 year ago

Em để ý tên người (lowercased) mà chứa các từ thành phần có nghĩa thì không thể tokenize đúng cả tên được. Ví dụ như sau:

text = 'Á hậu trương mỹ nhân lấn sân điện ảnh'
uts.word_tokenize(text, format='text')
>>> 'á_hậu trương mỹ_nhân lấn_sân điện_ảnh'
# expected 'á_hậu trương_mỹ_nhân lấn_sân điện_ảnh'

text = 'đông nhi - ông cao_thắng chia_sẻ bí_quyết hôn_nhân'
uts.word_tokenize(text, format='text')
>>> 'đông nhi - ông cao_thắng chia_sẻ bí_quyết hôn_nhân'
# expected 'đông nhi - ông_cao_thắng chia_sẻ bí_quyết hôn_nhân'

text = 'huyền thoại lý tiểu long'
uts.word_tokenize(text, format='text')
>>>'huyền_thoại lý tiểu long'
# expected huyền_thoại lý_tiểu_long

text = 'ca sĩ đàm vĩnh hưng'
uts.word_tokenize(text, format='text')
>>> 'ca_sĩ đàm vĩnh_hưng'
# expected 'ca_sĩ đàm_vĩnh_hưng'

Tokenizer của pyvi và vncorenlp cũng gặp khó khăn với lowercased name như trên.

Workarounds em đã thử:

text = 'Á hậu Trương Mỹ nhân lấn sân điện ảnh' uts.word_tokenize(text, format='text')

'Á_hậu Trương_Mỹ_nhân lấn_sân điện_ảnh'

text = 'huyền thoại Lý Tiểu Long' uts.word_tokenize(text, format='text')

'huyền_thoại Lý_Tiểu_Long'

text = 'ca sĩ Đàm Vĩnh Hưng' uts.word_tokenize(text, format='text')

'ca_sĩ Đàm_Vĩnh_Hưng'

rain1024 commented 1 year ago

@cnydo Thanks em đã report. Vấn đề này đúng là "kinh điển" trong NLP rồi

Anh kiểm thì thấy GPT-3.5 và GPT-4 cũng gặp vấn đề này

GPT-4

Selection_404

GPT-3.5

Selection_403