С появлением широкого спектра предварительно обученных моделей, обученных на огромных данных, успех машинного обучения в промышленных приложениях вырос в геометрической прогрессии. Хотя мы можем легко использовать эти модели путем передачи обучения либо в качестве экстракторов признаков, либо путем тонкой настройки нашего конкретного набора данных, но в целом производительность невысока, если шаблон значительно отличается от данных, на которых эти модели изначально обучались.
В частности, в случае обработки естественного языка существует множество шаблонов, специфичных для данных, что часто снижает применимость предварительно обученных моделей. В то же время проблемы, связанные с получением аннотаций для конкретных приложений, не только снижают удобство использования данных, но и сокращают контролируемое (переносное) обучение для моделирования.
Поскольку неаннотированные текстовые данные обычно доступны в большом количестве, неконтролируемые / слабо контролируемые подходы становятся первым выбором для исследования данных и даже для моделирования. Поскольку создание команды аннотаторов, обладающих опытом в предметной области, не только дорого, но и требует много времени, в последнее время практикующие специалисты обращаются к более слабым формам надзора, которые являются основным направлением этого блога.
Что такое слабый надзор?
Как упоминалось в Википедии, Слабый супервизор - это ветвь машинного обучения, в которой используются зашумленные, ограниченные или неточные источники для подачи сигнала контроля для маркировки больших объемов обучающих данных в условиях контролируемого обучения. Такой подход снижает нагрузку на получение наборов данных с ручной маркировкой, что может быть дорогостоящим или непрактичным. Вместо этого используются недорогие слабые метки с пониманием того, что они несовершенны, но, тем не менее, их можно использовать для создания сильной прогностической модели.
Применение обучения под слабым контролем в обзорах продуктов Amazon
Для крупномасштабного набора данных, такого как Обзоры Amazon для оценки настроений, цель состоит в том, чтобы определить широкие категории, касающиеся того, что пользователи упоминают в отрицательных отзывах о книгах, и далее создать прогнозируемая модель, которую можно использовать для получения категоричной обратной связи с продавцами.
Создание набора данных для обучения с помощью пакетных аннотаций в кластерах
- Эвристическое извлечение отзывов с низкой оценкой
import pandas as pd # Load dataset df = pd.read_csv("amazon_product_reviews.csv") # Negative Reviews (With rating 1-2) df = df[df['Rating'] == '1-2'] # Sample set of negative Review that mentions book df = df[df['Amazon Review'].str.contains( 'book|publication|novel|paperback|hardcover')].sample(50000)
2. Стандартная предварительная обработка текстовых данных
import re import nltk import itertools import contractions # Load dataset df = pd.read_csv("amazon_product_reviews.csv") column = 'Amazon Review' # Lowercase text df[column] = df[column].apply( lambda x: x.lower()) # Fix contraction in the words df[column] = df[column].apply( lambda x: contractions.fix(str(x))) # Standardise words df[column] = df[column].apply( lambda x: ''.join(''.join(c)[:2] for _, c in itertools.groupby(x))) # Remove punctuations punctuations_regex="!#%&\'()\*+,-/:;<=>?@\[\]^_`{|}~.1234567890" df[column] = df[column].apply( lambda x: re.sub('[%s]'%re.escape(punctuations_regex), ' ', x)) # Tokenize words df[column] = df[column].apply( lambda x: ' '.join(nltk.word_tokenize(x)))
3. Извлечение функций и кластеризация
- ngram_range и min_df можно дополнительно поэкспериментировать, чтобы оптимизировать для большего охвата важных фраз и меньшего количества неважных фраз.
- n_clusters оптимизирован на основе методов Elbow + наличие экспертов для аннотирования кластеров на более поздних этапах.
from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.cluster import KMeans # Extract TFIDF features with 1-4 grams TFIDF_PARAMS = { 'strip_accents': 'ascii', 'stop_words': 'english', 'sublinear_tf': True, 'ngram_range': (1, 4), 'min_df': 0.003, } vectorizer = TfidfVectorizer(**TFIDF_PARAMS) tfidf_model = vectorizer.fit(df[column]) train_features = tfidf_model.transform(df[column]) # Identify clusters on the model cluster_model = KMeans(n_clusters=200).fit(train_features) df['cluster_label'] = cluster_model.labels_
4. Анализ и аннотирование кластеров
- Все кластеры маркируются экспертами в предметной области, а метка кластеров присваивается всем образцам кластеров. Это значительно сокращает время и стоимость аннотации, поскольку помечены только n кластеров вместо всех 3,6 миллиона выборок.
- Наконец, результаты выборки для «Окончательной категории» извлеченного набора данных показали, что точность 85 ( ± 5 )%.
Обучение прогнозной модели для присвоения последней категории для проверки
Наконец, большой обучающий набор данных курируется путем запуска модели кластеризации для всех неструктурированных данных, а метки назначаются на основе идентификатора кластера. Окончательная модель прогнозирования обучается на этом наборе данных под контролем, который не только обрабатывает ошибки в наборе данных, но также обеспечивает высококачественные прогнозы с более высокой степенью достоверности (на основе порога достоверности).
# Training XGBoost (Weak supervision) from xgboost import XGBClassifier from sklearn.metrics import classification_report clf = XGBClassifier(n_jobs= -1, objective='multi:softmax') clf = clf.fit(X_train, y_train) scores = clf.predict_proba(X_test) y_true = pd.DataFrame(scores,columns=clf.classes_).idxmax(axis=1) print (classification_report(y_test, y_true, digits=4))
Модель показала исключительно хорошие результаты при слабом контроле, но точность может упасть с 5–15% в реальных настройках в зависимости от категории и чистоты кластеров, принадлежащих к этой категории.
Такой подход определенно помогает нам приступить к решению проблем, не тратя много времени и денег на создание больших обучающих данных. Кроме того, это может быть итеративный процесс обучения алгоритмов на основе эвристики, иерархической кластеризации и моделирования до тех пор, пока мы не получим высококачественные метки истинности.
Производительность прогнозной модели со временем улучшается за счет переобучения на более качественном наборе данных, собранном с помощью повторяющейся выборки прогнозов модели экспертами в предметной области.
Ссылки:
- Https://medium.com/@datasciencemilan/weakly-supervised-learning-introduction-and-best-practices-c65f490d4a0a
- Https://academic.oup.com/nsr/article-pdf/5/1/44/31567770/nwx106.pdf
- Https://en.wikipedia.org/wiki/Weak_supervision
- Https://pdfs.semanticscholar.org/3adc/fd254b271bcc2fb7e2a62d750db17e6c2c08.pdf
- Https://egc2020.sciencesconf.org/data/pages/e_EGC_2020_VLemaire.pdf
- Http://ai.stanford.edu/blog/weak-supervision/