ЁЯФм рдзрдбрд╛ 05 тАФ Vector DB рдмрдирд╡рд╛: 70 рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдУрд│реА
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 8 рдкреИрдХреА рдзрдбрд╛ 05 ┬╖ рдорд╛рдЧреЗ: lesson-04-nearest-neighbors ┬╖ рдкреБрдвреЗ: lesson-06-chunking-metadata
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ04, рдЖрдгрд┐ vectordb/vectordb.py рдЪреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдд рд╡рд╛рдЪрди тАФ рдЖрддрд╛рдкрд░реНрдпрдВрддрдЪрд╛ рд╕рдВрдкреВрд░реНрдг course, рдПрдХрд╛ рдУрд│ рдХреНрд░рдорд╛рдВрдХрд╛рд╡рд░ рд╕рд╛рдкрдбреЗрд▓ рдЕрд╕рд╛ тАФ рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рднрд░реА.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
File рдЙрдШрдбрд╛. рдзрдбреНрдпрд╛рдВрд╢реА рдЬреБрд│рдгрд╛рд░реЗ рддреАрди рдХреНрд░рдорд╛рдВрдХрд┐рдд рднрд╛рдЧ:
- TEXT тЖТ VECTOR ЁЯФв (рдзрдбрд╛ 02):
_tokens(lowercase рд╢рдмреНрдж),embed(рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж 256 рдкреИрдХреА рдПрдХрд╛ bucket рдордзреНрдпреЗ hash рдХрд░рд╛, рддреЛ рд╡рд╛рдврд╡рд╛, normalize рдХрд░рд╛). рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╕реВрдЪрдирд╛ docstring рдордзреНрдпреЗрдЪ рдЖрд╣реЗ: рдпрд╛ function рдЪреНрдпрд╛ рдЬрд╛рдЧреА embedding-model call рдареЗрд╡рд╛ рдЖрдгрд┐ рдмрд╛рдХреА рд╕рдЧрд│реЗ рддрд╕реЗрдЪ рд░рд╛рд╣рддреЗ. рд╣реА рдПрдХрд╛ function рдЪреА рд╕реАрдорд╛ рдореНрд╣рдгрдЬреЗ industry рдЪреА architecture рдЫреЛрдЯреНрдпрд╛ рд░реВрдкрд╛рдд: embedder рдЖрдгрд┐ store рд╣реА рд╡реЗрдЧрд╡реЗрдЧрд│реА рдХрд╛рдореЗ рдЖрд╣реЗрдд. - SIMILARITY ЁЯУР (рдзрдбрд╛ 03):
cosineтАФ dot product рдЪреА рдПрдХ рдУрд│, рдХрд╛рд░рдг normalization рджрд╛рд░рд╛рддрдЪ рдЭрд╛рд▓реЗрд▓реЗ рдЕрд╕рддреЗ (_normalize). - THE DATABASE ЁЯЧДя╕П (рдзрдбреЗ 04+06): class
MiniVectorDBтАФrows(id, vector, text, metadata),add()embed рдХрд░реВрди рд╕рд╛рдард╡рддреЗ,search()рдореНрд╣рдгрдЬреЗ metadata filter рд╕рд╣ brute-force kNN (all(meta.get(k)==v)тАФ рд░рдВрдЧреАрдд stickers рдЪреА рдУрд│; ranking рдЪреНрдпрд╛ рдЖрдзреА filter рдХрд░рдгреЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рддреЗ рдзрдбрд╛ 06 рд╕рдордЬрд╛рд╡рддреЛ).
рдЦрд░реЗ product рдХрд╛рдп рдЬреЛрдбрддреЗ рддреЗ рдкрд╛рд╣рд╛ тАФ рдЖрдгрд┐ рддреНрдпрд╛рддрд▓реЗ рдХрд╛рд╣реАрдЪ рд╕рдВрдХрд▓реНрдкрдирд╛ рдмрджрд▓рдд рдирд╛рд╣реА: persistence (рдЖрдкрд▓рд╛ exit рдЭрд╛рд▓реНрдпрд╛рд╡рд░ рд╡рд┐рд╕рд░рддреЛ!), updates/deletes, ANN index (L04), concurrency, replication (k8s рд╢рд╛рд│рд╛ рд╣рд╛рдд рд╣рд▓рд╡реВрди рдирдорд╕реНрдХрд╛рд░ рдХрд░рддреЗ ЁЯСЛ).
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart TB
subgraph file["vectordb/vectordb.py тАФ the map"]
e["1 ЁЯФв embed()<br/>hash words тЖТ 256 dims тЖТ normalize<br/>тЖР swap for a model call HERE"]
c["2 ЁЯУР cosine()<br/>one line: dot product<br/>(normalize made it cheap)"]
d["3 ЁЯЧДя╕П MiniVectorDB<br/>add: embed + store rows<br/>search: filter ЁЯП╖я╕П тЖТ score тЖТ sort тЖТ top-k"]
end
demo["demo.py: 7 chunks ┬╖ 3 queries ┬╖<br/>1 honest failure ЁЯШм"]
file --> demo
тЭУ рдХрд╛рдп (рдЪреЛрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рддрдкрд╢реАрд▓)
рддреБрдореНрд╣реА рдмрдирд╡рд▓рд╛ рддреЛ database рдЖрд╣реЗ, index рдирд╛рд╣реА. MiniVectorDB рд╣реА storage/query system рдЖрд╣реЗ: рддреА embed рдХрд░рддреЗ, рд╕рд╛рдард╡рддреЗ, filter рдХрд░рддреЗ рдЖрдгрд┐ rank рдХрд░рддреЗ. рддрд┐рдЪрд╛ search рдкреНрд░рддреНрдпреЗрдХ рдЬрд╛рдЧрд╛ рддрдкрд╛рд╕рддреЛ (brute force); рддреЛ loop HNSW рдХрд┐рдВрд╡рд╛ IVF рдиреЗ рдмрджрд▓рд▓рд╛ (рдзрдбрд╛ 04) рддрд░ рддреНрдпрд╛рдЪ database рдЪреНрдпрд╛ рдЖрдд рдПрдХ index рдЬреЛрдбрд▓рд╛ рдЬрд╛рдИрд▓ тАФ API рдмрджрд▓рдгрд╛рд░ рдирд╛рд╣реА.
рд▓рд┐рд╣рд┐рддрд╛рдирд╛ normalize, рд╡рд╛рдЪрддрд╛рдирд╛ dot тАФ vector search рдордзрд▓реА рд╕рд░реНрд╡реЛрддреНрддрдо рдПрдХрдореЗрд╡ perf рдпреБрдХреНрддреА, рдЖрдгрд┐ рдЗрдереЗ рддреА рджреЛрди рдУрд│реАрдВрдЪреА рдЖрд╣реЗ.
Scoring рдЪреНрдпрд╛ рдЖрдзреА filter тАФ
search()рдЖрдзреА stickers рд▓рд╛рд╡рддреЗ, рдордЧ рдЙрд░рд▓реЗрд▓реНрдпрд╛рдВрдирд╛ rank рдХрд░рддреЗ. Toy scale рд╡рд░ рд╣реЗ рдлрдХреНрдд рдмрд░реЛрдмрд░ рдЖрд╣реЗ; ANN scale рд╡рд░ "filtered search" рд╣реЗ рдЦрд░реЛрдЦрд░ рдХрдареАрдг feature рдЖрд╣реЗ (рдзрдбрд╛ 08 рдордзрд▓реА products рддреНрдпрд╛рдмрджреНрджрд▓ рдЙрдЧрд╛рдЪ рдмрдврд╛рдИ рдорд╛рд░рдд рдирд╛рд╣реАрдд).Text vector рд╕реЛрдмрддрдЪ рд╕рд╛рдард╡рд╛ тАФ retrieval рдиреЗ рдорд╛рдгрд╕рд╛рд▓рд╛/model рд▓рд╛ рд╡рд╛рдЪрддрд╛ рдпреЗрдИрд▓ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рдкрд░рдд рджрд┐рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ; рдиреБрд╕рддреЗ vectors рдореНрд╣рдгрдЬреЗ рдореБрд▓рд╛рдВрд╢рд┐рд╡рд╛рдпрдЪреНрдпрд╛ рдЬрд╛рдЧрд╛.
(score, id, text, meta)tuple sort: рд╕рд░реНрд╡рд╛рдд рдЬрд╛рд╕реНрдд рдЖрдзреА тАФ scores рд╕рдорд╛рди рдЖрд▓реЗ рддрд░ tuple-ordering рдЪреНрдпрд╛ рд╕рд╛рдкрд│реНрдпрд╛рдВрдХрдбреЗ рд▓рдХреНрд╖ рджреНрдпрд╛ (рдЗрдереЗ ids рдмрд░реЛрдмрд░реА рд╕реЛрдбрд╡рддрд╛рдд).
ЁЯдФ рдХрд╛
рдПрдХрджрд╛ рддреБрдореНрд╣реА рдПрдХ рд╡рд╛рдЪрд▓рд╛ рдХреА "рдЖрдкрдг vector database рд╡рд╛рдкрд░рд╛рд╡рд╛ рдХрд╛?" рд╣рд╛ рд╢рд╛рдВрдд engineering рдкреНрд░рд╢реНрди рд╣реЛрддреЛ: рддреБрдореНрд╣рд╛рд▓рд╛ рддреАрди рдХрд╛рдореЗ рдорд╛рд╣реАрдд рдЕрд╕рддрд╛рдд (embed, рддреБрд▓рдирд╛, рдЖрдгрдгреЗ), рдХреЛрдгрддреЗ рднрд╛рдЧ рд╕рд╛рдорд╛рдиреНрдп рдЖрд╣реЗрдд (рд╡рд░рдЪреЗ рд╕рдЧрд│реЗ) рдЖрдгрд┐ рдХреЛрдгрддреЗ product рдЖрд╣реЗрдд (indexes, scale рд╡рд░ filters, ops) рд╣реЗ рдорд╛рд╣реАрдд рдЕрд╕рддреЗ. Framework docs рдзрд░реНрдордЧреНрд░рдВрде рд░рд╛рд╣рдд рдирд╛рд╣реАрдд, changelogs рдмрдирддрд╛рдд.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛ тАФ рджреЛрди рд╕реБрдзрд╛рд░рдгрд╛, рдкреНрд░рддреНрдпреЗрдХреА ~10 рдУрд│реА
# A) persistence: add save(path)/load(path) using json
# (vectors are just lists тАФ json.dump(self.rows) and back)
# B) delete(doc_id): rows = [r for r in rows if r[0] != doc_id]
# then re-run demo.py and delete 'lunch-1' тАФ watch query 1's
# second hit change!
python3 vectordb/demo.py
рдХрд┐рдорд╛рди рд╕реБрдзрд╛рд░рдгрд╛ A рддрд░реА рдкреВрд░реНрдг рдХрд░рд╛ тАФ exit рдЭрд╛рд▓реНрдпрд╛рд╡рд░ рд╕рдЧрд│реЗ рд╡рд┐рд╕рд░рдгрд╛рд░рд╛ database рд╣рд╛ рдЦреВрдк рдкреНрд░рд╛рдорд╛рдгрд┐рдХ toy рдЖрд╣реЗ, рдкрдг рдлрдХреНрдд toy. ЁЯТ╛
тПня╕П рдкреБрдвреЗ
рдХреЛрдгрддреНрдпрд╛рд╣реА index рдкреЗрдХреНрд╖рд╛ рдореЛрдард╛ рджрд░реНрдЬрд╛рдЪрд╛ рд▓реАрд╡реНрд╣рд░: рддреБрдореНрд╣реА рдЖрдд рдХрд╛рдп рдЯрд╛рдХрддрд╛ тАФ chunking, overlap, stickers, рдЖрдгрд┐ hybrid search.
git checkout lesson-06-chunking-metadata