통계 및 인공지능

R에서 ELMO 모형 사용하기

cj92 2021. 4. 26. 05:32

우선 본 내용은 아래의 링크를 참조하였다.

 

wikidocs.net/33930

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

환경을 구축하는 것은 아래를 참조하자.

 

rcj92.tistory.com/10

 

R tensorflow-gpu 설정하기

오늘은 R쓰시는 분들이 딥러닝 할 때 GPU세팅을 힘들어해서 R에서 tensorflow를 gpu로 돌리기 위한 세팅을 해보겠다. 지금은 tensorflow라이브러리에서 install_tensorflow()를 활용하면 쉽게 가능하다고 하

rcj92.tistory.com

우선 elmo는 tensorflow1을 사용하기 때문에 기존의 tensorflow2를 사용할 수 없다.

 

그래서 tensorflow1 가상환경을 만들어 보자.

 

conda_create로 miniconda의 가상환경을 만들어보자.

 

근데 잘 만들어 졌는데 문제가 발생한다.

 

use_condaenv()함수를 사용해도 환경이 바뀌지 않는다.

 

찾아보니 전역적으로 '.Reviron'에서 설정할 수 있게 되어있다.

 

내 경우 miniconda의 경로가 /home/ducj/.local/share/r-miniconda/envs/test이므로 

 

.Reviron파일에서 아래와 같이 입력해주고 저장해준다.

 

RETICULATE_PYTHON='/home/ducj/.local/share/r-miniconda/envs/test/bin/python'

 

library(keras)
library(tensorflow)
library('readr')
library('stringr')

conda_create('test',packages = 'tensorflow-gpu=1.15')
conda_install('test',packages='tensorflow-hub')

file.edit(file.path("~", ".Renviron"))
reticulate::py_config()

tensorflow_hub는 google에서 제공해주는 모형을 가져와 쓸 수 있다. 

 

안타깝게도 tensorflow2은 아직 지원하지 않고 있다.

 

hub=import('tensorflow_hub')
elmo = hub$Module("https://tfhub.dev/google/elmo/3")
library('readr')
library('stringr')
data=read.csv("https://raw.githubusercontent.com/mohitgupta-omg/Kaggle-SMS-Spam-Collection-Dataset-/master/spam.csv")
data$v1=factor(data$v1)

n_of_train = as.integer(length(X_data) * 0.8)
n_of_test = as.integer(length(X_data) - n_of_train)

X_train = X_data[1:n_of_train] 
y_train = array(as.integer(y_data[1:n_of_train])) 
X_test = array(X_data[n_of_train:length(X_data)]) 
y_test = array(as.integer(y_data[n_of_train:length(y_data)]))

ELMoEmbedding=function(x){
  return(elmo(tf$squeeze(tf$cast(x,dtype='string')),as_dict=T,signature="default")['default'])
}

sess=tf$Session()
K=keras::backend()
K$set_session(sess)
sess$run(tf$global_variables_initializer())
sess$run(tf$tables_initializer())

input_text=layer_input(shape=c(1,NULL),dtype='string')
embedding_layer=input_text%>%layer_lambda(ELMoEmbedding,output_shape = c(1024L,NULL))
hidden_layer=embedding_layer$default%>%layer_dense(c(256L),activation='relu')
output_layer=hidden_layer%>%layer_dense(c(NULL,1L),activation='sigmoid')
model = keras_model(inputs=list(input_text), outputs=output_layer)
model$compile(loss='binary_crossentropy', optimizer='adam', metrics=list('accuracy'))

history = model%>%keras::fit(X_train, y_train, epochs=1, batch_size=30)

'통계 및 인공지능' 카테고리의 다른 글

WaveNet in R  (0) 2021.05.02
1D-CNN & Multi input Multi output Model in R  (1) 2021.05.02
rTorch LSTM 예제 코드(GPU 사용)  (0) 2021.04.24
R tensorflow LSTM 예제 코드(GPU 사용)  (0) 2021.04.24
트리모델과 더미화  (0) 2021.02.28