Введение

В этой статье я хочу изучить активное обучение решению задачи классификации НЛП. В частности, используя конкурсный набор данных Spooky Author Identification, я хочу пометить его, притворяясь, что начинаю с совершенно неразмеченного набора данных.

Основными ссылками на активное обучение являются Курс MIT «Введение в data-centric AI и, в частности, третий курс) и Человек в цикле машинного обучения.

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

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

Подготовка набора данных

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

import pandas as pd
from IPython.display import display
from IPython.display import Markdown

df = pd.read_csv("input/train.csv")
display(Markdown(df.head().to_markdown(index=False)))

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

unlabelled = df[["id", "text"]].copy()
truth = df[["id", "author"]].copy()


def annotate(truth: pd.DataFrame, tobelabelled: pd.DataFrame) -> pd.DataFrame:
    return tobelabelled.merge(truth, how="left", on="id")


display(Markdown(annotate(truth, unlabelled.iloc[:4, :]).to_markdown(index=False)))