С появлением широкого спектра предварительно обученных моделей, обученных на огромных данных, успех машинного обучения в промышленных приложениях вырос в геометрической прогрессии. Хотя мы можем легко использовать эти модели путем передачи обучения либо в качестве экстракторов признаков, либо путем тонкой настройки нашего конкретного набора данных, но в целом производительность невысока, если шаблон значительно отличается от данных, на которых эти модели изначально обучались.

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

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

Что такое слабый надзор?

Как упоминалось в Википедии, Слабый супервизор - это ветвь машинного обучения, в которой используются зашумленные, ограниченные или неточные источники для подачи сигнала контроля для маркировки больших объемов обучающих данных в условиях контролируемого обучения. Такой подход снижает нагрузку на получение наборов данных с ручной маркировкой, что может быть дорогостоящим или непрактичным. Вместо этого используются недорогие слабые метки с пониманием того, что они несовершенны, но, тем не менее, их можно использовать для создания сильной прогностической модели.

Применение обучения под слабым контролем в обзорах продуктов Amazon

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

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

  1. Эвристическое извлечение отзывов с низкой оценкой
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% в реальных настройках в зависимости от категории и чистоты кластеров, принадлежащих к этой категории.

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

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

Ссылки: