일하는/AI, ML

FastText to spaCy

김논리 2021. 5. 25. 15:09

FastText 는 Facebook에서 만든 word representation과 sentence classification의 효율적인 학습을 위한 라이브러리로, Word2Vec 와 같이 단어를 벡터로 만들어 준다. Word2Vec 과의 가장 큰 차이점은 Word2Vec 은 하나의 단어를 쪼갤 수 없는 단위로 생각한다면, FastText 는 하나의 단어 안에도 여러 단어들이 존재할 수 있다고 가정하여 학습을 진행한다. 또한 한국어를 포함한 157개국 언어에 대한 common crawler 와 wikipedia의 데이터를 학습한 pre-trained model을 제공하고 있다.

Install

FastText  github page를 통해 다운로드 받거나, pip module을 설치하여 사용할 수 있다.

$ git clone https://github.com/facebookresearch/fastText.git
$ cd fastText
fastText $ sudo pip install .
# 또는
fastText $ sudo python setup.py install

$ pip install fasttext
Pre-trained model 만 사용할 경우에는 딱히 설치하지 않아도 됨 ^^

Pre-trained model

 

Download pre-trained model

 

pre-trained model은 https://fasttext.cc/docs/en/pretrained-vectors.html 페이지에서 다운로드 받을 수 있으며, 다음 두 가지 형태로 제공된다.

  • text(vec) : 라인마다 단어에 대한 vector가 있는 형태
  • bin : vector 뿐만 아니라 dictionary와 모델의 하이퍼 파라미터와 같은 정보들이 모두 포함된 형태. 모델을 추가로 학습하여 개선할 수 있다.

 

Convert into spacy model

 

text(vec) 모델을 다운로드하여 이를 spacy 모델로 변환하자.

# spacy 설치
$ pip install spacy

# mecab 설치
$ bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)
# 혹은
$ pip install mecab-python3

# mecab-ko 설치
$ wget https://bitbucket.org/eunjeon/mecab-ko/downloads/mecab-0.996-ko-0.9.2.tar.gz
$ tar zxvf mecab-0.996-ko-0.9.2.tar.gz
$ cd mecab-0.996-ko-0.9.2
mecab-0.996-ko-0.9.2 $ ./configure
mecab-0.996-ko-0.9.2 $ make
mecab-0.996-ko-0.9.2 $ make check
mecab-0.996-ko-0.9.2 $ sudo make install

# mecab-ko-dic 설치
$ wget https://bitbucket.org/eunjeon/mecab-ko-dic/downloads/mecab-ko-dic-2.1.1-20180720.tar.gz
$ tar zxfv mecab-ko-dic-2.1.1-20180720.tar.gz
$ cd mecab-ko-dic-2.1.1-20180720
mecab-ko-dic-2.1.1-20180720 $ ./autogen.sh    # audomake version 문제로 에러가 발생하는 경우 수행
mecab-ko-dic-2.1.1-20180720 $ ./configure
mecab-ko-dic-2.1.1-20180720 $ make
mecab-ko-dic-2.1.1-20180720 $ sudo make install

# natto-py 설치
$ pip install natto-py

# convert 수행
$ python -m spacy init vectors ko ./wiki.ko.vec wiki_ko_model/
mecab-ko 및 mecab-ko-dict 설치와 관련된 자세한 내용은 아래 페이지를 참고한다.
https://bitbucket.org/eunjeon/mecab-ko/src/master/README.md

 

 

변환이 완료된 spacy 모델은 다음과 같은 구조를 갖게 된다.

wiki_ko_model
├── config.cfg
├── meta.json
└── vocab
    ├── key2row
    ├── lookups.bin
    ├── strings.json
    └── vectors

 

meta.json 파일을 수정하여 이름 및 버전 정보등을 수정할 수 있다.

 

Model packaging

 

변환된 모델을 spacy 에서 로드할 수 있는 형태로 패키징하자.

$ python -m spacy package ./wiki_ko_model ./

 

ko_model-0.1.0 디렉토리가 생성되며, 다음과 같은 구조를 갖게 된다.

meta.json 파일에 설정된 이름과 버전으로 생성 됨
ko_model-0.1.0
├── MANIFEST.in
├── dist
│   └── ko_model-0.1.0.tar.gz
├── ko_model
│   ├── __init__.py
│   ├── ko_model-0.1.0
│   │   ├── config.cfg
│   │   ├── meta.json
│   │   └── vocab
│   │       ├── key2row
│   │       ├── lookups.bin
│   │       ├── strings.json
│   │       └── vectors
│   └── meta.json
├── ko_model.egg-info
│   ├── PKG-INFO
│   ├── SOURCES.txt
│   ├── dependency_links.txt
│   ├── entry_points.txt
│   ├── not-zip-safe
│   ├── requires.txt
│   └── top_level.txt
├── meta.json
└── setup.py

 

생성된 디렉토리로 이동하여 다음 명령어를 이용하여 모델 생성을 완료한다.

$ cd ko_model-0.1.0
ko_model-0.1.0 $ python setup.py sdist

 

dist 디렉토리 하위에 ko_model-0.1.0.tar.gz 파일이 생성된다.

ko_model-0.1.0/dist
└── ko_model-0.1.0.tar.gz

 

Install model

 

다음 명령어를 이용하여 생성한 모델을 설치한다.

ko_model-0.1.0 $ cd dist
ko_model-0.1.0/dist $ pip install ko_model-0.1.0.tar.gz

 

모델 설치가 완료되면, 다음 명령어로 설치 성공 여부를 확인한다.

$ spacy info ko_model

======================= Info about pipeline 'ko_model' =======================

lang                ko                            
name                model                         
version             0.1.0                         
description                                       
author                                            
email                                             
url                                               
license                                           
spacy_version       >=3.0.5,<3.1.0                
spacy_git_version   53a3b967a                     
vectors             {'width': 300, 'vectors': 879129, 'keys': 879129, 'name': 'ko_model.vectors'}
pipeline            []                            
components          []                            
disabled            []                            
source              /Volumes/DATA/workspace/test/rasa_nlu/rasa-korean/venv/lib/python3.6/site-packages/ko_model

 

 

'일하는 > AI, ML' 카테고리의 다른 글

spaCy  (0) 2021.05.25
GTTS (Google Text to Speech)  (0) 2021.02.03
Rasa NLU Tutorial  (0) 2021.01.21
NLTK Tutorial  (0) 2021.01.21