[연구 8] 원료 임베딩 클러스터링

원료들을 벡터로 표현하고 임베딩하여 유사 원료를 확인하는 방법에 대한 논의

Report Info

  1. 👨🏻‍💻 Code Release: Tag v23.11.14.2
  2. 📂 Raw Data : (raw_data:receipt_3)
    # 3.1 은 1차 및 2처 처방을 합치고 코드별로 합산한 데이터
  3. 🗂️ Datasets : (ds:receipt_3_dl)
  4. 👾 Models : MLP
  5. 🦄 Trainers : (sigmoid_code_learning)
  6. 📌 Related Notebooks

1. 벡터화

각 원료에 대한 표현벡터를 만드는 것은 꾸준하게 증가하는 신규 원료에 대한 인공지능 모델 학습을 쉽게 하며, 표현된 벡터를 해석함으로써, 사용자는 복잡한 신경망에 대한 부담을 덜 수 있다. 이를 위해서 단순히 함량에 대해서 예측 하는 모델이 아닌, 각 원료를 표현벡터로 맵핑하고, 추가적인 함량과 함께 예측하는 형태를 제안한다.

좀더 자세히 설명하면 표현벡터는 임의의 원료 $\mathcal{M}$를 벡터 $H$ 형태로 맵핑된 형태로 나타나며, 원료의 유사도가 높다면, 벡터의 거리도 줄어드는 성질이 있다.

2. 벡터 표현 학습

원료를 벡터로 표현하는 방법은 지도/비지도 학습 방법들을 포함하여 여러가지가 있다. 이번 보고서에서는 크게 데이터의 특성을 기반으로한 벡터와 End-to-End 점도 예측 학습을 활용한 벡터 표현 학습을 다룬다.

Method1: 원료 정보 바탕

가장 쉽게 원료에 대한 표현벡터를 만드는 방법은 배합목적을 기반으로 하는 방식이다. KCA데이터에는 원료에 대한 배합목적은 91가지가 있으며, 특정 원료는 각 배합목적을 포함할 수 있다.

  1. 각 원료에 대한 배합 목적을 확인한다.
  2. 91가지 배합목적이 서로 배타적이라는 가정하에서 0~90까지 인덱스로 배합목적을 표현한다.
  3. 91차원 벡터에 0 또는 1로 배합목적 포함 여부를 표시한다.
아래 예시에서는 원료에 대한 배합 목적으로부터 표현벡터를 만드는 예시를 보여준다. # 원료 인덱스 : 벡터 인덱스 (이름 변환) 23331 : ['산화방지제', '헤어컨디셔닝제', '피부보호제', '피부컨디셔닝제(보습제)', '피부컨디셔닝제(기타)', '피부컨디셔닝제(수분차단제)'] 23333 : ['피부컨디셔닝제(유연제)', '피부컨디셔닝제(보습제)'] 23334 : ['헤어컨디셔닝제', '피부보호제', '피부컨디셔닝제(가터)'] 23335 : ['피부컨디셔닝제(기타)'] 23336 : ['피부컨디셔닝제(기타)'] 23337 : ['각질제거제', '비듬방지제', '체취방지제', '피부컨디셔닝제'] # 원료 인덱스 : 벡터 인덱스 23331 : [0, 1, 2, 3, 7, 11] 23333 : [9, 3] 23334 : [1, 2, 88] 23335 : [7] 23336 : [7] # 원료 벡터 형태 변환 : 원핫벡터 23331 : [1,1,1,0,0,0,1,0,0,0,1, 0,...] 23333 : [0,0,0,1,0,0,0,0,0,1,0,...] 23334 : [0,0,,.....,1,0,0,0] 23335 : [0,0,0,0,0,0,1,0,...] 23336 : [0,0,0,0,0,0,1,0,...]

91차원은 고차원으로 시각적으로 유사한 원료를 찾고 이해하는 것은 쉽지 않다.시각적인 목적으로 사용하는 방법 중 “저차원 임베딩”을 소개한다.저차원 시각화는 91차원 벡터를 2차원으로 사영하여 시각화한다. 추가적인 정보로 레이블을 시각화하는 경우, 예상하는 특징들이 비슷한 벡터 표현으로 묶이는지 확인할 수 있다.

스킨 / 헤어 / 스킨+헤어 특징

식물 관련 단어 포함 여부 (나무, 풀, 꽃, 잎)

시성식이 있는 경우와 없는 경우

Method2: Differential Feature Learning

실제 원료의 특성을 기반으로 하는 방법과 다르게, 점도 예측을 목적으로 코드 표현을 학습할 수 있다. 이 방법의 가정은 “코드 표현이 적절하게 형성된다면, 예측력이 올라간다”는 점이다. 각 원료에 대한 표현벡터 형성을 최적화하여, 점도 예측을 최소화하는 표현벡터를 학습하는 방법이다 .

The code mapping problem has two components $h_{\theta_{map}}$ and $g_{\theta_{reg}}$ to compute predict any type of outputs with the amount of materials for the input. The direct regression function $f_\theta$ is the composition of two functions.

\[f_\theta = g_{\theta_{reg}} \circ h_{\theta_{map}}\]

The input and output spaces for each module are as follows:

End-to-End code entry preference learning is optimized by

\[\theta_{reg}^{\star},\theta_{map}^{\star} = \arg \min_{\theta_{map}, \theta_{reg}} \mathcal{L}( f_\theta (x), y)\]

One way to model $h_{\theta_{map}}$ is to map individual code $c$ to a representation vector \(\mathbf{h}_c \in \mathbb{R}^{N_{entry}}\) and combine the $\mathbf{h}_c$ with amounts.

\[h_{\theta_{map}} (A_1, \cdots, A_{N_{code}}) = \sum_{c} A_c \cdot \mathbf{h}_c\]

To minimize the loss, both weights $\theta_{reg}$ and $\theta_{map}$ are jointly optimized.

벡터 길이 ($N_{entry}$) 에 따른 차이

벡터 길이에 대한 성능 차이는 없었음.

ACT HIDDEN_DIM N_ENTRIES NUM_LAYERS OPTIM (Eval+Train)/2 Eval Train
sigmoid 128 10 4 adam 1494 1500 1488
sigmoid 128 25 4 adam 1494 1500 1488
sigmoid 128 2 4 adam 1495 1501 1489
sigmoid 128 5 4 adam 1495 1501 1489
### $N_{entry}=2$ ### $N_{entry}=5$ ### $N_{entry}=10$ ### $N_{entry}=10$