본문 바로가기

study

러닛 - 자연어 처리 기초

1. NLP(Natural Language Process) 자연어 처리

자연어는 우리가 일상생활에서 쓰는 언어를 말한다. 정형화 되어 있지 않는 자연어를 활용하기 위해서는 다양항 전처리가 필요하다. 이를 통틀어 자연어 처리라고 부른다.

 

1.1. 주요 용어

- 토큰화(tokenizing) : 나는 사람이다. -> (명사), (조사)..
- 정제(normalization) : 알게써 -> 얼겠어
- 어간추출(stemming) : 모두들 안녕하신가? -> 모두, 안녕,합니까?
- 표제어 추출(lemmatization) : 사랑들 좀 합시다. -> 사랑, 하다

1.2. 다양한 모델

Word2Vec, cohesion score 등등이 있다.

 

1.3. KoNLPy

한글 자연어 처리를 위한 패키지로 여러 분석기를 제공하고 있으며 분석기마다 성능이 다르다. 그 중 일반적으로 mecab, okt가 속도가 빠르다고 한다. Kkma는 성능은 좋으나 느리다. 

 

2. 언어학에서 흔히 발견되는 두가지 법칙

두 법칙을 이해하기 위해 간단한 그래프를 그려보았다. 그래프에 사용된 데이터는 우리나라의 현대 시 400편 모음집이다.

# 데이터 출처 - https://github.com/kimyoungjin06
f = open('./poetry.txt','r', encoding = 'utf-8')
data = []
for line in f:
    temp = re.sub('[^가-힣a-zA-Z0-9.,]', ' ', line) # 
    while(temp.find('  ') > -1):
        temp = temp.replace('  ',' ')
    data.append(temp)
f.close()

 

2.1. Zipf's law 

지프의 법칙에 따르면 어떠한 자연어 말뭉치 표현에 나타나는 단어들을 그 사용 빈도가 높은 순서대로 나열하였을 때모든 단어의 사용 빈도는 해당 단어의 순위에 반비례한다따라서 가장 사용 빈도가 높은 단어는 두 번째 단어보다 빈도가 약 두 배 높으며세 번째 단어보다는 빈도가 세 배 높다. wiki 백과 中

# okt 분석기 사용
phr = ' '.join(data)
tag = okt.pos(phr)

# 형태소당 갯수
from collections import Counter
cnt = Counter(tag).most_common(len(tag)) # 빈도가 높은 순으로 정렬
a,b = zip(*cnt)

# 그래프 작성
import matplotlib.pyplot as plt
import numpy as np
plt.title("Zipf's law")
plt.plot(np.arange(1,len(b)+1),b)
plt.xscale('log') # 스케일링
plt.yscale('log') # 스케일링

 

2.2. Heap's law  

문서의 길이가 길어질 때, 등장하는 단어 종류는 줄어든다.

word_set = set()
word_cnt = []
for line in data :
    word_set = word_set | set(line.split(' '))
    word_cnt.append(len(word_set))

plt.plot(word_cnt)
plt.xscale('log')
plt.yscale('log')

 

 

3. 머신러닝 모델

3.1. Word2Vec

텍스트를 워드로 변환한다는 뜻으로 텍스트를 기계가 알아먹게 만들기 위해 벡터로 전환하는 과정은 필수이다. 따라서 연산이 가능해진다. 

- 구글의 Mikolov 2013년 발표한 모델
- 인공 신경망을 이용한 기계학습 모델 단어들을 벡터화
- CBow(continous bag of word) Skip-gram을 이용한 모델링
- 기존 알고리즘에 비해 time complexity reduction

 

3.2. Cohesion score

언어는 시대와 함께 계속 변화한다. 신조어가 생기는 속도는 사람이 직접 만드는 사전이 쫒기 힘들다. Cohesion score는 신조어가 많은 문장을 학습하기 위해 고안된 통계 기반 단어추출 기법이다. 

- 많이 등장하는 문구는 단어일 것이라는 가설에서 출발
- 한국어는 의미와 문법의 어절구조이다.
- 문법 부분의 조건부확률에 따라 점수 부여한다.

 

마치며..

우선 해당 내용은 러닛의 "처음 시작하는 데이터 과학"이라는 강의를 참고하였음을 밝힙니다. 

 

출처 https://github.com/kimyoungjin06

 

kimyoungjin06 - Overview

Ph.D in statistical physics. using C, python, Matlab. Public Problem Research Team, NIMS, Korea - kimyoungjin06

github.com

'study' 카테고리의 다른 글

라이브러리 모듈 패키지 차이  (0) 2020.03.26
Colab 시작하기  (0) 2020.03.26
러닛 - 자연어 처리 기초  (0) 2020.03.25
[Kaggle] IMDB 감정 분석 Part 1  (0) 2020.03.21
아파트 분양가격 동향  (0) 2020.03.19
스타벅스 이디야 매장 수 비교  (0) 2020.03.19