У вас есть коллега, друг или родственник, который повторяет одни и те же слова снова и снова? Возможно, вы даже ловили себя на том, что повторяете одни и те же вещи много раз за короткий промежуток времени. Но не все ли мы? На самом деле да. Все, что написано, сказано или услышано, следует модели распределения слов, называемой законом Ципфа. Он не только определяет, как мы читаем, пишем и говорим, но и влияет на обработку и анализ текста. Давайте посмотрим, что такое закон Ципфа и как мы можем использовать его в своих интересах для создания более эффективных моделей машинного обучения.

Объяснение закона Ципфа

Из Википедии: Закон Ципфа гласит, что при большой выборке используемых слов частотность любого слова обратно пропорциональна его рангу в таблице частот. Это явление, которое происходит в текстовых коллекциях, в которых наиболее часто используемое слово в коллекции встречается в два раза чаще, чем второе наиболее часто используемое слово, в три раза чаще, чем третье и так далее. По этой причине закон Ципфа является линейным, когда логарифмический график используется для отображения частоты слов в зависимости от их рейтинга и часто отображается как таковой (некоторые примеры ниже). Более подробная информация о законе Ципфа доступна на слайдах Jiepu Jiang UMass Amherst Information Retrieval здесь.

Глобальный стоп-лист?

Недавно я разрабатывал проект, который просканировал GitHub IBM, чтобы получить код и построить классификатор, чтобы предсказать, какой язык программирования использовался, на основе его содержимого. Я хотел дополнить этот проект выявлением и удалением стоп-слов из собранного текста. Такие слова, как the, настолько распространены, что они часто используются во всех языках программирования, поэтому их включение в модель только добавило бы шума. Эти слова называются стоп-словами и вместе как набор составляют стоп-лист. Существует множество различных стоп-листов, которые можно использовать для повышения эффективности модели, но наиболее эффективной реализацией будет идентификация и устранение слов, которые чаще всего встречаются в конкретном наборе данных. Стоп-лист создается путем создания и сортировки индекса вхождений слов в наборе текстов. Количество возвращаемых элементов (в моем случае 10) — это гиперпараметр, который можно настроить в зависимости от размера текстовой коллекции, ограничений хранения и ограничений точности. Полный код, включая используемые наборы данных, находится здесь.

Выше вы можете увидеть вывод функции buildstoplist(), список наиболее часто встречающихся слов и процент их появления в моем наборе данных. Построив распределение в зависимости от ранга на логарифмическом графике ниже, вы можете увидеть, что график очень похож на примеры, опубликованные выше. Легко видеть, что при построении графика данные точно следуют закону Ципфа.

Преимущества

Watson Natural Language Classifier — это API, который принимает электронную таблицу текста и его классификацию (в моем случае, какой язык программирования использовался) и автоматически строит модель в соответствии с предоставленными данными. Я построил два классификатора, один со стоп-словами и один без них. Как показано ниже, удаление стоп-слов из набора данных имело два преимущества. Во-первых, он произвел более точный классификатор. Это связано с тем, что службы классификации Watson смогли обучить модель без всех непропорционально высоких стоп-слов, добавляющих шум ко всем классам. Во-вторых, что, возможно, более важно, мы смогли обучить более точный классификатор, используя на 6% меньше данных. Хотя моя экономия составляет всего несколько килобайт в этом же примере, экономия масштабируется для каждого набора данных, поскольку закон Ципфа будет действовать независимо от размера данных. Вот почему идентификация по стоп-словам широко используется при поиске информации. Например, общий размер индекса Google в настоящее время составляет сотни петабайт загруженных веб-страниц, и каждый процент сокращения может сэкономить петабайты памяти и сотни тысяч годовых затрат.

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