Что такое distant supervision (NER из KB)?
Answer from AI
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.
- Метод почти всегда шумный: одинаковая строка может означать разные сущности.
- Нужны постобработка и фильтрация, иначе качество обучения падает.
- Часто используется как стартовая точка для последующего дообучения или активного обучения.
- Для собеседования важно подчеркнуть компромисс между масштабом и качеством разметки.