ЁЯФв рдзрдбрд╛ 02 тАФ Text рддреЗ vectors: рдкреНрд░рддреНрдпреЗрдХ text рд▓рд╛ рдЬрд╛рдЧрд╛ рджреЗрдгреЗ
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 8 рдкреИрдХреА рдзрдбрд╛ 02 ┬╖ рдорд╛рдЧреЗ: lesson-01-why-vector-db ┬╖ рдкреБрдвреЗ: lesson-03-similarity
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбрд╛ 01, рдЖрдгрд┐ рдкреНрд░рд╡реЗрд╢рд╛рдЪрд╛ рд╡рд┐рдзреА: text рдЪреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдВрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░ рдХрд╕реЗ рд╣реЛрддреЗ тАФ рдЖрдкрд▓реНрдпрд╛ toy рдЪреА рдкрджреНрдзрдд, рдЦрд░реА рдкрджреНрдзрдд, рдЖрдгрд┐ рддреНрдпрд╛ рджреЛрдШрд╛рдВрдордзрд▓реА рджрд░реА (рдЬреА рддреБрдореНрд╣реА рдЖрдзреАрдЪ рдореБрджреНрджрд╛рдо рдЕрдкрдпрд╢реА рд╣реЛрддрд╛рдирд╛ рдкрд╛рд╣рд┐рд▓реА рдЖрд╣реЗ).
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
Hall рдордзреНрдпреЗ рдмрд╕рд╛рдпрд▓рд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд▓рд╛рдЧрддрд╛рдд. рддреЗ рджреЗрдгреНрдпрд╛рдЪреНрдпрд╛ рджреЛрди рдкрджреНрдзрддреА:
рдЖрдкрд▓реНрдпрд╛ toy рдЪреА рдкрджреНрдзрдд тАФ рд╢рдмреНрдж рдореЛрдЬрд╛ ЁЯФд
(vectordb.py embed()): hall рдордзреНрдпреЗ 256
рджрд┐рд╢рд╛ рдЖрд╣реЗрдд; рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж (hash рдХрд░реВрди) рддреНрдпрд╛рдВрдкреИрдХреА рдПрдХрд╛ рджрд┐рд╢реЗрд▓рд╛ рдзрдХреНрдХрд╛ рджреЗрддреЛ; рд▓рд╛рдВрдм
documents рдУрд░рдбреВ рдирдпреЗрдд рдореНрд╣рдгреВрди normalize рдХрд░рд╛. рд╡реЗрдЧрд╡рд╛рди, рдХреЛрдгрддреАрд╣реА рдЬрд╛рджреВ рдирд╛рд╣реА тАФ рдЖрдгрд┐
рдЬрд╡рд│рдЪреЗрдЪ рдкрд╛рд╣рдгрд╛рд░реЗ (nearsighted): рджреЛрди texts рддреЗрд╡реНрд╣рд╛рдЪ рдЬрд╡рд│ рдмрд╕рддрд╛рдд рдЬреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдд
рдЕрдХреНрд╖рд░рд╢рдГ рддреЗрдЪ рд╢рдмреНрдж рдЕрд╕рддрд╛рдд. "pupils" рдЖрдгрд┐ "students" рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдЖрдХрд╛рд╢рдЧрдВрдЧрд╛рдВрдордзреНрдпреЗ
рдмрд╕рддрд╛рдд (demo рдордзрд▓рд╛ 0.00!). рдпрд╛ рдХреБрдЯреБрдВрдмрд╛рдиреЗ тАФ bag-of-words, TF-IDF, BM25 тАФ рдЕрдиреЗрдХ рджрд╢рдХреЗ
search рдЪрд╛рд▓рд╡рд▓рд╛ рдЖрдгрд┐ рдЖрдЬрд╣реА hybrid search рдЪрд╛ keyword рдЕрд░реНрдзрд╛ рднрд╛рдЧ рддреЗрдЪ рдЪрд╛рд▓рд╡рддрд╛рдд.
рдЦрд░реА рдкрджреНрдзрдд тАФ рд╕рдЧрд│реЗ рд╡рд╛рдЪрд▓реЗрд▓реНрдпрд╛ model рд▓рд╛ рд╡рд┐рдЪрд╛рд░рд╛ ЁЯза (AI рд╢рд╛рд│рд╛ L02+L04): embedding model тАФ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд neural network тАФ text рд▓рд╛ рдард░рд╛рд╡реАрдХ рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ vector рдордзреНрдпреЗ рдмрджрд▓рддреЗ (model рдиреБрд╕рд╛рд░ рд╢реЗрдХрдбреЛ рддреЗ рд╣рдЬрд╛рд░реЛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ) рдЬрд┐рдереЗ рджрд┐рд╢рд╛рдВрдЪрд╛ рдЕрд░реНрде рдЕрд░реНрде рдЕрд╕рддреЛ: рдЕрдмреНрдЬрд╛рд╡рдзреА рдЙрджрд╛рд╣рд░рдгрд╛рдВрдордзреВрди рд╢рд┐рдХрд▓реЗрд▓реЗ, рдореНрд╣рдгреВрди "pupils" "students" рдЪреНрдпрд╛ рд╢реЗрдЬрд╛рд░реА рдмрд╕рддреЗ, "refund my order" рд╣реЗ "I want my money back" рдЪреНрдпрд╛ рд╢реЗрдЬрд╛рд░реА, рд╡реЗрдЧрд│реНрдпрд╛ рд╢рдмреНрджрд░рдЪрдиреЗрддрд╣реА рдЖрдгрд┐ рд╡реЗрдЧрд│реНрдпрд╛ рднрд╛рд╖рд╛рдВрдордзреНрдпреЗрд╣реА.
рд╕реБрдВрджрд░ design рддрдереНрдп: рддреБрдореНрд╣реА рдХреЛрдгрддреА рдкрджреНрдзрдд рдирд┐рд╡рдбрд▓реА рдпрд╛рдЪреА database рд▓рд╛ рдкрд░реНрд╡рд╛ рдирд╕рддреЗ.
Vectors рдЖрдд, рд╢реЗрдЬрд╛рд░реА рдмрд╛рд╣реЗрд░. рдЖрдкрд▓реЗ embed() рд╣реЗ рдПрдХ function рдЖрд╣реЗ тАФ
рддреНрдпрд╛рдЪреНрдпрд╛ рдЬрд╛рдЧреА model call рдареЗрд╡рд╛ рдЖрдгрд┐ course рдордзрд▓реА рдкреНрд░рддреНрдпреЗрдХ рдЗрддрд░ рдУрд│ рддрд░реАрд╣реА рдЪрд╛рд▓рддреЗ.
(рд╣реЗ рд╡реЗрдЧрд│реЗрдкрдг тАФ embedder рд╡рд┐рд░реБрджреНрдз store тАФ рд╣реАрдЪ industry рдЪреА architecture рдкрдг
рдЖрд╣реЗ.)
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
text["ЁЯУЭ 'Class 3A has twelve students'"]
subgraph toy["ЁЯФд toy: hashed word counts"]
h["each word bumps 1 of 256 buckets<br/>тЖТ normalize"]
lim["ЁЯШм nearsighted: shared WORDS only"]
end
subgraph real["ЁЯза real: embedding model"]
m["trained network тЖТ fixed-size vector<br/>(hundredsтАУthousands of dims) ┬╖ directions = MEANING"]
win["'pupils' тЙИ 'students' тЬЕ"]
end
v["ЁЯЧ║я╕П a seat: [0.12, -0.08, тАж]<br/>the DB takes it from here тАФ<br/>either way"]
text --> toy --> v
text --> real --> v
тЭУ рдХрд╛рдп
- Dimensions: рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореНрд╣рдгрдЬреЗ рдмрджрд▓рд╛рдЪреА рдПрдХ рджрд┐рд╢рд╛. Toy: рдПрдХ hash bucket (рдЕрд░реНрдерд╣реАрди рдкрдг рд╕реБрд╕рдВрдЧрдд). рд╢рд┐рдХрд▓реЗрд▓реЗ: text рдЪрд╛ рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡рдгреНрдпрд╛рд╕рд╛рдареА model рд▓рд╛ рдЙрдкрдпреЛрдЧреА рд╡рд╛рдЯрд▓реЗрд▓реНрдпрд╛ рджрд┐рд╢рд╛ (рдФрдкрдЪрд╛рд░рд┐рдХрддрд╛, рд╡рд┐рд╖рдп, рд╕реВрд░тАж тАФ рдХрдзреАрдЪ label рдХреЗрд▓реЗрд▓реНрдпрд╛ рдирд╛рд╣реАрдд, рдЖрдкреЛрдЖрдк рдЙрдЧрд╡рд▓реЗрд▓реНрдпрд╛).
- Normalization (
_normalize): рдкреНрд░рддреНрдпреЗрдХ vector рдЪреА рд▓рд╛рдВрдмреА 1 рдХрд░рд╛ рдореНрд╣рдгрдЬреЗ similarity рджрд┐рд╢реЗрдЪреА рддреБрд▓рдирд╛ рдХрд░рддреЗ, document рдЪреНрдпрд╛ рд▓рд╛рдВрдмреАрдЪреА рдирд╛рд╣реА тАФ рдпрд╛рддреВрдирдЪ рдзрдбрд╛ 03 рдЪреА рд╕реНрд╡рдЪреНрдЫ cosine рдпреБрдХреНрддреА рддрдпрд╛рд░ рд╣реЛрддреЗ. - рддреНрдпрд╛рдЪ model рдЪрд╛ рдирд┐рдпрдо тЪая╕П: query vectors рдЖрдгрд┐ document vectors рдПрдХрд╛рдЪ embedder рдордзреВрди рдЖрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗрдд тАФ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ halls рдордзрд▓реНрдпрд╛ рдЬрд╛рдЧрд╛рдВрдЪреА рддреБрд▓рдирд╛ рд╣реЛрдд рдирд╛рд╣реА. рдкрд░рд┐рдгрд╛рдо: embedding model рдмрджрд▓рд▓реЗ тЖТ рд╕рдЧрд│реЗ рдкреБрдиреНрд╣рд╛ embed рдХрд░рд╛ (рдзрдбрд╛ 08 рдордзрд▓реА operational рдЕрдбрдЪрдг).
- Embeddings рдлрдХреНрдд text рд╕рд╛рдареА рдирд╛рд╣реАрдд: images, audio, code, products тАФ рдХрд╢рд╛рд▓рд╛рд╣реА рдЬрд╛рдЧрд╛ рдорд┐рд│реВ рд╢рдХрддреЗ (AI рд╢рд╛рд│рд╛ L12 рдЪреА multimodal рдЧреЛрд╖реНрдЯ).
ЁЯдФ рдХрд╛
Embedder рдирд┐рд╡рдбрдгреЗ рдореНрд╣рдгрдЬреЗрдЪ рддреБрдордЪреНрдпрд╛ product рд╕рд╛рдареА "рд╕рд╛рд░рдЦреЗ" рдпрд╛рдЪрд╛ рдЕрд░реНрде рдирд┐рд╡рдбрдгреЗ тАФ retrieval рдЪреНрдпрд╛ рджрд░реНрдЬрд╛рдЪреА рдХрдорд╛рд▓ рдорд░реНрдпрд╛рджрд╛ рдЗрдереЗ рдард░рддреЗ, database рдордзреНрдпреЗ рдирд╛рд╣реА. рдЖрдгрд┐ toy/рдЦрд░реЗ рдпрд╛рдВрдордзрд▓реА рджрд░реА рдорд╛рд╣реАрдд рдЕрд╕рд▓реА рдХреА рддреБрдореНрд╣реА рджреЛрдиреНрд╣реА рдЪреБрдХрд╛рдВрдкрд╛рд╕реВрди рд╡рд╛рдЪрддрд╛: рд╢рдмреНрдж-vectors рдирд╛ рд╕рдорд╛рдирд╛рд░реНрдереА рд╢рдмреНрдж рд╕рдордЬрддреАрд▓ рдЕрд╢реА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдгреЗ, рдЖрдгрд┐ рдХрд╛рдорд╛рд▓рд╛ рдлрдХреНрдд рдиреЗрдордХрд╛ keyword match рдкреБрд░реЗрд╕рд╛ рдЕрд╕рддрд╛рдирд╛ model-embedding рдЪрд╛ рдЦрд░реНрдЪ рднрд░рдгреЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 vectordb/demo.py # re-read the ЁЯШм section knowing WHY now
python3 -c "
import sys; sys.path.insert(0,'vectordb')
from vectordb import embed, cosine
print('students vs student :', round(cosine(embed('students'), embed('student')),2))
print('students vs pupils :', round(cosine(embed('students'), embed('pupils')),2))
"
# even the plural is a different word to a hash! (real embedders handle both)
тПня╕П рдкреБрдвреЗ
рджреЛрди рдЬрд╛рдЧрд╛ тАФ рддреНрдпрд╛ рдиреЗрдордХреНрдпрд╛ рдХрд┐рддреА рдЬрд╡рд│ рдЖрд╣реЗрдд? Similarity рдЪреЗ рдЧрдгрд┐рдд: cosine, dot, distance, рдЖрдгрд┐ рдХрдзреА рдХреЛрдгрддреЗ рд╡рд╛рдкрд░рд╛рдпрдЪреЗ.
git checkout lesson-03-similarity