Рубрики
Без рубрики

Текстовая классификация с использованием машинного обучения – Tensorflow – AI

Эй, 👋 Я хочу поделиться своим опытом, участвующим в #melidatachallenge 2019 …. Теги с Tensorflow, MachineLearning, NLP, Python.

Эй, 👋.

Я хочу поделиться своим опытом, участвующим в #melidatachallenge 2019. (Challenge Mercadolibre.com)

Я не эксперт. Мне нравится участвовать в конкурсах, подобных этому, чтобы узнать о машинном обучении и AI с реальными мировыми приложениями, вскоре я опубликую свой опыт и мое решение для вызова депрегар (классификация изображений).

Соревнование

Задача была очень интересной, классифицируя продукты электронной коммерции, используя только его названия.

Приз

Первое и второе место получат билеты в Кипоту. От 3 до 5 место Intel Movidius.

Результат

Мне удалось быть в топ-20 с оценкой 0,8954/1 Было более 150 участников, конкуренция была тяжелой и захватывающей. Конечно, я узнал много новых вещей.

jefferson1100001. 0.895456 7 20

Давайте объясним мой подход

Первое, что я сделал, должен был посмотреть данные, Mercadolibre предоставлял два файла, rain.csv и test.csv. Вот как выглядит urch.csv:

Hidrolavadora Lavor один 120 бар 1700W Bomba A … Electric_pressure_washers. испанский язык ненадежный
Placa de Sonido – Behringer UMC22 Sound_Cards. испанский язык ненадежный
Maquina de lavar Electrolux 12 килограмм СТИРАЛЬНЫЕ МАШИНЫ португальский ненадежный

Существует 12 6444401 действительных строк, набор данных несбалансирован, а некоторые категории присутствуют на одном языке.

Предварительная обработка данных

Здесь я опишу свои предварительные процедуры без кода.

  • Удалить тильды Испанские и португальские слова имеют тилды, такие как Телефоно. Этот шаг мутирует слово Telefono.

  • Удалить слов сепараторы Некоторые заголовки имеют черту, точки и другие знаки препинания без пробела между ними, например Kit.ruedas.moto.

Я заменяю каждый из этих знаков с пространством.

  • + , . ( ): [ ] { } _/
  • Удалить другие знаки препинания и цифры Я удалил любой другой знак пунктуации и цифры, но число должно быть окружено границей слова.

  • Токенизировать название Я подал заявку на WordPunctTekedizer, предоставленный NLTK, чтобы разделить каждый заголовок словами.

  • Удалить стоп слова По полученному множеству слов я отбросил стопорные слова, такие как: «ООН», «УСАС», «ООН) …

  • Стебель каждый токен Я использовал Snowballstemmer, предоставленный NLTK. Stemming – это процесс уменьшения надущих (или иногда полученных) слов к их слову стебля. Например: Cámara преобразуется в «CAM».

Результат предварительной обработки

Давайте посмотрим названия титулов до и после предварительной обработки:

Placa de Sonido – Behringer UMC22 Plac Son Behring UMC22
Опртунидад! Ноутбук Dell I3 – 4 ГБ DDR4 – HD 1TB – Win 10 Oportun Notebook Dell I3 4GB DDR4 HD 1TB Win
Cámara Instantánea Fujifilm Instax Mini 9 – Azul Cobalto CAM Instantane Fujifilm Instax Mini Azul Cobalt

Я сохранил копию Train.CV со всеми назначенными названиями, список со всеми возможными категориями и списком со всеми этикетками.

Словарь:

Итализация всех предварительно обработанных названий и с помощью счетчика я создал словарь, содержащий слова, только если их частота. Это означает, что слово должно происходить как минимум два раза в некотором титуле.

Словарь выглядит так

{‘Kit’: 785233, «Оригинал»: 469537, «ПРАТУСКА»: 232647, «LED»: 220194, …}

Есть 1251,659 уникальных токенов, после фильтрации их словарь имеет 513,307 поставленные слова.

Превратим предварительно обработанные названия на номера на этом шаге, я использовал словарь для преобразования каждого заголовка в массив чисел. Это очень просто для каждого слова в заголовке, замените его соответствующим индексом слова в словаре плюс 1. (0 зарезервировано).

Предварительно обрабоможенный титул, как это:

[«Портон», «Гэп», «Хой», «MTR», «MARC»] Становится:

[120, 121, 122, 123, 124]

Последовательность Max Word имеет LEN 27, если преобразованное название имеет прокладку менее 27 лет, мы прокладываем его Zeros Таким образом, каждый заголовок имеет ту же длину.

[120, 121, 122, 123, 124, 0, 0, 0, 0, 0, 0, 0, ….]

Теперь пришло время для обучения машине

Я использовал Tensorflow + Keras, модель имеет следующую архитектуру:

Ключевые моменты, которые вы должны знать

  • Случайные значения семян, так что вы можете получить воспроизводимые результаты.

  • Используйте стратифицированные образцы при расщеплении теста и поезда Это означает, что каждый набор должен иметь одинаковую долю классов.

  • Возьмите 1% для тестирования Набор данных относительно большой, 1%, кажется, представляет собой хорошее количество функций набора данных для проверки.

  • Используйте Class_Weights Из-за несбалансированной природы набора данных Class_Weights увеличил BACC модели.

  • Исследуйте данные локально И, возможно, предпроблесс локально, но использовать многопроцессорную

  • Используйте Colab или Kaggle Воспользоваться преимуществами ГПУ и тренироваться быстрее

Обучение:

После 18 эпох модели, кажется, добивается хороших результатов, прежде чем начать переоценить. Сбалансированная точность была: 0,86774697

Тестирование нового названия: если мы кормите модель с помощью полных новых данных, например:

"БУЗО Гарри Поттер чекументирует катушку Cicatriz Hogwarts Это будет предсказать:

Sponshirts_And_hyvily.

Альтернативная попытка:

Я также создал небольшую модель только с 1400 категориями, представляющими надежное подмножество. Цель состояла в том, чтобы кормить эту модель с ненадежным подмножеством, чтобы определить, были ли ненадежные категории в неправильных категориях, но это добавляет сложность и я бы оптимизировал две модели вместо одного.

Следующие шаги:

  • Вы можете использовать Label_Quality как-то, чтобы увеличить модуль ACC.
  • Используйте путаницу Matrix или любые измерения производительности для обнаружения, где наша модель выполняет худшую.
  • Используйте сложную архитектуру или CNN

Github со всем кодом:

https://github.com/jeffersonlicet/ml-titles-classification

Оригинал: “https://dev.to/jeffersonlicet/text-classification-using-machine-learning-tensorflow-ai-2pf5”