хеш-векторизатор в пакете R text2vec с возможностью удаления стоп-слов - PullRequest
0 голосов
/ 30 октября 2018

Я использую пакет R text2vec для создания document-term-matrix. Вот мой код:

library(lime)
library(text2vec) 

# load data
data(train_sentences, package = "lime")  

#
tokens <- train_sentences$text %>%  
   word_tokenizer

it <- itoken(tokens, progressbar = FALSE)

stop_words <- c("in","the","a","at","for","is","am") # stopwords
vocab <- create_vocabulary(it, c(1L, 2L), stopwords = stop_words) %>%   
  prune_vocabulary(term_count_min = 10, doc_proportion_max = 0.2)
vectorizer <- vocab_vectorizer(vocab )

dtm <- create_dtm(it , vectorizer, type = "dgTMatrix")

Другой метод - hash_vectorizer () вместо vocab_vectorizer () как:

h_vectorizer <- hash_vectorizer(hash_size = 2 ^ 10, ngram = c(1L, 2L))
dtm <- create_dtm(it,h_vectorizer)

Но когда я использую hash_vectorizer, нет опции для удаления стоп-слов и сокращения словарного запаса. В учебном случае hash_vectorizer работает лучше, чем vocab_vectorizer для меня. Я знаю, что можно удалить стоп-слова после создания DTM или даже при создании токенов. Есть ли другие варианты, похожие на vocab_vectorizer и способ его создания. Особенно меня интересует метод, который также поддерживает сокращение словарного запаса, похожего на prune_vocabulary ().

Я ценю ваши ответы. Спасибо, Сэм

1 Ответ

0 голосов
/ 03 ноября 2018

Это невозможно. Весь смысл использования hash_vectorizer и хеширования функций состоит в том, чтобы избежать поиска по хэш-карте (получение индекса заданного слова). Удаление стоп-слов - это, по сути, главное - проверить, входит ли слово в набор стоп-слов. Обычно рекомендуется использовать hash_vectorizer только в том случае, если ваш набор данных очень большой и если для создания словарного запаса требуется много времени / памяти. В противном случае, согласно моему опыту, vocab_vectorizer с prune_vocabulary будет работать как минимум не хуже.

Также, если вы используете hash_vectorized с небольшим hash_size, это действует как шаг уменьшения размерности и, следовательно, может уменьшить дисперсию для вашего набора данных. Поэтому, если ваш набор данных не очень большой, я предлагаю использовать vocab_vectorizer и играть с параметрами prune_vocabulary, чтобы уменьшить словарный запас и размер матрицы документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...