나는 오늘 무엇을 했는가?
1. AIS 7기 수업(오늘코드 박조은 강사님, 파이썬)
- 형태소 분석기, 시퀀스 방식의 인코딩, RNN 찍먹
✨ 1105번 실습의 목적 시퀀스 방식에 대해 알아보자! BOW, TF-IDF 방식과 시퀀스 방식의 차이를 알아보자!
✨ 실습흐름 Tokenizer 인스턴스를 생성 fit_on_texts와 word_index를 사용하여 key value로 이루어진 딕셔너리를 생성 texts_to_sequences를 이용하여 text 문장을 숫자로 이루어진 리스트로 변경 마지막으로 pad_sequences를 이용하여 리스트의 길이를 통일화
✨ Tokenizer 각 텍스트를 일련의 정수 또는 단어 수에 따라 각 토큰의 계수가 이진일 수 있는 벡터로 변환하여 말뭉치를 벡터화할 수 있는 클래스(tf-idf 기반)
매개변수 1️⃣ num_words
단어의 빈도수에 따라 나타낼 최대 단어 수 단어수를 너무 많이하면 학습 시 시간이 너무 오래 걸릴 수도 있고 문장 길이도 다 제각각이다. 단어수를 제한하면 어휘에 없는 단어가 등장했을 때 시퀀스에 누락이 되기 때문에 이런 값을 처리하는 방법이 있다. oov_token을 사용하면 없는 어휘는 없는 어휘라고 표현을 해준다.
2️⃣ filters
각 요소가 텍스트에서 필터링 될 문자인 문자열 기본값은 문자를 제외한 모든 구두점과 탭, 줄 바꿈
3️⃣ lower
BOOl. 텍스트를 소문자로 변환할지 여부 default: True
4️⃣ split
str. 단어 분할을 위한 구분 기호
5️⃣ char_level
bool. True이면 모든 문자가 토큰으로 처리된다.
6️⃣oov_token
어휘 사전에 없는 토큰을 표시 보통 oov가 word index에서 1번으로 잡힌다. 마스크값, 종결, 패딩 등으로 사용하기도 함 "[UKN]", "<oov>" 를 사용하지 않고 다른 문자를 사용해도 상관은 없음
[코드] from tensorflow.keras.preprocessing.text import Tokenizer
tf.keras.preprocessing.text.Tokenizer( num_words=None, filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n', lower=True, split=' ', char_level=False, oov_token=None, analyzer=None, **kwargs )
✨ 패딩 파라미터 1️⃣ sequences
시퀀스 목록
2️⃣ maxlen
전체 시퀀스의 최대 길이 디폴트는 가장 긴 길이로 지정된다.
3️⃣ dtype
결과값에 대한 타입 지정
4️⃣ padding
str, "pre", "post" pre/post: 각 시퀀스 앞/뒤에 패드를 놓는다.
5️⃣ truncating
str, "pre", "post" maxlen이 작을 경우 값을 잘라야 한다. 시퀀스의 시작 또는 끝에서 보다 큰 시퀀스의 값을 제거 post: 뒤를 자른다. (앞의 말이 더 중요하다.) pre: 앞을 자른다. (뒤의 말이 더 중요하다.)
6️⃣ value
float, str 패딩 값
[코드] pad_sequences( sequences, maxlen=None, dtype='int32', padding='pre', truncating='pre', value=0.0, )
=============================================== tokenizer와 padding
tokenizer 불러오기 fit_on_text 시퀀스 만들기 패딩하기
tokenizer2 = Tokenizer(num_words = 7, oov_token = "<oov>") tokenizer2.fit_on_texts(corpus2) corpus_sequences2 = tokenizer2.texts_to_sequences(corpus2) pads2 = pad_sequences(corpus_sequences2, maxlen = 13,padding = "post")
print(corpus2) print(tokenizer2.word_index) print(pads2)
===============================================
✨ 시퀀스 데이터 연관된 연속의 데이터로 순서가 있는 자료로 시계열 자료나 텍스트 자료가 대표적이다. 실제 사용하는 데이터들 중에는 시퀀스 데이터가 대부분을 차지(음성인식, 자연어, 주가 등) 연속된 데이터이므로 순서가 매우 중요하게 작용함 과거의 영향을 받기 때문에 과거 정보의 맥락을 고려하는 새로운 모델이 필요 순서가 중요한 데이터는 섞지 않고(shuffle X) 순서대로 나누기도 함
예시: 시계열 데이터, 주식, DNA
시퀀스 방식의 인코딩은 시퀀스(순서)를 고려하는 알고리즘에서 더 나은 성능을 보여준다. 머신러닝에서 사용했을 때는 오히려 TF-IDF가 더 나은 성능을 보여주기도 한다. 자연어 처리는 순서가 중요한데, 이는 우리가 말을 이해할 때 어순이 중요한 것과 같다.
✨ RNN(Recurrent Neural network) 인공 신경망의 한 종류로 시계열 또는 자연어와 같은 시퀀스 데이터를 모델링하는 데 강력한 신경망 클래스
RNN의 활용 분야
언어모델링 음성인식 기계번역 대화 모델링/질문 답변 이미지/비디오 캡션 이미지/음악/동작 생성
2. 미니프로젝트 7
3. 파이널 프로젝트 주제 회의
나는 오늘 무엇을 느꼈는가?
RNN 재미있을 것 같아서 기대가 된다.
총 공부시간
13시간 54분 01초
'복습 및 회고 > TIL' 카테고리의 다른 글
[TIL] 20230102 (월) (0) | 2023.01.02 |
---|---|
[TIL] 20230101 (일) (0) | 2023.01.01 |
[TIL] 20221213(화) (0) | 2022.12.13 |
[TIL] 20221211(일) (0) | 2022.12.11 |
[TIL] 20221210(토) (0) | 2022.12.10 |
댓글