Подготовка встраивания слов в пакет text2vec R

На основе виньетки пакета text2vec приведен пример создания встраивания слов. Вики-данные токенизируются, а затем создается термин матрица совместного использования (TCM), который используется для создания встраивания слов с использованием функции перчаток, представленной в пакете. Я хочу создать встраивание слов для данных обзора фильмов, поставляемых с пакетом. Мой вопрос:

  1. Нужно ли мне свернуть все обзоры фильмов в одну длинную строку, а затем сделать токенизацию?

Это приведет к одновременному возникновению граничных токенов между двумя отзывами, что не имеет смысла.

**vignettes code:**
library(text2vec)
library(readr)
temp <- tempfile()
download.file('http://mattmahoney.net/dc/text8.zip', temp)
wiki <- read_lines(unz(temp, "text8"))
unlink(temp)
# Create iterator over tokens
tokens <- strsplit(wiki, split = " ", fixed = T)
# Create vocabulary. Terms will be unigrams (simple words).
vocab <- create_vocabulary(itoken(tokens))
vocab <- prune_vocabulary(vocab, term_count_min = 5L)
# We provide an iterator to create_vocab_corpus function
it <- itoken(tokens)
# Use our filtered vocabulary
vectorizer <- vocab_vectorizer(vocab, 
                               # don't vectorize input
                               grow_dtm = FALSE, 
                               # use window of 5 for context words
                               skip_grams_window = 5L)
tcm <- create_tcm(it, vectorizer)
fit <- glove(tcm = tcm,
             word_vectors_size = 50,
             x_max = 10, learning_rate = 0.2,
             num_iters = 15)

Данные, которые меня интересуют в разработке вложения слов, могут быть получены следующим образом:

library(text2vec)
data("movie_review")

1 ответ

Решение

Нет, вам не нужно объединять отзывы. Вам нужно просто построить tcm от правильного итератора по токенам:

library(text2vec)
data("movie_review")
tokens = movie_review$review %>% tolower %>%  word_tokenizer
it = itoken(tokens)
# create vocabulary
v = create_vocabulary(it) %>% 
  prune_vocabulary(term_count_min = 5)
# create co-occurrence vectorizer
vectorizer = vocab_vectorizer(v, grow_dtm = F, skip_grams_window = 5)

Теперь нам нужно выполнить повторную инициализацию (для стабильной версии 0.3. Для dev 0.4 не требуется повторная инициализация итератора):

it = itoken(tokens)
tcm = create_tcm(it, vectorizer)

Подходящая модель:

fit <- glove(tcm = tcm,
             word_vectors_size = 50,
             x_max = 10, learning_rate = 0.2,
             num_iters = 15)
Другие вопросы по тегам