250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- TensorFlow
- session 유지
- 유튜브 API
- BigQuery
- subdag
- Counterfactual Explanations
- tensorflow text
- chatGPT
- flask
- login crawling
- airflow subdag
- spark udf
- 공분산
- top_k
- GenericGBQException
- gather_nd
- requests
- youtube data
- Retry
- integrated gradient
- correlation
- API
- Airflow
- grad-cam
- API Gateway
- hadoop
- UDF
- GCP
- XAI
- 상관관계
Archives
- Today
- Total
데이터과학 삼학년
Transfer learning 적용 정리 : universal sentence encoder multilingual 본문
Natural Language Processing
Transfer learning 적용 정리 : universal sentence encoder multilingual
Dan-k 2020. 8. 10. 17:27반응형
Transfer learning : universal sentence encoder multilingual
적용 환경
- TF 2.3
- 간혹 안되면 TF2.0으로 내리면 됨
- Sequential API (keras) 만 사용 가능
- model url
실행 문제
- 모델 등록 후 Online prediction 불가
- 이유는….잘 모르겠음
- Keyed model을 이용하여 batch prediction 처리 불가 (transfer learning sequential api 에서만 가능)
- Bigquery ML model create 불가하여 online prediction 불가
- tensorflow data size 가 허락된 양 268435456 보다 클 경우, create가 안됨
장점
- 한가지 모델로 다중언어 처리 가능
- 학습시 일부 언어 학습만으로도 예측에 다국어 처리 가능
단점
- 제한된(불안정한) 환경
- keyed model 적용 불가
- bigquery ml 적용 불가
프로덕트 적용 검토
- 아직은 transfer learning layer자체를 모델로 저장해 ai-platform에 적용하기에 몇가지 한계를 확인할 수 있었음
- universal sentence encoder 적용사례 검토 결과, 보통 전처리 단계에서 embedding layer를 적용시켜 데이터를 변환 후 모델에 태우는 usecase를 많이 찾아볼 수 있었음
- text embedding transfer learning의 경우 아직 tf 1.x 버전에서 graph를 만들어 적용하는 사례가 많이 있음 (링크)
- tf 2.x 를 위한 버전도 계속해서 업데이트되고 있어 조금더 지켜본후 적용할 필요가 있다고 보임
적용 코드
# -*- coding: utf-8 -*-
"""transfer_learning_use_multilingual.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1DOfSOU358etXSACiLV7-8HKdbIK7esvd
"""
!pip install tensorflow_text
import urllib
import pandas as pd
import tensorflow as tf
import tensorflow_hub as hub
import tensorflow_text
from tensorflow.keras.models import Model, Sequential
from tensorflow.keras.utils import to_categorical
from tensorflow.keras import optimizers
from sklearn.model_selection import train_test_split
tf.__version__
## naver 영화데이터 불러오기
urllib.request.urlretrieve("https://raw.githubusercontent.com/e9t/nsmc/master/ratings_train.txt", filename="ratings_train.txt")
urllib.request.urlretrieve("https://raw.githubusercontent.com/e9t/nsmc/master/ratings_test.txt", filename="ratings_test.txt")
train_data = pd.read_table('ratings_train.txt')
test_data = pd.read_table('ratings_test.txt')
train_data['document'] = train_data['document'].apply(str)
X = train_data.iloc[:2000,:].document
y = train_data.iloc[:2000,:].label
X.head()
def encode_labels(sources):
classes = [source for source in sources]
one_hots = to_categorical(classes)
return one_hots
X_train, X_valid, y_train, y_valid = train_test_split(X, encode_labels(y), test_size=0.1, random_state=42)
n_classes = 2
optimizer = optimizers.Adam(learning_rate=0.01)
use_url = "https://tfhub.dev/google/universal-sentence-encoder-multilingual/3"
use_url_large = "https://tfhub.dev/google/universal-sentence-encoder-multilingual-large/3"
loaded_obj = hub.load(use_url)
model = Sequential(
[
hub.KerasLayer(use_url, input_shape=[], dtype=tf.string, trainable=False, name='USE-multilingual'),
tf.keras.layers.Dense(2, activation="relu", name="layer1"),
tf.keras.layers.Dense(3, activation="relu", name="layer2"),
tf.keras.layers.Dense(2, activation="softmax", name="layer3")
]
)
model.compile(optimizer = tf.keras.optimizers.Adam(lr=1e-3), loss ='categorical_crossentropy', metrics =['accuracy'])
model.summary()
model.fit(X_train.values, y_train, epochs=2)
tf.keras.utils.plot_model(model, show_shapes=True, dpi=90)
MODEL_EXPORT_PATH = './use_model/'
tf.saved_model.save(model, MODEL_EXPORT_PATH)
loaded_model = tf.keras.models.load_model(MODEL_EXPORT_PATH)
test_sample = '나는 밥을 아주 맛있게 먹었습니다.'
loaded_model.predict([test_sample])
model.predict([test_sample])
728x90
반응형
LIST
'Natural Language Processing' 카테고리의 다른 글
[크롤링] 로그인이 필요한 website 크롤링 (2) | 2020.09.09 |
---|---|
[번역 API] Google translate를 이용한 언어 번역 API 사용 (0) | 2020.09.08 |
Transfer Learning (universal-sentence-encoder-multilingual) (0) | 2020.08.10 |
[Text Preprocessing] re를 활용한 문자(한글,영어), 숫자만 가져오기 (0) | 2020.07.21 |
[TF 2.x] model layer에 text vectorization 단계를 넣기 (0) | 2020.07.15 |
Comments