네이버 영화 리뷰 데이터에 대한 이해와 전처리
- 데이터 로드하기
1) 2000000개의 리뷰로 구성된 네이버 영화 리뷰 데이터에서 훈련 데이터와 테스트 데이터를 다운로드 다운로드
2) 훈련 데이터는 train_data에, 테스트 데이터는 test_data에 저장
3) 훈련 데이터에 존재하는 영화 리뷰의 개수를 확인
4) 테스트 데이터에 존재한 영화 리뷰의 개수를 확인
5) 훈련 데이터의 상위 5개 샘플 출력
리뷰 내용을 담고 있는 document와 해당 리뷰가 긍정인지, 부정인지를 나타내는 label 열을 학습하는 모델 - 데이터 정제하기
1) 훈련 데이터의 데이터 중복 유무를 확인
2) 중복 샘플 제거 후 중복이 제거되었는지 전체 샘플 수를 확인
3) 레이블 값의 분포를 확인한 후 정확한 수를 확인
4) 리뷰 중에 Null 값을 가진 샘플이 있는지 확인한 후 어떤 열에 존재하는지도 확인
5) Null 값을 가진 샘플을 제거
6) 한글과 공백을 제외하고 모두 제거하는 정규 표현식을 사용
7) 빈 값을 가진 행이 있다면 Null 값으로 변경한 후 제거
8) 테스트 데이터에도 위와 동일한 전처리 과정을 진행 - 토큰화
1) 불용어를 정의
2) 훈련 데이터에 형태소 분석기 Okt를 사용하여 토큰화하면서 불용어를 제거
3) 테스트 데이터에도 위와 동일하게 토큰화 과정을 진행 - 정수 인코딩
1) 훈련 데이터에 대해서 단어 집합을 생성한 후 확인
2) 등장 빈도수가 3회 미만(2회 이하)인 단어들이 데이터에서 얼마만큼의 비중을 차지하고 있는지 확인
3) 등장 빈도수가 2 이하인 단어들의 수를 제외한 단어의 개수를 단어 집합의 최대 크기로 제한
4) 정수 인코딩을 통해 텍스트 시퀀스를 정수 시퀀스로 변환 - 빈 샘플 제거
1) 빈도수가 낮은 단어만으로 구성되었던 샘플들은 빈 샘플이 되었으므로 제거하기 위해 길이가 0인 샘플들의 인덱스를 받아옴
2) 빈 샘플들의 인덱스를 통해 제거 - 패딩
1) 전체 데이터에서 가장 길이가 긴 리뷰와 전체 데이터의 길이 분포를 확인
2) 전체 훈련 데이터 중 약 94%의 리뷰가 30 이하의 길이를 가지므로 모든 샘플의 길이를 30으로 패딩
LSTM으로 네이버 영화 리뷰 감성 분류하기
- 1) 하이퍼파라미터인 임베딩 벡터의 차원은 100, 은닉 상태의 크기는 128로 지정하고 다 대 일 구조의 LSTM을 사용
2) 마지막 시점에서 두 개의 선택지 중 하나를 예측하는 이진 분류 문제를 수행하는 모델이므로
출력층에 로지스틱 회귀, 활성화 함수로 시그모이드 함수, 손실 함수로 크로스 엔트로피 함수를 사용
3) EarlyStopping을 사용해 검증 데이터 손실이 증가하면 과적합 징후이므로 4회 증가하면 학습을 조기 종료하도록 함
4) ModelCheckpoint를 사용해 검증 데이터의 정확도가 이전보다 좋아질 경우에만 모델을 저장함
5) validation_split = 0.2를 사용해 훈련 데이터의 20%를 검증 데이터로 분리해서 사용해 훈련이 적절히 되고 있는지 확인
6) 하이퍼파라미터인 배치 크기는 64이며, 15 에포크를 수행함
7) 훈련 과정에서 검증 데이터가 가장 높았을 때 저장된 모델인 'best_model.h5'를 로드하고 성능을 평가함
리뷰 예측해보기
- 1) 임의의 리뷰에 대해서 예측하는 함수를 생성
2) 여러 리뷰에 대해서 긍정인 리뷰인지 부정인 리뷰인지 예측
코드
GitHub - GaGa-Kim/ML_Study: 머신러닝 스터디 ⚙
머신러닝 스터디 ⚙. Contribute to GaGa-Kim/ML_Study development by creating an account on GitHub.
github.com
'ML > 딥 러닝을 이용한 자연어 처리' 카테고리의 다른 글
네이버 영화 리뷰 데이터에 대한 이해와 전처리
- 데이터 로드하기
1) 2000000개의 리뷰로 구성된 네이버 영화 리뷰 데이터에서 훈련 데이터와 테스트 데이터를 다운로드 다운로드
2) 훈련 데이터는 train_data에, 테스트 데이터는 test_data에 저장
3) 훈련 데이터에 존재하는 영화 리뷰의 개수를 확인
4) 테스트 데이터에 존재한 영화 리뷰의 개수를 확인
5) 훈련 데이터의 상위 5개 샘플 출력
리뷰 내용을 담고 있는 document와 해당 리뷰가 긍정인지, 부정인지를 나타내는 label 열을 학습하는 모델 - 데이터 정제하기
1) 훈련 데이터의 데이터 중복 유무를 확인
2) 중복 샘플 제거 후 중복이 제거되었는지 전체 샘플 수를 확인
3) 레이블 값의 분포를 확인한 후 정확한 수를 확인
4) 리뷰 중에 Null 값을 가진 샘플이 있는지 확인한 후 어떤 열에 존재하는지도 확인
5) Null 값을 가진 샘플을 제거
6) 한글과 공백을 제외하고 모두 제거하는 정규 표현식을 사용
7) 빈 값을 가진 행이 있다면 Null 값으로 변경한 후 제거
8) 테스트 데이터에도 위와 동일한 전처리 과정을 진행 - 토큰화
1) 불용어를 정의
2) 훈련 데이터에 형태소 분석기 Okt를 사용하여 토큰화하면서 불용어를 제거
3) 테스트 데이터에도 위와 동일하게 토큰화 과정을 진행 - 정수 인코딩
1) 훈련 데이터에 대해서 단어 집합을 생성한 후 확인
2) 등장 빈도수가 3회 미만(2회 이하)인 단어들이 데이터에서 얼마만큼의 비중을 차지하고 있는지 확인
3) 등장 빈도수가 2 이하인 단어들의 수를 제외한 단어의 개수를 단어 집합의 최대 크기로 제한
4) 정수 인코딩을 통해 텍스트 시퀀스를 정수 시퀀스로 변환 - 빈 샘플 제거
1) 빈도수가 낮은 단어만으로 구성되었던 샘플들은 빈 샘플이 되었으므로 제거하기 위해 길이가 0인 샘플들의 인덱스를 받아옴
2) 빈 샘플들의 인덱스를 통해 제거 - 패딩
1) 전체 데이터에서 가장 길이가 긴 리뷰와 전체 데이터의 길이 분포를 확인
2) 전체 훈련 데이터 중 약 94%의 리뷰가 30 이하의 길이를 가지므로 모든 샘플의 길이를 30으로 패딩
LSTM으로 네이버 영화 리뷰 감성 분류하기
- 1) 하이퍼파라미터인 임베딩 벡터의 차원은 100, 은닉 상태의 크기는 128로 지정하고 다 대 일 구조의 LSTM을 사용
2) 마지막 시점에서 두 개의 선택지 중 하나를 예측하는 이진 분류 문제를 수행하는 모델이므로
출력층에 로지스틱 회귀, 활성화 함수로 시그모이드 함수, 손실 함수로 크로스 엔트로피 함수를 사용
3) EarlyStopping을 사용해 검증 데이터 손실이 증가하면 과적합 징후이므로 4회 증가하면 학습을 조기 종료하도록 함
4) ModelCheckpoint를 사용해 검증 데이터의 정확도가 이전보다 좋아질 경우에만 모델을 저장함
5) validation_split = 0.2를 사용해 훈련 데이터의 20%를 검증 데이터로 분리해서 사용해 훈련이 적절히 되고 있는지 확인
6) 하이퍼파라미터인 배치 크기는 64이며, 15 에포크를 수행함
7) 훈련 과정에서 검증 데이터가 가장 높았을 때 저장된 모델인 'best_model.h5'를 로드하고 성능을 평가함
리뷰 예측해보기
- 1) 임의의 리뷰에 대해서 예측하는 함수를 생성
2) 여러 리뷰에 대해서 긍정인 리뷰인지 부정인 리뷰인지 예측
코드
GitHub - GaGa-Kim/ML_Study: 머신러닝 스터디 ⚙
머신러닝 스터디 ⚙. Contribute to GaGa-Kim/ML_Study development by creating an account on GitHub.
github.com