Работа с классификацией текста и большими разреженными матрицами в R
Я работаю над проектом текстовой мультиклассовой классификации, и мне нужно построить матрицы документов / терминов, а также обучать и тестировать на языке R.
У меня уже есть наборы данных, которые не вписываются в ограниченную размерность базового матричного класса в R, и мне нужно было бы создавать большие разреженные матрицы, чтобы можно было классифицировать, например, 100 тыс. Твитов. Я использую пакет quanteda, поскольку на данный момент он более полезен и надежен, чем пакет tm, где создание DocumentTermMatrix со словарем делает процесс невероятно требовательным к памяти при использовании небольших наборов данных. В настоящее время, как я уже сказал, я использую quanteda для создания эквивалентного контейнера Document Term Matrix, который позже я преобразую в data.frame для проведения обучения.
Я хочу знать, есть ли способ построить такие большие матрицы. Я читал о пакете bigmemory, который допускает этот вид контейнера, но я не уверен, что он будет работать с осторожностью для более поздней классификации. В целом, я хочу понять проблему и создать обходной путь, чтобы иметь возможность работать с большими наборами данных, так как оперативная память не является (большой) проблемой (32 ГБ), но я пытаюсь найти способ сделать это, и я чувствую себя полностью потерянным об этом.
1 ответ
В какой момент вы достигли ограничений оперативной памяти?
quanteda
хороший пакет для работы с НЛП на средних наборах данных. Но также я предлагаю попробовать мой пакет text2vec. Как правило, он значительно дружественен к памяти и не требует загрузки всего необработанного текста в ОЗУ (например, он может создать DTM для дампа Википедии на 16-гигабайтном ноутбуке).
Второй момент - я настоятельно не рекомендую конвертировать данные в data.frame
, Попробуйте поработать с sparseMatrix
объекты напрямую.
Следующий метод будет работать хорошо для классификации текста:
- логистическая регрессия со штрафом L1 (см.
glmnet
пакет) - Линейный СВМ (см.
LiblineaR
, но стоит искать для альтернативы) - Также стоит попробовать `xgboost. Я бы предпочел линейные модели. Так что вы можете попробовать линейный усилитель.