Podobieństwo wektorów, czyli jak działają bazy wektorowe
W dobie sztucznej inteligencji i ogromnych zbiorów danych bardzo duże znaczenie zyskały bazy wektorowe. Pozwalają na indeksowanie danych za pomocą wektorów, co umożliwia szybkie wyszukiwanie podobnych elementów. Tylko jak to wygląda z technicznego punktu widzenia? W jaki sposób określamy podobieństwo wektorów? Jak to możliwe, że jesteśmy w stanie zrobić to tak szybko, nawet jeśli danych jest mnóstwo? Przyjrzyjmy się temu bliżej.
Wektory
Zanim przejdziemy do podobieństwa wektorów, zróbmy małą przypominajkę z lekcji matematyki — czym w ogóle są wektory? Przejdźmy przez to bardzo szybko.
Wektor to obiekt matematyczny, który ma kierunek, zwrot i moduł (inaczej: długość, wielkość, magnituda). Często intuicyjnie przedstawiany jest jako strzałka w przestrzeni od punktu A do punktu B. Najczęściej spotykamy się z tym, że wektory zaczynają się w punkcie zerowym układu, stąd np. wektor do punktu zapiszemy jako .
Co przydatne z naszego informatycznego punktu widzenia, wektory od punktu zerowego utożsamia się z krotkami, czyli uporządkowaną listą liczb. Przy czym pamiętajmy, żeby nie mylić pojęcia matematycznego wektora z wektorem jako strukturą danych, bo są to dwie różne rzeczy. O strukturze pisałem już w artykule Tablice i listy tablicowe.
(źródło: Krishnavedala, CC0, via Wikimedia Commons)
Teraz tylko warto dodać, że o ile w szkole na lekcjach matematyki czy fizyki spotykaliśmy się z wektorami dwuwymiarowymi lub trójwymiarowymi, to w rozpatrywanej przez nas dziedzinie sztucznej inteligencji wektory mogą mieć setki, a nawet tysiące wymiarów. Stąd też obliczenia będą nieco bardziej skomplikowane niż to, co możesz kojarzyć. Na pewno nie będziemy nic liczyć na kartce.
Co wektory mają wspólnego ze sztuczną inteligencją?
Zanim przejdę do meritum, od razu ostrzegam, że temat akapitu potraktuję bardzo pobieżnie, z dużą ilością uproszczeń, bo dokładne przedstawienie tematu przerosłoby cały ten artykuł.
Przede wszystkim, musimy wiedzieć, że za dużymi modelami językowymi (LLM, z ang. Large Language Models) nie stoi żadna magia, biologia, metafizyka czy cokolwiek takiego, tylko sieci neuronowe, które są narzędziem matematycznym. Przekazując dane do modelu, tekst po kolei jest przetwarzany na jego reprezentację w przestrzeni. Każde kolejne słowo, zdanie, akapit, a nawet cały dokument jest reprezentowany jako wektor. Model nie rozumie naszych danych, a jedynie znajduje otoczenie podobnych pojęć i możliwych następnych słów do napisania. Na przykład, słowa "pies" i "kot" mogą mieć wektory, które są blisko siebie w przestrzeni wektorowej, co oznacza, że model rozumie, że są semantycznie podobne jako kategoria zwierzęta. Model zwracając odpowiedź, przechodzi po przestrzeni wektorowej, szukając punktów, które są blisko siebie, aby znaleźć najbardziej odpowiednie słowa do wygenerowania odpowiedzi.
Jednak modele językowe nie muszą zwrócić słownej odpowiedzi na nasze pytanie. Możemy skorzystać z modeli typu embedding, które jako odpowiedź zwracają wektor opisujący dane wejściowe. Właśnie to jest wykorzystywane w bazach wektorowych. Gdy zapisujemy w nich dane, najpierw odpytujemy model embeddingowy o reprezentację wektorową danego tekstu, a następnie zapisujemy ten wektor w bazie. Kiedy później chcemy znaleźć podobne dane, to ponownie odpytujemy model embeddingowy o reprezentację wektorową naszego zapytania i porównujemy ją z wektorami zapisanymi w bazie, aby znaleźć te, które są najbardziej podobne.
W tym miejscu należy tylko pamiętać, że różne modele embeddingowe mogą generować różne reprezentacje wektorowe dla tego samego tekstu, więc ważne jest, aby używać tego samego modelu zarówno do generowania wektorów dla danych, jak i do generowania wektora dla zapytania. Przykładowo, poniżej zobacz, jaki wektor zwróci model openai/text-embedding-3-small dla słowa „pies”:
[0.0359845,-0.03262313,0.016855555,-0.012649786,0.026972136,0.0029330777,-0.01852812,0.056087755,-0.013705288,-0.046182275,0.020525455,-0.033240195,0.0478386,-0.0023403727,-0.015126156,-0.015775695,0.034393128,-0.01929133,-0.034198266,0.00979993,0.067227356,0.019453714,0.00958883,-0.0032903245,0.007603674,0.03650413,0.018901605,-0.010408874,0.0148825785,0.015028725,0.034555513,-0.03275304,0.019989584,-0.03351625,0.020833986,-0.03112919,-0.0076970453,0.015044964,-0.0057727844,0.003006151,-0.010205893,-0.0014300023,-0.047968507,-0.020379309,0.036569085,-0.011107129,-0.02013573,-0.0033430997,0.03156763,0.030853136,-0.012666024,-0.006657782,-0.011594283,0.07528165,0.022701412,0.029164333,-0.03510762,0.051768314,0.028888278,-0.014598405,-0.007522482,0.002951346,0.018495644,0.015913723,0.015588953,-0.019778484,-0.030966805,0.030122403,-0.027410576,0.022360405,0.010473828,0.034230743,-0.059173066,0.032493223,0.043389253,0.0034953356,-0.03663404,0.03790064,0.04770869,-0.00023951777,0.020395547,0.03627679,0.011642999,-0.01843069,-0.02154848,-0.042609803,-0.02996002,0.004944621,0.0067836302,-0.024682509,0.0015588953,-0.0364067,-0.023074899,-0.0013833166,0.021045087,-0.0037592112,-0.029213049,-0.034295697,0.0087038325,0.0049486808,0.027296906,-0.017618764,-0.07255358,0.029261764,0.007282964,0.032801755,0.024179116,-0.005139483,0.0081801405,0.00041788747,-0.040921003,-0.01195153,-0.03403588,0.04676686,-0.008906813,0.013128822,0.014038177,-0.03187616,0.03588707,-0.013705288,-0.010628093,-0.0127634555,0.010132819,-0.0010727554,-0.026338834,0.017602526,-0.029018186,-0.06108921,0.034782853,-0.065993235,-0.05663986,-0.034393128,0.04780612,-0.011764788,0.005594161,0.059173066,0.00081852154,0.02101261,0.0052978084,0.006637484,0.0678769,-0.013835195,0.015109917,0.017180325,-0.010628093,-0.052710146,-0.04004412,0.027491769,-0.029862588,0.031275336,0.028709656,0.013080106,-0.009231583,0.016741887,-0.07287835,-0.04319439,0.033678632,-0.018105919,-0.08080274,-0.007831013,-0.03049589,-0.025802964,-0.026793513,-0.012795933,-0.022815082,0.029001947,-0.050469235,-0.0036698994,-0.05852353,0.001109292,-0.046377134,0.013648453,0.0055210874,0.06898112,-0.0368289,0.0028478256,0.03124286,-0.033873495,-0.08054292,-0.046344656,-0.027702868,0.08346585,0.0007119564,-0.016011154,0.016985463,0.0029026305,0.01789482,0.020525455,0.009613188,-0.007908146,0.02002206,0.023724439,0.03617936,0.0046888646,-0.010863552,-0.064499296,-0.000018284161,-0.0068485844,-0.029716441,0.020265639,-0.03630927,0.006089435,0.0008520134,0.019453714,0.0039824904,-0.015759457,-0.0033836958,0.0031705657,0.020314354,-0.00063279376,0.06401214,0.0022815082,-0.0004095145,0.024877371,0.00061452546,0.0062477603,0.055665553,0.050339326,0.012454924,0.06612314,-0.054561336,0.008785024,0.10568011,0.053034917,0.003134029,0.032249648,0.011277633,-0.018122157,-0.039589446,-0.02564058,-0.039264675,0.030853136,-0.032200933,-0.03617936,-0.012081439,0.05901068,-0.056217663,-0.031600107,0.007802596,-0.06761708,-0.027410576,-0.053684458,-0.010051627,-0.018869128,0.007924384,-0.009840527,-0.001971962,-0.013047629,-0.029521579,0.04124577,0.020054538,0.01250364,0.0039682817,-0.005549505,0.017699957,-0.0015040904,0.025039757,-0.005395239,0.051346116,-0.044525947,-0.015808173,0.018398212,-0.043908883,-0.052742623,-0.0482608,-0.029164333,0.0113588255,-0.030755704,0.024682509,-0.028904516,-0.016969224,0.037153672,0.031259097,-0.026403788,-0.05287253,0.037348535,0.01873922,0.0080015175,-0.029683964,0.04881291,-0.040109076,-0.0117485495,0.011935292,-0.033581205,-0.010490066,0.027410576,0.019469952,-0.032801755,0.032298364,0.007960921,-0.034068357,0.0073560374,0.02112628,0.0127634555,0.01217887,-0.002876243,0.0033857257,-0.054431427,-0.0278003,-0.068461485,0.025932873,-0.018885367,0.023773154,-0.0062315217,-0.025526911,0.0025778606,0.0010220101,-0.023854345,-0.0058742748,-0.017846104,-0.05030685,-0.008200439,-0.005366822,-0.040011644,0.0016888032,-0.05826371,-0.017212803,0.029521579,0.010725524,-0.039946694,-0.030560844,-0.02489361,0.0023099256,0.035854593,-0.04757878,-0.037413485,0.00092711643,-0.029813873,0.04072614,-0.012195108,-0.021369856,-0.039037336,-0.03510762,0.058328666,-0.007420991,-0.07911394,0.02122371,0.0056347568,-0.046279706,-0.01271474,-0.030122403,-0.024341501,-0.040888526,0.013908269,-0.021840774,0.03708872,0.012040842,0.03812798,-0.0006607037,0.027199475,0.03780321,0.050241895,-0.016230373,0.035822116,0.0045589567,-0.03627679,-0.01335616,-0.034198266,0.009199106,0.059108112,-0.009004245,-0.009751215,0.0024357738,0.001788264,0.018105919,0.013599738,-0.012974556,-0.046669427,-0.0059108115,0.011042175,-0.02315609,0.016660694,0.004242306,-0.0056834724,-0.0025798904,0.040303938,0.0029148094,0.060049947,-0.016287208,0.037998073,-0.02596535,0.033223957,0.025461957,-0.017001702,-0.0072220694,-0.025786726,0.022539027,-0.009312776,-0.02573801,-0.0013224223,0.045305394,-0.05979013,0.022912513,-0.047124106,0.048293278,-0.029407911,0.04718906,0.018625552,-0.074891925,0.01670941,-0.036763947,-0.013258729,-0.037835687,0.035627253,-0.0017182356,0.016287208,-0.001540627,0.021743342,-0.020769032,-0.019031513,0.028953232,-0.015580834,0.05387932,0.0491052,0.0061462694,-0.065863326,0.026972136,-0.011342587,-0.0057809036,0.0008154768,0.004729461,-0.07508679,-0.02359453,0.0053059277,0.0057687247,0.014038177,0.025299571,-0.0124955205,0.022441598,-0.058198757,0.026566174,0.016985463,-0.026582412,-0.004997396,0.014265516,-0.049365018,0.016952986,0.0044412278,-0.028384885,-0.020314354,-0.027962685,-0.033240195,0.01336428,-0.007981219,0.005098887,-0.0359845,0.015540238,-0.04673438,-0.011155845,-0.07820458,0.02122371,0.0031928937,-0.010944744,-0.017846104,0.07515174,0.026907183,0.0364067,0.012024604,-0.002415476,-0.02638755,0.057906464,0.02013573,0.018690506,0.024000492,0.023870584,0.023172328,-0.02143481,0.008841859,-0.0029046603,-0.021337379,-0.013754004,-0.04793603,-0.051638406,0.0075752567,-0.031616345,-0.0036272733,0.019161422,0.0058905133,0.011383183,-0.021694627,-0.015012487,-0.009337134,-0.0064710393,0.03663404,-0.013437353,0.07177414,0.049072724,0.014168085,-0.05959527,0.0045711356,-0.045207962,-0.0105550205,0.038225412,-0.02231169,0.021418571,0.014159965,-0.022344166,-0.04887786,-0.02854727,-0.007721403,0.018755458,-0.029050663,-0.04449347,0.029115617,0.011074652,0.016506428,-0.023464622,0.02013573,0.034912758,0.03449056,-0.0108229555,0.022668935,0.0025392943,-0.025267094,-0.004696984,0.015223587,-0.035724685,0.0016553113,-0.000056676145,-0.0059229904,0.018479405,-0.008216677,0.0035724684,-0.0400766,-0.012706621,-0.037770733,-0.009580711,-0.06014738,-0.029164333,-0.018917844,0.009743095,-0.027215714,-0.008236975,0.0009149376,-0.017115371,0.038095504,-0.0022267033,0.00927218,-0.014671478,0.024373978,-0.024731224,-0.009832407,-0.058361143,-0.010977221,-0.011131487,0.007498124,0.059302974,-0.031762492,-0.01843069,0.036796425,0.0024966684,-0.037673302,0.012609189,0.005074529,0.03449056,-0.023107376,-0.003318742,-0.030869374,0.03988174,0.008236975,-0.0014320321,-0.016303446,0.017976012,-0.012211346,-0.013762123,0.03858266,0.019258853,-0.04965731,0.03198983,-0.031583868,-0.045987412,0.015564595,-0.0041529946,-0.030820658,0.023237282,0.014574047,0.037965596,0.0068891807,-0.030024974,0.010831075,-0.0200383,0.0017354889,-0.0025230558,-0.0022997765,-0.011496853,0.0040007588,0.016019274,-0.030983044,0.010530663,0.0005125274,0.017829865,-0.01929133,-0.034912758,-0.010116581,0.012024604,-0.009028602,0.0024520124,0.0052612717,-0.047059152,-0.018917844,-0.039459538,-0.025689295,-0.014078774,0.031746253,-0.009361491,-0.0047132224,-0.021954441,-0.04663695,0.022782605,0.013908269,0.0076320916,0.03426322,0.01658762,0.0000750396,0.0006870912,0.00054551184,0.0058539766,-0.030853136,-0.0076117935,-0.02123995,-0.027459292,0.010514424,0.00091189286,0.0060326,-0.017505094,0.021694627,-0.004286962,-0.038322844,-0.023838107,0.0071733543,0.037251104,-0.017066656,-0.009101675,0.015848769,0.010798598,-0.00051658705,-0.012097677,-0.03627679,0.004936502,-0.004209829,0.01852812,0.009678141,-0.0009738021,-0.016871793,0.017261518,-0.03143772,0.006377668,0.027881492,0.02262022,0.0084927315,0.008338466,0.011781027,0.030512128,-0.015247945,-0.011894695,-0.01735895,-0.04027146,-0.02242536,-0.0065441127,-0.013104464,-0.010051627,0.01260107,0.036893856,-0.048455663,0.05063162,0.013542903,0.012170751,-0.002316015,0.00037348532,-0.0036211838,0.019875916,0.07716532,0.037640825,-0.017586287,0.020525455,0.0023748796,0.0073722755,-0.031307813,-0.015597072,0.013242491,-0.013047629,0.0137783615,-0.049754743,-0.017001702,0.030171119,-0.025120948,-0.013339922,-0.010806717,0.005687532,0.006588768,-0.014671478,0.0018045024,0.025867919,-0.023870584,0.007948742,-0.060472146,-0.00894741,-0.020963894,-0.015012487,0.0040169973,0.0074494085,0.00034176954,0.03166506,-0.027540484,-0.0065968875,0.003779509,-0.009052959,0.025835441,-0.021191234,0.015483403,-0.009653784,0.029895065,-0.022750128,0.0034019642,-0.028514793,0.0140462965,-0.02390306,-0.010368277,0.03988174,-0.033451296,-0.006345191,0.024276547,-0.017618764,-0.0044899434,0.017846104,-0.03630927,-0.03708872,-0.016839316,-0.0046279705,-0.03705624,0.0020775122,0.0048715477,0.012186989,-0.008468374,0.03351625,-0.0017496976,-0.034945235,0.024601316,-0.043681547,-0.015182991,0.009621307,-0.013461711,-0.0132100135,-0.00041966356,-0.025283333,0.007701105,0.026842229,0.0073195007,-0.0009027587,-0.046344656,-0.035172574,0.015126156,0.012901482,-0.005472372,0.0046157916,-0.04511053,-0.037153672,-0.017164087,-0.021938203,0.01593808,0.02435774,0.010027269,-0.027378099,-0.024812417,0.023529576,-0.04923511,0.01142378,-0.040531278,-0.012430566,-0.0062437006,-0.025835441,-0.03132405,0.039394584,0.010936625,0.023302237,-0.0038343142,-0.022457836,-0.034523036,-0.013274968,0.031713776,0.003241609,-0.00013840778,-0.019031513,-0.007940623,0.020525455,-0.0141356075,0.028790848,-0.0017425932,-0.025413241,-0.012211346,0.009531995,0.010035388,-0.027865253,-0.03793312,0.03114543,-0.023951776,-0.0013853464,-0.072163865,-0.0023545814,0.014151846,0.028401123,0.03060956,-0.0026996494,0.01971353,0.045402825,-0.040985957,0.016985463,0.020720316,0.0063979663,-0.02305866,-0.008200439,0.040303938,-0.0033085928,0.0024520124,0.004031206,-0.026874706,-0.044525947,-0.004360035,0.044688333,0.000035045967,-0.02565682,-0.012909601,0.06141398,-0.033548728,0.027443053,-0.004912144,-0.02887204,0.0009058034,0.04676686,0.013445472,0.0054480145,0.014825744,0.021808296,-0.0006571515,-0.00045011073,0.01852812,0.0015873127,-0.03488028,0.012097677,-0.0068120477,0.0568672,-0.00061909255,0.020752793,-0.04299953,-0.013648453,-0.00883374,0.0048350114,0.019859677,-0.0316813,0.040141553,0.003598856,-0.022116827,-0.0037348534,0.025900396,0.01755381,-0.022279212,-0.02489361,-0.02508847,-0.012154512,-0.019632338,-0.011707953,-0.019989584,0.012950198,-0.0071368176,-0.03403588,-0.0026346955,0.029927542,0.0034669181,0.005366822,-0.015824411,0.027020851,-0.004286962,-0.037543394,-0.013445472,-0.008517089,-0.022392882,-0.019762246,0.009905481,-0.017099133,0.013762123,0.025721772,0.0048025344,-0.0039459537,0.0067592724,0.02564058,0.031210383,-0.005849917,0.029099379,-0.010149058,-0.011196441,0.023724439,-0.03673147,-0.010733644,-0.04277219,-0.0014919115,-0.004404691,-0.008533328,0.03426322,-0.0020105285,-0.010400754,-0.033029094,0.00796904,-0.0021576898,0.047871076,0.021499764,-0.029830111,0.018511882,-0.007908146,-0.029489102,0.0073641567,0.01411125,-0.054561336,0.024650032,0.012617309,0.000039200735,0.000059562284,-0.00053028826,-0.010027269,0.023399668,-0.013932627,0.027069567,0.008752547,-0.0076239724,-0.014338589,0.03114543,-0.00010941953,-0.0029614952,-0.009929839,0.001519314,0.008216677,0.013948865,0.009596949,0.0028620344,0.02359453,0.022360405,0.045760073,0.011115248,-0.0021901666,-0.016563263,0.0057606054,0.019193899,-0.018722981,-0.0015822381,-0.0060813157,0.001648207,0.018479405,-0.005301868,0.014768909,-0.0007424036,-0.011277633,0.027995162,-0.028384885,0.048000984,0.0003925148,0.0057240687,0.014030058,0.01195965,-0.009605069,0.020054538,0.018495644,-0.007047506,0.00613815,-0.038939904,0.010928506,-0.023675723,0.0060813157,0.03275304,-0.0028092593,0.011975888,0.049982082,-0.0118541,-0.010295205,0.030739468,0.023854345,0.03166506,-0.023318475,-0.011772907,0.016238492,-0.005549505,-0.006117852,-0.0013346011,0.060926825,-0.026436266,0.019908393,-0.0094183255,0.029164333,0.030885613,0.029375434,-0.032655608,-0.010863552,0.016871793,0.018511882,-0.005987944,0.02682599,-0.022587743,-0.026761036,0.019762246,-0.010465709,0.016555144,0.035075143,-0.009361491,-0.03975183,0.014955652,0.024585078,-0.042902097,0.028742133,0.010246489,-0.014785147,-0.014078774,0.01908023,0.0200383,-0.015913723,0.022051873,0.0051029464,0.014168085,-0.04105091,0.013242491,0.012471163,-0.031762492,-0.03166506,0.015069321,-0.002293687,-0.017683718,0.025380764,0.011772907,-0.011919053,0.0083141085,-0.02630636,0.061349027,0.0021373916,0.014371066,0.035172574,-0.00089463947,0.01088791,0.042090174,-0.009255941,-0.041862834,0.00037069435,0.0024844895,-0.0033552786,-0.018722981,0.040336415,-0.040109076,0.016839316,-0.047156584,0.02242536,0.0029006007,0.03263937,0.02338343,-0.020931417,-0.009710618,-0.022685174,-0.0054886104,-0.030560844,-0.021824535,0.017456379,-0.0131207025,-0.006645603,0.0032923543,-0.008435897,0.012130154,0.02273389,0.003761241,-0.0009047885,0.020200685,-0.0013548993,-0.01873922,-0.0042707236,0.00026895004,-0.006807988,-0.009832407,-0.020915179,0.015597072,0.008573924,-0.041310724,-0.028108831,-0.016660694,-0.027524246,-0.013794599,-0.020557933,0.040206507,0.0005947348,0.0000016730088,-0.01551588,-0.046571996,0.011196441,0.019404998,-0.01507744,-0.023415906,-0.009337134,-0.0327368,-0.007571197,-0.0096862605,0.031535152,0.018300781,-0.0039378344,-0.028238738,0.031859923,0.02132114,-0.011163964,0.03060956,-0.002230763,-0.030983044,-0.0043762736,0.031405244,0.00017139221,-0.008793144,0.0079731,-0.018170873,0.026907183,-0.015629549,0.023675723,0.008801263,-0.0013833166,-0.020882702,-0.005732188,-0.03112919,-0.032541938,-0.0030041211,0.002650934,-0.012032723,-0.009864884,0.037023764,0.022035634,-0.013648453,0.027637914,-0.020606648,0.023984253,-0.014233039,-0.0011833801,-0.018381974,-0.0045954934,0.00786755,-0.0039561028,-0.0029757037,0.0039824904,-0.03080442,0.0022246735,-0.002833617,0.046377134,0.0025595925,0.01831702,-0.013007033,0.012933959,0.006540053,-0.018674267,-0.006410145,0.13770242,0.031859923,-0.013624095,0.015353495,0.0019516639,0.011967769,0.016693171,-0.021207472,0.0146146435,-0.0071165194,0.009385848,-0.023237282,-0.0055982205,-0.0069094785,0.0062558795,0.0073235603,-0.004794415,-0.02273389,-0.015142394,-0.03488028,-0.003606975,0.002283538,0.009329014,-0.0011914994,0.0013000943,-0.018560598,-0.013875792,-0.06917598,-0.0013173477,0.00061706273,0.033873495,-0.013331803,0.005687532,0.015053083,-0.0037226744,0.0062112235,-0.006552232,-0.039167244,-0.02682599,0.009929839,0.009280299,0.020070776,0.0118378615,-0.0004260067,0.036796425,0.032720562,0.017147848,-0.004481824,-0.040109076,0.01571886,-0.044525947,0.032152217,-0.004786296,0.0018075472,-0.0037774793,-0.017862342,-0.03708872,-0.016392758,0.03897238,-0.0036678696,-0.03390597,-0.007120579,-0.0058783344,-0.0005226765,0.027930208,-0.0012361553,0.030447174,-0.0134779485,0.047221538,-0.00915851,0.00528157,0.043908883,-0.029943781,-0.040985957,0.028206263,-0.0070678038,0.027491769,0.011025936,0.0034628585,-0.033581205,0.002983823,0.016823078,0.022490313,-0.011984007,-0.023221044,-0.009353371,-0.033841018,-0.011699834,-0.01142378,-0.004891846,0.0035582597,0.011772907,0.008931171,0.016936747,-0.011115248,0.010384516,0.0010357114,0.0015274332,0.013445472,-0.016538905,-0.0072342483,0.001799428,0.019015275,0.0027097985,0.005939229,-0.00581744,-0.0057240687,0.0064913374,0.016758125,-0.029781396,0.04027146,0.04319439,-0.0027443052,-0.019810962,0.010360158,0.024520123,-0.012755336,-0.019469952,0.013924507,0.016246611,-0.006958194,-0.006763332,-0.022360405,-0.0022368524,-0.0037531217,0.017488856,0.023627007,0.010522543,0.01659574,-0.010928506,-0.01648207,-0.027085805,-0.01659574,0.017911058,-0.012950198,0.027280668,-0.015394091,-0.03341882,0.0069094785,-0.017472617,0.0026083079,0.013648453,-0.021824535,-0.004079921,-0.02132114,-0.031924877,0.018755458,-0.00538712,-0.01357538,-0.0080461735,0.021921964,-0.007445349,0.0028092593,-0.0065238145,0.02089894,0.031924877,-0.0120164845,0.0022916573,0.0046807453,-0.011448137,-0.017911058,-0.004437168,0.01852812,-0.03250946,0.032379553,0.008346586,-0.030853136,-0.018495644,-0.017618764,0.012113916,0.012917721,-0.037316058,0.009499518,0.011919053,0.0048025344,0.04264228,-0.022019396,0.031389005,0.014460377,0.0045102416,-0.0109122675,0.0056591146,0.0200383,-0.008963648,-0.009337134,0.024487646,-0.023935538,-0.01649019,-0.01389203,-0.037640825,-0.0069622537,-0.000040786526,0.007745761,0.012219465,0.026062781,0.02961901,-0.011042175,-0.039264675,0.005626638,0.029895065,-0.042577326,0.005204437,-0.006592828,0.033483773,-0.027946446,-0.0008951469,0.030041212,0.002035901,-0.031372767,-0.0021759581,0.020882702,-0.004254485,-0.011561807,0.029927542,-0.0064060856,0.008744428,-0.0007292098,0.027978923,0.0026773214,0.0127634555,0.02693966,-0.02747553,-0.012527997,-0.008115186,-0.034295697,-0.034068357,0.004242306,-0.0023444323,-0.0127634555,-0.04481824,0.025949111,-0.005005515,0.026566174,-0.04296705,-0.0077051646,0.013883911,0.025608104,-0.00031614315,0.013859553,-0.005870215,-0.013128822,-0.045987412,-0.008955529,0.0014168085,-0.0054683127,-0.017797388,0.022116827,-0.0048025344,0.017261518,0.016514547,0.024958564,-0.00023913718,-0.018609313,-0.021645911,0.012576712,-0.02296123,0.009621307,-0.012617309,-0.006101614,-0.041278247,-0.010733644,0.02240912,0.02424407,-0.018885367,0.03380854,0.0019963197,-0.029034425,-0.005452074,-0.02166215,-0.028271215,-0.025754249,0.0021231829,-0.023968015,0.031177906,-0.0040027886,-0.00080126815,0.0013538843,0.027166998,0.027637914,0.021792058,0.036666516,-0.0031360588,0.0012818261,0.009726857,-0.0081842,-0.0029066901,-0.007502184,0.055860415,0.03565973,0.024974803,0.002628606,-0.003716585,-0.0017588318,-0.010457589,0.0011397392,-0.010790478,0.0027727226,-0.013648453,-0.0047091627,0.027832776,0.028173786,-0.002498698,0.025055993,0.004891846,0.012836529,0.0061990446,0.0039378344,0.02197068,-0.0033430997,0.013607857,0.037445962,0.0070921616,0.0041895313,-0.01195153,0.018040966,-0.009304657,0.027637914,0.018722981,0.01315318,-0.0013406905,0.060504623,-0.017635003,-0.008817501,0.000048937487,-0.016871793,-0.00060437643,0.024373978,-0.0041205175,0.027540484,-0.044525947,0.015800053,-0.011919053,-0.0037348534,0.023123614,-0.00018699639,-0.035075143,-0.040336415,0.00808271,-0.0072301887,-0.016839316,-0.024211593,-0.01066057,-0.007388514,-0.01906399,-0.0038079266,0.025169663,0.041635495,0.03501019,0.017683718,0.014143727,0.02112628,-0.006763332,-0.015036845,0.0011712012,-0.009499518,-0.024861133,0.040303938,-0.04848814,-0.016506428,-0.01195965,-0.021191234,0.012138274,-0.0013437353,-0.0020592439,0.013193775,0.020525455,-0.003962192,0.0015558506,-0.0074940645,-0.001055502,-0.037998073,-0.0051638405,-0.034295697,-0.029050663,-0.0105550205,-0.006763332,-0.0044655856,-0.02736186,-0.0030081808,0.00883374,-0.007936563,-0.0003501425,-0.0134779485,0.030479651,0.021418571,0.0016542964,-0.010749882,-0.006937896,-0.0022064052]
Powyższy wektor ma 1532 wymiary. Natomiast poniżej zobacz wektor dla tego samego słowa, ale wygenerowany przez mistralai/mistral-embed-2312:
[-0.038543701171875,0.0131683349609375,0.04364013671875,0.0164642333984375,-0.0102386474609375,0.027069091796875,-0.0137176513671875,0.0020732879638671875,0.00975799560546875,0.0200042724609375,-0.06170654296875,0.0168304443359375,-0.06243896484375,-0.04534912109375,-0.00847625732421875,0.038055419921875,0.0011053085327148438,0.035369873046875,-0.038299560546875,0.023773193359375,-0.0109710693359375,0.0196380615234375,-0.05169677734375,0.023162841796875,-0.025238037109375,-0.0197601318359375,-0.0176849365234375,-0.0163421630859375,0.0016841888427734375,-0.022186279296875,0.0187835693359375,0.0137786865234375,0.0160980224609375,0.004451751708984375,0.039031982421875,0.00655364990234375,-0.0004591941833496094,-0.022430419921875,0.04388427734375,0.030975341796875,-0.004817962646484375,0.00667572021484375,0.0121917724609375,-0.0189056396484375,-0.026214599609375,-0.035858154296875,0.00572967529296875,-0.0144500732421875,-0.028533935546875,-0.021087646484375,-0.027191162109375,0.039031982421875,0.0178070068359375,-0.00933074951171875,-0.0007734298706054688,0.04632568359375,0.00621795654296875,-0.030242919921875,-0.025726318359375,0.0828857421875,-0.06683349609375,-0.0123138427734375,-0.0176849365234375,0.027923583984375,0.0144500732421875,0.022430419921875,-0.0008459091186523438,-0.040008544921875,-0.0112762451171875,-0.002758026123046875,0.00872039794921875,0.04095458984375,-0.0116424560546875,0.0145111083984375,-0.028900146484375,-0.04095458984375,0.026824951171875,0.024261474609375,0.026947021484375,0.0197601318359375,-0.032684326171875,0.00914764404296875,0.020355224609375,-0.004146575927734375,-0.04754638671875,0.0137176513671875,-0.003337860107421875,0.020477294921875,0.0200042724609375,-0.0168304443359375,0.04071044921875,0.0169525146484375,0.01012420654296875,-0.04119873046875,0.05389404296875,0.035369873046875,-0.0102996826171875,-0.00673675537109375,-0.00963592529296875,-0.0011053085327148438,0.020721435546875,-0.00688934326171875,0.07513427734375,-0.027191162109375,0.04534912109375,-0.004451751708984375,0.04315185546875,-0.00988006591796875,-0.0192718505859375,-0.0019283294677734375,-0.0916748046875,-0.004055023193359375,0.0132293701171875,-0.029998779296875,0.003490447998046875,-0.0129852294921875,-0.04510498046875,0.0007505416870117188,-0.04290771484375,-0.004024505615234375,0.04583740234375,0.06878662109375,-0.023529052734375,-0.0149993896484375,-0.04486083984375,-0.022552490234375,0.00508880615234375,0.034881591796875,-0.0129241943359375,-0.040008544921875,-0.020721435546875,-0.030487060546875,-0.027313232421875,-0.030120849609375,-0.0175628662109375,-0.04608154296875,0.00624847412109375,0.00716400146484375,0.021453857421875,-0.0153045654296875,-0.024993896484375,-0.025115966796875,-0.05706787109375,-0.0164642333984375,-0.05242919921875,-0.038055419921875,-0.037322998046875,0.033905029296875,-0.04486083984375,-0.021209716796875,-0.0181732177734375,0.034637451171875,0.05023193359375,0.00756072998046875,0.00859832763671875,-0.036590576171875,0.0005602836608886719,-0.0142669677734375,0.00756072998046875,-0.021820068359375,0.00618743896484375,-0.031707763671875,-0.002712249755859375,0.04852294921875,-0.04974365234375,-0.029144287109375,-0.0121917724609375,0.04339599609375,-0.00945281982421875,0.029754638671875,0.030120849609375,-0.036590576171875,0.04974365234375,0.06683349609375,-0.00780487060546875,0.04217529296875,0.00841522216796875,0.027923583984375,0.04534912109375,0.04290771484375,0.034881591796875,-0.0003867149353027344,0.029144287109375,0.0138397216796875,0.033660888671875,-0.00005930662155151367,-0.04290771484375,0.0137786865234375,0.00841522216796875,0.04486083984375,-0.0155487060546875,-0.0165863037109375,-0.05169677734375,0.00765228271484375,0.0201263427734375,0.07318115234375,0.05584716796875,-0.0149383544921875,0.023773193359375,0.00817108154296875,0.00030493736267089844,0.027923583984375,-0.021942138671875,0.0828857421875,0.0173187255859375,0.0186614990234375,-0.0124359130859375,0.033660888671875,0.00829315185546875,-0.05731201171875,-0.0190277099609375,-0.0019969940185546875,0.04534912109375,-0.06585693359375,-0.035125732421875,0.0013103485107421875,0.002956390380859375,-0.04193115234375,0.00859832763671875,-0.033905029296875,0.003551483154296875,-0.023773193359375,-0.00945281982421875,0.034149169921875,-0.027435302734375,0.06781005859375,0.037811279296875,-0.024261474609375,-0.0018520355224609375,0.00878143310546875,0.002895355224609375,-0.0189056396484375,-0.0011053085327148438,0.030364990234375,0.00695037841796875,0.0104217529296875,0.034881591796875,0.00933074951171875,0.026580810546875,0.032440185546875,-0.021942138671875,0.00859832763671875,-0.0115203857421875,0.05828857421875,0.0024852752685546875,0.0118255615234375,-0.00521087646484375,-0.00753021240234375,0.05194091796875,0.04095458984375,-0.05316162109375,-0.00878143310546875,-0.0192718505859375,0.00792694091796875,-0.035614013671875,-0.00749969482421875,-0.0187835693359375,-0.031219482421875,0.04144287109375,-0.04071044921875,-0.031219482421875,-0.030609130859375,0.021331787109375,-0.0023021697998046875,0.0145111083984375,0.026336669921875,-0.1087646484375,-0.020721435546875,0.04388427734375,-0.0185394287109375,0.0013942718505859375,-0.0139007568359375,0.0149993896484375,0.0117645263671875,0.032440185546875,-0.034637451171875,0.0149383544921875,0.00673675537109375,-0.00615692138671875,0.0165863037109375,-0.04412841796875,-0.0019512176513671875,0.003154754638671875,0.033416748046875,-0.04486083984375,-0.020965576171875,-0.037811279296875,0.0185394287109375,-0.0117034912109375,-0.06976318359375,0.0169525146484375,0.004360198974609375,0.0021648406982421875,-0.0107879638671875,-0.00920867919921875,-0.034881591796875,0.0181732177734375,0.025360107421875,0.0175628662109375,0.0138397216796875,0.028656005859375,-0.00988006591796875,-0.028656005859375,-0.0151824951171875,0.0112152099609375,-0.04290771484375,-0.029632568359375,-0.025360107421875,-0.029144287109375,-0.05340576171875,0.0024242401123046875,-0.00588226318359375,-0.04071044921875,0.025482177734375,0.028167724609375,-0.0181732177734375,-0.039276123046875,-0.0102386474609375,0.023040771484375,-0.00539398193359375,-0.04461669921875,0.07171630859375,0.05511474609375,0.00853729248046875,0.0140228271484375,-0.00621795654296875,0.029754638671875,-0.026336669921875,-0.00691986083984375,-0.022918701171875,0.039764404296875,-0.0114593505859375,0.04315185546875,0.0156097412109375,0.025726318359375,0.0107269287109375,0.04925537109375,0.0174407958984375,0.0155487060546875,0.0021343231201171875,-0.0150604248046875,0.00597381591796875,0.038299560546875,0.0115203857421875,-0.020965576171875,-0.027069091796875,-0.0144500732421875,0.0169525146484375,-0.025238037109375,0.020599365234375,0.04974365234375,-0.0155487060546875,-0.022796630859375,0.0120697021484375,-0.0106658935546875,0.06146240234375,-0.00890350341796875,-0.04705810546875,0.0178070068359375,0.035614013671875,-0.035858154296875,0.0003466606140136719,0.05877685546875,0.04632568359375,0.05950927734375,-0.0022106170654296875,-0.023773193359375,0.027801513671875,0.00524139404296875,-0.022064208984375,0.00582122802734375,-0.00920867919921875,0.06829833984375,-0.004604339599609375,-0.00829315185546875,-0.0017452239990234375,0.0200042724609375,0.00530242919921875,0.0148162841796875,0.0009984970092773438,-0.05047607421875,0.030853271484375,0.035125732421875,0.0117034912109375,-0.025115966796875,-0.035369873046875,-0.04217529296875,0.030609130859375,-0.0132293701171875,0.05096435546875,0.036834716796875,0.05780029296875,-0.0165863037109375,-0.031219482421875,-0.0186614990234375,0.00740814208984375,-0.037567138671875,-0.0006399154663085938,0.025360107421875,-0.00994110107421875,0.0105438232421875,-0.0151824951171875,0.039764404296875,-0.0134124755859375,0.00765228271484375,0.020721435546875,-0.00670623779296875,0.06048583984375,-0.0189056396484375,-0.039764404296875,0.0196380615234375,0.022186279296875,0.00914764404296875,0.0160980224609375,0.0118255615234375,-0.021697998046875,-0.05340576171875,0.00004118680953979492,-0.0181732177734375,-0.030975341796875,0.030975341796875,-0.00539398193359375,-0.06439208984375,0.0021800994873046875,0.0170745849609375,-0.06292724609375,0.021820068359375,0.003612518310546875,-0.05072021484375,-0.0009908676147460938,-0.06195068359375,-0.06634521484375,0.06219482421875,0.0176849365234375,-0.05828857421875,0.0143890380859375,-0.0003428459167480469,-0.06439208984375,0.0113983154296875,-0.025604248046875,-0.04168701171875,-0.0111541748046875,-0.0141448974609375,0.05999755859375,-0.027313232421875,0.027801513671875,0.029022216796875,0.0201263427734375,-0.0126190185546875,-0.05145263671875,0.039520263671875,0.003536224365234375,-0.036346435546875,0.0202484130859375,-0.00890350341796875,0.0005946159362792969,-0.028289794921875,-0.024871826171875,-0.0159759521484375,0.026336669921875,0.04754638671875,-0.0132293701171875,-0.026092529296875,-0.04583740234375,-0.024993896484375,0.06536865234375,0.0169525146484375,0.05902099609375,-0.00560760498046875,0.003902435302734375,-0.00768280029296875,-0.026580810546875,0.0016155242919921875,0.00865936279296875,0.032928466796875,-0.004634857177734375,0.04315185546875,-0.0124969482421875,0.0192718505859375,-0.0120086669921875,0.020721435546875,-0.0024852752685546875,-0.0132293701171875,0.004695892333984375,0.04095458984375,0.038543701171875,-0.05096435546875,-0.030975341796875,0.038543701171875,0.0147552490234375,0.027435302734375,-0.0198822021484375,-0.003932952880859375,-0.0005869865417480469,-0.06585693359375,-0.032440185546875,-0.003566741943359375,-0.037322998046875,-0.024017333984375,0.00829315185546875,0.00609588623046875,-0.021697998046875,-0.003673553466796875,-0.0118865966796875,0.0195159912109375,-0.0022106170654296875,-0.024505615234375,-0.0110321044921875,0.01000213623046875,-0.0137176513671875,-0.05902099609375,-0.04168701171875,-0.0152435302734375,-0.00682830810546875,0.0106048583984375,-0.004817962646484375,-0.0003714561462402344,0.022552490234375,-0.031707763671875,-0.05413818359375,-0.0105438232421875,-0.037078857421875,-0.04901123046875,-0.022308349609375,0.038055419921875,0.0167083740234375,0.004024505615234375,0.031951904296875,-0.024017333984375,-0.04583740234375,0.039276123046875,0.0146331787109375,-0.0198822021484375,0.0151214599609375,0.04193115234375,-0.038787841796875,0.034637451171875,0.004695892333984375,-0.04779052734375,-0.037322998046875,-0.04388427734375,0.00749969482421875,-0.004604339599609375,-0.028778076171875,-0.00762176513671875,-0.004970550537109375,-0.0994873046875,0.025360107421875,0.030731201171875,-0.0016002655029296875,-0.00695037841796875,-0.04193115234375,-0.05609130859375,-0.06390380859375,-0.020355224609375,-0.022430419921875,-0.00963592529296875,-0.0162200927734375,-0.026580810546875,-0.002742767333984375,-0.0110321044921875,-0.04901123046875,0.05316162109375,0.00557708740234375,-0.00859832763671875,-0.07611083984375,-0.021575927734375,0.0130462646484375,-0.04656982421875,-0.05584716796875,-0.037322998046875,0.06292724609375,-0.036590576171875,-0.00716400146484375,0.031951904296875,0.0023784637451171875,-0.027923583984375,0.003200531005859375,-0.0015773773193359375,0.021942138671875,0.0151824951171875,0.026947021484375,-0.004177093505859375,-0.033416748046875,0.028533935546875,0.05438232421875,0.020355224609375,-0.003398895263671875,-0.028167724609375,0.0173187255859375,-0.003368377685546875,0.026458740234375,-0.021820068359375,0.037078857421875,-0.04412841796875,0.0171966552734375,-0.00865936279296875,0.031463623046875,-0.00563812255859375,0.0872802734375,0.04852294921875,0.0150604248046875,0.04437255859375,0.07269287109375,0.039276123046875,-0.0185394287109375,-0.0129852294921875,-0.0160980224609375,0.00713348388671875,-0.05999755859375,-0.04339599609375,0.04827880859375,0.027557373046875,-0.04290771484375,-0.036834716796875,-0.00640106201171875,-0.00817108154296875,0.00624847412109375,0.024749755859375,0.0115203857421875,0.07025146484375,-0.038055419921875,-0.021575927734375,0.029510498046875,0.025970458984375,0.0175628662109375,0.06683349609375,0.00902557373046875,-0.035125732421875,0.028411865234375,0.024261474609375,0.0112152099609375,-0.0154266357421875,0.06439208984375,0.032684326171875,-0.0116424560546875,0.0138397216796875,0.024871826171875,-0.022186279296875,0.022796630859375,0.023406982421875,0.00731658935546875,0.027923583984375,0.0201263427734375,-0.0016918182373046875,-0.026947021484375,0.0146331787109375,-0.028900146484375,0.00768280029296875,-0.0115814208984375,0.0106048583984375,-0.0107879638671875,-0.00539398193359375,0.00951385498046875,-0.00817108154296875,0.0190277099609375,0.029632568359375,-0.0169525146484375,0.00914764404296875,0.0129241943359375,-0.037811279296875,-0.039520263671875,0.0200042724609375,0.0118865966796875,-0.0906982421875,-0.05535888671875,-0.032196044921875,0.0921630859375,-0.039520263671875,-0.04510498046875,-0.05755615234375,0.034637451171875,-0.00545501708984375,-0.030487060546875,-0.031707763671875,-0.0176849365234375,-0.031707763671875,0.0131072998046875,-0.036590576171875,-0.0181732177734375,0.0187835693359375,-0.039520263671875,-0.0117645263671875,-0.024017333984375,-0.04290771484375,-0.00865936279296875,-0.026092529296875,-0.028533935546875,-0.0123138427734375,-0.00920867919921875,0.0116424560546875,0.024871826171875,0.0164642333984375,0.00994110107421875,0.05242919921875,-0.004421234130859375,-0.00765228271484375,0.0163421630859375,-0.05828857421875,-0.004055023193359375,0.00624847412109375,0.0186614990234375,-0.024749755859375,-0.003185272216796875,0.0119476318359375,-0.04827880859375,0.004390716552734375,0.0149993896484375,0.021209716796875,-0.029754638671875,0.0122528076171875,-0.003154754638671875,0.021209716796875,0.1004638671875,0.020355224609375,0.0004324913024902344,-0.0128631591796875,-0.038299560546875,-0.00853729248046875,-0.022186279296875,0.033660888671875,-0.05609130859375,0.04681396484375,0.040008544921875,-0.039520263671875,0.035858154296875,-0.06292724609375,-0.020965576171875,0.036346435546875,0.002666473388671875,0.0189056396484375,-0.035369873046875,-0.032196044921875,-0.0141448974609375,-0.00685882568359375,0.0131072998046875,-0.0134735107421875,-0.0134124755859375,-0.029022216796875,0.0139007568359375,-0.05975341796875,0.003795623779296875,0.003322601318359375,0.0150604248046875,0.029754638671875,-0.026702880859375,0.00685882568359375,-0.0015850067138671875,-0.0187835693359375,0.032196044921875,-0.0195159912109375,0.05169677734375,-0.05755615234375,-0.0200042724609375,-0.0118255615234375,0.032928466796875,0.027923583984375,0.040496826171875,0.0148162841796875,-0.0120697021484375,0.003505706787109375,-0.003398895263671875,0.027923583984375,0.021697998046875,-0.003856658935546875,-0.07073974609375,-0.038543701171875,-0.04754638671875,0.04339599609375,-0.00817108154296875,0.037567138671875,0.00536346435546875,-0.028656005859375,-0.06488037109375,0.06341552734375,-0.004604339599609375,0.025238037109375,0.00511932373046875,-0.00737762451171875,-0.0887451171875,-0.05291748046875,-0.00829315185546875,-0.0196380615234375,0.00847625732421875,0.00734710693359375,-0.021820068359375,-0.0143890380859375,0.0011205673217773438,-0.0136566162109375,0.0200042724609375,0.06878662109375,-0.0186614990234375,-0.025604248046875,0.06170654296875,-0.040496826171875,0.028778076171875,-0.0124969482421875,0.04876708984375,-0.0126800537109375,-0.0145111083984375,-0.035369873046875,0.022552490234375,-0.0135955810546875,0.0018749237060546875,-0.0178070068359375,-0.0151824951171875,-0.022430419921875,-0.00774383544921875,0.0018978118896484375,0.00731658935546875,0.00865936279296875,0.036346435546875,0.0003943443298339844,0.00530242919921875,-0.04290771484375,-0.05706787109375,-0.022064208984375,-0.00022482872009277344,-0.035858154296875,-0.0005488395690917969,-0.00884246826171875,0.05364990234375,0.0168304443359375,0.05706787109375,0.038543701171875,-0.0176849365234375,-0.024627685546875,-0.0019817352294921875,-0.05072021484375,0.032684326171875,-0.023040771484375,-0.04803466796875,0.022186279296875,-0.025360107421875,0.00823211669921875,0.0007619857788085938,-0.00920867919921875,-0.033416748046875,0.00740814208984375,-0.00600433349609375,-0.026580810546875,-0.029754638671875,0.0168304443359375,-0.0148162841796875,-0.0165863037109375,0.0176849365234375,0.003795623779296875,-0.04486083984375,0.022918701171875,-0.05340576171875,0.0025157928466796875,-0.0135955810546875,-0.00539398193359375,-0.031219482421875,0.04144287109375,0.004756927490234375,0.0131683349609375,-0.027801513671875,0.04095458984375,-0.025238037109375,0.027069091796875,-0.0151824951171875,0.029510498046875,0.05487060546875,0.023040771484375,0.00597381591796875,-0.037078857421875,0.00746917724609375,-0.05023193359375,0.00939178466796875,-0.020843505859375,-0.06927490234375,-0.0174407958984375,0.04266357421875,0.05682373046875,0.034637451171875,0.00713348388671875,0.05023193359375,0.024871826171875,0.022918701171875,0.027069091796875,-0.05316162109375,0.0158538818359375,-0.00777435302734375,0.0169525146484375,-0.07464599609375,0.030609130859375,0.04119873046875,-0.022186279296875,-0.0016078948974609375,0.0149993896484375,0.04876708984375,0.039764404296875,0.05804443359375,0.0187835693359375,-0.05072021484375,0.023406982421875,0.020721435546875,0.020965576171875,0.032928466796875,-0.00649261474609375,-0.04168701171875,0.08001708984375,-0.05218505859375,0.0119476318359375,0.004604339599609375,0.05609130859375,-0.028411865234375,-0.0195159912109375,-0.00865936279296875,0.037567138671875,0.033172607421875,-0.06243896484375,0.05999755859375,-0.0113983154296875,0.00798797607421875,0.0021800994873046875,0.0101776123046875,-0.0178070068359375,0.034637451171875,0.032684326171875,-0.00014770030975341797,-0.0022106170654296875,0.029998779296875,0.0192718505859375,0.031707763671875,-0.036102294921875,0.003429412841796875,-0.06390380859375,0.026214599609375,-0.0021648406982421875,0.026947021484375,0.0020580291748046875,-0.0171966552734375,-0.035125732421875,-0.004207611083984375,0.00658416748046875,0.04730224609375,0.0134124755859375,0.0019512176513671875,0.0014171600341796875,0.029876708984375,0.025848388671875,-0.0162200927734375,0.04998779296875,-0.04827880859375,0.003124237060546875,-0.029876708984375,-0.032928466796875,0.030242919921875,-0.032196044921875,0.00759124755859375,-0.020843505859375,0.023529052734375,-0.0025157928466796875,-0.022430419921875,-0.032684326171875,0.038055419921875,-0.04608154296875,0.026214599609375,-0.0133514404296875,0.028900146484375,-0.00951385498046875,-0.05096435546875,0.06170654296875,-0.0126800537109375,-0.021087646484375,0.0010824203491210938,0.01006317138671875,0.05364990234375,0.020721435546875,-0.0101776123046875,-0.024261474609375,0.040496826171875,0.04998779296875,0.05511474609375,-0.0106658935546875,-0.039276123046875,0.00508880615234375,-0.0015850067138671875,-0.0193939208984375,0.038055419921875,0.034881591796875,0.034637451171875,0.0175628662109375,-0.0120086669921875,0.0131072998046875,-0.08099365234375,0.021820068359375,0.029388427734375,-0.0011968612670898438,-0.0016231536865234375,-0.0182952880859375,0.022430419921875,0.0115814208984375,0.05828857421875,-0.028045654296875,0.00533294677734375,0.00753021240234375,0.0132293701171875,-0.04144287109375,0.028045654296875,0.0128631591796875,0.04486083984375,0.0018520355224609375,0.039031982421875,0.027923583984375,-0.002620697021484375,-0.04583740234375,-0.028411865234375,0.04803466796875,-0.0182952880859375,0.00643157958984375,-0.036834716796875,-0.0192718505859375,0.0198822021484375,0.027679443359375,0.00762176513671875,-0.032196044921875,0.0160980224609375,0.0181732177734375,0.00798797607421875,0.0148773193359375,0.0195159912109375]
Wektor ten ma 1024 wymiary. Już chociażby ze względu na inną liczbę wymiarów nie moglibyśmy ich ze sobą porównać. Jeszcze z innych przykładów, google/gemini-embedding-001 zwraca wektory mające 3072 wymiary, a qwen/qwen3-embedding-8b 4096.
Warto też dodać, że określanie położenia pojęcia w przestrzeni wielowymiarowej nie jest czymś zarezerwowanym tylko dla tekstu czy modeli językowych. Wektory mogą reprezentować również obrazy czy dźwięki. Zresztą jeśli miałeś(-aś) kiedyś okazję uczyć się podstaw uczenia maszynowego, to na pewno spotkałeś(-aś) się z tym, że klasteryzacja danych określa ich położenie w przestrzeni, a klasyfikacja przypisuje etykiety na podstawie ich położenia. Reprezentacja w przestrzeni jest po prostu najwygodniejsza, biorąc pod uwagę fakt, że komputery operują na liczbach, a sztuczna inteligencja to nic innego jak bardzo zaawansowane narzędzie matematyczne/statystyczne.
Co to znaczy, że dwa wektory są podobne?
Załóżmy, że mamy już jakieś dane i wygenerowane wektory przez dowolny model. Chcielibyśmy jakoś wyszukiwać, czy dane są do siebie podobne, tylko co to w ogóle znaczy, że dwa wektory są podobne? Jak możemy to zmierzyć?
Otóż w tym celu używamy metryk podobieństwa wektorów, które wykorzystują cechy wektora — jego kierunek i długość. Następnie, zależnie od metryki, wykonywane są różne operacje matematyczne pozwalające określić, jak bardzo dwa wektory są do siebie podobne. Zaraz do takich metryk przejdziemy. Podobieństwo jest oczywiście określone liczbowo. Każda metryka działa inaczej, jednak często przyjmuje się, że im wartość jest bliższa 0, tym wektory są bardziej do siebie zbliżone. Jest to dość intuicyjne — jeśli dwa pojęcia są takie same, to znajdują się w tym samym miejscu w przestrzeni, a więc odległość między nimi wynosi 0. Z kolei im większa odległość, tym pojęcia są bardziej od siebie oddalone, a więc mniej podobne.
Zanim jednak przejdziemy do tych metryk, warto pamiętać o dwóch rzeczach:
- Wymiary — co wspomniałem poprzednio, wektory powinny mieć tyle samo wymiarów, żebyśmy mogli je ze sobą porównać.
- Normalizacja — aby porównywać wektory, często je normalizujemy, czyli przekształcamy tak, aby miały długość równą 1. Znormalizowane wektory łatwo rozpoznać po tym, że wartości poszczególnych wymiarów są liczbami w zakresie od -1 do 1. Na szczęście większość modeli zwraca już znormalizowane wektory, więc nie musimy się tym martwić.
Metryki podobieństwa wektorów
Przejdźmy teraz do konkretów. Jednak nie zdziw się nazwami, które zobaczysz. Chociaż możnaby pomyśleć, że sztuczna inteligencja to coś bardzo skomplikowanego, w rzeczywistości mamy tu do czynienia z bardzo prostymi narzędziami geometrycznymi, z czego pierwsze z nich na pewno znasz ze szkoły, a drugie już parę razy gościło na moim blogu.
Przygotowanie danych
Zanim przejdziemy do metryk, które oczywiście będziemy testować w praktyce, warto mieć najpierw przykładowe dane, na których będziemy mogli je sprawdzić. W tym celu przygotowałem dla Ciebie pliki JSON, gdzie znajdziesz wektory dla następujących tekstów:
[
"cat", // kot
"kitten", // kotek
"dog", // pies
"puppy", // szczeniak
"german shepherd", // owczarek niemiecki
"animal", // zwierzę
"pet", // zwierzę domowe
"lion", // lew
"tiger", // tygrys
"car", // samochód
"electric car", // samochód elektryczny
"vehicle", // pojazd
"truck", // ciężarówka
"bicycle", // rower
"train", // pociąg
"apple", // jabłko
"banana", // banan
"orange", // pomarańcza
"fruit", // owoc
"vegetable", // warzywo
"I have a cat", // Mam kota
"The dog is sleeping on the sofa", // Pies śpi na kanapie
"I bought a new electric car", // Kupiłem nowy samochód elektryczny
"The train arrived at the station", // Pociąg przyjechał na stację
"She is eating a banana", // Ona je banana
"The stock market crashed yesterday", // Giełda wczoraj się załamała
"Investors are worried about inflation", // Inwestorzy martwią się inflacją
"Quantum physics studies the behavior of particles", // Fizyka kwantowa bada zachowanie cząstek
"The universe is expanding", // Wszechświat się rozszerza
"A black hole bends spacetime" // Czarna dziura zakrzywia czasoprzestrzeń
]
Teoretycznie użyte modele nie powinny mieć znaczenia, ale w praktyce wyniki mogą się nieco różnić w zależności od tego, na czym były trenowane. Żebyś nie musiał(a) płacić za użycie API albo uruchamiać modeli lokalnych, wygenerowałem wektory z wykorzystaniem 4 wspomnianych wcześniej modeli. Poniżej znajdziesz linki do tych plików wraz z argumentacją, dlaczego akurat te modele wybrałem:
openai/text-embedding-3-small— najczęściej widziałem go używanego w praktyce.mistralai/mistral-embed-2312— sprawdzimy, jak radzi sobie model lidera europejskiej branży AI.google/gemini-embedding-001— często korzystam z Gemini, chociaż nie z jego embeddings, więc jestem ciekaw rezultatów.qwen/qwen3-embedding-8b— mały model, który każdy może uruchomić lokalnie, więc sprawdzimy, czy jego wyniki są zbliżone do tych z popularnych dużych modeli.
Kod użyty do wygenerowania powyższych embeddingów znajdziesz tutaj.
Jeśli chcesz generować embeddingi na własną rękę, to lokalnie polecam to robić z użyciem Ollama, a w chmurze przez OpenRouter. Oba narzędzia mają szeroki wybór modeli, a do tego ich API są zgodne ze standardem OpenAI.
Zaproponowany przeze mnie zestaw danych zawiera kilka klastrów semantycznych: zwierzęta, pojazdy, jedzenie, finanse, fizyka. Ma zarówno pojedyncze słowa, jak i całe zdania. To, co będziemy chcieli sprawdzić, to czy faktycznie te semantycznie podobne pojęcia są blisko siebie w przestrzeni, a te różne — daleko. W przypadku zdań interesuje nas, czy będą one blisko swoich klastrów, np. I have a cat powinno być blisko cat i kitten. Musimy oczywiście pamiętać, że wektory wygenerowane przez modele embeddingowe nie wprowadzą podziałów ontologicznych, tylko zgrupują blisko siebie to, co statystycznie jest podobne. Przykładowo, dog może być blisko lion, ponieważ oba są drapieżnikami. Głównie skupimy się na sprawdzeniu, czy zachowane zostają klastry i czy zdania są powiązywane z pojedynczymi słowami.
Odległość euklidesowa (L2)
Najbardziej oczywistą metryką znaną każdemu z lekcji matematyki jest odległość euklidesowa. Warto jednak dodać, że w kontekście wektorów nazywamy ją normą L2. Jest to po prostu długość wektora łączącego dwa wybrane wektory. Tyle tylko, że w przeciwieństwie do tego co znamy ze szkoły, potrzebujemy wzoru, który będzie działać dla wymiarów. Ten wygląda następująco:
Odległość euklidesowa z racji tego, że bierze pod uwagę zarówno kierunek, jak i długość wektora, jest czuła na różnice w długości. Do tego przez podnoszenie do kwadratu wartości odstające mogą mieć znaczny wpływ na rezultat. Oznacza to, że jeśli dwa wektory mają podobny kierunek, ale różnią się długością, odległość euklidesowa może być duża, co może prowadzić do sytuacji, w której dwa pojęcia są semantycznie podobne, ale odległe w przestrzeni. Aczkolwiek w kontekście wektorów, które są już znormalizowane, problem ten nie istnieje.
Odległość Manhattan (L1)
Pomijając czułość na róznice w długości, wadą odległości euklidesowej jest także jej złożoność obliczeniowa. O ile podnoszenie do kwadratu nie jest problemem, o tyle pierwiastkowanie jest już wymagające obliczeniowo, co możesz zobaczyć w dedykowanym artykule. Stąd, gdy zależy nam na prostocie obliczeń, często sięgamy po prostszą odległość Manhattan, którą opisałem w artykule poświęconym algorytmowi A*. W świecie wektorów nazywamy ją normą L1, a jej wzór dla wymiarów wygląda następująco:
Dzięki temu, że nie podnosimy tutaj wartości do kwadratu, metryka ta nie jest czuła na wartości skrajne. Wciąż jednak długość wektorów ma wpływ na wynik, tak jak w przypadku odległości euklidesowej.
Podobieństwo kosinusowe
Skoro długość wektorów może być problemem, może bylibyśmy w stanie pominąć ten czynnik i skupić się tylko na kierunku? Metryką, która w taki sposób działa, jest podobieństwo kosinusowe. Polega na zmierzeniu kąta między dwoma wektorami (dokładniej: jego kosinusa, stąd nazwa), co obliczamy następująco:
W liczniku obliczamy iloczyn skalarny wektorów, a w mianowniku iloczyn ich długości.
Podobieństwo kosinusowe działa na zupełnie innej zasadzie niż odległości L1 i L2, ponieważ zwraca wartości w zakresie od -1 do 1, gdy poprzednie od 0 wzwyż. W tamtych metrykach, co intuicyjne, im mniejsza wartość, tym wektory są bardziej podobne. W przypadku podobieństwa kosinusowego jest inaczej:
- -1 oznacza, że wektory są całkowicie przeciwne, czyli mają kąt 180 stopni.
- 0 oznacza, że wektory są ortogonalne, czyli mają kąt 90 stopni, a więc są całkowicie niezależne.
- 1 oznacza, że wektory są identyczne, czyli mają kąt 0 stopni.
Z racji tego, że wyniki mogą być na pierwszy rzut oka mniej intuicyjne, często podobieństwo kosinusowe jest przekształcane do postaci odległości, czyli:
Wtedy otrzymujemy wartości od 0 do 2, gdzie 0 oznacza identyczność, a 2 całkowitą przeciwność.
Podobieństwo kosinusowe ma dwie duże zalety: jest niezależne od długości wektorów i bardzo proste obliczeniowo. Co więcej, jeśli wektory są już znormalizowane (czyli praktycznie zawsze, gdy korzystamy z modeli embeddingowych), możemy wzór uprościć po prostu do iloczynu skalarnego:
Wówczas obliczenie to jedynie mnożenie i dodawanie, co jest bardzo szybkie nawet dla wektorów o tysiącach wymiarów (w szczególności, gdy wykonujemy to na kartach graficznych). Stąd podobieństwo kosinusowe jest najczęściej używaną metryką w kontekście wektorów embeddingowych. Co więcej, w przypadku wektorów rzadkich (gdzie większość wartości to 0), możemy skupić się tylko na tych wymiarach, które mają wartości różne od 0, co dodatkowo przyspiesza obliczenia.
Porównanie rezultatów
Porównajmy teraz rezultaty, które otrzymaliśmy dla tych trzech metryk na naszych danych. Przed uruchomieniem danych spodziewam się, że skoro pracujemy na znormalizowanych wektorach, wyniki będą takie same niezależnie od metryki. Oczywiście odległości same z siebie będą się różnić, jednak utworzona lista rankingowa powinna być identyczna. Natomiast pytanie, czy będą różnice między modelami. Spodziewałbym się takich samych rezultatów, a różnic co najwyżej pod koniec rankingu. Zobaczymy, czy tak będzie w praktyce.
Kod testujący metryki
Żeby porównać te metryki, napisałem prostą aplikację w Node.js, która wczytuje wektory z zamieszczonych wcześniej plików JSON, a następnie dla każdego wektora oblicza jego podobieństwo do wszystkich pozostałych wektorów, tworząc ranking od najbardziej do najmniej podobnych. Powtarzamy to dla każdego algorytmu i modelu, a następnie wynik zapisujemy w pliku JSON, który później zwizualizujemy.
Wszystkie algorytmy oczywiście implementujemy ręcznie, bo przy tak małym zestawie danych szkoda tracić czas na konfigurację bazy wektorowej, a same w sobie są bardzo proste. Kod testu znajdziesz na Githubie.
Jeśli sklonujesz zalinkowane powyżej repozytorium i uruchomisz wskazany skrypt, to w efekcie otrzymasz plik results.json, który dla każdego tekstu będzie zawierać ranking pozostałych tekstów od najbardziej do najmniej podobnych, osobno dla każdej metryki i modelu. Hierarchia w pliku jest następująca: tekst → model → metryka → lista podobieństw.
Wizualizacja wyników
Poniżej możesz zobaczyć rezultaty. Wybierz dowolny tekst, model i metrykę za pomocą dropdownów, a poniższa tabela odpowiednio się zaktualizuje.
Jak możemy zauważyć, wyniki między metrykami są dość podobne. Jedynie przy dalszych rezultatach odległość Manhattan zaczyna się nieco zaburzać, ale to było do przewidzenia, biorąc pod uwagę, że jest mniej precyzyjna. W kwestii wyników między modelami warto samodzielnie się zastanowić, co jest dla Ciebie ważniejsze. Klastry zostają w miarę zachowane, aczkolwiek ranking już jest inny. Na przykład dla kitten (kotek) wszystkie modele zwracają jako najbliższe słowo cat z wyjątkiem modelu od OpenAI, który zwraca puppy (szczeniak). Jak jednak opisywałem wcześniej, nie oznacza to, że model ten jest gorszy. Po prostu jego dane treningowe bardziej premiowały podobieństwo między słowami oznaczające młode zwierzęta niż podobieństwo między młodym a dorosłym zwierzęciem.
Warto przejrzeć powyższe wyniki, bo można trafić na różne ciekawe przypadki, które pokazują, jak różnie wytrenowane modele mogą na różny sposób grupować pojęcia. Na przykład dla słowa vehicle (pojazd) model od OpenAI na trzecim miejscu premiuje animal (zwierzę), stawiając je ponad bicycle (rower) czy electric car (samochód elektryczny). Zaskakują też, w tym przypadku negatywnie, modele od Mistrala i Google, gdzie pozycja nr 3 dla pojazdów to vegetable (warzywo).
Test analogii embeddingów
O co w tym chodzi?
W klasycznych podręcznikach do uczenia maszynowego można przeczytać o teście analogii, który polega na sprawdzeniu, czy wektory zachowują relacje semantyczne. Na przykład, jeśli mamy wektor dla king, man i woman, to powinniśmy być w stanie przewidzieć wektor dla queen przez wykonanie operacji:
Również inne relacje powinny być prawdziwe, przykładowo:
W jednym z najbardziej uznanych podręczników do sztucznej inteligencji i uczenia maszynowego, czyli Artificial Intelligence: A Modern Approach, możemy przeczytać (w edycji 4. z 2022 r., która wciąż jest najnowszą), że nie wiadomo dlaczego modele zachowują takie relacje ani dlaczego ten test działa. Aczkolwiek dziś na ten temat wiemy nieco więcej i najnowsze teorie możesz przeczytać np. w poniższych artykułach (pominę opisy dla zachowania względnej prostoty artykułu):
- On the Emergence of Linear Analogies in Word Embeddings
- Symmetry in language statistics shapes the geometry of model representations
Warto w tym miejscu dodać, że test analogii jest dość kontrowersyjny. Niektórzy badacze uważają, że nie zachodzi tutaj precyzyjne obliczenie różnicy semantycznej, tylko prosta zależność — słowa w zestawach testowych są wystarczająco blisko siebie, żeby uzyskać dobre wyniki. Warto przeczytać np. pracę The (Too Many) Problems of Analogical Reasoning with Word Vectors z 2017 r.
Sprawdźmy to
Zostawmy teorię i przejdźmy do praktyki. Sprawdzimy wyżej opisane analogie i kilka innych, które są podobne. Wykorzystajmy w tym celu podejście znane jako 3CosAdd polegające na obliczeniu podobieństwa kosinusowego między wektorem docelowym a przewidywanym, który jest obliczany jako:
gdzie A, B i C to wektory odpowiadające słowom w analogii, a D to wektor przewidywany. Następnie porównujemy ten wektor D z wektorami wszystkich słów w naszym zbiorze danych, aby znaleźć to, które jest najbardziej podobne do D. Jeśli jest to oczekiwane przez nas słowo (np. queen dla analogii king - man + woman), to test analogii jest zaliczony.
Tym razem, oprócz czterech używanych do tej pory modeli, dodamy jeszcze klasyczny model opisywany w starszych pracach, czyli GloVe (przez jego JavaScriptową implementację wink-embeddings-sg-100d, która powinna odpowiadać modelowi glove.6B.100d). Zrobimy tak dlatego, że test analogii był pierwotnie przeprowadzany na modelach z rodzin GloVe, Word2Vec i FastText, więc powinny dawać wzorcowe wyniki.
Wygenerowane embeddingi znajdziesz tutaj, a tutaj kod użyty do ich wygenerowania.
Wyniki testu
Wyniki wygenerowałem za pomocą skryptu, który znajdziesz w tym miejscu. Poniżej możesz, podobnie jak wcześniej, zobaczyć rezultaty dla każdego modelu i analogii.
Parametry w powyższej prezentacji, które mogą nie być oczywiste na pierwszy rzut oka, mają następujące znaczenie:
- Hit/Top 1, 5, 10 — czy oczekiwane słowo znajduje się odpowiednio na pierwszym, w pierwszych pięciu lub w pierwszych dziesięciu miejscach rankingu podobieństwa do wektora D.
- MRR (Mean Reciprocal Rank) — średnia odwrotności rangi oczekiwanego słowa w rankingu podobieństwa do wektora D. Jeśli oczekiwane słowo jest na pierwszym miejscu, MRR wynosi 1, jeśli na drugim, to 0,5, na trzecim 0,33 itd.
Jak możemy zauważyć, praktycznie dla wszystkich modeli i analogii oczekiwane słowo znajduje się na pierwszej pozycji rankingu, co oznacza, że test analogii jest zaliczony. Nawet obecność ogólnie w czołowej 10 jest bardzo dobra w prawdziwych warunkach — my jednak operujemy na nieco ograniczonym zestawie danych.
W zasadzie jedynym przypadkiem, gdzie oczekiwane słowo nie jest na pierwszym miejscu to kategoria zawodów. Tylko dla klasycznego modelu GloVe oczekiwane słowa były zawsze na pierwszym miejscu. Może to jednak wynikać z faktu, że nowoczesne modele są trenowane na bardzo dużych i różnorodnych zbiorach danych, co może prowadzić do tego, że relacje semantyczne są bardziej rozproszone i niekoniecznie oczekiwane przez nas słowo jest najbardziej podobne do wektora D, mimo że jest semantycznie prawidłowe. Warto jednak zajrzeć w szczegóły — np. dla analogii Newton - physicist + Darwin, gdzie oczekiwaliśmy biologist, bardziej podobnym okazuje się scientist, co jest również prawidłowe.
Dlaczego bazy wektorowe są tak szybkie?
Odejdźmy teraz od samych wektorów i przejdźmy do praktyki baz wektorowych. Niezależnie od tego, czy korzystamy z dedykowanej bazy wektorowej (jak np. Weaviate), czy rozszerzeń do baz innego typu (np. pgvector dla PostgreSQL), możemy zauważyć jedną rzecz — wyszukiwanie podobnych wektorów jest bardzo szybkie, nawet jeśli mamy ich miliony. Jak to możliwe?
Approximate Nearest Neighbor
Rozwiązaniem tego jest klasa algorytmów i struktur danych znana jako Approximate Nearest Neighbor (ANN, po pol. przybliżony najbliższy sąsiad). Rezygnują z gwarancji znalezienia dokładnie najbliższego sąsiada na rzecz znacznego przyspieszenia wyszukiwania. W praktyce oznacza to, że zamiast wyszukiwać wszystkie wektory algorytm ANN przeszukuje tylko ich wybraną część, co pozwala na uzyskanie wyników znacznie szybciej od sprawdzania zapytania względem każdego wpisu w bazie danych.
Hierarchical Navigable Small World
Używanym w praktyce przykładowym ANN jest HNSW (Hierarchical Navigable Small World, po pol. hierarchicznie nawigowalne małe światy). W bardzo dużym uproszczeniu polega na stworzeniu struktury grafowej, gdzie wierzchołki reprezentują wektory, a krawędzie łączą wektory, które są do siebie podobne. Dodatkowo graf jest podzielony hierarchicznie, schodząc od warstw z małą liczbą wierzchołków do takich z ich bardzo dużą liczbą. Dzięki temu zamiast przeszukiwać wszystkie wektory algorytm przeszukuje tylko te, które są najbardziej obiecujące. Podejście to ma złożoność czasową logarytmiczną, co oznacza, że nawet dla bardzo dużych zbiorów danych wyszukiwanie jest bardzo szybkie. Co więcej, z zalet warto wymienić, że rezultaty, mimo że są przybliżone, są bardzo dobre. Niestety wadą jest to, że struktura grafowa może zajmować dużo pamięci, co może być problematyczne.
Inne podejścia
Z innych podejść do ANN można też wymienić:
- IVF (Inverted File, po pol. odwrócony plik) — polega na podzieleniu przestrzeni wektorowej na mniejsze regiony i przypisaniu wektorów do tych regionów. Podczas wyszukiwania algorytm przeszukuje tylko te regiony, które są najbardziej obiecujące. Gdy już wybierzemy odpowiedni region, porównujemy wektor zapytania ze wszystkimi znajdującymi się w nim wektorami.
- IVFPQ (Inverted File with Product Quantization, po pol. odwrócony plik z kwantyzacją produktu) — jest to rozszerzenie IVF, które dodatkowo kompresuje wektory, co pozwala na zmniejszenie zużycia pamięci i przyspieszenie wyszukiwania.
- LSH (Locality-Sensitive Hashing, po pol. haszowanie czułe na lokalność) — polega na przekształceniu wektorów do postaci haszy. Jednak w przeciwieństwie do znanych funkcji typu SHA-256, które minimalizują kolizje, funkcje LSH są zaprojektowane tak, aby podobne wektory miały większe prawdopodobieństwo uzyskania tego samego hasza.
Porównanie podejść ANN
Porównując te podejścia ze sobą:
- HNSW oferuje najwyższą dokładność (95%) i najlepiej radzi sobie z wektorami wysokowymiarowymi. Oferuje też logarytmiczną złożoność czasową. Niestety zajmuje dużo pamięci RAM. Jest to podstawowy wybór dla większości zastosowań, gdzie dokładność jest kluczowa, a zasoby pamięciowe nie są ograniczone.
- IVF oferuje mniejsze zajęcie pamięci kosztem dokładności. Jego złożoność czasowa jest liniowa, ale zależna od liczby klastrów () Dokładność wynosi 70-90%, co jest bardzo dobrym wynikiem w praktyce. Powinniśmy go wybrać, gdy operujemy na bardzo dużych zbiorach danych, ale nadal zależy nam na dobrej dokładności.
- IVFPQ jest najbardziej pamięciooszczędny niż IVF, ale jego dokładność jest niższa, na poziomie 60-80%. Złożoność czasowa jest taka sama jak w przypadku IVF. Jest to dobry wybór, gdy mamy bardzo ograniczone zasoby pamięciowe.
- LSH jest również pamięciooszczędny (chociaż nie aż tak jak IVFPQ), ale jego dokładność jest najniższa, na poziomie 50-70%. Złożoność czasowa jest logarytmiczna. To dobry wybór, gdy nie zależy nam na dokładności, za to chcemy mieć bardzo szybkie wyszukiwanie przy ograniczonych zasobach pamięciowych.
Użycie baz wektorowych w praktyce
Często swoje artykuły kończę zastosowaniami teorii, więc i tym razem tak zrobię. Jednak skupię się nie tyle na wykorzystaniu metryk podobieństwa wektorów, ile po prostu na użyciu baz wektorowych. Dzięki coraz większemu znaczeniu sztucznej inteligencji są one coraz popularniejsze, tylko co właściwie możemy z nimi zrobić? Jakie są ich zastosowania? Zobaczmy przykładowe scenariusze, w których bazy wektorowe mogą być bardzo przydatne.
Określanie podobnych rzeczy
To jest najbardziej oczywiste zastosowanie, patrząc na to, co już omówiliśmy. Mając w bazie wektorowej reprezentację różnych pojęć, możemy łatwo znaleźć te, które są do siebie podobne. Jest to też chyba najpopularniejsze zastosowanie baz wektorowych.
Przykład, który widzisz teraz na własne oczy (jeśli jesteś na komputerze), to po prawej stronie możesz zobaczyć listę podobnych artykułów (na telefonach jest pod tekstem). Powstała ona w taki sposób, że dla każdego artykułu wygenerowałem streszczenie, następnie z tego streszczenia (oraz tytułu i tagów) wektor, a potem z bazy wektorowej (w tym przypadku Typesense) wyciągnąłem 6 najbardziej podobnych, z czego wylosowałem 3 do pokazania obok. Jeśli interesuje Cię implementacja tego, to znajdziesz ją w kodzie źródłowym bloga w tych plikach:
scrape.mjs— plik generujący dane do silnika wyszukiwania, w tym streszczenia. Używam do tego celu modelugpt-5-mini.populate-search.mjs— wrzucenie danych do Typesense. Jest to baza służąca za silnik wyszukiwania, ale obsługuje też wektory. Tak naprawdę całe generowanie wektorów jest ukryte wewnątrz bazy, ja jedynie zdefiniowałem pole, gdzie on ma się znajdować, z czego ma zostać wygenerowany i którego modelu ma do tego użyć (używamopenai/text-embedding-3-large, bo uzyskuję lepsze rezultaty dla języka polskiego niż z pokazywanego wcześniej modelusmall).similar.ts— kod odpytujący Typesense o podobne artykuły.
Jak możesz zobaczyć, jest to bardzo proste do zaimplementowania. Bazy wektorowe czy też jakiekolwiek inne bazy z obsługą wektorów ukrywają przed nami opisaną wyżej całą implementacyjną trudność.
Oczywiście przy określaniu podobnych rzeczy nie musimy ograniczać się tylko do tekstu. Pamiętasz, jak opisywałem, że moglibyśmy wygenerować też wektory opisujące obrazy? Wówczas moglibyśmy wykorzystywać bazy wektorowe do wyszukiwania podobnych do siebie obrazów. Możemy do wygenerowania takich embeddingów użyć np. CLIP od OpenAI. Ewentualnie można zlecić multimodalnemu LLMowi opisanie obrazka, a potem wygenerować wektor tego opisu. Są również multimodalne modele embeddingowe, które bezpośrednio generują wektory z obrazów czy nawet dźwięku i filmów. Przykładowo, w momencie pisania tego artykułu Google opublikował google/gemini-embedding-2-preview, którego zdolności nie miałem okazji jeszcze testować.
Poniżej możesz zobaczyć przykład takiego wyszukiwania w aplikacji, nad którą kiedyś pracowałem. Z lewej znajduje się przykładowe zdjęcie „pizzy” z Internetu, a po prawej lista 12 najbardziej podobnych obrazów z bazy danych zawierającej ok. 20 tysięcy różnych obrazków. Jak możesz zobaczyć na własną rękę, wszystkie znalezione to zdjęcia lub rysunki zawierające pizzę, co pokazuje, że wektory dobrze uchwyciły semantyczne podobieństwo między tymi obrazami. W tym przypadku wykorzystaliśmy model google/gemini-3-flash-preview do wygenerowania tagów opisujących obraz, a następnie z tych tagów wygenerowaliśmy wektory, korzystając z openai/text-embedding-3-small, i wszystko umieściliśmy również w Typesense.
Wyszukiwanie semantyczne
Podobnym zastosowaniem baz wektorowych jest wyszukiwanie semantyczne. W tradycyjnych silnikach wyszukiwania, takich jak np. Elasticsearch, wyszukiwanie opiera się na dopasowaniu słów kluczowych. Oznacza to, że jeśli wpiszesz zapytanie, silnik będzie szukać dokumentów zawierających te same słowa lub ich odmiany. W przypadku wyszukiwania semantycznego zamiast dopasowywać słowa kluczowe dopasowujemy znaczenie. Oznacza to, że nawet jeśli zapytanie i dokumenty nie zawierają tych samych słów, ale są semantycznie podobne, to nadal mogą zostać uznane za trafne.
Stąd dziś większość silników wyszukiwania to także bazy wektorowe. Zresztą w poprzednim akapicie wspomniałem o dokładnie w ten sposób działającym Typesense. Elasticsearch również ma wbudowaną obsługę wektorów. Jego popularny fork, czyli Opensearch, również.
A jak to działałoby w praktyce? Posłużę się znowu moim blogiem. Jak mogłeś(-aś) zauważyć, na górze w menu znajduje się wyszukiwarka. Jest oparta na Typesense i korzysta jedynie z wyszukiwania po słowach kluczowych. Stąd jeśli zadamy zapytanie dość ogólne, np. „najgorszy algorytm sortowania”, wyniki niekoniecznie wskazują na to, co szukamy. W końcu szukając najgorszego algorytmu sortującego, nie chcemy przeczytać artykułu o quicksorcie.
Jednak gdy tylko wprowadzimy wyszukiwanie semantyczne, wyniki są już lepsze. Silnik wyszukiwania zamiast starać się dopasować wpisane przez użytkownika słowa do zawartości artykułu stara się dopasować znaczenie. Co prawda nie powiedziałbym, że sortowanie przez wybieranie jest aż tak złe, ale artykuł o nim jest zdecydowanie bardziej trafny niż ten o quicksorcie. Do tego jako drugi wynik, który otrzymaliśmy, to artykuł o algorytmach-żartach, które zdecydowanie są najgorsze.
Osiągnąłem to przez bardzo prostą zmianę w kodzie, gdzie do listy pól, po których szukamy frazy, dodałem też pole zawierające embedding. Jeśli interesuje Cię, w jaki sposób można to zrobić w Typesense (bo kolejny raz powtórzę, że jest silnikiem wyszukiwania na tym blogu), tutaj znajdziesz tutorial. Możesz zobaczyć na własną rękę, że jest to bardzo proste do zaimplementowania, a efekty są naprawdę dobre. Jedyny powód, dla którego nie używam tego na swoim blogu, to oszczędność pieniędzy, bo musiałbym używać modelu embeddingowego od OpenAI do generowania wektorów dla każdego zapytania do wyszukiwarki.
RAG (Retrieval-Augmented Generation)
Wyszukiwanie semantyczne robi wrażenie, ale możemy pójść o krok dalej. Zamiast tylko zwracać podobne artykuły możemy wykorzystać te artykuły do generowania odpowiedzi na pytania użytkownika. Jest to właśnie idea stojąca za RAG (Retrieval-Augmented Generation, po pol. generowanie wspomagane wyszukiwaniem), w którym użytkownik rozmawia z modelem językowym, a model ten zamiast polegać tylko na swojej wiedzy może też wyszukiwać informacje w bazie danych (w tym przypadku w bazie wektorowej) i wykorzystywać te informacje do generowania odpowiedzi.
Na przykład, jeśli użytkownik zapyta „Jaki jest najgorszy algorytm sortowania?”, model językowy może najpierw wyszukać w bazie wektorowej artykuły związane z algorytmami sortowania, a następnie wykorzystać te artykuły do wygenerowania odpowiedzi. Dzięki temu model może dostarczyć bardziej aktualnych i trafnych informacji niż gdyby polegał tylko na swojej wiedzy, która jest statyczna i ograniczona do momentu jego treningu. Możesz to zobaczyć na zrzucie ekranu poniżej, gdzie model językowy (w tym przypadku openai/gpt-5-mini) odpowiada na pytanie, korzystając z informacji zawartych w artykułach znalezionych w bazie wektorowej bloga.
Jeśli interesuje Cię, jak takie coś zrobić w Typesense, tutaj znajdziesz tutorial, z którego sam zresztą skorzystałem.
Oczywiście powyższy przykład, gdzie LLM stał się wyszukiwarką treści, nie jest jedynym zastosowaniem RAG. Aczkolwiek jest chyba najpopularniejsze i też najbardziej przydatne. Otwiera to szeroką furtkę do tworzenia aplikacji, gdzie sztuczna inteligencja korzysta z wiedzy zapisanej w zewnętrznych bazach danych — w wewnętrznych dokumentach firmowych, bazach wiedzy czy nawet w kodzie źródłowym.
Warto jednak wiedzieć, że nie zawsze gdy chcesz połączyć swoje dane z LLMem, potrzebujesz bazy wektorowej. W kontekście agentów, którzy mają dostęp do zewnętrznych narzędzi, zwykłe pliki mogą być zupełnie wystarczające. Jeśli chcesz poczytać więcej w tym temacie, polecam ten wpis na blogu Oracle. Mimo że są oni producentami rozwiązań bazodanowych, to ten artykuł podchodzi do tematu dość zdroworozsądkowo i pokazuje, że nieraz pliki są wystarczające.
Podsumowanie
Biorąc pod uwagę, jak ewoluuje świat sztucznej inteligencji przy bardzo szybkim rozwoju modeli językowych, nie mogę z całą pewnością powiedzieć, że bazy wektorowe to przyszłość, ale zdecydowanie w tym momencie odgrywają dużą rolę. Są bardzo ważnym elementem ekosystemu sztucznej inteligencji i mają wiele zastosowań, które starałem się tutaj pokazać.
Nawet jeśli czytasz ten artykuł w przyszłości i bazy wektorowe są już przeżytkiem, to i tak warto wiedzieć, skąd w ogóle w kontekście sztucznej inteligencji mówi się o wektorach. Dzisiejsza (w momencie pisania artykułu) sztuczna inteligencja, mimo że robi spore wrażenie swoimi możliwościami, wciąż jest narzędziem bazującym na operacjach matematycznych. Odpowiedzi dużych modeli językowych nie są generowane w żaden magiczny sposób, tylko przez przechodzenie po wielowymiarowej przestrzeni. A że przestrzeń ta ma wiele ciekawych właściwości jak np. zgrupowanie koło siebie podobnych pojęć czy zachowywanie relacji semantycznych, to aż prosi się o wykorzystanie tego w praktyce, a bazy wektorowe są do tego idealnym narzędziem.
P.S. Artykuł nie jest w żaden sposób sponsorowany przez Typesense. Po prostu korzystam z niego na blogu i używałem go w kilku projektach, więc był mi najbliższy do opisania, jak i też najprościej było mi wykorzystać dane, które już w nim posiadam.
Literatura
- Deisenroth, M. P., Faisal, A. A. i Ong, C. S. (2020). Analytic geometry. W: Mathematics for Machine Learning (rozdz. 3, s. 57–80). Cambridge University Press. doi:10.1017/9781108679930
- Zilliz, Similarity Metrics for Vector Search, Zilliz Blog (11 marca 2025), https://zilliz.com/blog/similarity-metrics-for-vector-search.
- Russell, S. J. i Norvig, P. (2022). Word embeddings. W: Artificial Intelligence: A Modern Approach (wyd. 4, Global ed., rozdz. 25.1, s. 907–911). Pearson.
- Meilisearch, What are Vector Embeddings?, Meilisearch Blog (20 marca 2025), https://www.meilisearch.com/blog/what-are-vector-embeddings.
- Sousa, T., Oliveira, H. G. i Alves, A. (2020). Exploring different methods for solving analogies with Portuguese word embeddings. W: A. Simões, P. R. Henriques i R. Queirós (red.), 9th Symposium on Languages, Applications and Technologies (SLATE 2020) (OASIcs, t. 83, s. 9:1–9:14). Schloss Dagstuhl – Leibniz-Zentrum für Informatik. doi:10.4230/OASIcs.SLATE.2020.9
- Korchinski, D. J., Karkada, D., Bahri, Y. i Wyart, M. (2025). On the emergence of linear analogies in word embeddings. arXiv. https://arxiv.org/abs/2505.18651
- Karkada, D., Korchinski, D. J., Nava, A., Wyart, M. i Bahri, Y. (2026). Symmetry in language statistics shapes the geometry of model representations. arXiv. https://arxiv.org/abs/2602.15029
- Rogers, A., Drozd, A., & Li, B. (2017). The (too many) problems of analogical reasoning with word vectors. W: N. Ide, A. Herbelot, & L. Màrquez (red.), Proceedings of the 6th Joint Conference on Lexical and Computational Semantics (*SEM 2017) (s. 135–148). Association for Computational Linguistics. doi:10.18653
- Jayan Gupta, Approximate Nearest Neighbor (ANN) Search, GeeksforGeeks (23 lipca 2025), https://www.geeksforgeeks.org/machine-learning/approximate-nearest-neighbor-ann-search/.
- Malkov, Y. A. i Yashunin, D. A. (2018). Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs. arXiv. https://arxiv.org/abs/1603.09320
- Milvus, How Does Indexing Work in a Vector DB (IVF, HNSW, PQ, etc.)?, Milvus: AI Quick Reference, https://milvus.io/ai-quick-reference/how-does-indexing-work-in-a-vector-db-ivf-hnsw-pq-etc (ostatni dostęp: 13 marca 2026).
- Tullie Murrell, A Comprehensive Guide to Approximate Nearest Neighbors Algorithms, Shaped Blog (2 czerwca 2025), https://www.shaped.ai/blog/approximate-nearest-neighbors-algorithms.
- Typesense, Semantic Search: Use Case, Typesense Documentation (30 stycznia 2025), https://typesense.org/docs/guide/semantic-search.html#use-case.
- Frank Denneman, RAG Architecture Deep Dive, Frank Denneman (19 marca 2024), https://frankdenneman.nl/posts/rag-architecture-deep-dive/.
- Typesense, Conversational Search (RAG), Typesense Documentation (28 stycznia 2026), https://typesense.org/docs/30.1/api/conversational-search-rag.html#create-a-conversation-history-collection.
- Richmond Alake, Comparing File Systems and Databases for Effective AI Agent Memory Management, Oracle Developers Blog (5 lutego 2026), https://blogs.oracle.com/developers/comparing-file-systems-and-databases-for-effective-ai-agent-memory-management.