sample = ['the cat sat on the mat.']
* 문자
for word in sample
-> word = t, h, e, c, a, t......
* 단어
for word in sample.split()
-> word = the, cat, sat, on......
enumerate : for문 index 같이 나옴
------------------------------------------------------------------
<텍스트 처리>
1. 원-핫 인코딩 : 희소 벡터(대부분 0으로 채워짐), 고차원(어휘사전에 있는 단어수와 동일)
- 단어 수준, 문자 수준, 케라스를 사용한 단어수준(tokenizer), 해싱 기법
2. 단어 임베딩 : 밀집 단어 벡터(희소 벡터와 반대), 더 많은 정보를 적은 차원에 저장
- Embedding() 사용하기
입력크기 : 2D, 두 개의 인자를 받는다. 첫번째 인자는 단어 집합의 크기이며 두번째 인자는 임베딩 후의 벡터 크기입니다. (단, flatten층에서 펼치기 위해 input_length를 지정.)
출력크기 : 3D 텐서
preprocessing.sequence.pad_sequences : 리스트를 2D텐서로 변환, (각 리뷰는 문장의 길이가 다르기 때문에, 모델이 처리할 수 있도록 길이를 동일하게 해주어야 합니다. 이때 사용하는 것이 pad_sequences()입니다. 길이는 maxlen에 넣는 값으로 정해집니다. 훈련 데이터가 정한 길이를 초과하면 초과분을 삭제하고, 부족하면 0으로 채웁니다.)
Flatten() # 3D텐서를 2D텐서로 펼치기
- 사전훈련된 단어 임베딩하기(훈련데이터가 부족한 경우)
* imdb 데이터 : 1이라는 숫자는 이 단어가 이 데이터에서 등장 빈도가 1등이라는 뜻입니다. 973라는 숫자는 이 단어가 데이터에서 973번째로 빈도수가 높은 단어라는 뜻입니다.
-----------------------------------------------------------------------------------
피드포워드 네트워크 : 단순한 신경망, 순환이나 루프 없음
<RNN : 순환 신경망>
케라스의 순환층
- simpleRNN 시퀀스 배치를 처리한다! 입력값 batch_size (전체 상태 시퀀스 반환 return_sequences = True )
*그래디언트 소실 문제? 오차 역전파는 출력층으로부터 하나씩 앞으로 되돌아가며 각 층의 가중치를 수정하는 방법입니다. 가중치를 수정하려면 미분 값, 즉 기울기가 필요하다고 배웠습니다. 그런데 층이 늘어나면서 기울기가 중간에 0이 되어버리는 기울기 소실(vanishing gradient) 문제가 발생하기 시작했습니다.
즉 simple은 실제로 긴 시간에 걸친 의존성을 학습할 수 없는 것이 문제이기 때문에 잘 사용하지 않아.
- LSTM : 과거 정보를 나중에 다시 주입하여 그래디언트 소실 문제를 해결. 대표적 예) 질문-응답, 기계 번역 등과 같은 훨씬 더 복잡한 자연어 처리(긴 시퀀스)
- GRU