728x90
반응형
Data Preprocessing
- 문장 부호 제거
- 불용어 제거
- 단어 최대 길이 설정
- 단어 패딩
- 벡터 표상화
불용어 제거
- 문장에서 자주 출현하나 전체적인 의미에 큰 영향을 주지 않는 단어
- 영어에서는 조사, 관사 등과 같은 어휘
- 불용어가 포함된 데이터 모델링 시 노이즈를 줄일 수 있는 경우 불용어 제거가 좋음
- 데이터가 많고 문장 구문에 대한 전체적인 패턴을 모델링하고자 하는 경우에는 역효과 날 수 있음
- 불용어 제거 전에는 영문의 경우 모든 단어를 소문자로 변경 후 처리 필요
import re
from nltk.corpus import stopwords
# 영어 불용어 set을 만든다
stop_words = set(stopwords.words('english'))
# 영어가 아닌 특수문자를 공백으로 치환
doc_text = re.sub("[^a-zA-Z]", " ", doc_text)
# 소문자로 변환한 후 단어마다 나눠서 단어 리스트로 만든다
words = doc_text.lower().split()
# 불용어를 제거한 리스트를 만든다.
words = [w for w in words if not w in stop_words]
# 단어 리스트를 공백을 넣어서 하나의 글로 합친다
clean_text = ' '.join(words)
한국어 전처리
- 한국어의 경우 별도 불용어 사전이 없으며 상황에 따라 지정 후 사용
- 형태소 단위 구분을 위한 별도의 형태소 분석기를 사용
import re
from konlpy.tag import Okt
# 별도의 한글 불용어 지정
stop_words = set(["은","는","이","가"])
# 한글 및 공백을 제외한 문자를 모두 제거
review_text = re.sub("[^가-힣ㄱ-ㅎㅏ-ㅣ\\s]", "", review)
# Okt 객체를 활용해 형태소 단위로 나눔
okt = Okt()
word_review = okt.morphs(review_text, stem=True)
# 불용어 제거
word_review = [token for token in word_review if not token in stop_words]
단어 벡터화
단어를 인덱스로 벡터화하기 전에 입력값의 길이가 동일해야 하기 때문에 일정 길이로 자르고 부족한 부분은 특정값으로 채우는 패딩 과정을 진행해야 한다
Tokenizer()
from tensorflow.python.keras.preprocessing.text import Tekenizer
tokenizer = Tokenizer()
tokenizer.fit_on_texts(clean_text)
text_sequences = tokenizer.texts_to_sequences(clean_text)
# 단어 사전 확인
word_vocab = tokenizer.word_index
word_vocab["<PAD>"] = 0
# 전체 단어 개수 확인
print("전체 단어 개수: ", len(word_vocab))
pad_sequences()
from tensorflow.python.keras.preprocessing.sequence import pad_sequences
# 문장 최대 길이 지정
# padding: 0 값을 데이터 앞에 넣을지 뒤에 넣을지를 설정
# 단어 개수의 통계를 계산했을 때 나왔던 중간값을 활용
MAX_SEQUENCE_LENGTH = 174
train_inputs = pad_sequences(text_sequences, maxlen=MAX_SEQUENCE_LENGTH, padding='post')
print('Shape of train data:', train_inputs.shape)
- 문장 최대 길이 지정
- padding: 0 값을 데이터 앞에 넣을지 뒤에 넣을지를 설정
- 문장 최대 길이는 단어 개수의 통계를 계산했을 때 나왔던 중간값을 활용
- 이상치 데이터가 길이가 지나치게 길면 평균이 급격히 올라갈 수 있기 때문에 중간값 활용 경우 많음
Train Label
- 학습 라벨, 즉 정답을 나타내는 값을 Numpy 배열로 저장
train_labels = np.array(train_data["sentiment'])
print('Shape of label tensor:', train_labels.shape)
References
728x90
반응형
'NLP > NLP 기초' 카테고리의 다른 글
[NLP] Corpus (0) | 2021.04.05 |
---|---|
[NLP] 자연어 처리 난제 (0) | 2021.04.05 |
[NLP] 텍스트 전처리 (0) | 2021.03.15 |
[NLP] Kaggle (0) | 2021.03.15 |
EDA(Exploratory Data Analysis) (0) | 2021.03.15 |