Проблема с определением языка в том, что оно никогда не будет полностью точным. Мой браузер довольно часто неправильно определяет язык, и это было сделано Google, который, вероятно, вложил в эти задачи много хороших умов.
Однако вот некоторые моменты, которые следует учитывать:
Я не уверен, какой модуль Perls Lingua::Identify
действительно использует, но чаще всего эти задачи обрабатываются наивными байсовскими моделями, как кто-то указал в другом ответе. Байесские модели используют вероятность для классификации по ряду категорий, в вашем случае это будет другой язык. Теперь эти вероятности являются как зависимыми вероятностями, то есть как часто определенная характеристика появляется для каждой категории, так и независимыми (априорными) вероятностями, то есть как часто каждая категория появляется в целом.
Поскольку используются обе эти информации, вы, скорее всего, получите низкое качество прогноза, когда априорные значения неверны. Я полагаю, что Linua::Identify
в основном обучался корпусу онлайн-документов, поэтому наивысшим приоритетом, скорее всего, будет английский. Это означает, что Lingua::Identify
, скорее всего, классифицирует ваши документы как английские, если только у него нет серьезных причин полагать иначе (в вашем случае, скорее всего, у этого есть серьезная причина, потому что вы говорите, что ваши документы ошибочно классифицируются как итальянские, французские и испанские).
Это означает, что вам следует попытаться повторно обучить вашу модель, если это возможно. В Lingua::Identify
могут быть некоторые методы, которые помогут вам в этом. Если нет, я бы посоветовал вам написать свой собственный наивный байесовский классификатор (на самом деле он довольно простой).
Если у вас есть наивный байесовский классификатор, вам нужно выбрать набор функций. Чаще всего частота букв очень характерна для каждого языка, так что это будет первое предположение. Просто попробуйте сначала обучить свой классификатор на этих частотах. Наивный байесовский классификатор используется в спам-фильтрах, поэтому вы можете тренировать его как один из них. Запустите его на выборочном наборе, и всякий раз, когда вы получаете неправильную классификацию, обновите классификатор до правильной классификации. Через некоторое время ошибаться будет все меньше и меньше.
В случае, если однобуквенная частота не дает вам достаточно хороших результатов, вы можете попробовать вместо этого использовать n-граммы (однако имейте в виду, что это приведет к комбинаторному взрыву). Я бы не советовал пробовать больше 3 граммов. Если это по-прежнему не дает хороших результатов, попробуйте вручную определить уникальные часто встречающиеся слова на каждом языке и добавить их в свой набор функций. Я уверен, что как только вы начнете экспериментировать с этим, у вас появится больше идей для опробования функций.
Еще одна приятная особенность подхода с использованием байесовских классификаторов заключается в том, что вы всегда можете добавить новую информацию в случае поступления дополнительных документов, которые не соответствуют обученным данным. В этом случае вы можете просто переклассифицировать несколько новых документов, и, подобно спам-фильтру, классификатор адаптируется к изменяющейся среде.
person
LiKao
schedule
27.01.2012