본문 바로가기

STUDY

[자격증] AICE PROFESSIONAL

텍스트

토크나이징

- 노이즈 캔슬링: 띄어쓰기 체크

- 토크나이징: 말뭉치를 토큰 단위로

    - POS 태킹: 품사 판별

    - 필터링: 불필요한 단어 제거

 

벡터 표현

- BOW (Bag of Words): 단어 빈도만 포커스

    - DTM (Document-Term matrix): 단어들의 빈도 행렬

    - TF-IDF (Term Frequency-Inverse Document Frequency): 단어의 중요도를 계산하여 표현

- One-hot-encoding 표현: 차원 커지고 유사성 표현 X

- Dense/Distributed representation: N차원 공간 벡터로 의미적 유사성 표현

- 코사인 유사도: 문서의 유사도 구함

 

임베딩

- 워드 임베딩: 자연어를 좌표평면 위에 표현, 희소표현 -> 밀집표현

    - Word2Vec: 밀집벡터를 얻음, CBOW방식, Skip-gram방식

    - FastText: 내부 단어를 고려, n-gram으로 나누어 학습, 모르는 단어 OOV

    - Keras 임베딩

 

언어 모델

- RNN: 시퀀스 모델로 순서가 있음

- LSTM: 필요한 정보만 저장해 학습

- Seq2Seq: 인코더+디코더

- Attention: 중요한 feature에 집중

- Transformer: 병렬화 성능 향상

- BERT: 문맥을 반영한 임베딩, Sentence Pair Classification, Single Sentence Classification, Question Answering, Single Sentence Tagging

 

이미지

CNN

- 컨볼루션 레이어: 필터를 통해 피쳐맵 생성

    - Stride: 슬라이딩 간격

    - Padding: 외각에 0을 채워 넣은 것

    - 풀링 레이어: 크기를 줄이고 특정 데이터 강조

- Relu 활성화 함수

- FCN

- LeNet-5, AlexNet, GoogleLeNet, ResNet

 

Object Detection

- IoU: 얼마나 겹치는가 지표

- NMS: 가장 적합한 box 선택 기법

- mAP: 재현율에 따른 정밀도의 값 평균

- RCNN, Fast RCNN, Faster RCNN

- YOLO, SDD

 

실전

Tabular

빅분기 실기와 비슷

뒤의 두 문제를 위해 빠르게 풀것

 

Text

- 한글 이외 문자 제거: df['col'].str.replace('[^가-힣]', '', regex=True)

- 공백 제거 (스트립): df['col'].str.strip()

- 중복 제거: df.drop_duplicates(subset=['col'], inplace=True)

- 필요하면 라벨 인코딩: from sklearn.preprocessing import LabelEncoder 로 fit_transform, inverse_transfrom도 됨

    - 필요하다면 직접 라벨 리스트를 만들어 매핑

- df['col'].values를 통해 시리즈가 아닌 넘파이 배열로 변환

- 세트 분리: from sklearn.model_selection import train_test_split 으로 하는데 stratify 붙여주도록 하자

- TF-IDF 변환: from sklearn.feature_extraction.text import TifidfVectorizer 로 fit_transform, test set은 따로 transform

- Tokenizing

    - 단어 사전: from tensorflow.keras.preprocessing.text import Tokenizer 로 fit_on_texts

    - 문장 숫자로 나열: texts_to_sequences를 통해서

        - 1번 등장하는 단어 제거: word_counts로 빈도를 세서 직접 새로운 문장 생성해야함

    - 패딩: from tensorflow.keras.preprocessing.sequence import pad_sequences 로 maxlen을 인자로

- 랜덤포레스트 : from sklearn.ensemble import RandomForestClassifier 로 fit, score로 바로 점수 얻기

- LSTM 모델링

    - max_words = 총 단어 갯수 + 1(패딩)

    - max_len = 최대 문장 길이

    - embedding_dim = 32 (보통 32, 64, 128, 300 이라고 함)

    - 모델 선언: from tensorflow.keras.models import Sequential 이후 이 모델에 add

    - 임베딩: from tensorflow.keras.layers import Embedding 에 max_words, embedding_dim, input_length=max_len을 인자로

    - LSTM: from tensorflow.keras.layers import LSTM 에 16, return_sequences=True로 두개 사용

    - Flatten layers로 1차원 벡터 생성

    - Dense layers로 128, activation='swish', 32, activation='swish', 6(타겟수), activation='softmax'

    - model.build(input_shape=(None, max_len))으로 입력 크기 빌드

    - model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

    - from tensorflow.ketas.callbacks import EarlyStopping, ModelCheckpoint

        - es = EarlyStopping(monitor='val_loss', patience=10, verbose=1)

        - cp = ModelCheckpoint('tmp_checkpoint.keras', m onitor='val_loss', verbose=1, save_best_only=True)

    - model.fit(x_train, y_train, epochs=50, batch_size=512, validation_split=0.2, verbose=1, callbacks=[es, cp])

    - model.evaluate(x_test, y_test)

 

Image

- 이미지 path 지정과 os.listdir 로 파일 리스트 만들기

- from PIL import Image 로 open 후 import matplotlib.pyplot as plt 로 plt.imshow(img) (open시 resize)

- np.array(img)/255. 으로 이미지 스케일링

- tf.keras.preprocessing.image_dataset_from_diretory 로 데이터셋 제작

    - directory=img_path, label_mode='binary' or 'categorical', batch_size=batch_size, image_size=(224, 224), seed=42

    - shuffle=True는 훈련데이터만, validation_split=0.2, subset='training' or 'validation' 을 두번 해서 두 세트 만들기

    - 참고로 폴더 이름을 클래스 라벨로 사용함

    - 아니면 직접 클래스 라벨링은 딕셔너리를 통해 img_list, label_list를 제작 후 numpy array로 만들고 Text와 같이 세트 분리

- 모델 만들기

    - input_shape = (size, size, 3)

    - Rescaling(1. / 255): 이미지 스케일링을 '안'했었다면

    - Conv2D(커널수, kernal_size=(5, 5), strides=(1,1), padding='same', activation='relu', imput_shape=input_shape): 패딩을 same으로 해서 이미지 사이즈 그대로

    - MaxPooling2D(pool_size=(2,2), strides=(2,2)): 이미지 사이즈 반으로

    - Conv2D(64,(2,2), activation='relu', padding='same'): 작은 필터 여러개로 사이즈는 그대로

    - MaxPooling2D(pool_size=(2,2)): 사실 pool_size로 자동 스트라이드되서 이미지 반으로

    - Dropout(0.2), Flatten(): 드랍아웃 후 1차원 벡터로

    - Dense(128, activation='relu'), Dropout(0.3), Dense(5, activation='softmax'): 연결, 드랍아웃, 최종 클래스

    - compile: optimizer=tf.keras.optimizers.Adam(learning_rate) 도 사용 가능

    - es, cp 진행: patience는 개선되지 않는 epoch의 수

    - fit으로 학습: validation_split=0.2로 직접 나누거나, validation_data=(X_test, y_test)로 따로 지정하거나, keras로 제작한 셋은 하나로

    - predict 시 배치 형태로 numpy().reshape(-1, size, size, 3) 필요, np.argmax로 가증 큰 예측비율 선택, keras로 제작한 셋은 next(iter(dataset))으로

- 모델 가져오기

    - dir(tf.keras.applications) 에 다양한 모델들 확인

    - base_model = tf.keras.applications.MobileNetV2: input_shape=(size, size, 3) 입력 크기 설정, weights='imagenet' 사전 학습 가중치 불러옴, include_top=False 최상단 레이어 제거해서 사용

    - MobileNetV2는 [-1, 1] 픽셀 값 예상해서 스케일링 해주면 좋음

        - preprocess_input = tf.keras.applications.mobilenet_v2.preprocess_input, img = preprocess_input(img) 로 그냥 자동 정규화

        - rescale = tf.keras.layers.Rescaling(1./127.5, offset=-1) 로 레이어 추가

    - base_model.trainable = False 으로 모델 고정

    - input = tf.keras.Input(shape=(224, 224, 3)): 입력 정의

    - x = tf.keras.layers.Rescaling(1./127.5, offset=-1)(inputs): input을 리스케일링

    - x = base_model(x, training=False): 추론 모드로 훈련 없이 특징 추출

    - x = tf.keras.layers.GlobalAveragePooling2D()(x): 각 체널 평균내서 1차원 벡터로 차원 축소

    - output = tf.keras.layers.Dense(5, activation='softmax')(x): 마지막 클래스 분류

    - model = tf.keras.Model(inputs=input, outputs=output): 입출력을 명시해 모델 생성

    - compile, es, cp, fit 진행