{"slug": "your-vector-search-knows-bank-is-related-to-bank-it-doesnt-know-which-bank-you", "title": "Your Vector Search Knows “Bank” Is Related to “Bank.” It Doesn’t Know Which Bank You Mean.", "summary": "A developer built ARBITER, a deterministic measurement engine that sits between vector retrieval and LLM generation to disambiguate word senses that similarity search conflates. In a benchmark compressing 768-dimensional representations to 72 dimensions, ARBITER retained 0.9653 similarity versus PCA's 0.8693 while separating ambiguous senses far more sharply (0.066 vs ~0.85 for \"bank\"), and it ranks candidate fields by coherence without generating answers.", "body_md": "Vector search is very good at similarity.\n\nSimilarity is not always the same thing as meaning.\n\nThat distinction starts becoming expensive when retrieval feeds an LLM.\n\nConsider:\n\n```\nfinancial bank\nriver bank\n```\n\nThey share the same word.\n\nA similarity system has every reason to place them near each other.\n\nA useful reasoning system often needs to do the opposite.\n\nIt needs to separate the senses.\n\nThat problem is one of the reasons I built **ARBITER**.\n\nARBITER is a deterministic measurement engine. You give it:\n\n```\ncontext\n+\na field of possibilities\n```\n\nand it returns a coherence-ordered field.\n\nIt does not generate an answer.\n\nIt measures the possibilities you supplied.\n\nA common RAG pipeline looks roughly like:\n\n```\nquery\n  ↓\nvector retrieval\n  ↓\ntop N chunks\n  ↓\nLLM\n```\n\nThe retrieval stage is intentionally broad.\n\nThat is useful, but it also means bad context can survive long enough to reach generation.\n\nOnce incorrect-but-related context enters the prompt, the generator has to reason around it.\n\nA different pipeline is:\n\n```\nquery\n  ↓\nvector retrieval\n  ↓\ncandidate field\n  ↓\nARBITER\n  ↓\ncoherence-ordered field\n  ↓\nLLM\n```\n\nARBITER does not replace retrieval.\n\nIt gives you a deterministic measurement step between retrieval and generation.\n\nHere is a live ARBITER call:\n\n```\ncurl -sS -X POST https://arbiter.grip.fyi/v1/compare \\\n  -H 'content-type: application/json' \\\n  --data '{\n    \"query\":\"python memory\",\n    \"candidates\":[\n      \"garbage collection\",\n      \"malloc\",\n      \"snake habitat\"\n    ],\n    \"top_k\":3\n  }'\n```\n\nThe resulting ordering:\n\n```\n0.483573  garbage collection\n0.324794  malloc\n0.167992  snake habitat\n```\n\nSame interface:\n\n```\nstate / intent / context\n+\nfield of possibilities\n→\nARBITER\n→\nranked resonance field\n```\n\nThe field could contain:\n\n```\ndocuments\ntools\nroutes\nrobot actions\nsuppliers\ncode paths\nhypotheses\nagents\nproducts\n```\n\nThe primitive does not change. :chatgpt-content-reference{index=\"0\"}\n\nAn earlier ARBITER compression/disambiguation benchmark compared a 768-dimensional source representation compressed to 72 dimensions using PCA versus ARBITER.\n\nThe similarity-retention result was:\n\n```\nPCA       0.8693\nARBITER   0.9653\n```\n\nBut the more interesting result was sense separation.\n\nFor ambiguous words:\n\n```\n                PCA       ARBITER\n\nbank            ~0.85      0.066\nbat             ~0.85      0.073\n```\n\nLower here means better separation between competing senses.\n\nSo `river bank` and `financial bank` remained strongly entangled after PCA compression, while ARBITER separated them much more sharply.\n\nThe same benchmark reduced the representation from 768 dimensions to 72: a 10.7× dimensional reduction. :chatgpt-content-reference{index=\"1\"}\n\nThat is the part I care about.\n\nNot simply:\n\nCan I preserve similarity?\n\nBut:\n\nCan the representation preserve enough structure to distinguish what something means in context?\n\nThe same behavior shows up in ordinary ambiguous language.\n\nFor:\n\n```\nBest bass fishing spots in freshwater lakes\n```\n\nARBITER produced:\n\n```\n0.772  Largemouth bass in shallow weedy areas\n0.542  Bass amplifiers and speaker impedance\n0.293  Bass clef instruments in orchestra\n0.272  Bass guitar string gauges\nCrane safety regulations on construction sites\n```\n\nit produced:\n\n```\n0.828  Tower cranes require certified operators\n0.325  Sandhill cranes migrate through Nebraska\n0.274  Origami cranes symbolize peace in Japan\n0.173  Crane flies are harmless insects\n```\n\nAnd:\n\n```\nCell division rates in tumor growth analysis\n```\n\nreturned:\n\n```\n0.823  Mitotic cell division in tumor tissue\n0.312  Prison cell division protocols\n0.287  Cellular network division coverage\n```\n\nThese are not generated answers.\n\nThey are measurements over an explicit candidate field. :chatgpt-content-reference{index=\"2\"}\n\nThis is where things get more interesting.\n\nTake `Python`.\n\nWithout extra context:\n\n```\nProgramming   0.796\nSnakes        0.284\n```\n\nNow change the supplied perspective:\n\n```\n\"As a herpetologist...\"\n```\n\nand the same meanings reorganize:\n\n```\nSnakes        0.700\nProgramming   0.422\n```\n\nApple behaves similarly:\n\n```\nbaseline:\nTech company  0.861\nFruit         0.252\n```\n\nWith:\n\n```\n\"As a chef...\"\n```\n\nthe ordering flips:\n\n```\nFruit         0.668\nTech company  0.397\n```\n\nNo retraining.\n\nThe supplied context changed, so the field changed. :chatgpt-content-reference{index=\"3\"}\n\nA lot of current AI infrastructure treats representation as a lookup problem:\n\n```\nWhich stored object is closest?\n```\n\nBut many useful machine decisions are closer to:\n\n```\nGiven this exact state,\nwhich of these possibilities fits best?\n```\n\nThose are not identical questions.\n\nRAG is an obvious place to use that distinction because retrieval already gives you a bounded field.\n\nBut the same operation applies to agent routing, tool selection, robotics, screening, planning, and other systems where the candidates already exist.\n\nThe generator does not always need to make the decision.\n\nSometimes the candidates are already there.\n\nWhat you need is a measurement.\n\nThe live endpoint is:\n\n```\nPOST https://arbiter.grip.fyi/v1/compare\n```\n\nOr install the lightweight CLI:\n\n```\ncurl -fsSL https://arbiter.grip.fyi/install | sh\n```\n\nThen:\n\n```\narb \"python memory\" \\\n  \"garbage collection\" \\\n  \"malloc\" \\\n  \"snake habitat\"\n```\n\nThe CLI is just the interface to the hosted ARBITER service.\n\nThe current developer surface includes 10 successful calls per day free, after which the same endpoint moves to native x402 payment at $0.01 per call. :chatgpt-content-reference{index=\"4\"}\n\nTry a field where you already know what the answer should be.\n\nAmbiguous words are a good place to start.\n\n**ARBITER:** [https://arbiter.grip.fyi](https://arbiter.grip.fyi)\n\nDescription:\n\nSimilarity is not the same thing as meaning. A deterministic measurement step for RAG, reranking, and bounded decision fields.\n\nTags:\n\nai, rag, machinelearning, programming", "url": "https://wpnews.pro/news/your-vector-search-knows-bank-is-related-to-bank-it-doesnt-know-which-bank-you", "canonical_source": "https://dev.to/getarbiter/your-vector-search-knows-bank-is-related-to-bank-it-doesnt-know-which-bank-you-mean-38fh", "published_at": "2026-09-29 00:04:03+00:00", "updated_at": "2026-09-29 00:19:13.814699+00:00", "lang": "en", "topics": ["ai-research", "natural-language-processing", "large-language-models", "ai-tools"], "entities": ["ARBITER", "PCA"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/your-vector-search-knows-bank-is-related-to-bank-it-doesnt-know-which-bank-you", "markdown": "https://wpnews.pro/news/your-vector-search-knows-bank-is-related-to-bank-it-doesnt-know-which-bank-you.md", "text": "https://wpnews.pro/news/your-vector-search-knows-bank-is-related-to-bank-it-doesnt-know-which-bank-you.txt", "jsonld": "https://wpnews.pro/news/your-vector-search-knows-bank-is-related-to-bank-it-doesnt-know-which-bank-you.jsonld"}}