Как создать матрицу терминов документа в text2vector только из сохраненного списка слов

Каков синтаксис в text2vec для векторизации текстов и достижения dtm только с указанным списком слов?

Как векторизовать и создать матрицу терминов документа только по указанным функциям? И если функции не отображаются в тексте, переменная должна оставаться пустой.

Мне нужно создать матрицы документов терминов с точно такими же столбцами, как в dtm, на котором я запускаю моделирование, иначе я не могу использовать модель случайного леса для новых документов.


person Jacek Kotowski    schedule 28.07.2017    source источник
comment
Вы можете запустить text2vec непосредственно на fcm, созданном в Quanteda, и, таким образом, использовать все инструменты выбора объектов Quanteda. Если ваш вопрос касается того, как выбирать элементы из вывода text2vec, вам нужно более четко сформулировать эту часть вопроса. Как правило, хорошие вопросы SO проясняют вопрос в начале, а затем предоставляют контекст и только в том случае, если это необходимо для ответа на вопрос. Многое из того, что вы здесь спрашиваете, отвлекает от этого, поскольку я не уверен, на какую часть вам нужен ответ.   -  person Ken Benoit    schedule 28.07.2017
comment
Извини. Я сделал это лаконично. Я надеюсь, что это приемлемо, также мой английский не является родным.   -  person Jacek Kotowski    schedule 28.07.2017
comment
@KenBenoit Мне очень интересно, что объекты Quanteda и text2vec можно использовать взаимозаменяемо. С другой стороны, я не смог найти простого и ясного примера того, как привести пакеты интеллектуального анализа текста в соответствие со стандартными пакетами dm. Они включают в себя создание данных с функциями, точно соответствующими функциям в обучающих наборах.   -  person Jacek Kotowski    schedule 28.07.2017


Ответы (2)


Вы можете создать матрицу терминов документа только из определенного набора функций:

v = create_vocabulary(c("word1", "word2"))
vectorizer = vocab_vectorizer(v)
dtm_test = create_dtm(it, vectorizer)

Однако я не рекомендую 1) использовать случайный лес для таких разреженных данных - это не сработает хорошо 2) выполнять выбор функций так, как вы описали - вы, вероятно, переобучитесь.

person Dmitriy Selivanov    schedule 28.07.2017
comment
После удаления стоп-слов это не так уж плохо. Мне интересно также удалить слова, которые появляются только один или два раза во всем наборе данных (редкие случаи). Я также думаю, как удалить все признаки небольшого отклонения по документам. Таким образом, количество функций может быть уменьшено даже до rf (?). Затем я смотрю на Важность функций из случайного леса и беру только n самых важных функций. Затем я перезапускаю RF только с этими функциями. - person Jacek Kotowski; 28.07.2017
comment
Пожалуйста, ознакомьтесь с руководством text2vec.org/vectorization.html . Он охватывает тему создания другой ЦМР в заданном векторном пространстве. Также он охватывает тему сокращения редких слов. - person Dmitriy Selivanov; 28.07.2017
comment
Спасибо, на выходных прочитаю. Я также читаю о том, что RF действительно не очень хорошая идея для разреженных матриц, спасибо за ваше замечание по этому поводу. Сейчас я поиграю с RF, а затем поменяю на лучший. - person Jacek Kotowski; 28.07.2017

Мне нужно создать матрицы документов терминов с точно такими же столбцами, как в dtm, на котором я запускаю моделирование, иначе я не могу использовать модель случайного леса для новых документов.

В Quanteda вы можете установить характеристики тестового набора, идентичные тренировочному набору, используя dfm_select(). Например, чтобы dfm1 ниже имел те же функции, что и dfm2:

txts <- c("a b c d", "a a b b", "b c c d e f")

(dfm1 <- dfm(txts[1:2]))
## Document-feature matrix of: 2 documents, 4 features (25% sparse).
## 2 x 4 sparse Matrix of class "dfmSparse"
##        features
## docs    a b c d
##   text1 1 1 1 1
##   text2 2 2 0 0
(dfm2 <- dfm(txts[2:3]))
## Document-feature matrix of: 2 documents, 6 features (41.7% sparse).
## 2 x 6 sparse Matrix of class "dfmSparse"
##        features
## docs    a b c d e f
##   text1 2 2 0 0 0 0
##   text2 0 1 2 1 1 1

dfm_select(dfm1, dfm2, valuetype = "fixed", verbose = TRUE)
## kept 4 features, padded 2 features
## Document-feature matrix of: 2 documents, 6 features (50% sparse).
## 2 x 6 sparse Matrix of class "dfmSparse"
##        features
## docs    a b c d e f
##   text1 1 1 1 1 0 0
##   text2 2 2 0 0 0 0

Однако для матриц контекста объекта (что text2vec требуется для ввода) это не сработает, потому что совпадения (по крайней мере, те, которые вычисляются с помощью окна, а не контекста документа) взаимозависимы между объектами, поэтому вы не можете просто добавлять и удалять их таким же образом.

person Ken Benoit    schedule 28.07.2017
comment
Спасибо за Ваш ответ. Я буду экспериментировать как с text2vec, так и с Quanteda. Я новичок в теме анализа текстов, понимаю общие термины, стараюсь погружаться в более сложные, поэтому некоторые очевидные ответы, которые я читал, я мог не заметить и спросить о том же, глядя на ответ. Дори рыба я. - person Jacek Kotowski; 28.07.2017