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