Վեկտորային վերլուծություն

Ինչպես կատարել բարձր կատարողական որոնում՝ օգտագործելով 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



Հղումներ՝

  1. https://engineering.fb.com/2017/03/29/data-infrastructure/faiss-a-library-for-efficient-similarity-search/
  2. https://github.com/facebookresearch/faiss/wiki?fbclid=IwAR0I_QUvS9WlD1ImgpBgc6pDaAGojtbrwfQWqCbyNTjyWou0uW5lvdkOTCc
  3. https://www.pinecone.io/learn/faiss-tutorial/

Եթե ​​մինչ այժմ կարդացել եք, ապա մեծ շնորհակալություն կարդալու համար: Հուսով եմ, որ այս հոդվածը օգտակար կլինի ձեզ համար:Եթե ցանկանում եք, ավելացրեք ինձ LinkedIn-ում:

Հաջողություն այս շաբաթ,
Պրատյուշ

ԴԱՐՁԵՔ ԳՐՈՂ MLearning.ai-ում