Как построить модель, используя вложения слов Glove, и предсказать тестовые данные с помощью text2vec в R

Я строю модель классификации текстовых данных на две категории (то есть классифицирую каждый комментарий на 2 категории), используя вложения слов GloVe. У меня есть два столбца, один с текстовыми данными (комментариями), а другой - с двоичной целевой переменной (независимо от того, является ли комментарий действующим или нет). Мне удалось сгенерировать вложения слов Glove для текстовых данных, используя следующий код из документации text2vec.

glove_model <- GlobalVectors$new(word_vectors_size = 50,vocabulary = 
glove_pruned_vocab,x_max = 20L)
#fit model and get word vectors
word_vectors_main <- glove_model$fit_transform(glove_tcm,n_iter = 20,convergence_tol=-1)
word_vectors_context <- glove_model$components
word_vectors <- word_vectors_main+t(word_vectors_context)

Как построить модель и сделать прогнозы на основе тестовых данных?


person sri sivani charan    schedule 05.03.2018    source источник
comment
@blacksite вы можете перейти по следующей ссылке для реализации Python Использование предварительно обученных встраиваний слов в модели Keras   -  person sri sivani charan    schedule 18.05.2018


Ответы (2)


text2vec имеет стандартный predict метод (в любом случае, как и большинство R библиотек), который вы можете использовать простым способом: взгляните на документация.

Короче говоря, просто используйте

predictions <- predict(fitted_model, data)
person gented    schedule 05.03.2018
comment
Спасибо за ваш ответ. Я использовал прогноз (подобранная_модель, данные) для подходов tfidf и ngram. Но мой вопрос в том, как мне построить модель после создания вложений Word с помощью GloVe. В документации text2vec используются только вложения слов для проверки точности аналогии с предварительно обученным файлом. - person sri sivani charan; 06.03.2018
comment
Что вы имеете в виду под построением модели? Вы хотите соответствовать модели, прогнозировать новые данные, получать векторы для каждого слова? Что именно вы хотите сделать (и чего не нашли в документации)? - person gented; 06.03.2018
comment
это я понял из документации. Я немного смущен. Поправьте меня, если я ошибаюсь. сначала модель строится на основе данных поезда с использованием glove $ fit_transform, которая соответствует модели перчатки для входной матрицы. Это просто генерирует вложения слов для текстовых данных. Итак, как мне построить модель, используя эти вложения слов и мою целевую переменную? Затем, после построения модели, как мне подогнать эту модель к тестовым данным для создания прогнозов? - person sri sivani charan; 06.03.2018
comment
Слово вложения - это модель: как мне построить модель, используя эти вложения слов и мою целевую переменную, что вы хотите построить сейчас? Какая модель? - person gented; 06.03.2018
comment
Эти вложения выполняются только для одного столбца, который состоит из текстовых данных. Мои данные имеют два столбца, один из которых состоит из текстовых данных, а другой - это целевая переменная, которая говорит, является ли она действующей или нет. Я создал матрицу совпадений для текстовых данных, а затем сгенерировал эти вложения слов. Я хочу построить модель классификации на этих текстовых данных, чтобы определить, является ли комментарий действенным или нет. - person sri sivani charan; 06.03.2018
comment
Я не понимаю, что все это значит. Что такое целевая переменная в контексте встраивания слов и текстовой модели? Похоже, вы пытаетесь решить другую проблему, в которой вложения слов - это всего лишь одна часть информации (но в этом случае вопрос, который вы задаете, выходит за рамки) - person gented; 06.03.2018
comment
именно это и есть моя точка зрения. вложения слов - это всего лишь часть информации. Просто я хочу построить модель, чтобы предсказать, будут ли комментарии (текстовые) действенными или нет (целевая переменная). Как мне это сделать, используя вложения слов из текстовых данных? - person sri sivani charan; 06.03.2018
comment
Что ж, но тогда это совсем другой вопрос, чем то, что вы указали в исходном посте. - person gented; 06.03.2018
comment
Извините, плохо, что я неправильно передал свой вопрос в заголовке. Отредактировал заголовок и вопрос. - person sri sivani charan; 07.03.2018

Понятно.

glove_model <- GlobalVectors$new(word_vectors_size = 50,vocabulary = 
glove_pruned_vocab,x_max = 20L)
#fit model and get word vectors
word_vectors_main <- glove_model$fit_transform(glove_tcm,n_iter =20,convergence_tol=-1)
word_vectors_context <- glove_model$components
word_vectors <- word_vectors_main+t(word_vectors_context)

После создания вложения слов создайте индекс, который отображает слова (строки) в их векторные представления (числа).

embeddings_index <- new.env(parent = emptyenv())
for (line in lines) {
values <- strsplit(line, ' ', fixed = TRUE)[[1]]    
word <- values[[1]]
coefs <- as.numeric(values[-1])
embeddings_index[[word]] <- coefs
}

Затем создайте матрицу внедрения формы (max_words, embedding_dim), которую можно загрузить в слой внедрения.

embedding_dim <- 50 (number of dimensions you wish to represent each word).
embedding_matrix <- array(0,c(max_words,embedding_dim))
for(word in names(word_index)){
  index <- word_index[[word]]
  if(index < max_words){
    embedding_vector <- embeddings_index[[word]]
    if(!is.null(embedding_vector)){
      embedding_matrix[index+1,] <- embedding_vector  #words not found in 
the embedding index will all be zeros
    }
  }
}
We can then load this embedding matrix into the embedding layer, build a 
model and then generate predictions.

model_pretrained <- keras_model_sequential() %>% layer_embedding(input_dim = max_words,output_dim = embedding_dim) %>%
                layer_flatten()%>%layer_dense(units=32,activation = "relu")%>%layer_dense(units = 1,activation = "sigmoid")
summary(model_pretrained)

#Loading the glove embeddings in the model
get_layer(model_pretrained,index = 1) %>% 
set_weights(list(embedding_matrix)) %>% freeze_weights()

model_pretrained %>% compile(optimizer = "rmsprop",loss="binary_crossentropy",metrics=c("accuracy"))

history <-model_pretrained%>%fit(x_train,y_train,validation_data = list(x_val,y_val),
                                epochs = num_epochs,batch_size = 32) 

Затем используйте стандартную функцию прогнозирования для создания прогнозов.

Проверьте следующие ссылки. Используйте вложения слов для построения модели в Keras

Предварительно обученные встраивания слов

person sri sivani charan    schedule 24.05.2018