Семантические ID

Обогащая один и тот же тип сущности снова и снова, вы постоянно заново обнаруживаете одни и те же реальные объекты — ту же компанию, тот же побочный эффект препарата, того же человека — каждый раз описанные немного разными словами. Семантический ID — это стабильный идентификатор в рамках организации, который Entity Enricher присваивает объекту на основе его ключевых полей, поэтому такие почти-дубликаты сводятся к одной идентичности, по которой вы можете группировать, дедуплицировать и объединять данные.

Проблема: одно и то же, разными словами

Идентичность объекта строится из его ключевых полей — и их может быть одно или несколько. Два примера:

Один ключ

Побочный эффект с ключом по name

Оно появляется как Headache, Céphalée и Cephalalgia в разных запусках и на разных языках. Одно ключевое поле, три написания, одно реальное понятие.

Два ключа

Компания с ключами название + страна

Acme Inc. · United States и Acme Incorporated · United States — это одна и та же компания, тогда как Acme Inc. · Germany — другая. Второй ключ устраняет неоднозначность; именно поэтому объект может содержать более одного.

Простое сопоставление строк не срабатывает ни в одном из этих случаев; человек понимает, какие из них совпадают. Семантические ID кодируют это суждение автоматически.

Что такое семантический идентификатор

Как это работает

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

1
Составьте текст идентичности
Объедините ключевые поля объекта в одну строку на вашем основном языке. Ключ вложенной сущности тоже участвует — как уточнение: фильм с названием, которое носит и другой фильм, различается по имени режиссёра. Обратная сторона в том, что все соседние объекты, ссылающиеся на одну и ту же связанную сущность, несут одно и то же значение, поэтому, если связанный ключ только делает соседей похожими, уберите его из участников. Элементы внутри массивов никогда не подтягиваются: у каждого элемента массива своя идентичность. Список участников идентичности в редакторе схем показывает, какие именно значения составляют текст, и позволяет изменить их порядок или состав — схемы с одинаковыми участниками в одинаковом порядке создают идентичные ID. Текст нормализуется (нижний регистр, удаление скобочных вставок, схлопывание пробелов), чтобы сгладить незначительные различия. Если все эти ключевые поля окажутся пустыми, объект не по чему идентифицировать и ID присвоить нельзя — поэтому объект удаляется, а не остаётся анонимным, по которому ничего нельзя сгруппировать, соединить или дедуплицировать: вложенный объект становится null в родителе, а элемент списка выбрасывается из списка. Сама обогащаемая сущность никогда не удаляется — у неё просто нет ID.
2
Искать точное совпадение
Если этот в точности нормализованный текст уже встречался в вашей организации, его существующий ID используется повторно немедленно — без вызова модели и без затрат.
3
Сопоставлять по коду, если он есть
Если один из собственных ключей идентичности объекта — код (поле с ограничением по шаблону или поле, примеры которого выглядят как идентификаторы), он ставится первым и сравнивается отдельно (код связанной сущности эту роль не берёт: он одинаков у всех соседей, ссылающихся на эту сущность). Точное совпадение кода решает вопрос идентичности сразу, как бы ни был сформулирован остальной текст, поэтому LC-39A объединяет все варианты написания остального текста. Не менее важно и обратное: другой код накладывает вето на объединение, которое этап эмбеддингов иначе бы принял, — ведь два объекта с разными идентификаторами остаются двумя объектами, как бы похоже они ни читались.
4
Сопоставлять по тем же словам в любом порядке
Прежде чем тратить эмбеддинг, сами слова сравниваются как множества: если слова одного текста содержатся в другом, это одна и та же идентичность, записанная с разной подробностью — «Boeing» и «The Boeing Company». Так отлавливаются именно те различия в многословности, которые эмбеддинги оценивают как далёкие друг от друга, и это ничего не стоит: как и на шаге точного совпадения текста, попадание здесь означает отсутствие вызова эмбеддинга и списания.
5
Встроить и сравнить
В противном случае текст встраивается и сравнивается по смыслу с существующими концептами того же типа концепта (по умолчанию — имя типа сущности; можно переопределить в редакторе, чтобы схемы с разными именами использовали одно пространство концептов) с помощью векторного сходства — так что «Acme Inc.» и«Acme Incorporated» оказываются рядом.
6
Спросить судью
Несколько ближайших концептов передаются небольшой языковой модели, которая отвечает на один вопрос: называет ли какой-либо из них тот же самый объект реального мира? Модель видит каждое обозначение как размеченные части — но никогда не видит оценку схожести, которая лишь подтолкнула бы её довериться геометрии. Если ответ «да», этот ID переиспользуется, а новая формулировка запоминается как ещё одно написание того же концепта, поэтому следующее вхождение обходится бесплатно. Если ответ «нет» или модель не может определить, создаётся совершенно новый ID — и никогда наоборот, потому что две записи легко объединить позже, а одну ошибочно слитую — нет.

Почему модель, а не число: одна лишь схожесть ошибается в обе стороны. Два написания одной и той же верфи могут получить далёкие друг от друга оценки, а состояние и его противоположность («острое» против «хронического») — почти одинаковые. Ни один порог их не разделит; это под силу только знанию смысла слов. Порог судьи (по умолчанию 0.5, настраивается для каждого свойства) определяет лишь то, насколько далеко искать кандидатов, о которых стоит спросить, — но никогда не решает вопрос тождества.

Входные ID против сгенерированных ID

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

ID уже во входных данных → сохранён (поиск)

Если отправляемый вами объект уже содержит семантический ID, он трактуется как поиск: ID сохраняется дословно, запись связывается с этим существующим концептом, и эмбеддинга нет — ни затрат, ни поиска-или-создания. Вы сообщаете платформе, что «этот объект уже идентифицирован в нашей базе данных».

Во входных данных нет ID → сгенерирован

Если у объекта нет семантического ID, платформа создаёт его по описанным выше шагам. С этого момента такой ID становится постоянным идентификатором объекта в базе данных вашей организации.

Присутствующее, но нераспознаваемое значение (не настоящий ID концепта) игнорируется, и вместо него генерируется ID.

Как это включить

1
Выберите модель эмбеддингов (один раз для организации)
Владелец выбирает модель с поддержкой эмбеддингов в разделе Настройки → Организация → Значения по умолчанию как модель эмбеддингов организации по умолчанию (настройка зависит от тарифа; см. Модели и цены, чтобы узнать, какие модели умеют строить эмбеддинги). Сохранённые векторы несравнимы между моделями, поэтому, как только появились концепты, настройку можно только очистить — смена выполняется как миграция со страницы «Семантические ID», которая заново строит эмбеддинги всех концептов и сохраняет их ID. Без модели семантические ID просто пропускаются.
2
Добавить семантические идентификаторы в схему
Два способа, оба в Workflow Editor:
  • Автоматически при генерации — отметьте «Генерировать семантические ID для типов»; каждый объект с ключом (собственным или на вложенном объекте 1-1) получает его, включая корневую сущность.
  • Вручную — используйте элемент управления «+ Добавить семантический ID» на любом объекте или в нижней части сущности.

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

Где появляются ID и что с ними делать

Разрешённые ID появляются в выходном JSON обогащения (поле id у каждого объекта), в семантических концептах в деталях записи и все вместе — на странице семантических ID, где образуемый ими словарь можно просматривать и курировать. Используйте их, чтобы:

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

Дополняет слияние нескольких моделей

Слияние согласовывает расхождения между моделями в рамках одного запуска; семантические ID согласовывают одну и ту же сущность между запусками и во времени. Оба механизма работают вместе.