code wiki / _hdl_build / nx_semantic_retrieval_test.nx

nx_semantic_retrieval_test.nx source

↩ module page · 60 lines · 4531 B

1// nx_semantic_retrieval_test.nx -- SPEC A's ACCEPTANCE GATE (the Engineer's test of the Builder's work): 2// semantic retrieval must find a doc via co-occurrence that EXACT match (BM25/substring) misses. 3// Corpus (a small legal library): 4// doc0 "settlement compensation agreed" (settlement co-occurs with compensation) 5// doc1 "settlement claim filed" (settlement co-occurs with claim) 6// doc2 "compensation claim awarded" <-- NO "settlement", but the related terms -> the target 7// doc3 "court hearing scheduled" (unrelated) 8// Query "settlement": exact match scores doc2 = 0; semantic scores doc2 > 0 via co-occurrence. That is 9// retrieval beyond exact terms, built on L8 integer ops. Exit 0 on 6/6. license_tier: ORIGINAL 10 11import "nx_semantic_retrieval.nx" 12import "nx_research_extract.nx" // re_strlen 13import "nx_syscalls.nx" 14 15func st_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 16func st_num(v: i64) -> i64 { let bb: *u8 = sys_mmap(28); var m: i64=v; if m<0 {m=0-m; sys_write(1,"-" as *u8,1)}; let t: *u8 = sys_mmap(28); var k: i64=0; if m==0 {t[0]=48;k=1}; while m>0 {t[k]=48+(m%10); m=m/10; k=k+1}; var i: i64=0; while i<k {bb[i]=t[k-1-i]; i=i+1}; sys_write(1, bb, k); return 0 } 17 18func main() -> i64 { 19 st_puts("=== SEMANTIC RETRIEVAL (co-occurrence, L8 integer ops) -- match beyond exact terms ===\n" as *u8) 20 let N: i64 = 4 21 let d0: *u8 = "settlement compensation agreed" as *u8 22 let d1: *u8 = "settlement claim filed" as *u8 23 let d2: *u8 = "compensation claim awarded" as *u8 24 let d3: *u8 = "court hearing scheduled" as *u8 25 let ptrs: *i64 = sys_mmap(8 * 8) as *i64; let lens: *i64 = sys_mmap(8 * 8) as *i64 26 ptrs[0]=d0 as i64; ptrs[1]=d1 as i64; ptrs[2]=d2 as i64; ptrs[3]=d3 as i64 27 var i: i64 = 0; while i < N { lens[i] = re_strlen(ptrs[i] as *u8); i = i + 1 } 28 29 // vocabulary + query 30 let vocab: *i64 = sys_mmap(8 * 8) as *i64 31 vocab[0]="settlement" as *u8 as i64; vocab[1]="compensation" as *u8 as i64; vocab[2]="claim" as *u8 as i64; vocab[3]="court" as *u8 as i64 32 let V: i64 = 4 33 let qterm: *u8 = "settlement" as *u8 34 let qvec: *i64 = sys_mmap(8 * 8) as *i64 35 sr_build_qvec(ptrs, lens, N, qterm, vocab, V, qvec) 36 37 let sem2: i64 = sr_score(ptrs, lens, 2, qvec, vocab, V) // target doc, no exact "settlement" 38 let exa2: i64 = sr_exact(ptrs, lens, 2, qterm) // exact match on the target 39 let sem3: i64 = sr_score(ptrs, lens, 3, qvec, vocab, V) // unrelated doc 40 let best: i64 = sr_best(ptrs, lens, N, qvec, vocab, V) 41 let cos2: i64 = sr_cosine_milli(ptrs, lens, 2, qvec, vocab, V) 42 43 st_puts(" qvec[settlement,compensation,claim,court] = [" as *u8); i=0; while i<V { st_num(qvec[i]); if i<V-1 { st_puts("," as *u8) } i=i+1 } st_puts("]\n" as *u8) 44 st_puts(" doc2 (no 'settlement'): semantic=" as *u8); st_num(sem2); st_puts(" exact=" as *u8); st_num(exa2); st_puts(" cosine=" as *u8); st_num(cos2); st_puts("/1000 <- FOUND by co-occurrence, MISSED by exact\n" as *u8) 45 st_puts(" doc3 (unrelated): semantic=" as *u8); st_num(sem3); st_puts(" best-doc=" as *u8); st_num(best); st_puts(" (exact-match docs still rank top -- additive, no regression)\n" as *u8) 46 st_puts(" L8 sqrt check: isqrt(9)=" as *u8); st_num(sr_isqrt(9)); st_puts(" isqrt(144)=" as *u8); st_num(sr_isqrt(144)); st_puts("\n" as *u8) 47 48 let r: *i64 = sys_mmap(8 * 8) as *i64 49 r[0] = 0; if sem2 >= 2 { r[0] = 1 } // semantic FINDS the target via co-occurrence 50 r[1] = 0; if exa2 == 0 { r[1] = 1 } // exact match MISSES it (beyond exact terms) 51 r[2] = 0; if sem3 == 0 { r[2] = 1 } // unrelated doc not falsely retrieved 52 r[3] = 0; if sr_isqrt(9) == 3 { if sr_isqrt(144) == 12 { r[3] = 1 } } // L8 sqrt primitive works (bits-up) 53 r[4] = 0; if cos2 > 0 { r[4] = 1 } // integer cosine over ISQRT works 54 r[5] = 0; if best == 0 { r[5] = 1 } // exact docs still top (semantic is additive) 55 var pass: i64 = 0; i = 0 56 while i < 6 { pass = pass + r[i]; i = i + 1 } 57 st_puts("----\n passed " as *u8); st_num(pass); st_puts("/6\n" as *u8) 58 if pass == 6 { st_puts(" BEYOND EXACT TERMS: a doc with no query word retrieved via co-occurrence, built on L8 integer ops. Honest: a weak proxy vs learned embeddings (the flagged LLM rung).\n" as *u8); sys_exit(0); return 0 } 59 st_puts(" FAIL\n" as *u8); sys_exit(1); return 1 60}