2016-08-03 2 views
1

Я работаю над текстовым многоклассовым классификационным проектом, и мне нужно построить матрицы документов/терминов, а также провести обучение и протестировать на языке R.Работа с классификацией текста и большими разреженными матрицами в R

У меня уже есть наборы данных, которые не вписываются в ограниченную размерность базового матричного класса в R, и для их создания потребуется, например, 100 000 твитов, для создания больших разреженных матриц. Я использую пакет quanteda, так как он был на данный момент более полезным и надежным, чем пакет tm, где создание DocumentTermMatrix со словарем делает процесс невероятно голоден голодом с небольшими наборами данных. В настоящее время, как я уже сказал, я использую quanteda для создания эквивалентного контейнера Matrix Document Term, который позже преобразуется в data.frame для обучения.

Я хочу знать, есть ли способ построить такие большие матрицы. Я читал о пакете bigmemory, который позволяет использовать этот контейнер, но я не уверен, что он будет работать с кареткой для более поздней классификации. В целом я хочу понять проблему и построить обходной путь, чтобы иметь возможность работать с большими наборами данных, поскольку ОЗУ не является большой проблемой (32 ГБ), но я пытаюсь найти способ сделать это, и я чувствую себя полностью потерянным об этом.

ответ

4

В какой момент вы достигли ограничений в рампе?

quanteda - хороший пакет для работы с НЛП на средних наборах данных. Но также я предлагаю попробовать свой пакет text2vec. Как правило, он значительно совместим с памятью и не требует загрузки всего необработанного текста в ОЗУ (например, он может создавать DTM для дампа википедии на 16-гигабайтном ноутбуке).

Второй момент заключается в том, что я настоятельно не рекомендую преобразовывать данные в data.frame. Попытайтесь напрямую работать с объектами sparseMatrix.

После метод будет работать хорошо для классификации текста:

  1. логистической регрессии с L1 неустойки (см glmnet пакет)
  2. Linear SVM (см LiblineaR, но стоит SERACH альтернатив)
  3. Также стоит попробуйте `xgboost. Я бы предпочел линейные модели. Таким образом, вы можете попробовать линейный усилитель.
+0

Привет, Дмитрий, спасибо за ваш ответ. –

+0

(взял, чтобы отредактировать этот ответ ...) Я смотрю на пакет text2vec и звучит интересно. Я собираюсь попробовать, но мне нужно понять, как я могу использовать DTM, созданный для выполнения через классификацию - мне нужно использовать функцию caret, поскольку этот объект, как я понимаю, является dgCMatrix или dgTMatrix. Могу ли я напрямую передать этот объект функции поезда в каретке? Спасибо! –

+1

'dgCMatrix' из пакета' Matrix' является «стандартным» для разреженных матриц в R. Я не пробовал 'caret', но вас может заинтересовать эта тема: https://github.com/topepo/caret/ вопросы/31. Кажется, что каретка поддерживает разреженные матрицы из коробки. –

Смежные вопросы