ML

머신러닝 / 딥러닝 스터디 정리
ML/딥 러닝을 이용한 자연어 처리

[딥 러닝을 이용한 자연어 처리 입문] 10. RNN을 이용한 텍스트 분류 - GRU로 IMDB 리뷰 감성 분류하기

IMDB 리뷰 데이터에 대한 이해 케라스에서 제공하는 IMDB 영화 리뷰 데이터를 통해 감성 분류를 연습 1) 케라스 데이터셋으로부터 영화 리뷰 데이터를 로드 2) IMDB 리뷰 데이터는 훈련 데이터와 테스트 데이터가 이미 50:50 비율로 구분해서 제공하므로 분리할 필요 없음 3) 훈련용 리뷰의 개수, 테스트용 리뷰의 개수, 카테고리의 수를 출력 4) 훈련용 영화 데이터의 첫 번째 리뷰와 레이블을 출력 현재 이 데이터는 토큰화와 정수 인코딩이 끝난 상태임을 알 수 있음 5) 훈련용 리뷰의 길이를 확인하고 그래프로 시각화 6) 훈련용 데이터의 레이블 분포를 확인 7) 정수로부터 단어들을 찾는 함수를 생성하고 인덱스를 입력하여 단어를 확인 IMDB 리뷰 데이터셋에서 정한 규칙에 따라 imdb.get_wor..

ML/딥 러닝을 이용한 자연어 처리

[딥 러닝을 이용한 자연어 처리 입문] 10. RNN을 이용한 텍스트 분류 - LSTM으로 로이터 뉴스 분류하기

로이터 뉴스 데이터에 대한 이해 케라스에서 제공하는 로이터 뉴스 기사 데이터는 총 11258개의 뉴스 기사가 46개의 뉴스 카테고리로 분류되는 뉴스 기사 데이터 1) 케라스 데이터셋으로부터 로이터 뉴스 기사 데이터를 로드 2) 뉴스 기사 데이터를 8:2 비율로 훈련 데이터와 테스트 데이터(=검증 데이터)로 분리 3) 훈련용 뉴스 데이터의 첫 번째 뉴스 기사를 출력 현재 이 데이터는 토큰화와 정수 인코딩이 끝난 상태임을 알 수 있음 4) 훈련용 뉴스 데이터의 기사의 길이를 확인 5) 각 뉴스의 레이블 값의 분포를 확인하고 각 레이블에 대한 정확한 개수를 출력 6) 정수 인코딩된 각 숫자들이 어떤 단어들을 나타내고 있는지 확인 7) 정수로부터 단어들을 찾는 함수를 생성하고 인덱스를 입력하여 단어를 확인 8)..

ML/딥 러닝을 이용한 자연어 처리

[딥 러닝을 이용한 자연어 처리 입문] 10. RNN을 이용한 텍스트 분류 - RNN으로 스팸 메일 분류하기

스팸 메일 데이터에 대한 이해 1) 스팸 메일 데이터 다운로드 2) 다운로드 받은 파일을 데이터프레임으로 로드하고 총 샘플의 수 확인 3) 상위 5개의 샘플만 출력 Unnamed라는 이름의 3개의 열은 텍스트 분류를 할 때 불필요한 열, v1열은 해당 메일이 스팸인지 아닌지를 나타내는 레이블이며 ham은 정상 메일을 의미하고 spam은 스팸 메일을 의미함, v2열은 메일 본운을 담고 있음 4) Unnamed: 2, Unnamed: 3, Unnamed: 4열을 삭제하고 v1열에 있는 ham과 spam 레이블을 각각 숫자 1과 1로 변경 5) 데이터프레임의 정보를 확인 v1열은 정수형, v2열은 문자열 데이터를 갖고 있음을 알 수 있음 6) Null 값을 가진 샘플 여부를 확인 7) 데이터에 중복이 있는지 ..

ML/딥 러닝을 이용한 자연어 처리

[딥 러닝을 이용한 자연어 처리 입문] 10. RNN을 이용한 텍스트 분류 - 케라스를 이용한 텍스트 분류

훈련 데이터에 대한 이해 텍스트 분류의 경우 지도 학습에 속하며 지도 학습의 훈련 데이터는 레이블이라는 이름의 미리 정답이 적혀있는 데이터로 구성됨 예) 스팸 메일 분류기의 훈련 데이터는 메일의 내용과 해당 메일이 정상 메일인지, 스팸 메일인지 적혀있는 레이블로 구성 이를 이용해 기계가 샘플 데이터를 학습한 후에 모델이 잘 설계되면 훈련 데이터에 존재하지 않았던 어떤 메일 텍스트가 주어지더라도 정확한 레이블을 예측할 수 있음 훈련 데이터와 테스트 데이터 갖고 있는 전체 데이터를 전부 훈련에 사용하는 것보다는 테스트용은 일부 남겨놓는 것이 바람직함 그 후 훈련이 끝나면 보류해두었던 테스트용 데이터를 가지고 정확도를 계산할 수 있음 예) 텍스트 데이터의 열을 X, 레이블 데이터를 y라고 할 때 훈련 데이터(..

ML/딥 러닝을 이용한 자연어 처리

[딥 러닝을 이용한 자연어 처리 입문] 10. RNN을 이용한 텍스트 분류 - 텍스트 분류

텍스트 분류 텍스트를 입력으로 받아 텍스트가 어떤 종류의 범주에 속하는지를 구분하는 작업 예) 스팸 메일 분류 일반 메일과 스팸 메일이라는 두 개의 범주를 정해놓고 입력받은 메일 본문을 두 개의 메일 종류 중 하나로 분류하는 작업 이 외에도 영화 리뷰와 같은 텍스트를 입력 받아서 이 리뷰가 긍정 리뷰인지 부정 리뷰인지 분류하는 '감성 분석', 입력 받은 텍스트로부터 사용자의 의도를 질문, 명령, 거절 등과 같은 의도를 분류하는 '의도 분석' 등이 존재 이를 위해서는 RNN 계열의 신경망인 바닐라 RNN, LSTM, GRU를 사용할 수 있음 텍스트 분류에서 분류해야 할 범주 분류해야 할 범주가 두 가지라면 이진 분류 분류해야 할 범주가 세 가지 이상이라면 다중 클래스 분류

ML/딥 러닝을 이용한 자연어 처리

[딥 러닝을 이용한 자연어 처리 입문] 09. 워드 임베딩 - 독투벡터

Doc2Vec 단어를 임베딩하는 워드 임베딩하는 Word2Vec과 달리 Doc2Vec은 Word2Vec을 변형하여 문서의 임베딩을 얻을 수 있도록 하는 알고리즘 Word2Vec과 마찬가지로 파이썬 머신 러닝 패키지인 Gensim을 통해 사용 가능 공시 사업 보고서 로드 및 전처리 1) 전자공시시스템에 올라와있는 각 회사의 사업 보고서를 다운로드 2) 데이터를 데이터프레임으로 로드하고 결측값을 가진 샘플을 제거 종목 번호에 해당하는 code 열, 해당 종목이 KOSPI인지 KOSDAQ인지를 알려주는 market 열, 회사명에 해당하는 name 열, 학습할 사업 보고서인 business 열이 존재 3) business 열에 대해서 형태소 분석을 수행하고 Doc2Vec 학습을 위해서 필요한 형식으로 데이터를 ..

ML/딥 러닝을 이용한 자연어 처리

[딥 러닝을 이용한 자연어 처리 입문] 09. 워드 임베딩 - 문서 임베딩

문서 임베딩 임베딩이 잘 된 상황에서 단어 벡터들의 평균만으로 텍스트 분류를 수행할 수 있음 데이터 로드와 전처리 1) 리뷰가 긍정인 경우 1, 부정인 경우 0으로 구성된 IMDB 영화 리뷰 데이터를 다운로드 2) 첫 번째 리뷰와 첫 번째 리뷰의 레이블을 출력함 이 데이터는 이미 단어 집합을 만들고, 각 단어를 정수로 인코딩하는 전처리가 모두 진행되어 있음을 알 수 있음 3) 각 리뷰의 평균 길이를 계산한 후 평균보다는 큰 수치인 400으로 패딩함 모델 설계하기 1) Embedding() 다음에 입력으로 들어오는 모든 벡터들의 평균을 구하는 GlobalAveragePooling1D()를 추가하여 해당 문장의 모든 단어 벡터들의 평균 벡터를 구하도록 함 2) 이진 분류를 수행해야 하므로 시그모이드 함수를 ..

ML/딥 러닝을 이용한 자연어 처리

[딥 러닝을 이용한 자연어 처리 입문] 09. 워드 임베딩 - 문서 벡터

문서 벡터 문서들을 고정된 길이의 벡터로 변환한다면 벡터 간 비교로 문서들을 서로 비교할 수 있음 각 문서를 문서 벡터로 변환하기 위해서는 이미 구현된 패키지인 Doc2Vec이나 Sent2Vec 등을 사용해서 학습하거나 단어 벡터를 얻은 뒤 문서에 존재하는 단어 벡터들의 평균을 문서 벡터로 간주할 수도 있음 데이터 로드 문서 내 각 단어들을 Word2Vec을 통해 단어 벡터로 변환하고, 이들의 평균으로 문서 벡터를 얻어 선호하는 도서와 유사한 도서를 찾아주는 도서 추천 시스템을 만들기 위해 1) 책의 이미지와 책의 줄거리를 크롤링한 데이터를 다운로드 2) 데이터를 데이터프레임으로 로드하고 전체 문서의 수를 출력 3) 상위 5개의 행만 출력 4) 줄거리에 해당하는 열인 'Desc 열'이 중요하므로 해당 열..