Идентификация отдельных ключевых слов с помощью классификатора с помощью quanteda

#r #machine-learning #text #naivebayes #quanteda

#r #машинное обучение #текст #наивные слова #quanteda

Вопрос:

Я новичок в количественном анализе текста, и я пытаюсь извлечь ключевые слова, связанные с определенной категорией классификации, из выходных данных наивного байесовского классификатора. Я использую приведенный ниже пример (классифицирую обзоры фильмов как положительные или отрицательные). Мне нужны два вектора, каждый из которых содержит эти ключевые слова, связанные с положительной и отрицательной категорией соответственно. Прав ли я, говоря, что мне следует сосредоточиться на «оценочных показателях функций» из выходных данных summary (), и если да, то как мне их интерпретировать?

 require(quanteda)
require(quanteda.textmodels)
require(caret)

corp_movies <- data_corpus_moviereviews
summary(corp_movies, 5)

# generate 1500 numbers without replacement
set.seed(300)
id_train <- sample(1:2000, 1500, replace = FALSE)
head(id_train, 10)

# create docvar with ID
corp_movies$id_numeric <- 1:ndoc(corp_movies)

# get training set
dfmat_training <- corpus_subset(corp_movies, id_numeric %in% id_train) %>%
  dfm(remove = stopwords("english"), stem = TRUE)

# get test set (documents not in id_train)
dfmat_test <- corpus_subset(corp_movies, !id_numeric %in% id_train) %>%
  dfm(remove = stopwords("english"), stem = TRUE)

tmod_nb <- textmodel_nb(dfmat_training, dfmat_training$sentiment)
summary(tmod_nb) 
  

Ответ №1:

Если вы просто хотите узнать самые негативные и позитивные слова, рассмотрите textstat_keyness() dfm, созданный из всего корпуса, разделенный на положительные и отрицательные отзывы. Это создает не два вектора слов, а один вектор слов с оценкой, указывающей силу ассоциации с отрицательной или положительной категорией.

 library("quanteda", warn.conflicts = FALSE)
## Package version: 2.1.1
## Parallel computing: 2 of 12 threads used.
## See https://quanteda.io for tutorials and examples.
data("data_corpus_moviereviews", package = "quanteda.textmodels")

dfmat <- dfm(data_corpus_moviereviews,
  remove = stopwords("english"), stem = TRUE,
  groups = "sentiment"
)

tstat <- textstat_keyness(dfmat, target = "pos")
textplot_keyness(tstat)