Sobes.tech
Назад к вопросам
Middle — Senior
10

Что такое distant supervision (NER из KB)?

Компании, где спрашивали
ГазпромбанкГазпромбанк

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Distant supervision — это способ автоматически получать обучающие данные из внешнего источника знаний, например KB/knowledge graph, без ручной разметки каждого примера. Идея в том, что если сущность уже есть в базе знаний, то все упоминания этой сущности в тексте можно считать размеченными “слабо” или приблизительно. Для NER это позволяет быстро собрать большой датасет, но с шумом, который нужно учитывать.

Определение:

Distant supervision для NER из KB — это метод, при котором текст автоматически размечается по совпадению с сущностями из базы знаний. Например, если в KB есть сущность Apple Inc., то все найденные в корпусе вхождения этой строки можно пометить как организацию. Это не ручная разметка, а слабая разметка, основанная на предположении, что совпавшее упоминание соответствует записи в KB.

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

Пример использования:

Допустим, есть KB с сущностями Paris как город и Paris Hilton как человек. Из новостных статей автоматически извлекаются все упоминания "Paris" и "Paris Hilton", после чего по KB им присваиваются типы сущностей. Затем на этих данных обучают NER-модель.

kb = {
    "Paris": "LOCATION",
    "Paris Hilton": "PERSON",
    "Google": "ORGANIZATION",
}

text = "Paris hosted a major event. Paris Hilton attended. Google announced new tools."

# Слабая разметка по совпадению строк с KB
annotations = []
for entity, label in kb.items():
    start = 0
    while True:
        idx = text.find(entity, start)
        if idx == -1:
            break
        annotations.append((idx, idx + len(entity), label))
        start = idx + 1

print(annotations)
# [(0, 5, 'LOCATION'), (28, 41, 'PERSON'), (53, 59, 'ORGANIZATION')]

В реальной задаче после такой автоматической разметки данные обычно фильтруют, нормализуют и используют для обучения NER-модели.

Пояснение кода:

Код показывает идею простой distant supervision через поиск строковых совпадений. Сначала задаётся небольшая KB со строковыми формами сущностей и их типами. Затем по тексту ищутся вхождения этих строк, и каждое найденное вхождение получает метку сущности. Результат — набор интервалов [start, end) с типом, который можно использовать как обучающую разметку.

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

Ключевые моменты:

  • Это слабая разметка: метки получаются автоматически из KB, а не вручную.
  • Основная цель — быстро собрать большой объём обучающих данных для NER.
  • Метод почти всегда шумный: одинаковая строка может означать разные сущности.
  • Нужны постобработка и фильтрация, иначе качество обучения падает.
  • Часто используется как стартовая точка для последующего дообучения или активного обучения.
  • Для собеседования важно подчеркнуть компромисс между масштабом и качеством разметки.