Классификация текстов с несколькими метками
Тематический классификатор еврейских текстов
Ознакомьтесь с репозиторием GitHub здесь.
Применение:
- Необходимо назначить темы для 1 миллиона немаркированных отрывков.
- Даны 100 тыс. помеченных примеров.
Мотивация:
- Исследуйте отрывки, относящиеся к одной теме.
- Учитывая один отрывок, найдите другие, связанные с ним по теме.
Приоритеты:
- Высокая точность, средний отзыв.
- Важно для использования. Пользователь предпочел бы вообще не получать метку темы для своего перехода, а не неправильную метку.
Модули:
1. Предварительная обработка
- Очистка — удаление дубликатов, пустых строк; оставляйте только слова, без пунктуации или html-символов.
- НЛП — убрать префиксы с иврита; больше инструментов для английского языка, например. корень, удалить стоп-слова.
2. Векторизация
- Преобразовать в числа — по одной строке на каждый проход. Одна колонка для каждого слова в словаре.
- Использовали TFIDF, чтобы избежать влияния общих слов, которые обычно встречаются во всех документах.
3. Классифицировать с помощью иерархии
- Схема: Сократите игровое поле с 4000 до 25, а затем 100 или 200 подтем на тему TOC.
- Пример: Давид сражается с Голиафом. Этап I — какие темы соответствуют оглавлению. Например. Люди и истории, но не законы и не еда. Этап II — какие дочерние темы относятся к этим широким категориям. Например. история Израиля, а не история Бавеля. Под людьми, вождями и королями, а не женщинами и патриархами.
Алгоритмы
Полиномиальный наивный байесовский алгоритм
- Как это работает:
- Прогнозируемая вероятность того, что предложение относится к определенной теме, рассчитывается: на основе общей вероятности этой темы, умноженной на произведение вероятностей каждого слова в предложении с учетом этой темы (на основе обучающих примеров).
2. Почему это хорошо:
- Определенные словарные слова будут связаны с определенными темами.
Опорный вектор Классификация — Линейный
- Как это работает
- В многомерном пространстве всех точек данных метки тем делят выборки на несопоставимые группы.
- Нахождение границы, которая лучше всего разделяет их.
- То есть он находится дальше всего от членов обеих групп на противоборствующих сторонах.
- Это позволяет алгоритму решить, как классифицировать новые невидимые образцы из тестового набора. т.е. с какой стороны границ они расположены.
- Ключевая функция алгоритма: когда вы добавляете измерение, это может обеспечить лучшее разделение между группами.
- Например. две группы не могут быть разделены в двух измерениях, но когда вы добавляете 3-е измерение.
2. Почему это хорошо:
- Имеется высокая размерность, благодаря большому количеству слов.
- Поэтому мы ожидаем, что группы отделятся друг от друга.
Классификация
Бинарная релевантность
- Серия из 4000 бинарных классификаторов.
- Преимущество = Эффективность в вычислительном отношении, просто да/нет для каждой темы.
- Недостаток = не отражает взаимозависимости тем друг от друга.
Ярлык питания
- Превращает проблему из многозначной в многоклассовую.
- Используйте все уникальные комбинации меток, найденные в обучающих данных.
- Недостатки: Это может работать медленно, потому что может быть очень много комбинаций разных тем. Если в тестовом наборе есть какая-то комбинация меток, которой нет в наборе поездов, некоторые темы будут пропущены.
Цепочка классификаторов
- Пытается быть более эффективным, в отличие от Label Power Set; но все же изучите ассоциации различных тем, которые часто появляются вместе, в отличие от бинарной релевантности.
Мой выбор: я выбрал линейную релевантность svc и бинарную релевантность, потому что они были не только более точными, но и более быстрыми, чем другие. Но теоретически настройка параметров может дать лучшие результаты по сравнению с другими вариантами.
Инструменты, технологии, платформы
- панды для дфс,
- Nltk для предварительной обработки текста.
- Scikit-Learn, Scikit-MultiLearn для алгоритмов векторизации, обучения и классификации.
- MatPlotLib и Seaborn для визуализации.
- IDE vscode, kubernetes удаленная машина, из-за большого размера базы данных — она была бы слишком велика для моего компьютера.
Личный вклад
Мне подали идею сделать этот проект; и онтология тем, то есть граф знаний, соединяющий все темы с их родительскими узлами и т. д.
Что я сделал, так это построил алгоритм с нуля.
Основано на изучении опубликованных работ по иерархической классификации и документации специализированных инструментов, таких как Scikit Multi-learn, и выборе между их алгоритмами.
Проблемы в проекте; и как я ответил...
- Слишком много тем: для начала всего несколько часто встречающихся тем.
- Слишком много пассажей: взята выборка, которая быстро запускалась, но все же показывала статистическую значимость в результатах классификации (мои эксперименты показали, что это около 40 тыс.).
- Дисбаланс классов: в некоторых темах было намного больше отрывков, чем в других. Я просто игнорировал темы, у которых не было порогового количества проходов; Я обнаружил, что 100 было достаточно. Если бы у меня было больше времени, я мог бы уменьшить выборку наиболее популярных тем, чтобы сбалансировать популяцию.
- Я заметил, что некоторые темы классифицируются достаточно хорошо, а другие полностью терпят неудачу. Проверил, где определяется порядок тем в df. Это было непоследовательно. В одном месте он был заказан в алфавитном порядке. Но в другом месте это было упорядочено по популярности — сколько пассажей относится к этой теме. Это требовало острого зрения, чтобы обнаружить, но было легко исправить.
Количество человек в проекте:
Я работал один. Мой менеджер был доступен, когда у меня возникали вопросы, но подход заключался в том, что, как я думаю, лучше всего для повышения эффективности и моего роста, я работал сам со всем, что мог, и обращался за помощью только тогда, когда я наткнулся на кирпичную стену, в которую я верю кому-то другому. можно было быстро решить.
Количество времени, затраченное на проект —
- Мне дали десять недель. Я закончил раньше. Я думаю, из-за простого начала и постоянного тестирования и оценки, прежде чем переходить к более масштабному и более сложному алгоритму.
- А затем начал делать модель более сложной. Результаты были очень показательными, поэтому мне дали больше времени для дальнейшего продвижения.
Улучшения
- Оптимизируйте выбор оглавления, например. сбалансировать платежное поле. Я сделал это с законами, у которых было гораздо больше тем, чем у других.
- Реализуйте логику, основанную на правилах, особенно для увеличения отзыва.
- Захват семантического содержания
— 1. Лемматизация для английского языка, а не просто стемминг.
— 2. Вложения слов — соедините похожие термины. а не просто перечисление общих вхождений слов.
- Поиск по сетке лучших гиперпараметров в обучении.
— 1. N-грамм = 2 и 3 лучше, чем 1.
— 2. Скорость обучения
— 3. Размер партии
Недостатки
- Удаленная среда часто давала сбой.
- Решение: импровизируйте! Использовался Colab и локальный компьютер на уменьшенной версии набора данных.