Автор: Юваль Коэн

Область обработки естественного языка (NLP) по-прежнему остается горячей темой для исследователей. Много времени и усилий было потрачено на продвижение машинного обучения (ML) в обнаружении языка, и у нас действительно есть арсенал отличных доступных инструментов с открытым исходным кодом (см. здесь).

Здесь, в Blue dot, нам нужно выйти за рамки базового определения языка. Поскольку наши необработанные данные взяты из финансовых документов, нам необходимо определить страну, в которой произошла транзакция. Хотя код языка может быть ценной функцией в этой модели, обратите внимание, что если код языка «EN», в эту категорию также могут попасть несколько разных округов. В своем посте я попытаюсь убедить вас, что письменный английский в США отличается от письменного английского в Великобритании, который отличается от письменного английского в Австралии и так далее.

Мотивация:

Когда я впервые столкнулся с этой проблемой, я вспомнил время, когда мы принимали крупную американскую компанию в наших офисах в Израиле. В то время все наши маркетинговые презентации были написаны в соответствии с правилами британской грамматики. Я узнал кое-что о диалектных различиях, так как мне пришлось корректировать презентации в соответствии с правилами грамматики США, но это того стоило, потому что я узнал кое-что важное: британцы пишут «оптимизировать», а американцы пишут «оптимизировать».

Вы, наверное, спрашиваете себя, почему я не построил BOW (Bag Of Words) для каждой страны и не выполнил TF-IDF или что-то подобное? Ответ заключается в разреженности текста (ну, я использовал такие примеры, как «магазин» в США и «магазин» в Великобритании, но, пожалуйста, имейте в виду, что у нас есть несколько стран в классификации — не только эти две, и я пытаясь описать общую концепцию на конкретном примере «EN»).

Вернемся к нашему примеру. Разница между странами заключается в распределении персонажей, здорово! Давайте построим цепь Маркова для каждого «языка», то есть us-en, gb-en, au-en и т. д.

Цепь Маркова — языковая модель

Итак, для этого примера я просмотрел данные из трех стран 3 — Великобритании, США и Австралии, и я построил модель марковского языка для каждой из них.

Вот результаты:

Мы можем ясно видеть b-граммы, которые чаще встречаются в одной стране и реже (если вообще есть) в других странах.

Одним из преимуществ работы на уровне символов вместо работы со словами является то, что мы уменьшаем размер нашей матрицы до 26 (на английском языке), что делает все вычисления намного проще и быстрее.

Если мы хотим углубиться на один шаг, мы можем, конечно, включить в нашу матрицу больше символов и символов и учитывать регистр букв верхнего и нижнего регистра.

Еще одна вещь, которую мы можем сделать, — это вычислить матрицу как тензор — в трех измерениях, то есть: вычислить вероятность того, что char_m появится после char_n, учитывая, что char_n появляется раньше, и задано M_i и данное положение char_n в строка (например, char_n был первым, вторым, … символом в заданном слове).

Что дальше?

Теперь мы можем использовать наивный алгоритм Байеса:

Получив тестовый документ, давайте посчитаем его оценку для каждой языковой модели, которая у нас есть. Для языковой модели I мы получим:

Теперь нам осталось отнести документ к стране с наивысшим баллом:

Вывод:

В этой статье я кратко описал одну идею, как найти различия между похожими языками, используя вычисление вероятности b-граммы. Идея использования b-грамм (уровень символов) возникла в результате поиска и понимания данных, что является важным шагом на нашем пути к созданию новой модели.

Надеюсь, вам понравился мой пост, я призвал вас попробовать, и если вы решите это сделать, пожалуйста, напишите, как это было .. :)