상세 컨텐츠

본문 제목

[AWS] 자연어 처리에 있으면 좋은 한국어 띄어쓰기 라이브러리 적용하기 / pyKoSpacing / soysapcing

DevOps 연구 노트/아마존 웹 서비스

by bydawn25 2023. 5. 18. 15:15

본문

pyKoSpacing은 tensorflow를 사용하기 때문에 용량이 매우 크다.

 

https://bydawn25.tistory.com/70

 

[AWS/EC2] No space left on device / pip 설치 시 발생하는 문제

TMPDIR=/mnt/d/tmp/ pip install -U 일단 결론만 이야기 하면 위 명령어로 해결했다. tc2.micro에서 tensorflow로 아주 작은 데이터를 다루는 모델을 작동하기 위해서 여러 라이브러리를 설치해야 한다. 지금 설

bydawn25.tistory.com

여기서 pip install 용량 오류가 났던 이유도  tensorflow를 설치할때 발생했다.

 

AWS EC2에서 설치하고 실행하려니 자꾸 뻑이 나서 instance를 업그레이드 할까 아니면 띄어쓰기 라이브러리를 교체할까 고민하다 Meissy가 얼마나 커질지 모르는 상황에서 자꾸 instance 자체를 업그레이드 하고 싶지 않아서 띄어쓰기 라이브러리를 교체하여 구현해보기로 했다.

 

 

 

 

https://github.com/lovit/soyspacing

 

GitHub - lovit/soyspacing: 띄어쓰기 오류 교정 라이브러리입니다. CRF 와 같은 머신러닝 알고리즘이 아

띄어쓰기 오류 교정 라이브러리입니다. CRF 와 같은 머신러닝 알고리즘이 아닌, 직관적인 접근법으로 띄어쓰기를 교정합니다. - GitHub - lovit/soyspacing: 띄어쓰기 오류 교정 라이브러리입니다. CRF 와

github.com

soyspacing은 pyKoSpacing과 다르게 미리 빌드되어 있는 모델을 제공해주지 않는다.

 

대신 사용자에게 필요한 언어 학습셋을 스스로 학습하여 필요한 모델을 만들 수 있도록 해준다.

 

도메인이 특화되어있는 모델을 개발하려면 이 모델이 더 적합하지 않을 까 싶다.

 

 

 

 

Soyspacing의 작동 메커니즘

soyspacing의 특징이라고 하면 모델을 학습할때 머신러닝 알고리즘이 아닌 휴리스틱 알고리즘을 이용한다.

 

기조는 '띄어써야 할 곳을 띄어쓰지 않았다'인데 문장 학습을 통해 띄어쓰기 확률이 높은 경우를 선별하여 적용하는 것 같다.

 

 

예를 들어,

 

[안녕 하세요]라는 학습 문장이 [안녕하세요]라는 학습문장보다 더 많이 나왔다면 이 모델은 [안녕]이라는 단어를 띄어쓸 확률이 더 높아진다.

 

이 개념을 이용해서 rule을 적용할 수 있게해준다. 즉, 무조건 띄어 쓰거나 무조건 붙여쓰도록 할 수 있다.

 

 

 

 

Soyspacing 설치 및 학습

pip install soyspacing

 

from soyspacing.countbase import CountSpace
corpus_fname = '../demo_model/my_spacing_library.txt'
model = CountSpace()
model.train(corpus_fname)

여기 my_spacing_library에 개발할 도메인의 문장이 가득 적힌 텍스트 파일을 넣어주면 된다.

 

JSON형식도 가능한데 속도는 텍스트 파일이 더 빠르다고 한다.

 

 

 

 

그런데 내가 여기서 햇갈렸던건 대체 저 my_spacing_library가 뭐란말인가.

 

어떻게 생겨먹은 텍스트 파일을 원하는건가 너무너무너무 햇갈렸다

 

여러 블로그 서칭도 해보고 깃헙 파일을 샅샅히 찾아보니 그냥 \n 개행으로 구분된 문장 여러줄을 넣어주면 되는 것 같다.

안녕하세요 저는 풀스택 개발 운영자 입니다.
만나서 반갑습니다. 막상 글을 쓰려고 하면 어떤말을 써야 할 지 모르겠네요.
글을 쓴다는 건 자신의 생각을 모두와 공유하고 정리할 수 있는 소중한 과정인 듯 합니다.
이 라이브러리 파일의 띄어쓰기가 정확할 수록 soyspacing모델의 정확도도 올라가겠죠?

이런식으로 정확한 띄어쓰기 문장이 있는 파일을 넣어주면 된다.

 

 

 

 

항상 느끼는건데 인공지능 모델은 여러 개념들을 학습하고 적용하는 것도 중요하지만 양질의 데이터가 보장하는 측면이 훨씬 훨씬 훨씬 큰것처럼 느껴진다.

 

 

 

 

soyspacing 적용

model = CountSpace()
model.load_model(another_model_fname, json_format=False)

저장된 soyspacing모델을 불러온다.

 

 

 

 

sent_corrected, tags = model.correct(sent)
print(sent_corrected)

correct함수를 사용하면 위에 트레이닝 했던 모델에게 띄어쓰기를 요청할 수 있다.

 

 

더 많은 옵션을 주고 띄어쓰기를 요청할 수 있지만 아직 그 부분에 대한 파악이 부족하여 다음으로 기회를 물리 겠다.

 

 

 

 

rule 적용

무조건 띄어쓰거나 붙여쓰고 싶다면 따로 rule을 사용해주면된다.

 

[만약에] 라는 단어의 만 앞을 무조건 붙이고 싶다면 [만약에 000] 이라고 조건을 주면 무조건 붙여쓰게 된다.

 

Rule.txt파일을 아래처럼 생겼는데 0은 붙이고 1은 띄어쓰는걸 의미한다. 개발자는 "태그가 포함되어 있는 텍스트 파일"이라고 설명한다.

가령 101
진짜 101
가게는 1001
가게로 1001
가게야 1001

 

sent_corrected, tags = model.correct(sent.rules=rule.txt)

이 파일을 만약  rule.txt로 저장했다면 위 correct를 호출할때 인자로(rules=rule.txt) 넘겨주면 된다

 

 

 

 

지금 soyspacing 데이터를 그닥 신경쓰지 않아서 정확도가 매우낮다. 자체 깃헙에서 제공해주는 데이터는 주로 영화관련한 데이터라 영화관련한 문장은 그나마 괜찮은데 다른건 그닥 ..

 

시간이 허락한다면 조금 더 분석해 높은 확률의 띄어쓰기 soy spacing을 만들어보도록 하겠다.

 

 

 

 

 

관련글 더보기