Я пытаюсь выполнить анализ текста с помощью LSA. Я читал много других сообщений о LSA на StackOverflow, но пока не нашел ничего похожего на свое. Если вы знаете, что есть что-то похожее на мое, пожалуйста, перенаправьте меня на него! Очень признателен!
вот мой воспроизводимый код с созданными образцами данных:
создание пробных наборов данных и тестов
sentiment = c(1,1,0,1,0,1,0,0,1,0)
length(sentiment) #10
text = c('im happy', 'this is good', 'what a bummer X(', 'today is kinda okay day for me', 'i somehow messed up big time',
'guess not being promoted is not too bad :]', 'stayhing home is boring :(', 'kids wont stop crying QQ', 'warriors are legendary!', 'stop reading my tweets!!!')
train_data = data.table(as.factor(sentiment), text)
> train_data
sentiment text
1: 1 im happy
2: 1 this is good
3: 0 what a bummer X(
4: 1 today is kinda okay day for me
5: 0 i somehow messed up big time
6: 1 guess not being promoted is not too bad :]
7: 0 stayhing home is boring :(
8: 0 kids wont stop crying QQ
9: 1 warriors are legendary!
10: 0 stop reading my tweets!!!
sentiment = c(0,1,0,0)
text = c('running out of things to say...', 'if you are still reading, good for you!', 'nothing ended on a good note today', 'seriously sleep deprived!! >__<')
test_data = data.table(as.factor(sentiment), text)
> train_data
sentiment text
1: 0 running out of things to say...
2: 1 if you are still reading, good for you!
3: 0 nothing ended on a good note today
4: 0 seriously sleep deprived!! >__<
предварительная обработка набора обучающих данных
corpus.train = Corpus(VectorSource(train_data$text))
создать матрицу документов терминов для обучающего набора
tdm.train = TermDocumentMatrix(
corpus.train,
control = list(
removePunctuation = TRUE,
stopwords = stopwords(kind = "en"),
stemming = function(word) wordStem(word, language = "english"),
removeNumbers = TRUE,
tolower = TRUE,
weighting = weightTfIdf)
)
преобразовать в матрицу (для последующего использования)
train_matrix = as.matrix(tdm.train)
создать пространство lsa, используя данные поезда
lsa.train = lsa(tdm.train, dimcalc_share())
установить размер # (здесь я выбрал один случайным образом, потому что размер данных слишком мал для создания формы локтя)
k = 6
матрица поезда проекта в новое пространство LSA
projected.train = fold_in(docvecs = train_matrix, LSAspace = lsa.train)[1:k,]
преобразовать вышеуказанные прогнозируемые данные в матрицу
projected.train.matrix = matrix(projected.train,
nrow = dim(projected.train)[1],
ncol = dim(projected.train)[2])
обучить модель случайного леса (почему-то этот шаг больше не работает с этой небольшой выборкой данных... но все в порядке, это не будет большой проблемой в этом вопросе; однако, если вы можете помочь мне и с этой ошибкой, это' d быть фантастическим! Я попытался найти эту ошибку в Google, но она просто не исправлена...)
trcontrol_rf = trainControl(method = "boot", p = .75, trim = T)
model_train_caret = train(x = t(projected.train.matrix), y = train_data$sentiment, method = "rf", trControl = trcontrol_rf)
предварительная обработка набора тестовых данных
в основном я повторяю все, что я делал с набором обучающих данных, за исключением того, что я не использовал тестовый набор для создания собственного пространства LSA.
corpus.test = Corpus(VectorSource(test_data$text))
создать матрицу документа термина для тестового набора
tdm.test = TermDocumentMatrix(
corpus.test,
control = list(
removePunctuation = TRUE,
stopwords = stopwords(kind = "en"),
stemming = function(word) wordStem(word, language = "english"),
removeNumbers = TRUE,
tolower = TRUE,
weighting = weightTfIdf)
)
преобразовать в матрицу (для последующего использования)
test_matrix = as.matrix(tdm.test)
тестовую матрицу проекта в обученное пространство LSA (вот где вопрос)
projected.test = fold_in(docvecs = test_matrix, LSAspace = lsa.train)
но я получаю сообщение об ошибке: Ошибка в crossprod(docvecs, LSAspace$tk): несоответствующие аргументы
я не нахожу никаких полезных результатов поиска Google относительно этой ошибки... (есть только одна страница результатов поиска из Google QQ) любая помощь очень ценится! Спасибо!