Վեկտորային վերլուծություն
Ինչպես կատարել բարձր կատարողական որոնում՝ օգտագործելով FAISS
Սկսնակների ուղեցույց FAISS-ի, օգտագործման դեպքերի, մաթեմատիկական հիմքերի և իրականացման համար
FAISS-ը (Facebook AI Similarity Search) բաց կոդով գրադարան է, որը մշակվել է Facebook AI Research-ի (FAIR) կողմից տվյալների նմանության մեծ չափերի որոնման և կլաստերավորման համար: Այն շատ օգտակար է մեքենայական ուսուցման լայնածավալ առաջադրանքների համար, ներառյալ մոտակա հարևանի որոնումը, խմբավորումը և մոտավոր մոտակա հարևանի որոնումը: Այս բլոգային գրառման մեջ մենք կքննարկենք FAISS-ը, ներառյալ դրա առավելությունները, օգտագործման դեպքերը և ինչպես իրականացնել այն Python-ի միջոցով:
Ի՞նչ է նմանության որոնումը:
Իրական աշխարհի առարկաները և հասկացությունները հաճախ ներկայացված են մեքենայական ուսուցման մեջ որպես շարունակական թվերի մի շարք, որոնք երբեմն հայտնի են որպես վեկտորային ներկառուցումներ: Այս մոտեցումը փոխակերպում է մեր կողմից մեկնաբանված տարրերի նմանությունը վեկտորային տարածության
Սա նշանակում է, որ երբ պատկերները կամ տեքստը ներկայացնում ենք որպես վեկտորային ներկառուցումներ, պատկերների կամ տեքստի իմաստային նմանությունն արտահայտվում է նրանով, թե որքան մոտ են դրանց վեկտորները վեկտորային տարածության մեջ: Արդյունքում, մենք ցանկանում ենք դիտարկել օբյեկտների վեկտորների միջև եղած հեռավորությունը՝ նմանատիպ օբյեկտներ գտնելու համար
Վեկտորների նմանության որոնումը տեխնիկա է, որն օգտագործվում է վեկտորները մեծ չափերի տարածության մեջ գտնելու համար, որոնք նման են նշված հարցման վեկտորին: Վեկտորները կարող են լինել ցանկացած տեսակի տվյալ, որը կարող է ներկայացվել որպես վեկտոր, ներառյալ տեքստը, պատկերները և ձայնը:
Այս վեկտորային ներկայացումները (ներկառուցումները) հաճախ ստեղծվում են ուսուցման մոդելների կողմից, որոնք հիմնված են մուտքային տվյալների և առաջադրանքների վրա: Word2Vec, GloVE և այլ հայտնի մոդելներ օգտագործվում են տեքստային տվյալներից ներկառուցումներ ստեղծելու համար, մինչդեռ CNN մոդելները, ինչպիսիք են VGG-ը, հաճախ օգտագործվում են նկարների ներկառուցումներ ստեղծելու համար:
Ինչու՞ FAISS:
Նմանության որոնումը մեքենայական ուսուցման հանրաճանաչ խնդիր է, և այն ավելի դժվար է դառնում, քանի որ տվյալների ծավալը և չափը մեծանում են: Լայնածավալ տվյալների հավաքածուների համար նմանությունների որոնման ավանդական մեթոդները, ինչպիսիք են գծային որոնումը և k-d ծառերը, դառնում են անիրագործելի: FAISS-ը լուծում է այս խնդիրը՝ տրամադրելով արդյունավետ ալգորիթմներ նմանության որոնման և կլաստերավորման համար, որոնք կարող են գործ ունենալ լայնածավալ, մեծ չափերի տվյալների հետ:
FAISS-ն ունի բազմաթիվ ինդեքսավորման կառույցներ, որոնք կարող են օգտագործվել որոնումն արագացնելու համար, ներառյալ LSH, IVF և PQ: Այն ներառում է նաև GPU աջակցություն, որը հնարավորություն է տալիս հետագա որոնման արագացումը: FAISS-ը նաև առաջարկում է մոտակա հարևանների մոտավոր որոնում, որն ապահովում է մոտավոր մոտակա հարևաններին որակի երաշխիքով:
Օգտագործեք պատյաններ FAISS-ի համար
FAISS-ն ունի կիրառությունների լայն շրջանակ, այդ թվում՝
- Պատկերի որոնում. FAISS-ը կարող է օգտագործվել հսկայական տվյալների բազայում համադրելի լուսանկարներ արդյունավետ որոնելու համար:
- Բնական լեզվի մշակում. FAISS-ը կարող է օգտագործվել հսկայական տվյալների բազայում համադրելի տեքստ արդյունավետ որոնելու համար:
- Առաջարկող համակարգեր. FAISS-ը կարող է օգտագործվել օգտատիրոջ մեծ տվյալների բազայում համեմատելի բաներ արդյունավետ որոնելու համար, ինչպես նաև արագացնելու համատեղ զտման և բովանդակության վրա հիմնված առաջարկությունների կանխատեսման գործընթացը:
- Կլաստերավորում.FAISS-ը կարող է օգտագործվել՝ արդյունավետորեն խմբավորելու առնչվող օբյեկտները մեծ չափերի տվյալների հավաքածուներում: Պատկերի որոնում. FAISS-ը կարող է օգտագործվել մեծ տվյալների բազայում նմանատիպ պատկերներ արդյունավետ որոնելու համար:
FAISS-ի մաթեմատիկական հիմքերը
FAISS-ը կառուցված է ինդեքսավորման հայեցակարգի վրա, որը տվյալների բազայի նախնական մշակման մեթոդ է՝ այն ավելի որոնելի դարձնելու համար: Համեմատելի բաղադրիչները միասին խմբավորելով՝ ինդեքսավորումը նվազեցնում է տարրերի թիվը, որոնք պետք է համեմատվեն որոնման ընթացքում: Ապրանքի քանակականացումը (PQ) և շրջված ֆայլերի ինդեքսավորման կառուցվածքները FAISS-ում (IVF) ինդեքսավորման կառուցվածքների երկու հիմնական տեսակներն են: )
Ապրանքների քվանտացումը (PQ)-ը մեծ չափսերով վեկտորներում դիսկրետ արժեքների քանակի կրճատման տեխնիկա է: Վեկտորները բաժանվում են, և յուրաքանչյուր ենթավեկտոր քվանտացվում է ինքնուրույն։ Սա տալիս է վեկտորային ներկայացում, որը բավականաչափ փոքր է, որպեսզի օգտագործվի նմանության որոնման համար:
Inverted File (IVF)մեթոդը ստեղծում է տվյալների բազայի շրջված ինդեքս: Շրջված ինդեքսը տվյալների կառուցվածք է, որը թույլ է տալիս արագորեն հայտնաբերել օբյեկտներ տվյալների բազայում, որոնք համապատասխանում են նշված հարցումին: Շրջված ինդեքսը կառուցվում է տվյալների բազան բաժանելով մի շարք փոքր կլաստերների (հայտնի են որպես շրջված ցուցակներ) և յուրաքանչյուր տարր նույնացնելով այն կլաստերի հետ, որին այն պատկանում է:
Իրականացում Python-ով
FAISS-ը կարող է իրականացվել Python-ում՝ տեղադրելով և ներմուծելով գրադարանը՝ օգտագործելով pip-ը: Ահա մի օրինակ, թե ինչպես օգտագործել FAISS-ը մոտակա հարևանին գտնելու համար.
import faiss import numpy as np # Generate a dataset of 1000 points in 100 dimensions X = np.random.rand(1000, 100).astype('float32') # Create an index for the dataset index = faiss.IndexFlatL2(100) # Add the dataset to the index index.add(X) # Perform a nearest neighbor search for a query vector query = np.random.rand(1, 100).astype('float32') D, I = index.search(query, k=10) # Print the distances and indices of the nearest neighbors print(D) print(I)
Այս օրինակում մենք նախ ստեղծում ենք 1000 կետից բաղկացած տվյալների բազա 100 չափսերով, այնուհետև օգտագործում ենքfaiss.IndexFlatL2դասը՝ ինդեքս ստեղծելու համար: Այնուհետև տվյալների հավաքածուն ավելացվում է ինդեքսին, և index.search() մեթոդն օգտագործվում է հարցման վեկտորի մոտակա հարևանի որոնումն իրականացնելու համար: Ֆունկցիան վերադարձնում է մոտակա հարևանների հեռավորությունները և ինդեքսները:
Մեկ այլ օրինակ է մոտավոր մոտակա հարևանի որոնումը.
import faiss import numpy as np # Generate a dataset of 1000 points in 100 dimensions X = np.random.rand(1000, 100).astype('float32') # Create an index for the dataset nlist = 100 quantizer = faiss.IndexFlatL2(100) # this remains the same index = faiss.IndexIVFPQ(quantizer, X.shape[1], list, 8, 8) # Train the index index.train(X) # Add the dataset to the index index.add(X) # Perform an approximate nearest neighbor search for a query vector query = np.random.rand(1, 100).astype('float32') D, I = index.search(query, k=10) # Print the distances and indices of the nearest neighbors print(D) print(I)
Այս օրինակում մենք օգտագործում ենք IVFPQ ինդեքսավորման կառուցվածքը, որն աջակցում է մոտավոր մոտակա հարևանների որոնմանը:
FAISS-ի առավելությունները
FAISS-ն ունի տարբեր առավելություններ, այդ թվում՝
- Արդյունավետ նմանության որոնում. FAISS-ը տրամադրում է արդյունավետ մեթոդներ նմանությունների որոնման և խմբավորման համար, որոնք կարող են մշակել լայնածավալ, մեծ չափերի տվյալներ:
- Մոտավոր հարևանի որոնում. FAISS-ն առաջարկում է մոտավոր մոտավոր հարևանների որոնում, որն ապահովում է մոտավոր մոտակա հարևաններին որակի երաշխիքով:
- GPU-ի աջակցություն. FAISS-ը ներառում է GPU-ի աջակցություն, որը հնարավորություն է տալիս հետագա որոնման արագացմանը և կարող է զգալիորեն մեծացնել որոնման արդյունավետությունը լայնածավալ տվյալների հավաքածուներում:
- Ծավալայնություն. FAISS-ը նախագծված է չափազանց մասշտաբային և ունակ կառավարելու լայնածավալ տվյալների հավաքածուներ, ներառյալ միլիարդավոր բաղադրիչներ:
- Ճկունություն. FAISS-ը տրամադրում է մի շարք ինդեքսավորման կառուցվածքներ, ներառյալ որպես LSH, IVF և PQ, որոնք կարող են օգտագործվել որոնումները արագացնելու և տարբեր տեսակի տվյալների և օգտագործման դեպքերի մշակման համար:
Եզրակացություն
FAISS-ը բարդ փաթեթ է տվյալների նմանության բարձրաչափ որոնման և կլաստերի համար: Այն ներառում է բազմաթիվ ինդեքսավորման կառույցներ, ինչպես նաև GPU աջակցություն, որը կարող է օգտագործվել որոնումները արագացնելու և տվյալների հսկայական հավաքածուները կառավարելու համար: Այն ունի կիրառությունների լայն շրջանակ, ներառյալ պատկերների որոնումը, ձայնի ճանաչումը, բնական լեզվի մշակումը և առաջարկող համակարգերը: Այն հեշտ է կառուցել Python-ում, ինչը այն դարձնում է հիանալի գործիք մեքենայական ուսուցման պրակտիկանտների համար: Կարևոր է նշել, որ FAISS-ը պարբերաբար թարմացվում է, և ավելացվում են նոր ինդեքսավորման կառուցվածքներ և հնարավորություններ, այնպես որ հետևեք թարմացումներին:
Եթե ցանկանում եք մանրամասներ իմանալ FAISS-ի իրական աշխարհում ներդրման մասին ինտեգրված մեքենայական ուսուցման համակարգում, խնդրում ենք կարդալ https://medium.com/mlearning-ai/how-do-online-marketplaces-know-your-shopping- նախապատվություններ-57405d83516a
Հղումներ՝
- https://engineering.fb.com/2017/03/29/data-infrastructure/faiss-a-library-for-efficient-similarity-search/
- https://github.com/facebookresearch/faiss/wiki?fbclid=IwAR0I_QUvS9WlD1ImgpBgc6pDaAGojtbrwfQWqCbyNTjyWou0uW5lvdkOTCc
- https://www.pinecone.io/learn/faiss-tutorial/
Եթե մինչ այժմ կարդացել եք, ապա մեծ շնորհակալություն կարդալու համար: Հուսով եմ, որ այս հոդվածը օգտակար կլինի ձեզ համար:Եթե ցանկանում եք, ավելացրեք ինձ LinkedIn-ում:
Հաջողություն այս շաբաթ,
Պրատյուշ