Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Underthesea is great but VERY SLOW ! #185

Closed
thusinh1969 opened this issue Jun 16, 2018 · 30 comments
Closed

Underthesea is great but VERY SLOW ! #185

thusinh1969 opened this issue Jun 16, 2018 · 30 comments

Comments

@thusinh1969
Copy link

Underthesea is great but VERY SLOW ! Chậm quá không chạy nổi :( ... HELP !

@rain1024
Copy link
Contributor

rain1024 commented Jun 16, 2018

@thusinh1969 What is your scenario? please give us more detail.

  • What is the size of your corpus?
  • How do you run underthesea? You run word_tokenize, pos_tag, ner or something else?
  • What is your expected?

@rain1024
Copy link
Contributor

@thusinh1969 As an update, I'm working in this problem. The speed of word_tokenize function will be at least 2x faster.

@thanhhau097
Copy link

thanhhau097 commented Sep 7, 2018

from pyvi import ViTokenizer

text = "Đầu giờ chiều ngày 7/9, trao đổi với Báo Giao thông, ông Nguyễn Ngọc Hùng, Giám đốc Sở Thông tin và Truyền thông tỉnh Gia Lai cho biết đã đọc thông tin trên Báo Gia Lai. Thông tin khá mù mờ nhưng rất được người dân quan tâm, ông Hùng nói và cho biết hôm nay họp cả ngày nên chưa kịp yêu cầu Báo Gia Lai báo cáo. Trước đó, báo điện tử Gia Lai đã đăng tải bài báo Một công dân Gia Lai khẳng định phát hiện địa điểm máy bay MH370 rơi. Bài báo thông tin: 4 năm trước, người đàn ông này lúc ấy đang làm ăn tại Đắk Nông trong lúc tình cờ tìm kiếm thông tin hình ảnh vệ tinh trên mạng bỗng thấy một chiếc máy bay có kích thước giống chiếc máy bay MH370 rơi trong một lòng hồ. Sau đó, anh đã quay lại hình ảnh và vị trí chiếc máy bay này trên Google Earth. Hiện nay, lòng hồ mực nước dâng cao, không thể quan sát bằng mắt thường nếu đi trên mặt hồ hoặc chụp ảnh qua vệ tinh. Người này sau đó đã đưa clip lên YouTube, đến nay có hơn 5.700 lượt xem (Tuy nhiên, vì nhiều lý do nên đã được gỡ xuống) nhưng không ai ý kiến gì. Gần đây qua báo chí anh thấy một người Anh đưa thông tin đã phát hiện được máy bay MH370 tại rừng rậm Campuchia. Qua hình ảnh, anh nhận thấy clip của họ giống clip của anh nhưng có dấu hiệu chỉnh sửa hình ảnh máy bay trong clip mà anh đưa lên mạng cách đây 4 năm, vậy nên anh quyết định công bố thông tin này cho báo điện tử Gia Lai. Cũng theo báo điện tử Gia Lai, chiếc máy bay được người này phát hiện đo được độ dài khoảng 60,78m, sải cánh 31,23m, máy bay còn nguyên vẹn, không bị vỡ, đầu cắm xuống lòng hồ. Kích thước này tương đồng với thông tin về chiếc máy bay MH370 của Hãng Hàng không Malaysia. Chiếc máy bay này rơi xuống nước ở độ sâu khoảng 30m và nhiều khả năng ngập dưới bùn 5-6m, chứ không phải nằm trong rừng rậm và không thuộc địa phận Campuchia. Qua hình ảnh có thể thấy cánh chiếc máy bay méo mó, không nhìn rõ, chứng tỏ có thể trước khi rơi, máy bay va chạm nhẹ vào cây rừng hoặc bị ngập sâu dưới bùn đất. Anh này thậm chí còn khẳng định chỉ cần 2-3 ngày là tìm thấy chính xác vị trí chiếc máy bay MH370. Nếu Chính phủ Malaysia đồng ý anh sẽ xin phép các cơ quan chức năng thuê thợ lặn tìm kiếm. Việc tìm kiếm này nếu không đúng thì hãng hàng không Malaysia cũng không mất gì, toàn bộ chi phí người này sẽ chịu." * 8

ViTokenizer.tokenize(text)

import underthesea
underthesea.word_tokenize(text)

@rain1024
Copy link
Contributor

rain1024 commented Sep 7, 2018

Mình đã chạy script này, đúng là tốc độ của underthesea chậm hơn rất nhiều so với pyvi (35k ms so với 93 ms).

Mình sẽ xem xét vấn đề này và fix trong các phiên bản tiếp theo

Cảm ơn @thanhhau097.

@rain1024
Copy link
Contributor

rain1024 commented Sep 17, 2018

@thusinh1969 , @thanhhau097 Mình vừa cập nhật bản underthesea 1.1.9a5, tốc độ tăng lên khoảng 70 lần :D. Mọi người cùng test thử nhé

from underthesea import word_tokenize

text = "Đầu giờ chiều ngày 7/9, trao đổi với Báo Giao thông, ông Nguyễn Ngọc Hùng, Giám đốc Sở Thông tin và Truyền thông tỉnh Gia Lai cho biết đã đọc thông tin trên Báo Gia Lai. Thông tin khá mù mờ nhưng rất được người dân quan tâm, ông Hùng nói và cho biết hôm nay họp cả ngày nên chưa kịp yêu cầu Báo Gia Lai báo cáo. Trước đó, báo điện tử Gia Lai đã đăng tải bài báo Một công dân Gia Lai khẳng định phát hiện địa điểm máy bay MH370 rơi. Bài báo thông tin: 4 năm trước, người đàn ông này lúc ấy đang làm ăn tại Đắk Nông trong lúc tình cờ tìm kiếm thông tin hình ảnh vệ tinh trên mạng bỗng thấy một chiếc máy bay có kích thước giống chiếc máy bay MH370 rơi trong một lòng hồ. Sau đó, anh đã quay lại hình ảnh và vị trí chiếc máy bay này trên Google Earth. Hiện nay, lòng hồ mực nước dâng cao, không thể quan sát bằng mắt thường nếu đi trên mặt hồ hoặc chụp ảnh qua vệ tinh. Người này sau đó đã đưa clip lên YouTube, đến nay có hơn 5.700 lượt xem (Tuy nhiên, vì nhiều lý do nên đã được gỡ xuống) nhưng không ai ý kiến gì. Gần đây qua báo chí anh thấy một người Anh đưa thông tin đã phát hiện được máy bay MH370 tại rừng rậm Campuchia. Qua hình ảnh, anh nhận thấy clip của họ giống clip của anh nhưng có dấu hiệu chỉnh sửa hình ảnh máy bay trong clip mà anh đưa lên mạng cách đây 4 năm, vậy nên anh quyết định công bố thông tin này cho báo điện tử Gia Lai. Cũng theo báo điện tử Gia Lai, chiếc máy bay được người này phát hiện đo được độ dài khoảng 60,78m, sải cánh 31,23m, máy bay còn nguyên vẹn, không bị vỡ, đầu cắm xuống lòng hồ. Kích thước này tương đồng với thông tin về chiếc máy bay MH370 của Hãng Hàng không Malaysia. Chiếc máy bay này rơi xuống nước ở độ sâu khoảng 30m và nhiều khả năng ngập dưới bùn 5-6m, chứ không phải nằm trong rừng rậm và không thuộc địa phận Campuchia. Qua hình ảnh có thể thấy cánh chiếc máy bay méo mó, không nhìn rõ, chứng tỏ có thể trước khi rơi, máy bay va chạm nhẹ vào cây rừng hoặc bị ngập sâu dưới bùn đất. Anh này thậm chí còn khẳng định chỉ cần 2-3 ngày là tìm thấy chính xác vị trí chiếc máy bay MH370. Nếu Chính phủ Malaysia đồng ý anh sẽ xin phép các cơ quan chức năng thuê thợ lặn tìm kiếm. Việc tìm kiếm này nếu không đúng thì hãng hàng không Malaysia cũng không mất gì, toàn bộ chi phí người này sẽ chịu." * 8

import time

start = time.time()
word_tokenize(text)
end = time.time()
print(end - start)

underthesea 1.1.8: 71.851 s

underthesea 1.1.9a5: 0.804 s

@rain1024 rain1024 added this to the 1.1.9 milestone Sep 24, 2018
@kienvht
Copy link

kienvht commented Oct 25, 2018

@rain1024 Mình cũng đang định report lỗi Word Tokenizer rất chậm. Thì đọc được đến đây. Để mình thử tốc độ của 1.1.9a5 xem sao ^^. Cảm ơn bạn

@rain1024
Copy link
Contributor

@kienvht Hiện tại phiên bản underthesea mới nhất 1.1.9a6 đang có tốc độ cho việc tách từ tốt hơn rất nhiều so với 1.1.8. Rất mong @kienvht thử nghiệm và phản hồi

@kienvht
Copy link

kienvht commented Oct 26, 2018

Input: 15.68 MB

$ wc -l sentence100k.txt
100000 sentence100k.txt
$ wc -w sentence100k.txt
2772267 sentence100k.txt

Using underthesea 1.1.9a6:
589.0803015232086

Using pyvi:
118.4729472122134

$pip3 list
underthesea                   1.1.9a6
pyvi                          0.0.9.1

@rain1024
Copy link
Contributor

@kienvht Hiện tại thì underthesea có dùng nhiều features hơn pyvi, nên tốc độ chậm hơn một chút.

Bạn có thử nghiệm với underthesea 1.1.8 không?

@kienvht
Copy link

kienvht commented Oct 29, 2018

@kienvht Hiện tại thì underthesea có dùng nhiều features hơn pyvi, nên tốc độ chậm hơn một chút.

Bạn có thử nghiệm với underthesea 1.1.8 không?

Mình có. Thấy chậm hơn cả 1.1.9a6 nhưng ko đo tốc độ chi tiết ^_^
Bạn cần test gì nữa cứ ới mình nhé @rain1024

@rain1024
Copy link
Contributor

cảm ơn @kienvht nhé

@rain1024 rain1024 mentioned this issue May 8, 2019
16 tasks
@daniellam258
Copy link

Also, can you have a look at sentence tokenizer! It is pretty slow! I ran sent_tokenize on around 30.000 documents and it took about 30mins. However, I manage to solve this issue by multiprocessing. But still slow. Thanks a lot!

@rain1024
Copy link
Contributor

rain1024 commented May 24, 2019

@lhdung258 Thanks for your report.

It's my mistake. The problem is I load my model (from disk, which is time consuming) every time the function sent_tokenize is called.

model_path = join(dirname(__file__), 'st_kiss-strunk-2006_2019_01_13.pkl')
with open(model_path, 'rb') as fs:
punkt_param = pickle.load(fs)

I will fix it in the next version of underthesea

@thusinh1969
Copy link
Author

thusinh1969 commented May 24, 2019 via email

@thusinh1969
Copy link
Author

WOW !!!

@rain1024
Copy link
Contributor

rain1024 commented Nov 13, 2021

(notify nhẹ) Hiện tại mình đang cố gắng làm việc để cải thiện issue này, ý tưởng hiện tại là sử dụng rust để tăng tốc phần tiền xử lý feature trước khi đưa vào CRF.

Đây là code bước đầu cho bạn nào muốn tìm hiểu thêm
https://github.com/undertheseanlp/underthesea/tree/GH-185/extensions/underthesea_core

Issue này là một trăn trở rất lớn của mình :D. Hi vọng rằng sẽ fix được trong thời gian tới :D

  • Thử nghiệm build rust như một subpackage (underthesea-core]
  • Viết lại class TaggedTransformer trong Rust
  • Thay thế class TaggedTransformer
  • Đánh giá tốc độ
  • Phát hành phiên bản v1.3.4
  • Sử dụng rust crf
  • Tiền xử lý trong rust
  • Xử lý đa luồng trong rust
  • Implement regex trên rust

Kết quả đánh giá tốc độ

underthesea-core v0.0.4-alpha.4 vs underthesea v1.3.3 (CRF Featurizers in 10000 sentences)

Old
         6 function calls in 36.460 seconds

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1   36.460   36.460   36.460   36.460 {method 'enable' of '_lsprof.Profiler' objects}
        1    0.000    0.000   36.460   36.460 /home/anhv/anaconda3/envs/underthesea/lib/python3.6/cProfile.py:15(run)


New
         4 function calls in 5.794 seconds

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    5.794    5.794    5.794    5.794 {method 'enable' of '_lsprof.Profiler' objects}
        1    0.000    0.000    5.794    5.794 /home/anhv/anaconda3/envs/underthesea/lib/python3.6/cProfile.py:15(run)


Ratio 6.292174933811583 ( 36.45964899999999 -> 5.794443 )

underthesea-core v0.0.4-alpha.6 vs underthesea v1.3.3 (word_tokenize in 1000 sentences)

`Load 1002 sentences, 50640 tokens
=========================================
         9585693 function calls in 3.682 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1002    1.717    0.002    2.813    0.003 /home/anhv/PycharmProjects/undertheseanlp/underthesea/underthesea/transformer/tagged.py:23(word2features)
     1002    0.622    0.001    0.622    0.001 {method 'tag' of 'pycrfsuite._pycrfsuite.Tagger' objects}

         211499 function calls (211494 primitive calls) in 1.553 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1002    0.691    0.001    0.691    0.001 {method 'process' of 'builtins.CRFFeaturizer' objects}
     1002    0.603    0.001    0.603    0.001 {method 'tag' of 'pycrfsuite._pycrfsuite.Tagger' objects}
 =========================================


Ratio 2.3717061765529954 ( 3.6822279999999994 -> 1.5525649999999993 )
Current Speed
645.38 sentences/sec
32616.99 tokens/sec

@rain1024
Copy link
Contributor

rain1024 commented Nov 14, 2021

Thông tin thêm: Bạn @huybik có làm một đánh giá độc lập khá thú vị ở đây

https://huybik.github.io/Word-Tokenizer-Benchmark/

Dự án coccoc-tokenizer đang có tốc độ khá ấn tượng:

  • Speed: 15M characters / second, or 2.5M tokens / second

@rain1024
Copy link
Contributor

rain1024 commented Nov 17, 2021

Cập nhật kết quả phiên bản v1.3.4-alpha

Benchmark word_tokenize function trên 1000 câu

Version 1.3.4-alpha

631.77 sentences/sec
31928.74 tokens/sec

Version 1.3.3

266.50 sentences/sec
13468.48 tokens/sec

Theo thống kê ở đây, tốc độ của phiên bản mới v1.3.4-alpha đã gấp đôi phiên bản trước v1.3.3

@huybik Bạn có thể làm một đánh giá độc lập giúp underthesea về phiên bản mới này không?

@huybik
Copy link

huybik commented Nov 17, 2021

Ofcourse. Nhân tiện mình cũng sẽ update các tokenizer khác để so sánh với Underthesea.

@huybik
Copy link

huybik commented Nov 17, 2021

@rain1024 pip install --upgrade underthesea==1.3.4a0 lỗi
ERROR: underthesea-core==0.0.4_alpha.6 from https://files.pythonhosted.org/packages/88/67/c04c428c3927b18a3ed7202d3c12f98f581b92a26bebe383a47aaac793b4/underthesea_core-0.0.4_alpha.6.tar.gz#sha256=a2006c4a45d9c345a39ef6fe724980a3280b15012de53aef9762ba9fa62f1fbf (from underthesea==v1.3.4-alpha) has a pyproject.toml file that does not comply with PEP 518: 'build-system.requires' contains an invalid requirement: '==0.9.4'

@rain1024
Copy link
Contributor

rain1024 commented Nov 17, 2021

@huybik Bạn dùng hệ điều hành gì , python environment nào (vevn, conda?) và python phiên bản bao nhiêu vậy?

Update 1: Mình test lại thì phiên bản python 3.6 vẫn ok, nhưng python 3.9 lại gặp lỗi này

Update 2: Mình đã hot fix lỗi này ở bản 1.3.4a1

Bạn thử lại giúp mình nhé

rain1024 pushed a commit that referenced this issue Nov 17, 2021
rain1024 pushed a commit that referenced this issue Nov 17, 2021
@huybik
Copy link

huybik commented Nov 18, 2021

ERROR: Could not find a version that satisfies the requirement underthesea-core==0.0.4_alpha.8 (from underthesea) (from versions: 0.0.1, 0.0.2, 0.0.3, 0.0.4a0, 0.0.4a1, 0.0.4a2, 0.0.4a3, 0.0.4a4, 0.0.4a5, 0.0.4a6)
ERROR: No matching distribution found for underthesea-core==0.0.4_alpha.8

Lỗi underthesea-core==0.0.4a8 chưa được upload. Mình dùng python 3.9.7, conda.

@rain1024
Copy link
Contributor

rain1024 commented Nov 18, 2021

@huybik Bạn dùng hệ điều hành gì nhỉ? Mình test python 3.9.7, conda trên Ubuntu vẫn ổn. Lạ thật

Selection_673

@rain1024 rain1024 modified the milestone: 1.1.9 Nov 18, 2021
@huybik
Copy link

huybik commented Nov 18, 2021

Mybad mình dùng windows (sẽ chuyển qua linux sớm), mình mới check chưa có build cho windows ^^ https://pypi.org/project/underthesea_core/0.0.4_alpha.8/#files

@rain1024
Copy link
Contributor

okie, để mình build thử một bản cho windows xem. Hi vọng sẽ works =))

@rain1024
Copy link
Contributor

@huybik Mình vừa update underthesea_core phiên 0.0.4_alpha.8 có hỗ trợ Windows. Bạn thử lại xem nhé

@huybik
Copy link

huybik commented Nov 18, 2021

Thanks, install và chạy ok, mình sẽ làm review sớm.

rain1024 added a commit that referenced this issue Nov 18, 2021
@huybik
Copy link

huybik commented Nov 18, 2021

@rain1024 Post mình đã online ở https://huybik.github.io/Word-Tokenizer-Benchmark-followup/ . Cảm ơn bạn đã theo dõi.

@rain1024
Copy link
Contributor

rain1024 commented Nov 18, 2021

@huybik Cảm ơn bạn rất nhiều. Sắp tới mình sẽ tiếp tục tăng tốc và cải tiến độ chính xác của underthesea :D

Hi vọng lúc đó bạn sẽ tiếp tục giúp underthesea thực hiện các đánh giá độc lập hữu ích như thế này

@rain1024
Copy link
Contributor

@thusinh1969 @kienvht Hiện tại tốc độ tách từ của underthesea đã cải thiện. Hi vọng các bạn có thể dùng thử và góp ý cho underthesea nhé

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants