undertheseanlp / underthesea

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

Add new tokenizer to underthesea #648

Closed ngovanminh3232 closed 1 year ago

ngovanminh3232 commented 1 year ago

Em đang muốn thêm một từ bất kì vào underthesea để tokenizer. Tuy nhiên underthesea chưa có phương thức nào hỗ trợ cụ thể ạ. Ví dụ như: FIS BANK sẽ nhận là FIS_BANK Em có tham khảo underthesea_tokenizer nhưng soure_code đã cũ. Mong được tác giả phản hồi ạ em xin cảm ơn.

rain1024 commented 1 year ago

@ngovanminh3232

Em có tham khảo underthesea_tokenizer nhưng soure_code đã cũ.

Chắc em nói đến repository undertheseanlp/word_tokenize đúng không? Đúng là hiện tại thì mình đã archive repo này rồi.

Em đang muốn thêm một từ bất kì vào underthesea để tokenizer. Tuy nhiên underthesea chưa có phương thức nào hỗ trợ cụ thể ạ. Ví dụ như: FIS BANK sẽ nhận là FIS_BANK

Ý tưởng của em khá thú vị.

Mình nghĩ sẽ thêm một option fixed_words trong hàm word_tokenize cho việc này

Ví dụ:

>>> text = "Tổng Giám đốc FIS Bank, đại diện Liên danh FIS-Intellect chia sẻ về Dự án"
>>> word_tokenize(text, fixed_words=["FIS BANK"])
["Tổng Giám đốc", "FIS Bank", "đại diện", "Liên danh FIS-Intellect", "chia sẻ", "về", "Dự án"]

Em thấy có ổn không?

Để tạo dữ liệu test, em có thể cung cấp cho mình khoảng 10 ví dụ khác không?

Update 1: Mình có explore vấn đề này, thì liên quan đến việc multiword expressions, có 2 vấn đề

Ví dụ:

>>> text = "Tổng giám đốc FIS Bank"
>>> # Failed Results
>>> word_tokenize(text)
["Tổng giám đốc", "FIS", "Bank"]
>>> # Expected
["Tổng giám đốc", "FIS Bank"

Nguyên nhân:

Ví dụ:

>>> text = ". Dân công sở"
>>> # Failed Results 
>>> word_tokenize(text)
[". Dân công sở"]
>>> # Expected
[".", "Dân công sở"]

Em đang quan tâm đến vấn đề 1 thôi đúng không?

ngovanminh3232 commented 1 year ago

Dạ vâng em hiện đang quan tâm vấn đề 1 thôi ạ. Nhưng một số trường hợp tokenizer không như mong muốn Ví dụ:

line = "Viện trưởng Viện nghiên cứu FPT và PGS.TS Lê Hồng Phương - Chuyên gia về xử lý ngôn ngữ tự nhiên và Học máy thống kê" word_tokenize(line) ['Viện trưởng','Viện','nghiên cứu','FPT', 'và','PGS.TS','Lê Hồng Phương','-','Chuyên gia','về','xử lý','ngôn ngữ','tự nhiên','và','Học','máy','thống kê','.']

Kết quả không như mong muốn như từ "Viện nghiên cứu" và "Học máy" lại tách thành 2 từ. Em nghĩ do từ điển mình chưa được training cho trường hợp này. Em vẫn muốn training lại tùy vào bộ data của em nên mong muốn @rain1024 hướng dẫn lại phần training cho tokenizer ạ.

rain1024 commented 1 year ago

@ngovanminh3232 Hiện tại mình vừa release underthesea version 6.1.2

Thêm param fixed_words cho hàm word_tokenize, em thử xem nhé

Ví dụ:

>>> from underthesea import word_tokenize
>>> text = "Viện Nghiên Cứu chiến lược quốc gia về học máy"
>>> fixed_words = ["Viện Nghiên Cứu", "học máy"]
>>> word_tokenize(text, fixed_words=fixed_words)
"Viện_Nghiên_Cứu chiến_lược quốc_gia về học_máy"

Em vẫn muốn training lại tùy vào bộ data của em nên mong muốn

Về vấn đề này em thảo luận và theo dõi ở issue #502 (cũng hơi lâu rồi :D)

ngovanminh3232 commented 1 year ago

Em cảm ơn thầy tuy nhiên em có xem lại #502 nhưng không thấy có cách hướng dẫn cụ thể ạ. Liệu thầy có thể cung cấp thêm hướng dẫn được không ạ?

ngovanminh3232 commented 1 year ago

Cảm ơn thầy đã giải đáp.
Các bạn khác đến sau thì vào #502 để biết thêm thông tin nhé