Skip to content

sngjuk/character-aware-kr-oov-inference-model

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

README

  1. Fasttext 모델이 OOV에 대하여 더 강건하고 정확한 결과를 보입니다.
  2. 아래의 결과들은 cherry picked 되었기에 본 토이모델 사용을 추천하지 않습니다.
  3. 학습에 사용한 데이터: mecab 형태소분석으로 조사등이 제거된 줄바꿈이 없는 나무위키 텍스트 (449mb) google drive
  • 형태소 분석 없이 유의미한 문장들을 길이로 추려낸 줄바꿈 포함 나무위키 텍스트 (220mb) google drive

Model
임베딩으로부터 단어를 Input X, 벡터를 Output Y로 재학습시켜 자소단위로 OOV 추론이 가능한 모델을 구현과 실험.
Character-Aware-Language model을 참고하였고 모델과 학습 대부분의 코드는 mkroutikov 구현에서 가져옴.

--Train Usage :

python ph_train.py --input_vec=input.vec --model_save_path=./save_dir/

Requirements - export LANG=ko_KR.utf8 환경변수 설정, hgtk (pip install hgtk) 자소분리, tensorflow >= 1.0
Input - input_vec.vec (gensim format)
Output - Trained Model
[checkpoint, model.ckpt-xxxx.data-00000-of-00001, model.ckpt-xxxx.index, model.ckpt-xxxx.meta]

--Inference Usage :
python ph_train.py --inference_mode --model_save_path=./save_dir/ --input_vec=input.vec
Inference 모드는 input.vec 사용하지 않지만 구조상 입력.

Input - OOV 단어
Output - 해당 단어에대한 Vector
*fastText와 동일 format: stdin, stdout

--OOV sim test Usage:
python ph_oov_test.py ./saved_model/ ./data/NN-numalp-space-ep200em200min24.vec
** Similarity test에서는 oov추론시마다 모델을 GPU에 새로 load하기 때문에 실행이 오래걸리지만 실제사용시에는 cat queries.txt | python --- 과 같이 pipe를 이용해 여러 oov 를 한번에 전달하고 결과를 한번에 받을 수 있음.


결과/분석

  1. 어렵지 않은 단어에 대해서는 나쁘지 않은 추론을 하는 것으로 보이나 수박아이스크림(수박/아이/스크림, 수박/아이스/크림)과 같이 중의적인 의미의 단어에 대해 낮은 성능 보임.
  2. loss 낮을수록 OOV의 의미를 추론하는 성능저하.
  3. 현재는 자소 구성중심으로 벡터를 만듦. Highway network 추가하는것으로 의미에 비중을 둔 추론을 할 수 있을것.
  4. 현재까지는 본 모델보다 FastText 추론이 robust한 결과를 보임. 나무위키 임베딩데이터 외에는 실험하지 못했음.


향후과제
1. parameter 실험, 음소 아닌 음절단위로 학습. 2. 480MB의 나무위키 데이터가 아닌 다른 데이터로 학습. 3. 임시 검증방법 수정.

Releases

No releases published

Packages

No packages published

Languages