반응형
soyspacing
  • 참조 : https://github.com/lovit/soynlp

  • 카카오에서 공개한 khaiii의 경우 뛰어난 성능을 보이지만 띄어쓰기가 잘 되어있지 않으면 성능이 좋지 않습니다. 그래서 lovit님이 공개한 soynlp의 soyspacing을 wikipedia 문서를 통해 학습하려고 합니다.

  • 데이터셋은 한국어임베딩 github에서 다운받았습니다.

Library

In [91]:
!pip install soyspacing
Looking in indexes: http://ftp.daumkakao.com/pypi/simple
Requirement already satisfied: soyspacing in /home/ubuntu/anaconda3/envs/tg_python3/lib/python3.6/site-packages (1.0.17)
Requirement already satisfied: numpy>=1.12.0 in /home/ubuntu/anaconda3/envs/tg_python3/lib/python3.6/site-packages (from soyspacing) (1.18.3)
WARNING: You are using pip version 20.0.2; however, version 20.1 is available.
You should consider upgrading via the '/home/ubuntu/anaconda3/envs/tg_python3/bin/python -m pip install --upgrade pip' command.
In [93]:
from tqdm import tqdm_notebook
import pandas as pd
from soyspacing.countbase import CountSpace

Data Load

In [54]:
wiki= []

with open("/home/ubuntu/dataset/processed/processed_wiki_ko.txt", 'r') as f:
    for s in tqdm_notebook(f):
        wiki.append(s)

wiki = pd.Series(wiki).map(lambda x: x.replace("\\n", " "))
/home/ubuntu/anaconda3/envs/tg_python3/lib/python3.6/site-packages/ipykernel/__main__.py:4: TqdmDeprecationWarning: This function will be removed in tqdm==5.0.0
Please use `tqdm.notebook.tqdm` instead of `tqdm.tqdm_notebook`

Data Write

In [55]:
# 50000건의 wiki 데이터를 text파일로 저장
with open("wiki.txt", 'w') as output:
    for row in wiki:
        output.write(str(row) )

Train

In [56]:
# soyspacing 학습(wiki문서 약31만건)
from soyspacing.countbase import CountSpace
corpus_fname = 'wiki.txt'
model = CountSpace()
model.train(corpus_fname)
all tags length = 21121548 --> 19479615, (num_doc = 311236)

Model Save and Load

In [ ]:
#Model save
model_fname = 'space-correct_wiki.model'
model.save_model(model_fname, json_format=False)

#model Loac
model_fname = 'space-correct_wiki.model'
model = CountSpace()
model.load_model(model_fname, json_format=False)

Evaluate

In [107]:
text = ['아버지가방에들어가신다', '고양이가죽을먹는다', '문재인대통령이연설을시작했다', '현대자동차투싼슈퍼카닷컴']
for n in text:
    print(model.correct(n)[0])
아버지가 방에 들어가신다
고양이가 죽을 먹는다
문재인 대통령이 연설을 시작했다
현대자동차 투싼슈퍼카닷컴
In [111]:
text = ['철구가의자에앉았다', '손나은은청순가련멋쟁이', '오늘저녁은뼈숯불구이다!']
for n in text:
    print(model.correct(n)[0])
철구가의 자에 앉았다
손나은은청순가련멋쟁이
오늘 저녁은뼈숯불구이다!
  • 아래 문장은 일부로 어려운 문장을 넣어봤습니다.
  • 모든 모델이 완벽하지는 않다고 생각하며, khaiii와 함께 사용시 좋아지지않을까? 하는 생각입니다.
In [115]:
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:90% !important;}</style>"))
반응형

'데이터분석 > NLP' 카테고리의 다른 글

[NLP] Python WordCloud 그리기  (0) 2021.11.21
[Keras] RNN 내부동작 알아보기  (0) 2021.08.05
[Keras] Embedding에 대해 알아보자.  (3) 2021.08.05

+ Recent posts