PyThaiNLP
บทความนี้จะแนะนำการใช้งาน PyThaiNLP บนระบบ TARA HPC เบื้องต้น ร่วมกับการทำงานกับ jupyter notebook ซึ่งต้อง ssh tunneling ไปยัง TARA HPC โดยจะนำเสนอเป็นลำดับขั้นตอนต่อไป
โดยผู้ใช้งาน ThaiSC ที่มี user account สามารถสำเนาไฟล์ 'intro_pythainlp_232.ipynb’ เพื่อไปทดลองตามตัวอย่างนี้ได้จาก /tarafs/data/project/common/AI/examples/
ติดตั้ง PyThaiNLP บน TARA แบบ virtualenv
https://github.com/PyThaiNLP/pythainlp
เนื่องจาก PyThaiNLP เวอร์ชั่นที่ stable ปัจจุบันทำงานร่วมกับ Python 3.7 เราจึงเลือก load module Python เวอร์ชัน 3.7 บน TARA แล้ว activate venv ขึ้นมาจัดการ environment นี้ ดังแสดงในตัวอย่าง
[username@tara-frontend-1 ~]$ mkdir nlp
[username@tara-frontend-1 ~]$ cd nlp/
[username@tara-frontend-1 nlp]$ ml av Python
------------------------------------- /tarafs/utils/modules/modules/all --------------------------------------
LAMMPS/3Mar2020-foss-2019b-Python-3.7.4-kokkos SciPy-bundle/2019.10-foss-2019b-Python-3.7.4
PLUMED/2.5.3-foss-2019b-Python-3.7.4 Trinity/2.9.1-foss-2019b-Python-3.7.4
Python/2.7.16-GCCcore-8.3.0 Unicycler/0.4.8-foss-2019b-Python-3.7.4
Python/2.7.18-GCCcore-10.2.0 archspec/0.1.0-GCCcore-8.3.0-Python-3.7.4
Python/2.7.18-GCCcore-10.3.0-bare h5py/2.10.0-foss-2019b-Python-3.7.4
Python/3.7.4-GCCcore-8.3.0 matplotlib/3.1.1-foss-2019b-Python-3.7.4
Python/3.8.6-GCCcore-10.2.0 molmod/1.4.5-foss-2019b-Python-3.7.4
Python/3.9.5-GCCcore-10.3.0-bare pkgconfig/1.5.1-GCCcore-8.3.0-Python-3.7.4
Python/3.9.5-GCCcore-10.3.0 (L,D) yaff/1.6.0-foss-2019b-Python-3.7.4
Where:
L: Module is loaded
D: Default Module
Use "module spider" to find all possible modules.
Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
[username@tara-frontend-1 nlp]$ ml Python/3.7.4-GCCcore-8.3.0
[username@tara-frontend-1 nlp]$ ml
Currently Loaded Modules:
1) OpenSSL/1.1 8) SQLite/3.29.0-GCCcore-8.3.0
2) binutils/2.32-GCCcore-8.3.0 9) XZ/5.2.4-GCCcore-8.3.0
3) bzip2/1.0.8-GCCcore-8.3.0 10) GMP/6.1.2-GCCcore-8.3.0
4) ncurses/6.1-GCCcore-8.3.0 (H) 11) GCCcore/8.3.0
5) libreadline/8.0-GCCcore-8.3.0 (H) 12) libffi/3.2.1-GCCcore-8.3.0 (H)
6) zlib/1.2.11-GCCcore-8.3.0 (H) 13) Python/3.7.4-GCCcore-8.3.0
7) Tcl/8.6.9-GCCcore-8.3.0
Where:
H: Hidden Module
[username@tara-frontend-1 nlp]$ virtualenv venv
Using base prefix '/tarafs/utils/modules/software/Python/3.7.4-GCCcore-8.3.0'
...
done.
[username@tara-frontend-1 nlp]$ source venv/bin/activate
(venv) [username@tara-frontend-1 nlp]$
โดยสรุปจากตัวอย่างข้างต้น เราได้ดำเนินการ 4 ขั้นตอนคือ
ml av Python
เพื่อหาเวอร์ชั่นที่เหมาะสมของ Python ในระบบ TARAml Python/3.7.4-GCCcore-8.3.0
เพื่อโหลดเวอร์ชั่นที่ต้องการใช้งานขึ้นมาvirtualenv venv
เรียกใช้ virtualenv และสร้าง venv ขึ้นมาsource venv/bin/activate
source activate environment ขี้นมาใช้งาน
ซึ่งเราจะทำการติดตั้ง PyThaiNLP ใน venv ที่เราเตรียมไว้ โดยเลือกติดตั้งแบบ extra – attacut, ml, wordnet, benchmarks และ thai2fit เพิ่มเติมเพราะเราพอทราบว่าต้องการใช้งาน
5. ใช้คำสั่ง pip install --upgrade pythainlp[attacut,ml,wordnet,benchmarks,thai2fit]
ดังแสดงในตัวอย่างด้านล่าง
ที่เราไม่ติดตั้ง pythainlp[full] เพราะมันพังที่ ICU
(venv) [username@tara-frontend-1 nlp]$ pip install --upgrade pythainlp[attacut,ml,wordnet,benchmarks,thai2fit]
Collecting pythainlp[attacut,benchmarks,ml,thai2fit,wordnet]
Using cached pythainlp-2.3.2-py3-none-any.whl (11.0 MB)
...
Successfully installed attacut-1.0.6 docopt-0.6.2 emoji-1.5.0 fire-0.4.0 gensim-4.1.2 nptyping-1.4.4 pythainlp-2.3.2 ssg-0.0.8 typish-1.9.3
(venv) [username@tara-frontend-1 nlp]$
เสร็จสรรพเราก็ได้ pythainlp เวอร์ชั่น 2.3.2 ใน environment nlp ของเรา โดยที่ pythainlp จะมีการเชื่อมต่อกับ data catalog ที่หลากหลายมาให้ ดาวน์โหลดกันด้วย
(venv) [username@tara-frontend-1 nlp]$ thainlp data catalog
Dataset/corpus available for download:
- g2p 0.1
- lst20-cls 0.2
- ltw2v 0.1
- oscar_icu 1.0
- pos_lst20_perceptron 0.2.3
- pos_lst20_unigram 0.2.3
- scb_1m_en-th_moses 1.0
- scb_1m_en-th_spm 1.0
- scb_1m_th-en_newmm 1.0
- scb_1m_th-en_spm 1.0
- scb_en_th 1.0
- scb_th_en 1.0
- test 0.1
- thai-g2p 0.1
- thai2fit_wv 0.1
- thai2rom-dataset 0.1
- thai2rom-pytorch 0.1
- thai2rom-pytorch-attn 0.1
- thai_w2p 0.1
- thainer 1.5
- thainer-1.4 1.4
- tnc_bigram_word_freqs 2017
- tnc_trigram_word_freqs 2017
- wiki_itos_lstm 0.32
- wiki_lm_lstm 0.32
Use subcommand 'get' to download a dataset.
Example: thainlp data get crfcut
(venv) [username@tara-frontend-1 nlp]$
ทดลองใช้งาน PyThaiNLP ผ่าน Jupyter Notebook
ซึ่งในส่วนของการใช้งาน PyThaiNLP ในตัวอย่างนี้ขอทำตามบทความจาก https://towardsdatascience.com/beginners-guide-to-pythainlp-4df4d58c1fbe
ดังนั้นก่อนอื่นก็อยากทำตามแบบที่ใช้ jupyter notebook ด้วย
1. ทำการติดตั้ง jupyterlab ภายใน environment ที่เตรียมไว้เพิ่มเติม pip install jupyterlab
2. ทำการจองเครื่องใน HPC แบบ sinteract sinteract
ซึ่งจะให้เครื่องประเภท compute node มาหนึ่งตัว
3. เมื่อได้เครื่องแล้วก็จะสามารถสตาร์ทโน้ตบุคใน node ทรัพยากรที่ได้รับมา jupyter notebook --no-browser
ดังแสดงในตัวอย่างด้านล่าง ซึ่งเรากำลังจะเข้าสู่โหมดการใช้งานรวม 4 หน้าต่างเป็นอย่างน้อย กล่าวคือ
Terminal 1 - jupyter notebook --no-browser
Terminal 2 - ssh tunneling from local to HPC
Terminal 3 - ระหว่างการใช้งาน jupyter notebook เราอาจจะอยากติดตั้ง packages เพิ่ม
และหน้าต่างที่สี่คือ browser ของเราที่จะทำการเชื่อมต่อผ่านทางพอร์ตที่เราทำ tunneling เอาไว้ไปหา notebook ที่เราเปิดบน TARA HPC กัน
Terminal 1 - jupyter notebook --no-browser
เราจะเห็นได้ว่า jupyter ใช้พอร์ต 8888 และให้เราเชื่อมต่อกับโน้ตบุคผ่านทาง URLs: http://localhost:8888/?token=58bfd7de821a8722c4e07c0eafad519c868f375e61285982
เปิดหน้า terminal นี้ค้างไว้
Terminal 2 - ssh tunneling from local to HPC
โดยเราต้องใส่ password เพื่อเชื่อมต่อกับ TARA ตามปกติแล้วหน้าจอจะค้างไว้
Browser 1 - เพื่อไปตามพอร์ตที่เชื่อมต่อ tunneling ไว้สำหรับเปิด jupyter notebook
http://localhost:8888/?token=58bfd7de821a8722c4e07c0eafad519c868f375e61285982 โดยใช้ url ที่ได้จากตอน start application ใน Terminal 1 |
Terminal 3 - ติดตั้ง packages หรือ corpus เพิ่ม
เปิด terminal ขึ้นมาอีกหนึ่งหน้าจอ connect ไปที่ Frontend Node ของ TARA แล้วเข้าไปยัง environment ที่เรากำลังใช้งานสำหรับ jupyter notebook ของเรา (venv)
ทั้งนี้ในตัวอย่างที่เลือกใช้นั้นจะต้องมีการดาวน์โหลด corpus เพิ่มเติมทำให้จำเป็นต้องเปิด Terminal ที่สามนี้ขึ้นมาติดตั้งลงใน venv ที่เรากำลังใช้งาน และไม่สามารถติดตั้งผ่าน notebook ได้เนื่องจาก notebook ถูกรันบน compute node ที่ไม่มี Internet
โดยผู้ใช้งาน ThaiSC ที่มี account สามารถสำเนาไฟล์ 'intro_pythainlp_232.ipynb’ เพื่อไปทดลองตามตัวอย่างนี้ได้ที่ /tarafs/data/project/common/AI/examples/intro_pythainlp_232.ipynb
Related articles