[NLP] 1.프레임워크와 라이브러리
NLP기초
실제 NLP 관련 프로젝트에 들어가기 앞서, NLP 기초를 다지고자 한다
머신러닝 프레임워크와 라이브러리
Tensorflow
- 머신러닝 오픈소스 라이브러리
- 머신러닝과 딥러닝을 직관적이고 손쉽게 할 수 있도록 설계
Keras
- 텐서플로우에 대한 추상화된 API 제공
- 백엔드로 텐서플로우 사용, 좀 더 쉽게 딥 러닝을 할 수 있도록 도움
Gensim
머신러닝을 사용하여 트픽 모델링과 자연어 처리등을 수행할 수 있게 해주는 오픈소스 라이브러리
Scikit-learn
- 파이썬 머신러닝 라이브러리
- Naive bayse, SVM등 다양한 머신 러닝 모듈을 불러올 수 있음
- 자체 데이터 제공(아이리스 데이터, 당뇨병 데이터 등등..)
NLTK
자연어 처리를 위한 파이썬 패키지
KoNLPy
한국어 자연어 처리를 위한 형태소 분석기 패키지
데이터 분석 패키지
Pandas
- 파이썬 데이터 처리를 위한 라이브러리
- 세 종류의 데이터 구조 사용
Series 1차원 배열의 값(value)에 각 값에 대응되는 인덱스(index)를 부여할 수 있는 구조
1 2 3
import pandas as pd sr = pd.Series([100,200,300,400], index = ["a","b","c","d"]) print(sr)
1 2 3 4 5
a 100 b 200 c 300 d 400 dtype: int64
DataFrame 2차원 리스트를 매개변수로 전달. 행 방향 인덱스와 열 방향 인덱스가 존재 -> 행과 열을 가지는 자료구조 List, Series, Dict, ndarrays등을 통해 생성할 수 있다.
1 2 3 4 5 6
values = [[1,2,3], [4,5,6], [7,8,9]] index = ["I1","I2","I3"] columns = ["C1","C2","C3"] df = pd.DataFrame(values, index=index, columns=columns) print(df)
1 2 3 4
C1 C2 C3 I1 1 2 3 I2 4 5 6 I3 7 8 9
1 2 3 4 5 6 7 8 9 10 11
# 리스트로 생성하기 data = [ ['1000', 'Steve', 90.72], ['1001', 'James', 78.09], ['1002', 'Doyeon', 98.43], ['1003', 'Jane', 64.19], ['1004', 'Pilwoong', 81.30], ['1005', 'Tony', 99.14], ] df = pd.DataFrame(data) print(df)
1 2 3 4 5 6 7
0 1 2 0 1000 Steve 90.72 1 1001 James 78.09 2 1002 Doyeon 98.43 3 1003 Jane 64.19 4 1004 Pilwoong 81.30 5 1005 Tony 99.14
1 2 3 4 5 6
data = { '학번' : ['1000', '1001', '1002', '1003', '1004', '1005'], '이름' : [ 'Steve', 'James', 'Doyeon', 'Jane', 'Pilwoong', 'Tony'], '점수': [90.72, 78.09, 98.43, 64.19, 81.30, 99.14]} df = pd.DataFrame(data) print(df)
1 2 3 4 5 6 7
학번 이름 점수 0 1000 Steve 90.72 1 1001 James 78.09 2 1002 Doyeon 98.43 3 1003 Jane 64.19 4 1004 Pilwoong 81.30 5 1005 Tony 99.14
Panel
Numpy
수치 데이터를 다루는 파이썬 패키지 행렬 자료구조인 ndarray를 통해 선형 대수 계산에 많이 사용
np.array() 리스트, 튜플, 배열로부터 ndarray생성 인덱스가 항상 0으로 시작함
1 2
ndarr1 = np.array([1,2,3],[4,5,6]) print(ndarr1.shape())
1
(2,3) # 2 x 3 행렬
ndarray초기화
1 2 3 4 5 6
ndarr2 = np.zeros(2,3) # 모든 값이 0인 2x3 행렬 ndarr3 = np.full((2,2), 4) # 모든 값이 특정 상수값인 행렬 ndarr4 = np.eye(3) # 대각선 1, 나머지는 0인 3x3 행렬 print(ndarr2) print(ndarr3)
1 2 3 4 5 6 7 8 9
[[0,0,0] [0,0,0]] [[4,4] [4,4]] [[1,0,0] [0,1,0] [0,0,1]]
np.arange() 지정해준 범위에 대해서 배열 생성
numpy.arange(start, stop, stem, dtype)
1
a = np.arange(1,10,2) # 1부터 9까지 +2
1
[1,3,5,7,9]
reshape() 배열을 다차원으로 변형
1 2
a = np.array(np.arange(30)).reshape((5,6)) print(a)
1 2 3 4 5
[[ 0 1 2 3 4 5] [ 6 7 8 9 10 11] [12 13 14 15 16 17] [18 19 20 21 22 23] [24 25 26 27 28 29]]
Matplotlib
데이터를 차트나 플롯으로 시각화하는 패키지
Machine Learning Workflow
수집(Acquisition)
머신 러닝을 위한 데이터 수집 자연어 데이터: Corpus(수집된 텍스트의 집합)
점검 및 탐색(Inspection and exploration)
수집한 데이터를 점검, 탐색 머신러닝 적용을 위해서 어떻게 데이터를 정제할지 파악 탐색적 데이터 분석(Exploratory Data Analysis, EDA)단계라고도 부름
전처리 및 정제(Preprocessing and Cleaning)
토큰화, 정제, 정규화, 불용어 제거 단계
모델링 및 훈련(Modeling and Training)
머신러닝에 대한 코드를 작성하는 단계
전처리가 완료된 데이터를 머신러닝 알고리즘을 통해 기계에 학습
대부분의 경우, 모든 데이터를 학습시키지 않고, 훈련용 데이터만 학습시켜 과적합(Overfitting)상황을 피한다.
평가(Evaluation)
테스트용 데이터로 성능을 평가 기계가 예측한 데이터가 테스트용 데이터의 실제 정답과 얼마나 가까운지 측정
배포(Deployment)
완성된 모델을 배포