Основной ответ: попробуйте разные подходы .Без реального тестирования очень сложно предсказать, какой метод даст лучшие результаты.Итак, я просто предложу несколько методов, которые я бы попробовал сначала, и опишу их плюсы и минусы.
Прежде всего, я бы порекомендовал контролируемое обучение .Даже если классификация данных не очень точна, она все же может дать лучшие результаты, чем кластеризация без контроля.Одной из причин этого является ряд случайных факторов, которые используются во время кластеризации.Например, алгоритм k-средних основывается на случайно выбранных точках при запуске процесса, что может привести к совершенно разным результатам для разных запусков программы (хотя модификации x-средних, похоже, нормализуют это поведение).Кластеризация даст хорошие результаты только в том случае, если нижележащие элементы дают хорошо разделенные области в пространстве объектов.
Один из подходов к обработке многоязычных данных заключается в использовании многоязычных ресурсов в качестве опорных точек .Например, вы можете проиндексировать некоторые статьи Википедии и создать «мосты» между одними и теми же темами на разных языках.Кроме того, вы можете создать многоязычный словарь ассоциаций, такой как , описанный в этой статье .
Что касается методов, первое, что приходит на ум, это семантические методы на основе экземпляров вроде LSI .Он использует модель векторного пространства для вычисления расстояния между словами и / или документами.В отличие от других методов он может эффективно лечить синонимию и многозначность.Недостатком этого метода является неэффективность вычислений и утечка реализаций.Один из этапов LSI использует очень большую матрицу совпадений, которая для больших массивов документов потребует распределенных вычислений и другой специальной обработки.Существует модификация LSA под названием Random Indexing , которая не создает полную матрицу совпадений, но вы вряд ли найдете подходящую реализацию для нее.Некоторое время назад я создал библиотеку в Clojure для этого метода, но сейчас она пре-альфа, поэтому я не могу рекомендовать ее использовать.Тем не менее, если вы решите попробовать, вы можете найти проект 'Clinch' пользователя 'faithlessfriend' на github (я не буду публиковать прямые ссылки, чтобы избежать ненужной рекламы).
Помимо специальных семантических методовдолжно использоваться правило «сначала простота» .С этого момента, Наивный Байес - правильная точка для начала.Единственное замечание здесь - это то, что полиномиальная версия Наивного Байеса предпочтительна: мой опыт показывает, что количество слов действительно имеет значение.
SVM - это метод классификации линейно разделимых данных , а текстовые данные почти всегда не являются линейно разделимыми (по крайней мере, несколько общих слов появляются в любой паре документов),Это не значит, что SVM нельзя использовать для классификации текста - вы все равно должны попробовать его, но результаты могут быть намного ниже, чем для других задач машинного обучения.
У меня недостаточно опыта с деревьями решений , но использование его для эффективной классификации текста кажется мне странным.Я видел несколько примеров, когда они давали отличные результаты, но когда я попытался использовать алгоритм C4.5 для этой задачи, результаты были ужасны.Я считаю, что вы должны получить какое-то программное обеспечение, в котором реализованы деревья решений, и протестировать их самостоятельно.Всегда лучше знать, чем предлагать.
По каждой теме можно сказать гораздо больше, поэтому не стесняйтесь задавать больше вопросов по конкретной теме.