cs Embeddings에 대한 이해 -2 | 이미지 기반 유사도, 텍스트 기반 유사도에 대해, TensorFlow Hub
본문 바로가기
  • 매일 한걸음씩
  • 매일 한걸음씩
개발/Recommender System

Embeddings에 대한 이해 -2 | 이미지 기반 유사도, 텍스트 기반 유사도에 대해, TensorFlow Hub

by 시몬쯔 2020. 8. 11.
728x90
반응형

이전 글에서 이어지는 포스팅입니다.

simonezz.tistory.com/43

 

Embeddings에 대한 이해 -1 | 이미지 기반 유사도, 텍스트 기반 유사도에 대해

이 글은 다음의 글을 참고하여 작성되었습니다. cloud.google.com/solutions/machine-learning/overview-extracting-and-serving-feature-embeddings-for-machine-learning?hl=ko 개요: 머신러닝을 위한 특성 임베..

simonezz.tistory.com

많은 사람들이 ML 모델들을 이용해서 고차원이거나 복잡하거나 구조화되지 않은 데이터를 임베딩으로 인코딩하고자한다.

 

텍스트나 이미지, 그 외 데이터들을 인코딩하기 위해 미리 트레이닝된 네트워크를 이용하여 임베딩 시키는 것을 transfer learning이라 한다. 즉, transfer learning은 정보를 한 ML 과제에서 다른 것으로 변환시킨다. 예를 들어, 충분하지 않은 데이터를 가지고 있을 때, 대용량 데이터(ex. ImageNet)에서 미리 트레이닝 된 네트워크를 사용할 수 있다.

 

나 또한 회사에서 추천시스템을 구축할 때 유사이미지 판단을 위해 ImageNet 데이터셋에서 미리 트레이닝 된 ResNet18을 사용했다. MNIST와 같은 숫자 이미지 데이터보다 조금 더 general한 이미지상에서 트레이닝 됐기 때문에 일반적인 정보를 잘 뽑아낼 것이라 생각했다.

 

또 다른 예로는, 일억개의 단어와 문장들 상에서 트레이닝 된 텍스트 임베딩을 사용하여 10,000개정도의 고객 리뷰들을 분석할 수 있다.

 

그러므로, Transfer Learning을 통해 지식을 재사용할 수 있을 뿐만 아니라, 트레이닝 시키는 시간을 대폭 줄일 수 있다.

(수업들으며 노트북 cpu로 트레이닝 직접 시키려다가 엄청나게 오래 걸렸던 경험이...)

 

또 예를 들어 생각해보자. 휴일에 렌탈 가격을 측정해본다고 가정하자.

다음이 미리 주어져있다고 할 때,

  • 기본 특성들 ex) 방 사이즈, 방의 수, 방향(오션뷰, 빌딩뷰...), 위치, 평균 가격, 렌탈 날짜, 계절 등등...
  • Embedded featured ex) 묘사된 글, 사진

임베딩은 모델에 두가지 방법으로 적용될 수 있다. 

1. 첫번째로는, 임베딩을 인풋 feature vectors로 사용하는 것이다. Base input featrues를 미리 트레이닝된 임베딩에 쌓아서 인풋 feature vector를 형성할 수 있다. 키포인트는 이러한 임베딩이 트레이닝이 가능하지 않다는 것이다. 즉, 모델을 트레이닝시킬 때 튜닝되지 않는다.

       구조는 아래의 그림과 같다.

 

 

 

만약 튜닝하고 싶다면, 임베딩을 트레이닝가능한 층에 넣을 수 있다. 그럼으로써, 트레이닝 과정에서 임베딩 weight를 파인 튜닝할 수 있다.

아래 그림에서 볼 수 있듯이, 텍스트와 이미지 특성들이 임베딩 과정 없이 날 것의 상태로(?) 모델에 넣어진다. Input feature vector를 형성하기 위해 Base Input Features와 합쳐지기 전에 미리 트레이닝된 임베딩이 트레이닝가능한 층으로 연결된다.

 

2. 두번째로는, 더 효과적인 모델을 만들어내기 위해 모델 task에 따라 임베딩을 튜닝하는 것이다.

그러나, 임베딩 weights를 포함하기 때문에 보통 첫번째 방법보다 모델 사이즈가 크다.

 

 

 


TensorFlow Hub에서 Embedding modules 사용하기

TensorFlow Hub는 머신러닝 모듈의 라이브러리이다. 모듈들은 pre-trained 모델이거나 텍스트, 이미지 등에서 뽑아낸 임베딩이다.

더 정확히 말하자면, 모듈은 텐서플로우 그래프에서 가중치 및 자산과 함께 독립실행이 가능하다. 재사용 시, 일반화를 향상시키거나 학습속도를 높일 수 있다.

 

다음의 코드는 입력 텍스트의 임베딩을 가져오는 함수로 Universal Sentence Encoder 모듈을 사용한다.

유사도를 분석하거나 검색용 임베딩, 텍스트 사전 처리 시에 사용할 수 있다.

 

embed = hub.Module("https://tfhub.dev/google/universal-sentence-encoder/2")
review_embeddings = embed(["The movie was super interesting!])

 

다음의 코드는 Universal Sentence Encoder 모듈을 text_embedding_column으로 사용하여 input feature를 인코딩하고 DNNClassifier estimator로 사용하는 방법을 보여준다. 임베딩을 모델의 트레이닝가능한 레이어로 사용할 때 이 코드를 사용할 수 있다.

 

review_column = hub.text_embedding_column("review",
                "https://tfhub.dev/google/universal-sentence-encoder/2", trainable=True)
estimator = tf.estimator.DNNClassifier(hidden_units, feature_columns=[review_column])

 

코드에서 알 수 있듯이, URL에는 publisher, 모듈 이름 그리고 버전을 표기한다. 한 번 모듈이 디스크로 다운이 되면, 독립 실행이 가능하며 모듈 생성 및 학습에 사용된 코드와 데이터에 대한 액세스 권한이 없는 개발자가 모듈을 사용할 수 있다. 또한 Trainable 파라미터를 True로 하면 임베딩 weights를 튜닝할 수 있다.

 

 

 

 

728x90
반응형

댓글