Skip to content

Word2Vec ด้วย Gensim ใน Python

Word2Vec คืออะไร ?

ภาพจาก http://gensim.narkive.com/RavqZorK/gensim-4914-graphic-representations-of-word2vec-and-doc2vec

Word2Vec เป็นอัลกอริทึมสอนคอมพิวเตอร์ให้เรียนรู้ภาษาของมนุษย์ โดยอัลกอริทึม Word2Vec จะเรียนรู้ทิศการดำเนินการแทนของคำ ( learning vector representations of words) ที่เรียกว่า "word embeddings" พัฒนาโดย  Mikolov et al นักวิจัยจากกูเกิล

แหล่งข้อมูลอ้างอิง : https://opensource.googleblog.com/2013/08/learning-meaning-behind-words.html และ https://en.wikipedia.org/wiki/Word2vec


สำหรับ Word2Vec ในภาษา Python มีโมดูลที่ชื่อว่า Gensim ซึ่งเป็นโมดูลด้าน Vector Space Modelling ในภาษา Python
ติดตั้งได้ด้วยคำสั่ง : pip install -U gensim

สำหรับในบทความนี้จะเริ่มต้น Word2Vec กับภาษาไทยเลย เพื่อเป็นแนวทางให้ผู้สนใจนำไปใช้งานศึกษาต่อไป

ก่อนอื่นให้ทำการติดตั้ง pythainlp ด้วยคำสั่ง (รองรับเฉพาะ Python 3 เท่านั้น)  : pip3 install pythainlp

เมื่อทำการติดตั้งเสร็จแล้ว ต่อไปมาลองทำ Word2Vec ภาษาไทยในภาษา Python ด้วยโมดูล Gensim กัน

from gensim.models import Word2Vec
from pythainlp.segment.dict import segment
a = ['ฉันรักภาษาไทยเพราะฉันเป็นคนไทยและฉันเป็นคนไทย' ,'ฉันเป็นนักเรียนที่ชื่นชอบวิทยาศาสตร์และเทคโนโลยี' ,'ฉันไม่ใช่โปรแกรมเมอร์เพราะฉันทำมากกว่าคิดเขียนพัฒนาโปรแกรมทดสอบโปรแกรม','ฉันชื่นชอบวิทยาศาสตร์ชอบค้นคว้าตั้งสมมุติฐานและหาคำตอบ']
b = [list(segment(i)) for i in a] # ทำการตัดคำแล้วเก็บใน list จะได้เป็น [['ฉัน',...],['ฉัน',...]...]
model = Word2Vec(b, min_count=1)
aa=model.similar_by_word('เป็น')
print(aa)

ผลลัพธ์

[('ที่', 0.1925012469291687), ('ทดสอบ', 0.15317942202091217), ('คิด', 0.14165477454662323), ('โปรแกรมเมอร์', 0.12399782985448837), ('คำตอบ', 0.10198801755905151), ('รัก', 0.08067327737808228), ('เขียน', 0.06275061517953873), ('เทคโนโลยี', 0.04377558082342148), ('วิทยาศาสตร์', 0.023449702188372612), ('ภาษาไทย', 0.01843630149960518)]

หากเราต้องการผลลัพธ์ที่แม่นยำยิ่งขึ้น ต้องเพิ่มข้อมูลอีกจำนวนมากลงไปให้ Word2Vec ต่อไป เราจึงนำข้อมูลจากวิกิพีเดีย มาใช้งานกับ Word2Vec ดังนี้

คำเตือน !
กรุณาทำในคอมพิวเตอร์ที่มี CPU 1.5 Ghz ขึ้นไป แรมว่างขั้นต่ำ 2 GB เนื้อที่ว่าง 10 GB ขึ้นไป

ให้ทำการโหลดไฟล์ข้อมูลวิกิพีเดียภาษาไทยจาก https://dumps.wikimedia.org/thwiki/latest/thwiki-latest-pages-articles.xml.bz2

ให้ทำการสร้างไฟล์ process_wiki.py และ train_word2vec_model.py โดยมีโค้ดตามนี้
ไฟล์ process_wiki.py

ไฟล์ train_word2vec_model.py

แล้วรันคำสั่ง :

python process_wiki.py thwiki-latest-pages-articles.xml.bz2 wiki.th.text
python train_word2vec_model.py wiki.th.text wiki.th.text.model wiki.th.text.vector

จะได้ไฟล์ข้อมูลพร้อมใช้งานสำหรับทำ Word2Vec ภาษาไทย

เมื่อได้ข้อมูลพร้อมใช้งานแล้ว ต่อไปมาเริ่มการนำไฟล์ข้อมูลมาใช้ทำ Word2Vec ภาษาไทย

import gensim
model = gensim.models.Word2Vec.load("wiki.th.text.model")
print(model.most_similar("แมว"))

ผลลัพธ์

[('แรด', 0.6538625359535217),
 ('ควาย', 0.6497683525085449),
 ('กระรอก', 0.6443219780921936),
 ('แพะ', 0.6345915198326111),
 ('หอย', 0.6138527393341064),
 ('แกะ', 0.6061760187149048),
 ('ปลา', 0.5980139374732971),
 ('กวาง', 0.5922517776489258),
 ('นกแก', 0.5808144211769104),
 ('ไก', 0.5719783306121826)]

เมื่อลองใช้ Word2Vec กับคำว่า "python"

print(model.most_similar("python"))

ผลลัพธ์

[('java', 0.8321578502655029),
 ('perl', 0.7901885509490967),
 ('javascript', 0.7829481959342957),
 ('ssl', 0.7799789905548096),
 ('txt', 0.7792744040489197),
 ('unicode', 0.7791136503219604),
 ('array', 0.7735886573791504),
 ('gel', 0.769564151763916),
 ('api', 0.7694711685180664),
 ('user', 0.7688018083572388)]

อ่านเอกสาร gensim word2vec เพิ่มเติมได้ที่ https://radimrehurek.com/gensim/models/word2vec.html

เขียนบทความโดย นาย วรรณพงษ์  ภัททิยไพบูลย์ ที่ https://python3.wannaphong.com/

2 thoughts on “Word2Vec ด้วย Gensim ใน Python

  1. chop

    ทำไม่ติดตั้งแล้วมันขึ้นแบบนี้ครับ

    PS C:\Users\shop\Desktop> pip install -U gensim
    Collecting gensim
      Using cached gensim-2.3.0-cp36-cp36m-win_amd64.whl
    Requirement already up-to-date: six>=1.5.0 in c:\users\shop\anaconda3\lib\site-packages (from gensim)
    Collecting scipy>=0.18.1 (from gensim)
      Using cached scipy-0.19.1.tar.gz
    Requirement already up-to-date: smart-open>=1.2.1 in c:\users\shop\anaconda3\lib\site-packages (from gensim)
    Requirement already up-to-date: numpy>=1.11.3 in c:\users\shop\anaconda3\lib\site-packages (from gensim)
    Requirement already up-to-date: requests in c:\users\shop\anaconda3\lib\site-packages (from smart-open>=1.2.1->gensim)
    Requirement already up-to-date: bz2file in c:\users\shop\anaconda3\lib\site-packages (from smart-open>=1.2.1->gensim)
    Requirement already up-to-date: boto>=2.32 in c:\users\shop\anaconda3\lib\site-packages (from smart-open>=1.2.1->gensim)
    Requirement already up-to-date: chardet=3.0.2 in c:\users\shop\anaconda3\lib\site-packages (from requests->smart-open>=1.2.1->gensim)
    Requirement already up-to-date: certifi>=2017.4.17 in c:\users\shop\anaconda3\lib\site-packages (from requests->smart-open>=1.2.1->gensim)
    Requirement already up-to-date: urllib3=1.21.1 in c:\users\shop\anaconda3\lib\site-packages (from requests->smart-open>=1.2.1->gensim)
    Requirement already up-to-date: idna=2.5 in c:\users\shop\anaconda3\lib\site-packages (from requests->smart-open>=1.2.1->gensim)
    Building wheels for collected packages: scipy
      Running setup.py bdist_wheel for scipy ... error
      Complete output from command C:\Users\shop\Anaconda3\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\shop\\AppData\\Local\\Temp\\pip-build-s61qpx6m\\scipy\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d C:\Users\shop\AppData\Local\Temp\tmpnq72snozpip-wheel- --python-tag cp36:
      lapack_opt_info:
      lapack_mkl_info:
        libraries mkl_rt not found in ['C:\\Users\\shop\\Anaconda3\\lib', 'C:\\', 'C:\\Users\\shop\\Anaconda3\\libs']
        NOT AVAILABLE
    
      openblas_lapack_info:
        libraries openblas not found in ['C:\\Users\\shop\\Anaconda3\\lib', 'C:\\', 'C:\\Users\\shop\\Anaconda3\\libs']
        NOT AVAILABLE
    
      atlas_3_10_threads_info:
      Setting PTATLAS=ATLAS
      C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\system_info.py:1051: UserWarning: Specified path C:\projects\numpy-wheels\windows-wheel-builder\atlas-builds\atlas-3.11.38-sse2-64\lib is invalid.
        pre_dirs = system_info.get_paths(self, section, key)
      
        NOT AVAILABLE
    
      atlas_3_10_info:
      
        NOT AVAILABLE
    
      atlas_threads_info:
      Setting PTATLAS=ATLAS
      
        NOT AVAILABLE
    
      atlas_info:
      
        NOT AVAILABLE
    
      C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\system_info.py:572: UserWarning:
          Atlas (http://math-atlas.sourceforge.net/) libraries not found.
          Directories to search for the libraries can be specified in the
          numpy/distutils/site.cfg file (section [atlas]) or by setting
          the ATLAS environment variable.
        self.calc_info()
      lapack_info:
        libraries lapack not found in ['C:\\Users\\shop\\Anaconda3\\lib', 'C:\\', 'C:\\Users\\shop\\Anaconda3\\libs']
        NOT AVAILABLE
    
      C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\system_info.py:572: UserWarning:
          Lapack (http://www.netlib.org/lapack/) libraries not found.
          Directories to search for the libraries can be specified in the
          numpy/distutils/site.cfg file (section [lapack]) or by setting
          the LAPACK environment variable.
        self.calc_info()
      lapack_src_info:
        NOT AVAILABLE
    
      C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\system_info.py:572: UserWarning:
          Lapack (http://www.netlib.org/lapack/) sources not found.
          Directories to search for the sources can be specified in the
          numpy/distutils/site.cfg file (section [lapack_src]) or by setting
          the LAPACK_SRC environment variable.
        self.calc_info()
        NOT AVAILABLE
    
      Running from scipy source directory.
      non-existing path in 'scipy\\integrate': 'quadpack.h'
      Traceback (most recent call last):
        File "", line 1, in 
        File "C:\Users\shop\AppData\Local\Temp\pip-build-s61qpx6m\scipy\setup.py", line 416, in 
          setup_package()
        File "C:\Users\shop\AppData\Local\Temp\pip-build-s61qpx6m\scipy\setup.py", line 412, in setup_package
          setup(**metadata)
        File "C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\core.py", line 135, in setup
          config = configuration()
        File "C:\Users\shop\AppData\Local\Temp\pip-build-s61qpx6m\scipy\setup.py", line 336, in configuration
          config.add_subpackage('scipy')
        File "C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\misc_util.py", line 1029, in add_subpackage
          caller_level = 2)
        File "C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\misc_util.py", line 998, in get_subpackage
          caller_level = caller_level + 1)
        File "C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\misc_util.py", line 935, in _get_configuration_from_setup_py
          config = setup_module.configuration(*args)
        File "scipy\setup.py", line 15, in configuration
          config.add_subpackage('linalg')
        File "C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\misc_util.py", line 1029, in add_subpackage
          caller_level = 2)
        File "C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\misc_util.py", line 998, in get_subpackage
          caller_level = caller_level + 1)
        File "C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\misc_util.py", line 935, in _get_configuration_from_setup_py
          config = setup_module.configuration(*args)
        File "scipy\linalg\setup.py", line 20, in configuration
          raise NotFoundError('no lapack/blas resources found')
      numpy.distutils.system_info.NotFoundError: no lapack/blas resources found
    
      ----------------------------------------
      Failed building wheel for scipy
      Running setup.py clean for scipy
      Complete output from command C:\Users\shop\Anaconda3\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\shop\\AppData\\Local\\Temp\\pip-build-s61qpx6m\\scipy\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" clean --all:
    
      `setup.py clean` is not supported, use one of the following instead:
    
        - `git clean -xdf` (cleans all files)
        - `git clean -Xdf` (cleans all versioned files, doesn't touch
                            files that aren't checked into the git repo)
    
      Add `--force` to your command to use it anyway if you must (unsupported).
    
    
      ----------------------------------------
      Failed cleaning build dir for scipy
    Failed to build scipy
    Installing collected packages: scipy, gensim
      Found existing installation: scipy 0.19.0
        Uninstalling scipy-0.19.0:
          Successfully uninstalled scipy-0.19.0
      Running setup.py install for scipy ... error
        Complete output from command C:\Users\shop\Anaconda3\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\shop\\AppData\\Local\\Temp\\pip-build-s61qpx6m\\scipy\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\shop\AppData\Local\Temp\pip-7_9fg5bs-record\install-record.txt --single-version-externally-managed --compile:
    
        Note: if you need reliable uninstall behavior, then install
        with pip instead of using `setup.py install`:
    
          - `pip install .`       (from a git repo or downloaded source
                                   release)
          - `pip install scipy`   (last SciPy release on PyPI)
    
    
        lapack_opt_info:
        lapack_mkl_info:
          libraries mkl_rt not found in ['C:\\Users\\shop\\Anaconda3\\lib', 'C:\\', 'C:\\Users\\shop\\Anaconda3\\libs']
          NOT AVAILABLE
    
        openblas_lapack_info:
          libraries openblas not found in ['C:\\Users\\shop\\Anaconda3\\lib', 'C:\\', 'C:\\Users\\shop\\Anaconda3\\libs']
          NOT AVAILABLE
    
        atlas_3_10_threads_info:
        Setting PTATLAS=ATLAS
        C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\system_info.py:1051: UserWarning: Specified path C:\projects\numpy-wheels\windows-wheel-builder\atlas-builds\atlas-3.11.38-sse2-64\lib is invalid.
          pre_dirs = system_info.get_paths(self, section, key)
        
          NOT AVAILABLE
    
        atlas_3_10_info:
        
          NOT AVAILABLE
    
        atlas_threads_info:
        Setting PTATLAS=ATLAS
        
          NOT AVAILABLE
    
        atlas_info:
        
          NOT AVAILABLE
    
        C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\system_info.py:572: UserWarning:
            Atlas (http://math-atlas.sourceforge.net/) libraries not found.
            Directories to search for the libraries can be specified in the
            numpy/distutils/site.cfg file (section [atlas]) or by setting
            the ATLAS environment variable.
          self.calc_info()
        lapack_info:
          libraries lapack not found in ['C:\\Users\\shop\\Anaconda3\\lib', 'C:\\', 'C:\\Users\\shop\\Anaconda3\\libs']
          NOT AVAILABLE
    
        C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\system_info.py:572: UserWarning:
            Lapack (http://www.netlib.org/lapack/) libraries not found.
            Directories to search for the libraries can be specified in the
            numpy/distutils/site.cfg file (section [lapack]) or by setting
            the LAPACK environment variable.
          self.calc_info()
        lapack_src_info:
          NOT AVAILABLE
    
        C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\system_info.py:572: UserWarning:
            Lapack (http://www.netlib.org/lapack/) sources not found.
            Directories to search for the sources can be specified in the
            numpy/distutils/site.cfg file (section [lapack_src]) or by setting
            the LAPACK_SRC environment variable.
          self.calc_info()
          NOT AVAILABLE
    
        Running from scipy source directory.
        non-existing path in 'scipy\\integrate': 'quadpack.h'
        Traceback (most recent call last):
          File "", line 1, in 
          File "C:\Users\shop\AppData\Local\Temp\pip-build-s61qpx6m\scipy\setup.py", line 416, in 
            setup_package()
          File "C:\Users\shop\AppData\Local\Temp\pip-build-s61qpx6m\scipy\setup.py", line 412, in setup_package
            setup(**metadata)
          File "C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\core.py", line 135, in setup
            config = configuration()
          File "C:\Users\shop\AppData\Local\Temp\pip-build-s61qpx6m\scipy\setup.py", line 336, in configuration
            config.add_subpackage('scipy')
          File "C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\misc_util.py", line 1029, in add_subpackage
            caller_level = 2)
          File "C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\misc_util.py", line 998, in get_subpackage
            caller_level = caller_level + 1)
          File "C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\misc_util.py", line 935, in _get_configuration_from_setup_py
            config = setup_module.configuration(*args)
          File "scipy\setup.py", line 15, in configuration
            config.add_subpackage('linalg')
          File "C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\misc_util.py", line 1029, in add_subpackage
            caller_level = 2)
          File "C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\misc_util.py", line 998, in get_subpackage
            caller_level = caller_level + 1)
          File "C:\Users\shop\Anaconda3\lib\site-packages\numpy\distutils\misc_util.py", line 935, in _get_configuration_from_setup_py
            config = setup_module.configuration(*args)
          File "scipy\linalg\setup.py", line 20, in configuration
            raise NotFoundError('no lapack/blas resources found')
        numpy.distutils.system_info.NotFoundError: no lapack/blas resources found
    
        ----------------------------------------
      Rolling back uninstall of scipy
    Command "C:\Users\shop\Anaconda3\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\shop\\AppData\\Local\\Temp\\pip-build-s61qpx6m\\scipy\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\shop\AppData\Local\Temp\pip-7_9fg5bs-record\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\shop\AppData\Local\Temp\pip-build-s61qpx6m\scipy\
    
    Reply

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *