본문 바로가기

데이터 사이언스/머신러닝

[NIPA AI 교육/응용] 08. 자연어 처리를 위한 데이터 전처리

1. 오류 교정(Noise Canceling)

  • 자연어 문장의 스펠링 체크 및 띄어쓰기 오류 교정

 

2. 토큰화(Tokenizing)

  • 문장을 토큰(Token)으로 나눔(수치 변환)
  • 토큰은 어절, 단어 등으로 목적에 따라 다르게 정의

 

3. 불용어 제거(StopWord Removal)

  • 불필요한 단어를 의미하는 불용어(StopWord) 제거
    • ex. 아, 휴, 아이고, 아이쿠, 쉿, 그렇지 않으면, 그러나, 그런데, 하지만... 

 

4. Bag of Words

  • 자연어 데이터에 속해있는 단어들의 가방

 

5. 토큰 시퀀스

  • Bag of Words에서 단어에 해당되는 인덱스로 변환
  • 모든 문장의 길이를 맞추기 위해 기준보다 짧은 문장에는 패딩을 수행
X_train, y_train, X_test, y_test = data_process.imdb_data_load()

X_train = sequence.pad_sequences(X_train, maxlen=300, padding='post')
X_test = sequence.pad_sequences(X_test, maxlen=300, padding='post')


# 모델 구현
embedding_vector_length = 32

model = tf.keras.models.Sequential([
    tf.keras.layers.Embedding(1000, embedding_vector_length, input_length = max_review_length),
    tf.keras.layers.SimpleRNN(5),
    tf.keras.layers.Dense(1, activation='sigmoid')
    ])
    
# 모델을 확인
print(model.summary())

# 학습 방법 설정
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])

# 학습 수행
model_history = model.fit(X_train, y_train, epochs = 3, verbose = 2)

loss, test_acc = model.evaluate(X_test, y_test, verbose = 0)

# 평가용 데이터에 대한 예측 결과를 predictions에 저장
predictions = model.predict(X_test)

# 모델 평가 및 예측 결과 출력
print('\nTest Loss : {:.4f} | Test Accuracy : {}'.format(loss, test_acc))
print('예측한 Test Data 클래스 : ',1 if predictions[0]>=0.5 else 0)

 

6. 워드 임베딩(Word Embedding)

  • 단순하게 Bag of Words의 인덱스로 정의된 토큰들에게 의미를 부여하는 방식
  • 단어의 특징을 나타내기 위해 워드 임베딩을 함
  • 즉, 임베딩은 토큰의 특징을 찾아내고, RNN은 전 토큰의 영향을 받으며 학습함.(임베딩 > RNN > 활성함수)