Работа с классификацией текста и большими разреженными матрицами в R

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

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

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

1 ответ

Решение

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

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

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

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

  1. логистическая регрессия со штрафом L1 (см. glmnet пакет)
  2. Линейный СВМ (см. LiblineaR, но стоит искать для альтернативы)
  3. Также стоит попробовать `xgboost. Я бы предпочел линейные модели. Так что вы можете попробовать линейный усилитель.
Другие вопросы по тегам