GEUL(General Encoding Unified Language) Entity Node의 48비트 속성 스키마를 위키데이터 실데이터 기반으로 자동 설계하는 프로젝트.
Entity Node 는 GEUL 스트림에서 개체(사람, 장소, 사물, 조직, 개념 등)를 식별하는 고정 길이 4워드(64비트) 패킷 이다.
특성
설명
Non-unique
같은 SIDX에 여러 개체 가능
Multi-SIDX
한 개체가 여러 SIDX 가능 (시점/역할별)
비트 = 의미
비트 위치 자체가 속성을 나타냄
추상/구체 연속
Mode와 Attributes 채움 정도로 구분
예시:
트럼프 (부동산 사업가) → SIDX_A
트럼프 (대통령) → SIDX_B (다른 SIDX)
"Human + Male + Korea" → 추상적 "한국 남자"
"Human + Male + Korea + 1946 + Business + ..." → 거의 특정 인물
1st WORD (16비트)
┌─────────┬──────┬────────────┐
│ Prefix │ Mode │ EntityType │
│ 7bit │ 3bit │ 6bit │
└─────────┴──────┴────────────┘
2nd WORD (16비트) 3rd WORD (16비트) 4th WORD (16비트)
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Attributes 상위 │ │ Attributes 중위 │ │ Attributes 하위 │
│ 16비트 │ │ 16비트 │ │ 16비트 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
필드
비트
크기
설명
Prefix
1-7
7
0001001 (Entity Node 식별)
Mode
8-10
3
8가지 양화/수 모드
EntityType
11-16
6
64개 상위 타입
Attributes
17-64
48
타입별 가변 스키마
Mode는 개체의 **양화(Quantification)와 수(Number)**를 3비트로 통합 표현한다.
코드
의미
예시
0
등록 개체
이순신, 삼성전자, BTS
1
특정 단수
"그 사람"
2
특정 소수
"그 몇몇"
3
특정 다수
"그 사람들"
4
전칭
"모든 ~"
5
존재
"어떤 ~"
6
불특정
"아무 ~"
7
총칭
"한국인이란"
4. EntityType (6비트 = 64개)
위키데이터 P31(instance of) 빈도 통계 기반, 9개 카테고리로 그룹화.
생물/인물 (0x00-0x07)
코드
타입
대표 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-0x0B)
코드
타입
대표 Q-ID
개체수
0x08
Chemical
Q113145171
1.3M
0x09
Compound
Q11173
1.1M
0x0A
Mineral
Q7946
62K
0x0B
Drug
Q12140
45K
천체 (0x0C-0x13)
코드
타입
대표 Q-ID
개체수
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-0x1B)
코드
타입
대표 Q-ID
개체수
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-0x23)
코드
타입
대표 Q-ID
개체수
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-0x2B)
코드
타입
대표 Q-ID
개체수
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-0x2F)
코드
타입
대표 Q-ID
개체수
0x2C
Organization
Q43229
531K
0x2D
Business
Q4830453
242K
0x2E
PoliticalParty
Q7278
35K
0x2F
SportsTeam
Q847017
95K
창작물 (0x30-0x3B)
코드
타입
대표 Q-ID
개체수
0x30
Painting
Q3305213
1.1M
0x31
Document
Q49848
45.0M
0x32
LiteraryWork
Q7725634
395K
0x33
Film
Q11424
336K
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-0x3F)
코드
타입
대표 Q-ID
개체수
0x3C
SportsSeason
Q27020041
183K
0x3D
Event
Q1656682
10K
0x3E
Election
Q40231
11K
0x3F
Other
-
예약
타입별 가변 스키마 — EntityType마다 다른 의미로 해석
고빈도 속성에 더 많은 비트 할당
상위 필드 값이 하위 필드 코드북을 결정 (계층적 해석)
SIMD 필터링에 직접 활용
┌──────────┬────────┬────────┬──────┬────────┬────────┬─────────┬────────┬──────────┬──────────┐
│ 소분류 │ 직업 │ 국적 │ 시대 │ 연대 │ 성별 │ 저명도 │ 언어 │ 출생지역 │ 활동분야 │
│ 5bit │ 6bit │ 8bit │ 4bit │ 4bit │ 2bit │ 3bit │ 6bit │ 6bit │ 4bit │
└──────────┴────────┴────────┴──────┴────────┴────────┴─────────┴────────┴──────────┴──────────┘
= 48비트
┌──────────┬────────────┬──────────┬──────────┬──────────┬──────────┬────────────┬──────────┬──────────┬──────────┬────────┐
│ 별자리 │ 분광형 │ 광도등급 │ 겉보기등급│ 적경구간 │ 적위구간 │ 특성플래그 │ 시선속도 │ 적색편이 │ 시차 │ 예비 │
│ 7bit │ 4bit │ 3bit │ 4bit │ 4bit │ 4bit │ 6bit │ 5bit │ 5bit │ 4bit │ 2bit │
└──────────┴────────────┴──────────┴──────────┴──────────┴──────────┴────────────┴──────────┴──────────┴──────────┴────────┘
= 48비트
64개 타입별 전체 스키마는 references/type_schemas.json 참조.
타입별 완전 독립 — 각 EntityType마다 48비트 해석이 완전히 다름
계층적 해석 — 상위 필드 값이 하위 필드의 코드 테이블을 결정
우아한 열화 — 비트를 덜 채울수록 추상적 표현
SIMD 최적화 — 비트 마스크로 범위 필터링 가능
기계적 할당 — LLM이 자연어에서 자동으로 SIDX 생성 가능
UID 없음 — 외부 ID는 Triple로 분리, 48비트 전부 의미정렬
yi_sun_sin = make_entity (
mode = 0 , # 등록 개체
entity_type = 0x00 , # Human
attrs = (
(0x06 << 43 ) | # 소분류: Military
(0x01 << 37 ) | # 직업: Admiral
(0x52 << 29 ) | # 국적: Korea
(0x5 << 25 ) | # 시대: Early Modern
(0x0 << 21 ) | # 연대
(0x01 << 19 ) | # 성별: Male
(0x7 << 16 ) | # 저명도: 1000+
(0x0 ) # 언어/출생지역/활동분야
)
)
all_korean_men = make_entity (
mode = 4 , # 전칭 (모든)
entity_type = 0x00 , # Human
attrs = (
(0x00 << 43 ) | # 소분류: 일반
(0x00 << 37 ) | # 직업: 일반
(0x52 << 29 ) | # 국적: Korea
(0x01 << 19 ) | # 성별: Male
(0x0 << 16 ) # 저명도: Unknown
)
)
that_person = make_entity (
mode = 1 , # 특정 단수
entity_type = 0x00 , # Human
attrs = 0 # 속성 미지정
)
위키데이터 실데이터 기반으로 48비트 코드북을 자동 설계하는 파이프라인.
Stage
스크립트
설명
1
scripts/stage1_extract.py
위키데이터에서 각 EntityType의 속성 분포 분석
2
scripts/stage2_dependency.py
속성 간 조건부 엔트로피로 종속 관계 DAG 생성
3
scripts/stage3_allocate.py
48비트에 속성 배치, 충돌 최소화
4
scripts/stage4_codebook.py
계층적 코드북 자동 생성
5
scripts/stage5_validate.py
전체 개체 인코딩 후 충돌률 측정
# 가상환경 설정
python3 -m venv .venv
source .venv/bin/activate
pip install psycopg2-binary
# 순서대로 실행
python scripts/stage1_extract.py
python scripts/stage2_dependency.py
python scripts/stage3_allocate.py
python scripts/stage4_codebook.py
python scripts/stage5_validate.py
항목
수치
위키데이터 전체 개체
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%
항목
기술
언어
Python 3.12+
DB
PostgreSQL (ltree 확장 필수)
Python 패키지
psycopg2
레포
관계
geul
상위 — 문법 명세 + SIDX 횡단 문서
geul-verb
형제 — 동사 SIDX 16비트 코드북