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
- session 유지
- tensorflow text
- 유튜브 API
- airflow subdag
- spark udf
- grad-cam
- top_k
- API Gateway
- TensorFlow
- requests
- youtube data
- XAI
- Counterfactual Explanations
- UDF
- 상관관계
- login crawling
- Airflow
- API
- correlation
- 공분산
- BigQuery
- GCP
- flask
- GenericGBQException
- gather_nd
- hadoop
- chatGPT
- subdag
- Retry
- integrated gradient
Archives
- Today
- Total
데이터과학 삼학년
Transfer Learning (universal-sentence-encoder-multilingual) 본문
Natural Language Processing
Transfer Learning (universal-sentence-encoder-multilingual)
Dan-k 2020. 8. 10. 17:12반응형
Tranfer learning은 NLP 관련 Task에서 제한적인 양의 training data 가 쓰이고 있기 때문에 실제 연구나 실무에서 고 성능의 NLP 연구를 위해 transfer learning을 쓸 수 있다.
(특히 word embedding 과 같은 부분에서; word2vec, GloVe)
최근 연구(2017) 에서는 word 단위가 아닌 sentence 단위의 embedding이 성능이 더 높다는 것이 입증 되었음
entence embedding을 위한 2가지 모델을 제시하며, 이 모델들은 좋은 성능을 입증되었다.
이에 embedding layer는 다국어의 변형이 가능한 (16개 언어) universal sentece encoder multilingual 모델을 이용하여 transfer learning layer를 추가하고, 이후 분석 모델은 custom하게 작성하여 사용해 본다.
universal sentence encoder를 사용하기 위해서는 꼭 tensorflow_text를 설치해야함
!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)
Out[54]:
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 = '나는 밥을 아주 맛있게 먹었습니다.'
## 저장후 load한 모델 vs 원 모델 결과 비교
loaded_model.predict([test_sample])
model.predict([test_sample])
모델을 저장해도 tranfer learning layer가 같이 저장된 것을 확인할 수 있음
728x90
반응형
LIST
'Natural Language Processing' 카테고리의 다른 글
[번역 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 |
[tf 2.x] tf.keras 로 predict 결과 custom 하기 --> GCP ai-platform ( keyed model, serving_signature) (1) | 2020.07.08 |
Comments