Выбор функций и обучение без контроля для многоязычных данных + выбор алгоритма машинного обучения - PullRequest
5 голосов
/ 23 марта 2011

Вопросы

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

  • Какие функции я могу использовать в алгоритме машинного обучения для работы с многоязычными данными? Обратите внимание, что некоторые из этих языков, возможно, не рассматривались в поле Обработка естественного языка.

  • Если бы я использовал алгоритм обучения без присмотра, должен ли я просто разделить данные по языкам и по-разному работать с каждым языком? Разные языки могут иметь разные соответствующие категории (или нет, в зависимости от ваших психолингвистических теоретических тенденций), что может повлиять на решение о разделении.

  • Я думал об использовании деревьев решений или, возможно, машин опорных векторов (SVM), чтобы учесть больше возможностей (насколько я понимаю их). Этот пост предлагает случайные леса вместо SVM. Есть мысли?

Прагматичные подходы приветствуются! (Теоретические тоже, но они могут быть сохранены для дальнейшего удовольствия.)

Некоторый контекст

Мы пытаемся классифицировать корпус из многих тысяч веб-сайтов на 3-5 языках (возможно, до 10, но мы не уверены).

У нас есть данные обучения в виде сотен уже классифицированных веб-сайтов. Однако мы можем решить использовать этот набор данных или нет - если другие категории имеют больше смысла, мы открыты для того, чтобы не использовать имеющиеся у нас обучающие данные, так как это не то, что мы собрали в первую очередь. Мы находимся на завершающей стадии сбора данных / текста с веб-сайтов.

Теперь мы должны решить вышеперечисленные вопросы. Я немного поработал с Brown Corpus и тегом Brill, но это не сработает из-за проблемы с несколькими языками.

Мы намерены использовать Orange пакет машинного обучения.

Ответы [ 3 ]

3 голосов
/ 24 марта 2011

Если вы идете по контролируемому маршруту, то тот факт, что веб-страницы на нескольких языках, не должен иметь значения. Если вы пойдете, скажем, на лексические особенности (стиль bag-o'-words), то каждый язык в итоге даст непересекающиеся наборы функций, но это нормально. Все стандартные алгоритмы, скорее всего, дадут сравнимые результаты, поэтому просто выберите один и используйте его. Я согласен с Ювалом в том, что Наивный Байес - хорошее место для старта, и только если это не отвечает вашим потребностям, попробуйте что-то вроде SVM или случайных лесов.

Однако, если вы идете неконтролируемым путем, тот факт, что тексты не на одном языке, может стать большой проблемой. Любой разумный алгоритм кластеризации сначала группирует тексты по языкам, а затем внутри каждого языкового кластера по какой-то теме (если вы используете контентные слова в качестве функций). Будь то ошибка или особенность, будет полностью зависеть от того, почему вы хотите классифицировать эти тексты. Если дело в том, чтобы сгруппировать документы по темам, независимо от языка, то это бесполезно. Но если у вас все в порядке с разными категориями для каждого языка, то да, у вас просто столько же отдельных проблем классификации, сколько у вас языков.

Если вам нужен унифицированный набор классов, вам понадобится способ связать похожие документы на разных языках. Есть ли документы на более чем одном языке? Если это так, вы можете использовать их как своего рода статистический Розеттский камень, чтобы связать слова на разных языках. Затем, используя что-то вроде скрытого семантического анализа, вы можете расширить это на отношения второго порядка: слова на разных языках, которые никогда не встречаются в одном и том же документе, но которые, как правило, совпадают со словами, которые встречаются. Или, может быть, вы могли бы использовать что-то вроде текста привязки или свойств URL-адресов, чтобы назначить грубую классификацию для документов независимым от языка способом и использовать это как способ начать работу.

Но, честно говоря, кажется странным входить в проблему классификации, не имея четкого представления о том, что такое классы (или, по крайней мере, что считается хорошей классификацией). Составление классов - сложная часть, и именно эта часть определяет, будет ли проект успешным или неудачным. Фактическая алгоритмическая часть довольно заурядная.

3 голосов
/ 24 марта 2011

Согласно предоставленному вами контексту, это проблема обучения под наблюдением. Поэтому вы делаете классификацию, а не кластеризацию. Если я не понял, обновите ваш вопрос, чтобы сказать так.

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

Далее, я бы использовал самый простой алгоритм, который я могу - я склонен придерживаться Наивного Байеса, но если у вас есть простой способ запустить SVM, это тоже хорошо.

Сравните ваши результаты с некоторыми базовыми показателями - скажем, назначьте самый частый класс для всех страниц.

Является ли самый простой подход достаточно хорошим? Если нет, начните перебирать алгоритмы и функции.

1 голос
/ 25 марта 2011

Основной ответ: попробуйте разные подходы .Без реального тестирования очень сложно предсказать, какой метод даст лучшие результаты.Итак, я просто предложу несколько методов, которые я бы попробовал сначала, и опишу их плюсы и минусы.

Прежде всего, я бы порекомендовал контролируемое обучение .Даже если классификация данных не очень точна, она все же может дать лучшие результаты, чем кластеризация без контроля.Одной из причин этого является ряд случайных факторов, которые используются во время кластеризации.Например, алгоритм k-средних основывается на случайно выбранных точках при запуске процесса, что может привести к совершенно разным результатам для разных запусков программы (хотя модификации x-средних, похоже, нормализуют это поведение).Кластеризация даст хорошие результаты только в том случае, если нижележащие элементы дают хорошо разделенные области в пространстве объектов.

Один из подходов к обработке многоязычных данных заключается в использовании многоязычных ресурсов в качестве опорных точек .Например, вы можете проиндексировать некоторые статьи Википедии и создать «мосты» между одними и теми же темами на разных языках.Кроме того, вы можете создать многоязычный словарь ассоциаций, такой как , описанный в этой статье .

Что касается методов, первое, что приходит на ум, это семантические методы на основе экземпляров вроде LSI .Он использует модель векторного пространства для вычисления расстояния между словами и / или документами.В отличие от других методов он может эффективно лечить синонимию и многозначность.Недостатком этого метода является неэффективность вычислений и утечка реализаций.Один из этапов LSI использует очень большую матрицу совпадений, которая для больших массивов документов потребует распределенных вычислений и другой специальной обработки.Существует модификация LSA под названием Random Indexing , которая не создает полную матрицу совпадений, но вы вряд ли найдете подходящую реализацию для нее.Некоторое время назад я создал библиотеку в Clojure для этого метода, но сейчас она пре-альфа, поэтому я не могу рекомендовать ее использовать.Тем не менее, если вы решите попробовать, вы можете найти проект 'Clinch' пользователя 'faithlessfriend' на github (я не буду публиковать прямые ссылки, чтобы избежать ненужной рекламы).

Помимо специальных семантических методовдолжно использоваться правило «сначала простота» .С этого момента, Наивный Байес - правильная точка для начала.Единственное замечание здесь - это то, что полиномиальная версия Наивного Байеса предпочтительна: мой опыт показывает, что количество слов действительно имеет значение.

SVM - это метод классификации линейно разделимых данных , а текстовые данные почти всегда не являются линейно разделимыми (по крайней мере, несколько общих слов появляются в любой паре документов),Это не значит, что SVM нельзя использовать для классификации текста - вы все равно должны попробовать его, но результаты могут быть намного ниже, чем для других задач машинного обучения.

У меня недостаточно опыта с деревьями решений , но использование его для эффективной классификации текста кажется мне странным.Я видел несколько примеров, когда они давали отличные результаты, но когда я попытался использовать алгоритм C4.5 для этой задачи, результаты были ужасны.Я считаю, что вы должны получить какое-то программное обеспечение, в котором реализованы деревья решений, и протестировать их самостоятельно.Всегда лучше знать, чем предлагать.

По каждой теме можно сказать гораздо больше, поэтому не стесняйтесь задавать больше вопросов по конкретной теме.

...