H20: как использовать градиентное усиление для текстовых данных?
Я пытаюсь реализовать очень простую проблему обучения ML, где я использую текст, чтобы предсказать какой-то результат. В R некоторые основные примеры будут:
импортировать поддельные, но забавные текстовые данные
library(caret)
library(dplyr)
library(text2vec)
dataframe <- data_frame(id = c(1,2,3,4),
text = c("this is a this", "this is
another",'hello','what???'),
value = c(200,400,120,300),
output = c('win', 'lose','win','lose'))
> dataframe
# A tibble: 4 x 4
id text value output
<dbl> <chr> <dbl> <chr>
1 1 this is a this 200 win
2 2 this is another 400 lose
3 3 hello 120 win
4 4 what??? 300 lose
использование text2vec
чтобы получить разреженное матричное представление моего текста (см. также https://github.com/dselivanov/text2vec/blob/master/vignettes/text-vectorization.Rmd)
#these are text2vec functions to tokenize and lowercase the text
prep_fun = tolower
tok_fun = word_tokenizer
#create the tokens
train_tokens = dataframe$text %>%
prep_fun %>%
tok_fun
it_train = itoken(train_tokens)
vocab = create_vocabulary(it_train)
vectorizer = vocab_vectorizer(vocab)
dtm_train = create_dtm(it_train, vectorizer)
> dtm_train
4 x 6 sparse Matrix of class "dgCMatrix"
what hello another a is this
1 . . . 1 1 2
2 . . 1 . 1 1
3 . 1 . . . .
4 1 . . . . .
Наконец, обучаем алгоритм (например, используя caret
) предсказывать output
используя мою разреженную матрицу.
mymodel <- train(x=dtm_train, y =dataframe$output, method="xgbTree")
> confusionMatrix(mymodel)
Bootstrapped (25 reps) Confusion Matrix
(entries are percentual average cell counts across resamples)
Reference
Prediction lose win
lose 17.6 44.1
win 29.4 8.8
Accuracy (average) : 0.264
Моя проблема:
Я вижу, как импортировать данные в h20
с помощью spark_read_csv
, rsparkling
а также as_h2o_frame
, Однако по пунктам 2. и 3. выше я полностью потерялся.
Может кто-нибудь, пожалуйста, дайте мне несколько советов или скажите, если этот подход вообще возможен h2o
?
Большое спасибо!!
1 ответ
Вы можете решить эту проблему одним из двух способов: 1. сначала в R, а затем перейти к H2O для моделирования или 2. Полностью в H2O, используя реализацию word2vec в H2O.
Используйте R data.frames и text2vec, затем преобразуйте разреженную матрицу в кадр H2O и выполните моделирование в H2O.
# Use same code as above to get to this point, then:
# Convert dgCMatrix to H2OFrame, cbind the response col
train <- as.h2o(dtm_train)
train$y <- as.h2o(dataframe$output)
# Train any H2O model (e.g GBM)
mymodel <- h2o.gbm(y = "y", training_frame = train,
distribution = "bernoulli", seed = 1)
Или вы можете обучить вложение word2vec в H2O, применить его к своему тексту, чтобы получить эквивалент разреженной матрицы. Затем обучите модель машинного обучения H2O (GBM). Позже я попытаюсь отредактировать этот ответ на рабочем примере с использованием ваших данных, но пока приведу пример, демонстрирующий использование функциональности word2vec в H2O в R.