Entity Node 是 GEUL 流中用于识别实体(人物、地点、事物、组织、概念等)的固定长度4字(64位)数据包

SIDX 本质

特性说明
Non-unique同一 SIDX 可对应多个实体
Multi-SIDX一个实体可拥有多个 SIDX(按时点/角色区分)
位 = 语义位的位置本身表示属性
抽象/具体连续通过 Mode 和 Attributes 填充程度区分

示例:

  • 特朗普(房地产商人)→ SIDX_A
  • 特朗普(总统)→ SIDX_B(不同的 SIDX)
  • “Human + Male + Korea” → 抽象的"韩国男性"
  • “Human + Male + Korea + 1946 + Business + …” → 几乎锁定特定人物

设计原则

放弃内嵌Q标识符:

  • 将全部位投入纯语义对齐
  • 最大化 WMS SIMD 过滤性能
  • Q标识符通过三元组单独关联:(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位        │
└─────────────────────────────┘
字段大小说明
Prefix1-770001001 (Entity Node)
Mode8-1038种量化/数模式
EntityType11-16664种上位类型
Attributes17-6448各类型可变模式

Mode(3位)

Mode 将实体的**量化(Quantification)与数(Number)**统一用3位表达。

代码二进制含义示例
0000注册实体李白、三星电子、BTS
1001特定单数“那个人”
2010特定少数“那几个人”
3011特定多数“那些人”
4100全称“所有~”
5101存在“某个~”
6110不特定“随便哪个~”
7111总称“~一般”

注册实体(Mode=0)

  • 与维基数据 Q标识符、WordNet Synset 等外部 ID 映射的实体
  • Q标识符本身通过三元组关联:(Entity_SIDX, P-外部ID, "Q12345")
  • 与数(Number)概念无关:三星电子是"一个"但说单数不太恰当,BTS 是团体但作为一个实体

代词/抽象(Mode=1~7)

  • 通过 EntityType + Attributes 指定语义范围
  • 位填充越多越具体
  • 例:Human(Type) + Male(Attr) + Korea(Attr) = “韩国男性”

EntityType(6位 = 64种)

基于维基数据 P31(instance of)频率统计分配64种上位类型。细分类通过 Attributes 内的子分类位处理。

范围类别类型数代表类型
0x00-0x07生物/人物8Human, Taxon, Gene, Protein
0x08-0x0B化学/物质4Chemical, Compound, Mineral, Drug
0x0C-0x13天体8Star, Galaxy, Asteroid, Planet
0x14-0x1B地形/自然8Mountain, River, Lake, Island
0x1C-0x23地点/行政8Settlement, Village, Street, Park
0x24-0x2B建筑物8Building, Church, School, Bridge
0x2C-0x2F组织4Organization, Business, PoliticalParty
0x30-0x3B创作物12Painting, Document, Film, Album
0x3C-0x3F事件/其他4SportsSeason, Event, Election, Other

代码表(全部64种)

代码类型Q-ID实体数
0x00HumanQ512.5M
0x01TaxonQ165213.8M
0x02GeneQ71871.2M
0x03ProteinQ80541.0M
0x04CellLineQ21014462154K
0x05FamilyNameQ101352662K
0x06GivenNameQ202444128K
0x07FictionalCharacterQ1563261798K
0x08ChemicalQ1131451711.3M
0x09CompoundQ111731.1M
0x0AMineralQ794662K
0x0BDrugQ1214045K
0x0CStarQ5233.6M
0x0DGalaxyQ3182.1M
0x0EAsteroidQ3863249K
0x0FQuasarQ83373178K
0x10PlanetQ63415K
0x11NebulaQ120578K
0x12StarClusterQ1688455K
0x13MoonQ25373K
0x14MountainQ8502518K
0x15HillQ54050321K
0x16RiverQ4022427K
0x17LakeQ23397292K
0x18StreamQ47521194K
0x19IslandQ23442153K
0x1ABayQ3959425K
0x1BCaveQ3550920K
0x1CSettlementQ486972580K
0x1DVillageQ532245K
0x1EHamletQ5084148K
0x1FStreetQ79007711K
0x20CemeteryQ39614298K
0x21AdminRegionQ15284100K
0x22ParkQ2269845K
0x23ProtectedAreaQ47397235K
0x24BuildingQ41176292K
0x25ChurchQ16970286K
0x26SchoolQ9842242K
0x27HouseQ3947235K
0x28StructureQ811979216K
0x29SportsVenueQ1076486145K
0x2ACastleQ2341342K
0x2BBridgeQ1228038K
0x2COrganizationQ43229531K
0x2DBusinessQ4830453242K
0x2EPoliticalPartyQ727835K
0x2FSportsTeamQ84701795K
0x30PaintingQ33052131.1M
0x31DocumentQ4984845M
0x32LiteraryWorkQ7725634395K
0x33FilmQ11424335K
0x34AlbumQ482994303K
0x35MusicalWorkQ105543609195K
0x36TVEpisodeQ21191270177K
0x37VideoGameQ7889172K
0x38TVSeriesQ539842685K
0x39PatentQ43305660289K
0x3ASoftwareQ739713K
0x3BWebsiteQ3512712K
0x3CSportsSeasonQ27020041183K
0x3DEventQ165668210K
0x3EElectionQ4023111K
0x3FOther-扩展用

Attributes(48位)

每种 EntityType 以不同含义解读的类型可变模式。高频属性分配更多位,直接用于 WMS SIMD 过滤。

Human (0x00) Attributes

┌──────────┬────────┬────────┬──────┬────────┬────────┬─────────┬──────────┬────────────┬──────────┐
│ 子分类   │ 职业   │ 国籍   │ 时代 │ 年代   │ 性别   │ 知名度  │ 语言     │ 出生地区   │ 活动领域 │
│  5bit    │  6bit  │  8bit  │ 4bit │  4bit  │  2bit  │  3bit   │  6bit    │   6bit     │   4bit   │
└──────────┴────────┴────────┴──────┴────────┴────────┴─────────┴──────────┴────────────┴──────────┘
offset:  0        5       11      19     23      27      29        32         38          44

Star (0x0C) Attributes

┌────────────┬────────────┬──────────┬──────────┬────────┬────────┬──────────┬──────────┬────────┬────────┐
│ 星座       │ 光谱型     │ 光度等级 │ 视星等   │ 赤经   │ 赤纬   │ 标志位   │ 视向速度 │ 红移   │ 视差   │
│   7bit     │    4bit    │   3bit   │  4bit    │  4bit  │  4bit  │   6bit   │   5bit   │  5bit  │  4bit  │
└────────────┴────────────┴──────────┴──────────┴────────┴────────┴──────────┴──────────┴────────┴────────┘

标志位定义:

  • bit0: IR(红外源)
  • bit1: Radio(射电源)
  • bit2: X-ray(X射线源)
  • 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
    }

示例

注册实体:李白

# 李白 (Q9694)
li_bai = make_entity(
    mode=0,              # 注册实体
    entity_type=0x00,    # Human
    attrs=(
        (0x06 << 43) |   # 子分类: Military
        (0x01 << 37) |   # 职业: Poet
        (0x52 << 29) |   # 国籍: China
        (0x3 << 25) |    # 时代: Tang Dynasty
        (0x0 << 21) |    # 年代: 700s
        (0x01 << 19) |   # 性别: Male
        (0x7 << 16)      # 知名度: 1000+
    )
)
# Q标识符关联: Triple(li_bai_SIDX, P-外部ID, "Q9694")

抽象:“所有中国男性”

all_chinese_men = make_entity(
    mode=4,              # 全称(所有)
    entity_type=0x00,    # Human
    attrs=(
        (0x52 << 29) |   # 国籍: China
        (0x01 << 19)     # 性别: Male
    )
)

下位类型映射

维基数据中许多类型是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

覆盖率

项目数值
维基数据全部实体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标识符关联

Entity Node 不内嵌 Q标识符,而是通过三元组边单独关联。

Subject:  Entity_SIDX (64位)
Property: P-外部ID (例: P-Wikidata)
Object:   "Q12345" (字符串或整数)