머신러닝 디자인패턴

멀티 모달 입력

판교데싸 2023. 3. 4. 10:41

문제

일반적으로 모델에 대한 입력은 숫자 또는 카테고리, 이미지 또는 자유 형식 텍스트로 표현할 수 있다.
많은 모델이 보통 특정한 입력 유형에 대해서만 정의되어 있는데 예를 들어 Resnet -50과 같은 표준 이미지 분류 모델은 이미지 이외의 입력을 처리 할 수 없다.

멀티 모달 입력의 필요성을 이해하기 위해, 교통 법규 위반 카메라를 가정해보면 모델은 이미지 데이터와 이미지 포착 시점(시간,요일,날씨) 에 대한 일부 메타 데이터를 모두 처리해야한다.

이런 문제는 입력 중 하나가 자유 형식 텍스트인 구조화 된 데이터 모델을 학습할 떄도 발생, 수치와 달리 이미지와 텍스트는 모델에 직접 input으로 넣을 수 없음 (보통 임베딩 디자인 패턴 사용)

ex)

- 레스토랑 리뷰 평점 예측

1. 리뷰 텍스트 (비정형 텍스트) , 2. 총비용(수치 데이터) , 3. 식사 시간 ( 수치 -> 카테고리)

 

솔루션

각기 다른 표현방식을 정규화한 후 결합
- 수치와 카테고리 특징을 결합

저녁 식사 : one-hot encoding - [0,0,1]  , 총 비용 : numerical - [30.5],  리뷰 텍스트 : neural network 모델을 통한 embedding

ex) 

reviews_data = {
    "review_text": ["The food was great, but it took forever to get seated.", "The tacos were life changing.", "This food made me question the presence of my taste buds."],
    "meal_type": ["lunch", "dinner", "dinner"],
    "meal_total": [50, 75, 60],
    "rating": [4, 5, 1]
}
  • 저녁식사 : [0,0,1]
  • 식사비용 : 30.5$ -> [30.5]
  • 리뷰텍스트 : "The food was greate, but be prepared to wait..." -> f -> [0.75, 0.82, 0.45]

Input : [0,0,1, 30.5, .75, -.82, .45] ->

output : [y] -> review grade

meal_type 및 meal_total과 연결하기 위해 임베딩을 평활화해야 함
- model.add(Flatten())

이후 완전 연결 계층( FCL)을 사용하여 큰 배열을 작은 배열로 변환하고, 다음과 같이 3개의 숫자 배열로 끝나는 출력을 만들 수 있음
- model.add(Dense(3, activation ='relu'))

 

트레이드 오프와 대안

멀티 모달의 데이터 표현

1. 다양한 형태의 데이터를 동일 모델의 I/O 에 맞춤

2. 모델이 좀 더 잘 식별할 수 있도록 기존 데이터 표현을 개선

 

예)

1. 리뷰 평점 단순화

- 기존 리뷰 체계 : [1,2,3,4,5] grade

- 수정 리뷰 체계 : [Good, Bad]

2. 거리체계 단순화

- 기존 거리 체계 : 레스토랑으로부터 km거리(수치)

- 수정 리뷰 체계 : 같은 도시 /다른 도시

 

텍스트의 멀티모달 표현

BOW(Bag of Word) model

텍스트 내에 정의된 단어들의 존재여부로 데이터 표현

예) How to plot dataframe bar graph? -> BOW -> [1 0 0 1 0 1 0 0 0 0]

Vocabulary list

[dataframe,
layer,
series,
graph,
column,
plot,
color,
axes,
read_csv,
activation]
  • 단어빈도수 임계치가 높으면 잃는 정보가 많으며, 임계치가 낮으면 의미가 낮은 단어들의 빈도가 커져 노이즈가 된다.

Embedding model

단어들간의 관계를 같이 고려/표현한다. 모델에 대한 학습이 필요

텍스트에서 테이블 특징 추출하기

비정형 텍스트에서 의미있는 특징을 추출(Feature engineering)하여 테이블화(정형화) 한다.

예) 스택오버플로우(Stackoverflow) 질문에 답변예측

  • question mark (?) 여부
  • 문장의 길이, 단어의 개수

 

이미지의 멀티모달 표현

이미지는 각 픽셀값을 특징값으로 다룰 수 있다. 이미지 크기가 크지 않은 경우 (예. MNIST 손글씨) 데이터를 평활화(flatten)하여 사용가능하나 일반적으로 차원의 축소를 통해 embedding 을 한다.

이미지를 타일구조로 표현하기

sliding window 방식의 매트릭스 계산을 통해 이미지의 특징을 보존하면서 차원의 크기를 줄일 수 있다. 

  • Convolution
  • Pooling

서로다른 이미지 표현의 결합

앞서 표현된 원-이미지와 타일구조로 표현된(Feature extracted) 두 표현을 결합하여 모델에 활용할 수 있다.

이미지와 메타데이터를 함께 사용하기

교차로 장면에서 교통위반여부 식별 모델

  • 교차로 CCTV 영상 : (비정형) 이미지
  • +시간 : 정수
  • +날씨 : 가시성 / 기상상황
  • +장소 : 카테고리
tabular_image_metadata = {
    'time': [9,10,2],
    'visibility': [0.2, 0.5, 0.1],
    'inclement_weather': [[0,0,1], [0,0,1], [1,0,0]],
    'location': [[0,1,0,0,0], [0,0,0,1,0], [1,0,0,0,0]] 
}
  • 이미지 데이터의 경우 합성곱(Convolutional) 계층을 사용
  • 정형 데이터의 경우 완전연결(Fully connected)계층을 사용하여 embedding/평활화 한 후 함께 연결한다.

멀티모달 특징표현과 모델의 해석 가능성

딥러닝 모델의 경우 예측결과를 해석하는데 있어 한계가 존재

  • 입력 데이터포인터 <-> 모델 결과간의 상호작용을 분석하는 기법은 존재하나 한계
  1. Summary
  • 특징해시
  • 임베딩
  • 특징교차
  • 멀티모달입력
반응형
반응형