Just Fighting

LSTM을 이용한 텍스트 생성 연습(1) - 데이터 전처리 본문

ML & DL

LSTM을 이용한 텍스트 생성 연습(1) - 데이터 전처리

yennle 2022. 6. 1. 20:39
728x90

2022.04.07 - [ETC] - RNN을 이용한 텍스트 생성 연습

이전에 RNN을 이용한 텍스트 생성을 연습해 본 적이 있다.

이번에는 그 뒷 내용인 LSTM을 이용해서 텍스트 생성을 연습해보았다.

 

https://wikidocs.net/45101

 

6) RNN을 이용한 텍스트 생성(Text Generation using RNN)

다 대 일(many-to-one) 구조의 RNN을 사용하여 문맥을 반영해서 텍스트를 생성하는 모델을 만들어봅시다. ##**1. RNN을 이용하여 텍스트 생성하기** 예를 ...

wikidocs.net

이 링크의 중간 부분에 있는 'LSTM을 이용하여 텍스트 생성하기' 파트를 보고 따라했다.

 

 

 

먼저 링크 속에 주어진 데이터를 다운 받고 데이터를 출력해보았다.

필요한 라이브러리를 먼저 임포트하고,,

데이터는 뉴스 기사에 대한 데이터이며, 여기서 사용할 컬럼은 'headline'이였다.

기사 제목을 이용해서 텍스트를 생성하는 것을 연습했다.

import pandas as pd
import numpy as np
from string import punctuation

from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.utils import to_categorical
df = pd.read_csv('ArticlesApril2018.csv')
df.head()

 

 

먼저 데이터에 결측값이 있는지 확인했다.

문서의 경우에는 아래 방법을 사용했지만 나는 개수도 확인해보고 싶어서 value_counts()를 사용했다.

결측값은 없는 것을 확인할 수 있었다.

# 'headline'에 결측값이 없는지 확인
# 결측값이 없다는 것을 확인할 수 있음

df['headline'].isnull().value_counts()
df['headline'].isnull().values.any() # 하나라도 true면 true

 

 

 

결측값이 없다는 것은 확인했지만 제목들을 한번 찍어보았다.

결측값 대신에 'Unknown'이라는 값을 발견할 수 있었다.

이는 의미가 없는 문장이기 때문에 제외했다.

 

 

그리고 제목에 있는 온점이나 물음표 등을 없애주고, 모두 소문자로 바꾸는 과정을 진행했다.

이 과정은 처음 써보는 방법과 함수들이 있었기 때문에 혼자 여러 결과를 출력해보며 연습했다.

utf8로 인코딩하고 ascii로 디코딩을 하니 아래와 같은 결과가 나왔다.

그래서 join()을 사용해도 띄어쓰기가 그대로 남아 있을 수 있었다.

그리고 punctuation은 특수문자를 의미하는 문자열이였다.

즉, 아래 repreprocessing()는 문자열의 문자를 하나하나 보면서 특수문자면 제외하고

모두 소문자로 바꿔주는 함수가 된다.

def repreprocessing(raw_sentence):
    preprocessed_sentence = raw_sentence.encode("utf8").decode("ascii",'ignore')
    return ''.join(word for word in preprocessed_sentence if word not in punctuation).lower()

 

 

함수를 적용한 결과이다.

모든 대문자들이 소문자로 바뀌었고, 특수문자들이 제외된 것을 확인할 수 있다.

 

 

여기까지 데이터 전처리였다.

다음 게시글에 본격적으로 LSTM을 이용한 텍스트 생성을 정리하겠다.

 

 

728x90
Comments