Entity Node — это фиксированный 4-словный (64-бит) пакет в потоке GEUL, идентифицирующий сущности (людей, места, объекты, организации, концепции и т.д.).
Сущность SIDX
| Свойство | Описание |
|---|---|
| Non-unique | Один SIDX может соответствовать нескольким сущностям |
| Multi-SIDX | Одна сущность может иметь несколько SIDX (по времени/роли) |
| Бит = значение | Позиция бита сама по себе обозначает атрибут |
| Абстрактное/конкретное — непрерывный спектр | Различается степенью заполнения Mode и Attributes |
Примеры:
- Трамп (бизнесмен) → SIDX_A
- Трамп (президент) → SIDX_B (другой SIDX)
- «Human + Male + Korea» → абстрактное «корейский мужчина»
- «Human + Male + Korea + 1946 + Business + …» → почти конкретная личность
Принципы проектирования
Отказ от встроенного Q-ID:
- Все биты инвестируются в чистое семантическое выравнивание
- Максимальная производительность SIMD-фильтрации WMS
- Q-ID связывается отдельно через Triple Edge:
(Entity_SIDX, P-внешнийID, "Q12345")
Serial-биты не нужны:
- Запросы WMS двухэтапные: сужение через SIMD → детальная проверка внутри диапазона
- Serial — бессмысленное число, не помогающее SIMD
- Инвестирование этих бит в семантическое выравнивание сужает диапазон на первом этапе
Битовая раскладка (4 слова = 64 бита)
1st WORD (16 бит)
┌─────────┬──────┬────────────┐
│ Prefix │ Mode │ EntityType │
│ 7bit │ 3bit │ 6bit │
└─────────┴──────┴────────────┘
2nd WORD (16 бит)
┌─────────────────────────────┐
│ Attributes старшие 16 бит│
└─────────────────────────────┘
3rd WORD (16 бит)
┌─────────────────────────────┐
│ Attributes средние 16 бит│
└─────────────────────────────┘
4th WORD (16 бит)
┌─────────────────────────────┐
│ Attributes младшие 16 бит│
└─────────────────────────────┘
| Поле | Биты | Размер | Описание |
|---|---|---|---|
| Prefix | 1-7 | 7 | 0001001 (Entity Node) |
| Mode | 8-10 | 3 | 8 режимов квантификации/числа |
| EntityType | 11-16 | 6 | 64 верхних типа |
| Attributes | 17-64 | 48 | Переменная схема по типу |
Mode (3 бита)
Mode объединяет квантификацию (Quantification) и число (Number) сущности в 3 битах.
| Код | Двоич. | Значение | Пример |
|---|---|---|---|
| 0 | 000 | Зарегистрированная сущность | Пётр I, Samsung, BTS |
| 1 | 001 | Определённое единственное | «тот человек» |
| 2 | 010 | Определённое малое | «те несколько» |
| 3 | 011 | Определённое множественное | «те люди» |
| 4 | 100 | Универсальная квантификация | «все ~» |
| 5 | 101 | Экзистенциальная | «некий ~» |
| 6 | 110 | Неопределённая | «любой ~» |
| 7 | 111 | Родовая | «~ вообще» |
Зарегистрированная сущность (Mode=0)
- Сущности, сопоставленные с внешними ID: Wikidata Q-ID, WordNet Synset и др.
- Q-ID связывается через Triple:
(Entity_SIDX, P-внешнийID, "Q12345") - Не связано с понятием числа: Samsung — «один», но не единственное; BTS — группа, но одна сущность
Местоимения/абстракции (Mode=1~7)
- Семантический диапазон задаётся через EntityType + Attributes
- Чем больше бит заполнено, тем конкретнее
- Пример: Human(Type) + Male(Attr) + Korea(Attr) = «корейский мужчина»
EntityType (6 бит = 64 типа)
64 верхних типа назначаются на основе частотной статистики Wikidata P31 (instance of). Детализация обрабатывается через биты подклассов в Attributes.
| Диапазон | Категория | Кол-во | Примеры типов |
|---|---|---|---|
| 0x00-0x07 | Биология/персоны | 8 | Human, Taxon, Gene, Protein |
| 0x08-0x0B | Химия/вещества | 4 | Chemical, Compound, Mineral, Drug |
| 0x0C-0x13 | Небесные тела | 8 | Star, Galaxy, Asteroid, Planet |
| 0x14-0x1B | Ландшафт/природа | 8 | Mountain, River, Lake, Island |
| 0x1C-0x23 | Населённые пункты/админ. | 8 | Settlement, Village, Street, Park |
| 0x24-0x2B | Здания/сооружения | 8 | Building, Church, School, Bridge |
| 0x2C-0x2F | Организации | 4 | Organization, Business, PoliticalParty |
| 0x30-0x3B | Произведения | 12 | Painting, Document, Film, Album |
| 0x3C-0x3F | События/прочее | 4 | SportsSeason, Event, Election, Other |
Таблица кодов (все 64)
| Код | Тип | Q-ID | Кол-во |
|---|---|---|---|
| 0x00 | Human | Q5 | 12.5M |
| 0x01 | Taxon | Q16521 | 3.8M |
| 0x02 | Gene | Q7187 | 1.2M |
| 0x03 | Protein | Q8054 | 1.0M |
| 0x04 | CellLine | Q21014462 | 154K |
| 0x05 | FamilyName | Q101352 | 662K |
| 0x06 | GivenName | Q202444 | 128K |
| 0x07 | FictionalCharacter | Q15632617 | 98K |
| 0x08 | Chemical | Q113145171 | 1.3M |
| 0x09 | Compound | Q11173 | 1.1M |
| 0x0A | Mineral | Q7946 | 62K |
| 0x0B | Drug | Q12140 | 45K |
| 0x0C | Star | Q523 | 3.6M |
| 0x0D | Galaxy | Q318 | 2.1M |
| 0x0E | Asteroid | Q3863 | 249K |
| 0x0F | Quasar | Q83373 | 178K |
| 0x10 | Planet | Q634 | 15K |
| 0x11 | Nebula | Q12057 | 8K |
| 0x12 | StarCluster | Q168845 | 5K |
| 0x13 | Moon | Q2537 | 3K |
| 0x14 | Mountain | Q8502 | 518K |
| 0x15 | Hill | Q54050 | 321K |
| 0x16 | River | Q4022 | 427K |
| 0x17 | Lake | Q23397 | 292K |
| 0x18 | Stream | Q47521 | 194K |
| 0x19 | Island | Q23442 | 153K |
| 0x1A | Bay | Q39594 | 25K |
| 0x1B | Cave | Q35509 | 20K |
| 0x1C | Settlement | Q486972 | 580K |
| 0x1D | Village | Q532 | 245K |
| 0x1E | Hamlet | Q5084 | 148K |
| 0x1F | Street | Q79007 | 711K |
| 0x20 | Cemetery | Q39614 | 298K |
| 0x21 | AdminRegion | Q15284 | 100K |
| 0x22 | Park | Q22698 | 45K |
| 0x23 | ProtectedArea | Q473972 | 35K |
| 0x24 | Building | Q41176 | 292K |
| 0x25 | Church | Q16970 | 286K |
| 0x26 | School | Q9842 | 242K |
| 0x27 | House | Q3947 | 235K |
| 0x28 | Structure | Q811979 | 216K |
| 0x29 | SportsVenue | Q1076486 | 145K |
| 0x2A | Castle | Q23413 | 42K |
| 0x2B | Bridge | Q12280 | 38K |
| 0x2C | Organization | Q43229 | 531K |
| 0x2D | Business | Q4830453 | 242K |
| 0x2E | PoliticalParty | Q7278 | 35K |
| 0x2F | SportsTeam | Q847017 | 95K |
| 0x30 | Painting | Q3305213 | 1.1M |
| 0x31 | Document | Q49848 | 45M |
| 0x32 | LiteraryWork | Q7725634 | 395K |
| 0x33 | Film | Q11424 | 335K |
| 0x34 | Album | Q482994 | 303K |
| 0x35 | MusicalWork | Q105543609 | 195K |
| 0x36 | TVEpisode | Q21191270 | 177K |
| 0x37 | VideoGame | Q7889 | 172K |
| 0x38 | TVSeries | Q5398426 | 85K |
| 0x39 | Patent | Q43305660 | 289K |
| 0x3A | Software | Q7397 | 13K |
| 0x3B | Website | Q35127 | 12K |
| 0x3C | SportsSeason | Q27020041 | 183K |
| 0x3D | Event | Q1656682 | 10K |
| 0x3E | Election | Q40231 | 11K |
| 0x3F | Other | - | Для расширения |
Attributes (48 бит)
Переменная схема по типу, интерпретируемая по-разному для каждого EntityType. Высокочастотным атрибутам выделяется больше бит. Напрямую используется в SIMD-фильтрации WMS.
Атрибуты Human (0x00)
┌──────────┬────────┬────────┬──────┬────────┬────────┬─────────┬──────────┬────────────┬──────────┐
│ Подкласс │Профес. │Гражд. │ Эпоха│Декада │ Пол │Извест. │ Язык │Регион рожд.│Сфера деят│
│ 5bit │ 6bit │ 8bit │ 4bit │ 4bit │ 2bit │ 3bit │ 6bit │ 6bit │ 4bit │
└──────────┴────────┴────────┴──────┴────────┴────────┴─────────┴──────────┴────────────┴──────────┘
offset: 0 5 11 19 23 27 29 32 38 44
Атрибуты Star (0x0C)
┌────────────┬────────────┬──────────┬──────────┬────────┬────────┬──────────┬──────────┬────────┬────────┐
│Созвездие │Спектр. тип │Класс свет│Видимая зв│Прямое в│Склонен.│ Флаги │Луч. скор.│Красн.см│Параллак│
│ 7bit │ 4bit │ 3bit │ 4bit │ 4bit │ 4bit │ 6bit │ 5bit │ 5bit │ 4bit │
└────────────┴────────────┴──────────┴──────────┴────────┴────────┴──────────┴──────────┴────────┴────────┘
Определение флаговых бит:
- bit0: IR (инфракрасный источник)
- bit1: Radio (радиоисточник)
- bit2: X-ray (рентгеновский источник)
- bit3: Binary (двойная звезда)
- bit4: Variable (переменная звезда)
- bit5: HighPM (собственное движение)
Операции
Создание Entity
def make_entity(
mode: int, # 3 бита
entity_type: int, # 6 бит
attrs: int # 48 бит
) -> bytes:
PREFIX = 0b0001001 # 7 бит (Entity Node)
word1 = (PREFIX << 9) | (mode << 6) | entity_type
word2 = (attrs >> 32) & 0xFFFF
word3 = (attrs >> 16) & 0xFFFF
word4 = attrs & 0xFFFF
return (
word1.to_bytes(2, 'big') +
word2.to_bytes(2, 'big') +
word3.to_bytes(2, 'big') +
word4.to_bytes(2, 'big')
)
Разбор Entity
def parse_entity(data: bytes) -> dict:
word1 = int.from_bytes(data[0:2], 'big')
word2 = int.from_bytes(data[2:4], 'big')
word3 = int.from_bytes(data[4:6], 'big')
word4 = int.from_bytes(data[6:8], 'big')
prefix = (word1 >> 9) & 0x7F
mode = (word1 >> 6) & 0x7
entity_type = word1 & 0x3F
attrs = (word2 << 32) | (word3 << 16) | word4
return {
'prefix': prefix,
'mode': mode,
'entity_type': entity_type,
'attrs': attrs
}
Примеры
Зарегистрированная сущность: Суворов
# Суворов (Q131149)
suvorov = make_entity(
mode=0, # Зарегистрированная сущность
entity_type=0x00, # Human
attrs=(
(0x06 << 43) | # Подкласс: Military
(0x01 << 37) | # Профессия: General
(0x52 << 29) | # Гражданство: Russia
(0x5 << 25) | # Эпоха: Early Modern
(0x0 << 21) | # Декада: 1730s
(0x01 << 19) | # Пол: Male
(0x7 << 16) # Известность: 1000+
)
)
# Связь Q-ID: Triple(suvorov_SIDX, P-внешнийID, "Q131149")
Абстракция: «все русские мужчины»
all_russian_men = make_entity(
mode=4, # Универсальная (все)
entity_type=0x00, # Human
attrs=(
(0x52 << 29) | # Гражданство: Russia
(0x01 << 19) # Пол: Male
)
)
Сопоставление подтипов
Многие типы Wikidata являются подтипами 64 EntityType. Кодировщик маршрутизирует значение P31 в соответствующий верхний тип.
| Подтип (P31) | Верхний тип | Кол-во |
|---|---|---|
| Q13442814 (scholarly article) | Document (0x31) | 45.2M |
| Q67206691 (infrared source) | Star (0x0C) | 2.6M |
| Q13100073 (village of China) | Village (0x1D) | 592K |
Покрытие
| Показатель | Значение |
|---|---|
| Всего сущностей Wikidata | 117 419 925 |
| Внутренние Wikimedia (исключены) | 8 565 353 (7.3%) |
| Целевые SIDX | 108 854 572 (92.7%) |
| Прямое покрытие 64 типами | 36 295 074 (33.3%) |
| Поглощение подтипов | 71 842 429 (66.0%) |
| Фолбэк Other | 717 069 (0.7%) |
| Итоговое покрытие | 100% |
| Коллизии | < 0.01% |
Связь Q-ID
Entity Node не содержит Q-ID внутри, а связывается через Triple Edge.
Subject: Entity_SIDX (64 бита)
Property: P-внешнийID (напр. P-Wikidata)
Object: "Q12345" (строка или число)