본문 바로가기

기계학습/자연어 처리 머신러닝28

Generative 모델 & Discriminative 모델 # Generative 모델 : P(Y|data X) 를 "도출 해내는" 모델. 클래스의 분포에 먼저 주목 후, 그걸 기반으로 분류에 주목 - 종류 : 지도/비지도 학습 기반1) 지도 학습 기반 : 레이블 정보 Y 가 반드시 있어야 함 ex) 선형 판별 분석 2) 비지도 학습 기반 : 레이블 정보 Y 가 없어도 됨 ex) 토픽 모델링, 가우시안 미스쳐 모델 - 가정이 많다 -> 도출하는데에 단계가 더 필요하다 # Discriminative 모델 : P(Y|data X) 를 "직접", "곧바로" 산출하는 모델 클래스의 분류를 처음부터 주목 - 가정이 적다 -> 곧바로 결과를 도출할 수 있다 2020. 4. 25.
합성곱 신경망 - 딥러닝을 이용한 자연어처리 입문 CNN : 합성곱 신경망 - Convolutional Neural Network # CNN 기본 개념 - 구조 : 합성곱층(Conv. layer) + 풀링층(Pooling) 1) 합성곱층 : 합성곱(Conv) 단계 + 렐루(Relu) 단계 2) 풀링층 : 풀링 연산 진행 - 필요성 : 이전의 다층 퍼셉트론 종류의 한계 때문 ** 다층 퍼셉트론 : 은닉층이 여러 개 있는 머신러닝 기본 모델 - CNN 도 다층 퍼셉트론의 한 종류. 여러 개의 Dense 레이어들로 구성된 것도 다층 퍼셉트론의 종류. - 이전 다층 퍼셉트론 (Dense 층 등) 의 한계 : 3D -> 2D 전처리를 반드시 해야 함** (batch, width, height) 의 3차원 텐서를 입력값으로 받을 경우, 반드시 (batch, w *.. 2020. 2. 21.
활성화 함수 & 출력층 함수 개념정리 # 활성화 함수 vs 출력층 함수 1) 활성화 함수 : - 출력층에서도 사용할수 있긴 하지만, 주된 목적은 아니다. - 보통, 여러 겹의 layer들 사이에서 사용되는 것. ex) 시그모이드, ReLU, Tanh 등 2) 출력층 함수 : - 출력층에 있는 함수 (각 layer들 사이에 있는건 출력층 함수라고 안 부른다. 그건 활성화함수) - 적절하게 출력하도록 유도해서, Y 데이터셋과 잘 비교할 수 있도록 해준다 - 활성화 함수들 중에서도 출력층 함수로 쓰이는 경우가 간혹 있다 (ex. 시그모이드) ex) 시그모이드, 소프트맥스, 항등함수 등 # 목적에 따른 출력층 함수 : 1) "값"을 출력해야 하는 함수 : 항등함수 (=출력층 함수 필요 없음) ex) 유동 인구 수 예측 - 항등함수를 사용해야 한다 .. 2020. 2. 21.
유동 인구 예측 - 실전 프로젝트 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576# trainning set 가져오기 - 11월 유동 인구량import pandas as pd f_train = pd.read_csv('/content/drive/My Drive/Floating_Population_1911.csv') # '시' 제거del f_train['시'] # 남자 = 0, 여자 = 1 변경f_train['성별'] = f_train['성별'].replace(['남성', '여성'],[0, 1]) # 군/구 정수 인코딩 해주기f_tra.. 2020. 2. 20.
글자 단위 RNN - N:1 모델 LSTM 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106# 파일 가져오기f = open('/content/drive/My Drive/train_char.txt', 'rb') # 불필요한 내용들 제거lines = [] for s in f: # \n, \r 제거 s = s.strip() # 길이=0 인 문장 제거 if len(s)==0: continue # 소문자 변환 s = s.lower().. 2020. 2. 18.
글자단위 예측 모델 - N:N 모델 LSTM 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121# 파일 읽어오기 - byte 단위로 읽어오기 위해 'rb' 사용file = open('/content/drive/My Drive/train_char.txt','rb') # 데이터 전처리해서 새로 저장하기lines = [] for s in file: # 소.. 2020. 2. 18.
품사 태깅 - N:N 양방향 LSTM 모델 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293# 파일 호출하기f = open('/content/drive/My Drive/train.txt', 'r') # 파일 추출하기 - 단어/문법 리스트tmp_sentence = []total_sentence = [] for line in f: token = line.split(" ") if len(line)==0 or token[0]=='\n' or token[0]=='-DOCSTART-': if .. 2020. 2. 18.
개체명 인식기 - N:N 양방향 LSTM 모델 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114from google.colab import drivedrive.mount('/content/drive') file = open('/content/drive/My Drive/train.txt', 'r') # trainning 데이터 전처리 하기 - BIO 개체명 태깅화import re tagg.. 2020. 2. 17.
신문 제목 분류 실습 - 나이브 베이즈 분류기 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273from sklearn.feature_extraction.text import CountVectorizerfrom sklearn.feature_extraction.text import TfidfTransformerfrom sklearn.naive_bayes import MultinomialNBfrom sklearn.metrics import accuracy_score # 데이터 셋 가져오기from sklearn.datasets import fetch_20newsg.. 2020. 2. 14.
스팸 메일 분류기 - 실습 이론 # 스팸 메일 분류기 1. 나이브 베이즈 분류기- 인공 신경망 아님- 준수한 성능 2. 베이즈 정리 - 나이브 베이즈 분류기 이론 기초 - 목적식 : P( 정상 메일 | 입력 텍스트 ), P( 스팸 메일 | 입력 텍스트 ) -> 이 목적식을 베이즈 정리를 이용해서 구해준다- 베이즈 정리 : P(A|B) = P(B|A)*P(A)/P(B) - 입력 텍스트 : 토큰화를 시켜서 입력 - 특징 : 문장의 sequence 가 중요하지 않다 (결국 결괏값은 순서와 상관 없이 연산되기 때문) - 한계 : 확률이 0 이 되는 경우가 생긴다 -> 정확한 판단이 힘들어짐 -> 해결책 : 나이브 베이즈 분류기 - 라플라스 스무딩 이용 2020. 2. 13.
IMDB 실습 - LSTM 모델 123456789101112131415161718192021222324252627282930313233from tensorflow.keras.datasets import imdbimport numpy as np (X_train, Y_train), (X_val, Y_val) = imdb.load_data(num_words=1000)vocab_size = 1000 from tensorflow.keras.preprocessing.sequence import pad_sequences # 데이터 전처리 - paddingmax_len = 0for s in X_train: tmp_len = len(s) if tmp_len > max_len : max_len = tmp_len X_train = pad_sequences.. 2020. 2. 12.
LSTM 실습 - 로이터 뉴스 분류기 123456789101112131415161718192021222324252627282930313233343536from tensorflow.keras.datasets import reutersimport numpy as npimport seaborn as sns (X_train, Y_train),(X_test, Y_test) = reuters.load_data(num_words=1000, test_split=0.2) from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Dense, LSTM, Embeddingfrom tensorflow.keras.utils import to_categoricalfrom tens.. 2020. 2. 12.