{"slug": "learn-embeddings-by-building-a-resume-to-project-matcher", "title": "Learn Embeddings by Building a Resume-to-Project Matcher", "summary": "A developer demonstrates how to build a resume-to-project matcher using cosine similarity on fixed embedding vectors, teaching the mechanics of vector normalization, scoring, and ranking. The example uses synthetic data to illustrate failure cases and emphasizes that embeddings should support discovery, not automated hiring decisions. The lesson is independent of the developer's contribution to the MonkeyCode project.", "body_md": "Embedding demos often jump from text to a magical list of “similar” results. A tiny matcher makes the missing steps visible: normalize vectors, compute scores, rank candidates, and inspect failure cases.\n\nThis example uses fixed vectors so it runs without an API key.\n\n``` python\nimport numpy as np\n\nresume = np.array([0.8, 0.6, 0.1, 0.0])\nprojects = {\n    \"accessible React dashboard\": np.array([0.7, 0.7, 0.1, 0.0]),\n    \"Kubernetes cost monitor\": np.array([0.1, 0.2, 0.8, 0.6]),\n    \"Python retrieval tutorial\": np.array([0.4, 0.4, 0.5, 0.1]),\n}\n\ndef unit(vector):\n    length = np.linalg.norm(vector)\n    if length == 0:\n        raise ValueError(\"zero vector has no cosine direction\")\n    return vector / length\n\nquery = unit(resume)\nranking = sorted(\n    ((name, float(query @ unit(vector))) for name, vector in projects.items()),\n    key=lambda item: item[1],\n    reverse=True,\n)\n\nfor name, score in ranking:\n    print(f\"{score:.3f}  {name}\")\n```\n\nExpected first result:\n\n```\n0.990  accessible React dashboard\n```\n\nCosine similarity measures direction, not truth, skill level, interest, availability, or fairness. The four coordinates above have no real semantic meaning; they make the math reproducible. In a real system, one embedding model creates all vectors, and you must record its exact name and version.\n\nCreate 20 project descriptions and five synthetic resumes. Before running retrieval, label which projects are relevant and why. Then calculate recall at 3: how many labeled relevant projects appear in the first three results?\n\nInspect misses for vocabulary, language, seniority, negation, and overemphasis on prestigious terms. Do not use demographic attributes. For hiring, embeddings should support discovery rather than make employment decisions; candidates need meaningful review and correction paths.\n\nTry removing normalization and observe how vector magnitude changes ranking. Add a zero vector to verify the explicit failure. Compare two model versions using the same labeled set rather than choosing the one with a nicer demo.\n\nThe public [MonkeyCode repository](https://github.com/chaitin/MonkeyCode) describes project requirements, AI tasks, and model management. Embedding-based discovery could be relevant around repositories or tasks, but this teaching example is not a MonkeyCode feature claim or integration.\n\nDisclosure: I contribute to the MonkeyCode project. The lesson and vectors are independent; product context is based on public documentation.\n\nNearest-neighbor search is easy to run. The useful learning begins when you define what “relevant” means and measure the misses.", "url": "https://wpnews.pro/news/learn-embeddings-by-building-a-resume-to-project-matcher", "canonical_source": "https://dev.to/magickong/learn-embeddings-by-building-a-resume-to-project-matcher-nc7", "published_at": "2026-07-13 02:41:32+00:00", "updated_at": "2026-07-13 03:14:50.207099+00:00", "lang": "en", "topics": ["developer-tools", "machine-learning", "natural-language-processing"], "entities": ["MonkeyCode"], "alternates": {"html": "https://wpnews.pro/news/learn-embeddings-by-building-a-resume-to-project-matcher", "markdown": "https://wpnews.pro/news/learn-embeddings-by-building-a-resume-to-project-matcher.md", "text": "https://wpnews.pro/news/learn-embeddings-by-building-a-resume-to-project-matcher.txt", "jsonld": "https://wpnews.pro/news/learn-embeddings-by-building-a-resume-to-project-matcher.jsonld"}}