221215 멋쟁이 사자처럼 AI스쿨 7기, 박조은 강사님 강의
머신러닝에서는 BOW, TF-IDF 인코딩 방식을 주로 사용하고 딥러닝에서도 사용한다. RNN 에서는 순차적으로 데이터를 인코딩해주는 시퀀스 인코딩 방식을 사용하면 좀 더 나은 성능을 내기도 한다.
from tensorflow.keras.preprocessing.sequence import pad_sequences
max_length = 500
padding_type = "post"
# X_train, X_test
X_train_sp = pad_sequences(train_sequence, maxlen=max_length, padding=padding_type)
X_test_sp = pad_sequences(test_sequence, maxlen=max_length, padding=padding_type)
X_train_sp.shape, X_test_sp.shape
시퀀스 데이터에 사용한다. 시퀀스 데이터란 연속의 데이터, 순서가 있는 자료.
기존 신경망과의 차이 : 결과값을 출력층 방향으로도 보내면서, 다시 은닉층 노드의 다음 계산의 입력으로 보내는 특징.
📌 https://colah.github.io/posts/2015-08-Understanding-LSTMs/ RNN 하면 많이 보이는 자료와 설명이 있는 블로그
https://www.tensorflow.org/text/guide/word_embeddings
https://www.tensorflow.org/text/tutorials/text_classification_rnn

순차 RNN으로만 하면 날이, 너무만 보고 날씨의 상태를 파악해야하지만 양방향 학습을 이용하면 켰다, 에어컨을 보고 날씨의 상태를 더 잘 유추할 수 있습니다

https://damien0x0023.github.io/rnnExplainer/ 시퀀스 인코딩을 해준 것. -> 임베딩
TextVectorization 레이어로 초기화하고 text_ds 에서 adapt 을 호출하여 해당 어휘를 구축
결과 차원은 (batch, sequence, embedding)
❓ 출력값이 어떤 형태로 나올까? Dense(1)
▪ 0~1 사이 확률값
LSTM 을 변형시킨 알고리즘. 기울기 소실 문제 해결
GRUs 는 Update Gate 와 Reset Gate를 추가해, 과거의 정보를 어떻게 반영할 것인지 결정(GRU 는 게이트가 2개, LSTM 은 게이트가 3개)
GRU를 개발한 조경현 교수님의 강의도 부스트 코스에 있다.
다음으로 시퀀스를 넘길 것인지 말 것인지. 그 다음이 마지막 층이라면 return_sequences 가 없다.
model.add(SimpleRNN(units=64, return_sequences=True))

# # Simple RNN 레이어를 사용한 모델을 정의합니다.
model = Sequential()
# 입력-임베딩층
model.add(Embedding(vocab_size, embedding_dim, name='embedding', input_length=max_length))
model.add(SimpleRNN(units=64, return_sequences=True))
model.add(SimpleRNN(units=32))
model.add(Dense(units=16))
# 출력층 - 정치, 복지, 행정 3개를 반환
model.add(Dense(units=n_class, activation='softmax'))
model.summary()
# train 으로 validation 데이터 만들기 => validation_split 을 사용하면, y 값이 균형있게 학습되지 않는다.
X_train_val, X_valid, y_train_val, y_valid = train_test_split(
X_train_sp, y_train, test_size=0.2, random_state=42, stratify=y_train)
X_train_val.shape, X_valid.shape, y_train_val.shape, y_valid.shape
RNN 문서 : https://www.tensorflow.org/guide/keras/rnn
▪ 토큰화(str.split()) => one-hot-encoding => bag of words(min_df, max_df, analyzer, stopwords, n-gram)
▪ => TF-IDF(너무 자주 등장하는 단어는 낮은 가중치, 특정 문서에만 등장하는 단어는 높은 가중치)
▪ RNN 은 순서가 있는 데이터를 예측할 때 주로 사용하는데, BOW 는 순서를 보존하지 않는다.
▪ 그래서 시퀀스 방식의 인코딩을 사용했다.
▪ Embedding => 여러 각도에서 단어와 단어 사이의 거리를 본다. 가까운 거리에 있는 단어는 유사한 단어이고, 거리가 멀 수록 의미가 먼 단어이다.
▪ => 의미를 좀 더 보존할 수 있게 되었다.
▪ 정규표현식 => 텍스트 정규화
▪ 불용어
▪ 형태소 분석 => 의미가 없는 조사, 어미, 구두점 등을 제외
▪ 어간추출(stemming 원형을 보존하지 않음), 표제어표기법(lemmatization, 원형을 보존)
시계열 https://www.tensorflow.org/tutorials/structured_data/time_series
시계열 데이터 정규화 링크 https://www.tensorflow.org/tutorials/structured_data/time_series#%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%A0%95%EA%B7%9C%ED%99%94
❓ 이렇게 정규화를 하면 어떻게 변환이 될까?
train_mean = train_df.mean()
train_std = train_df.std()
train_df = (train_df - train_mean) / train_std
val_df = (val_df - train_mean) / train_std
test_df = (test_df - train_mean) / train_std
▪ standard scaler
▪ 평균을 0, 표준편차를 1로 만들어준다. 그러나 이상치가 있다면 평균과 표준편차에 영향을 미쳐 변환된 데이터의 확산은 매우 달라지게 되므로 이상치가 있는 경우 균형 잡힌 척도를 보장할 수 없다.
linkedin, 자소설닷컴, 잡플래닛, 원티드, 잡코리아, 캐치, 점핏, 슈퍼루키, 사람인
면접 보러 가기 전에는 잡플래닛 면접 후기
이력서나 포트폴리오에 JD에 있는 내용을 최대한 반영하면 좋다.
linkedin => AIS7 에 참여했던 분들끼리 서로 추천사를 써주기!
https://jasoseol.com/
https://www.superookie.com/
https://www.jobplanet.co.kr/
https://www.jobkorea.co.kr/
10/10문제 (어려운데 왜지..)
1. 타임스텝(timesteps)을 가져 시퀀스 데이터(sequence data, 순서가 있는 자료로 시계열 자료나 텍스트 자료)를 처리하는 데 탁월하며 음성인식, 자연어 처리 등에 사용되는 딥러닝 기술은 무엇일까요?