Автори: Ashutosh Singh, Ayush Gupta і Vikram Varshney
Класифікація продуктів як затверджених або заборонених залежно від їхнього вмісту.
Дозвольте почати з кількох фактів, які я встановив під час своїх обмежених зустрічей з проблемами, що базуються на машинному навчанні:
"Ви не знайдете ідеального рішення, бо його не існує, просто продовжуйте намагатися — ось у чому суть."
"Дані — це найкраща інвестиція, яку ви маєте — витратьте багато часу на їх обробку."
Переходимо до поточної проблеми — виявлення «забороненого» вмісту на IndiaMART, онлайн-платформі, яка щодня залучає мільйони користувачів. Під «забороненим» я маю на увазі вміст, який не дозволяється відповідно до поточної правової системи країни, і що важливо — він динамічний!
Куртка з коров'ячої шкіри — це «заборонений» продукт, а шкіряне крісло для офісу з обертанням — ні.
Перед тим як рухатися далі, давайте визначимо, що таке «продукт» в контексті IndiaMART:
Це продукт. У нас є понад 60 мільйонів таких продуктів.
Примітка: Я буду використовувати термін «продукт» в контексті статті. Продукт тут — це просто опис того, що міститься в конкретному товарі. Продукт має назву, опис, зображення товару, його ціну тощо.
Розуміння проблеми
Нам потрібно було класифікувати наші продукти (як нові, так і існуючі) як Затверджені або Заборонені на основі доступної інформації.
Наприклад, будь-який продукт, який згадує наркотичні солі, повинен бути позначений як «заборонений» і видалений з основного контенту.
Виклик на основі «Ключових слів»
У наших попередніх підходах ми позначали продукт як заборонений або затверджений на основі збігу ключових слів. У нас був список заборонених ключових слів, і якщо таке слово зустрічалося в назві продукту, ми позначали його як заборонений, інакше — як затверджений.
Це призводило до того, що деякі релевантні продукти класифікувалися як заборонені, хоча вони повинні були бути затвердженими. Наприклад, «кіт» є у нашому списку заборонених ключових слів, тому продукти типу «дерев'яні подарункові фігурки котів» та «CAT бульдозер» потрапили під заборону, що призвело до втрати хорошого контенту.
Вирішення проблеми «Cat vs CAT»
«Cat» — тварина та машина
Ми вирішили цю задачу за допомогою контролюваного текстового класифікатора, який був натренований на попередньо позначених прикладах. Метою цього класифікатора було класифікувати продукт в одну з двох категорій: «Заборонений» або «Затверджений».
dell wireless mouse black color || міткаЗатверджений
куртка чорна з коров'ячої шкіри || міткаЗаборонений
Ми подали машині існуючий набір продуктів, позначених як «Заборонені» або «Затверджені», щоб вона побудувала зв'язок, який дозволив би прогнозувати, чи повинен бути продукт прийнятий чи відхилений. Потім ми подали інший набір продуктів і запитали, чи повинен цей продукт бути прийнятий або відхилений.
Цього разу ми змогли краще захопити намір і контекст продукту!
Цього разу бульдозер CAT або екскаватор CAT не були «заборонені», а «котяча шуба» була заборонена. Опис і характеристики продуктів тепер також використовувалися для тренування та тестування моделі.
Тестування машини: що під капотом
Процес роботи для вирішення проблеми
Ми використали fastText для тренування нашої моделі.
fastText — це бібліотека з відкритим кодом від Facebook для ефективного навчання представлень слів та класифікації речень.
Якщо ви новачок у fastText і стикаєтесь з проблемами при його запуску, будь ласка, зверніться до цього відео-уроку.
Дані для навчання: Файл, що містить рядки даних з мітками. Усі продукти мали одну з двох міток: «Заборонено» або «Затверджено», а корпус складався з усього контенту, доступного для продукту.
Використання команди
Гіперпараметри, використані тут, були обрані після налаштування гіперпараметрів, що дозволяє отримати параметри, які допоможуть досягти кращої точності для вашого випадку. Вони можуть змінюватися залежно від набору даних:
~/fastText/fasttext.exe supervised -input ~/Training_Files/training_file.txt -output ~/Model_path/model.bin -lr 0.5 -epoch 75 -minn 5-thread 4 -wordNgram 2 -lrUpdateRate 100;
Використання Python
Ми також можемо виконати те ж саме за допомогою Python, використовуючи наведену нижче команду, вона створить файл моделі (.bin).
$ git clone https://github.com/facebookresearch/fastText.git
$ cd fastText
$ pip install .
import fastText
train_file_name = "training_model.txt"
model_name = "Banned_Model"
classifier = fasttext.train_supervised(str(train_file_name),
str(model_name), label_prefix='__label__',
epoch=75,lr=0.5,word_ngrams=2,minn 5,bucket=200000,
dim=100,loss='hs')
# Для збереження моделі для подальшого використання:
classifier.save_model("Banned_Model.bin")
# Для прогнозування класів/міток з використанням вищезгаданої моделі
model = fastText.load_model(model_name+".bin")
Test_String = ['cat food']
Model_Results = model.predict(Test_String,k=1)[0][0][0]
Точність та відгук
P@1 : 0.987
R@1 : 0.987
Тестування моделі
~/fastText/fasttext.exe predict-prob ~/Model_path/model.bin - 1;
Виведе на екран щось на зразок цього:
$ fastText/fasttext.exe predict-prob ~/Model_path/model4mo1.bin - 1
deca durabolin nandrolene decatonate bottle
__label__Banned 0.995814
K-Fold Cross Validation було використано для перевірки моделі
Подумайте!
Мобільні телефони Samsung, які не заборонені, в той час як їх підроблені аналоги заборонені. Чи може модель виявити такі випадки?
$ fastText/fasttext.exe predict-prob ~/Model_path/model4mo1.bin/model4mo1.bin - 1
samsung mobile phone
__label__Approved 1.00001
samsung clone mobile phone
__label__Banned 1.00002
Так, вона це зробила!
Очищення даних: Майстерний крок
У машинному навчанні існує правило: «Garbage In is Garbage Out», тому переконайтеся, що виконуєте необхідні операції з даними перед використанням їх для навчання моделі — тут ми перетворили всі дані в нижній регістр, видалили XML/HTML теги, такі як
, спеціальні символи і стоп-слова, що не є релевантними для випадку використання.
Що з зображеннями продуктів❓
Зображення продукту, яке має багато релевантного тексту
Текст, витягнутий за допомогою OCR: B-Complex Mutimineras,With Antioxidants Capsules Minreal Promotes Energy Metabolism Supports Heart Health Ria
Деякі продукти мають зображення з текстом на них. Витягнення цього тексту і подальше його введення в модель також допомогло нам краще класифікувати продукт як «Заборонений» або «Затверджений». Для цього ми використовували OCR (Оптичне Розпізнавання Символів), щоб витягнути релевантні дані з зображення.
Що таке OCR?
OCR — це скорочення від Optical Character Recognition.
За допомогою OCR ми можемо сканувати зображення та документи, що містять текст, і перетворювати їх на документи, які можна редагувати.
Застосування сканування зображень за допомогою OCR
У нашому випадку OCR допомагає нам витягувати текст з зображень продуктів, що є особливо корисним у випадках, коли в назві продукту, описі продукту та специфікаціях відсутня текстова інформація.
Google Cloud Vision API та Tesseract можуть бути використані для цього.
Шлях вперед
На даний момент модель є точною для кожного 85 з 100 (85%) продуктів, що тестуються, коли ми порівнюємо результати з людським аудитом. Ще один факт, який ми можемо отримати, полягає в тому, що «реальний світ не такий легкий для класифікації, як ми зазвичай вважаємо», тому завжди буде необхідність у людині для визначення «сірих зон», які вимагають людського втручання.
Ми працюємо над зменшенням цих сірих зон і скоро опублікуємо наступну статтю. Для подальшого читання, будь ласка, зверніться до частини II цієї серії.
Розроблено: Ashutosh Singh, Ayush Gupta та Vikram Varshney
Написано: Ashutosh Singh
Редаговано та перевірено: Paras Lehana
Перекладено з: Classifying Products as Banned Or Approved using Text Mining (Part I)