Changes between Initial Version and Version 1 of AdvancedTopics


Ignore:
Timestamp:
05/30/26 17:12:10 (2 weeks ago)
Author:
231118
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedTopics

    v1 v1  
     1= Напредна тема – Векторско пребарување со pgvector =
     2
     3== Векторизација на рецепти ==
     4
     5За имплементација на семантичко пребарување беше искористена екстензијата pgvector во PostgreSQL. Секој рецепт се претвора во векторска репрезентација (embedding) која подоцна се користи за пребарување според значење наместо според точно совпаѓање на зборови.
     6
     7=== Скрипта за векторизација ===
     8
     9Скриптата ги зема името и описот на секој рецепт и генерира embedding со помош на моделот ''all-MiniLM-L6-v2'' од Sentence Transformers.
     10
     11Процесот се извршува во батчеви со цел да се намали мемориската потрошувачка и да се овозможи обработка на поголем број рецепти.
     12
     13Чекори на извршување:
     14
     151. Се воспоставува конекција кон PostgreSQL базата.
     162. Се вчитуваат рецепти кај кои колоната ''embedding'' е празна.
     173. Се комбинираат полето ''name'' и ''description''.
     184. Со моделот ''all-MiniLM-L6-v2'' се генерира embedding.
     195. Генерираниот embedding се зачувува во колоната ''embedding''.
     206. Процесот продолжува додека не се обработат сите рецепти.
     21
     22Моделот генерира вектор со 384 димензии кој ја претставува семантичката содржина на рецептот.
     23
     24=== Предности ===
     25
     26* Овозможува пребарување според значење наместо според точен текст.
     27* Корисникот може да пронајде релевантни рецепти дури и кога користи различни зборови.
     28* Значително се подобрува корисничкото искуство при пребарување.
     29
     30== Индексирање на embedding колоната ==
     31
     32По генерирањето на embedding векторите беше креиран HNSW индекс со цел да се овозможи брзо пребарување над голем број записи.
     33
     34{{{
     35CREATE INDEX recipe_embedding_idx
     36ON recipe
     37USING hnsw (embedding vector_cosine_ops);
     38}}}
     39
     40=== Причина за користење на HNSW ===
     41
     42HNSW (Hierarchical Navigable Small World) претставува алгоритам за приближно пребарување на најслични вектори.
     43
     44Предности:
     45
     46* Значително побрзо пребарување.
     47* Поддршка за големи количини податоци.
     48* Висока точност на резултатите.
     49* Одлична интеграција со pgvector.
     50
     51== Семантичко пребарување ==
     52
     53За тестирање на векторското пребарување беше имплементирана посебна Python скрипта.
     54
     55Корисникот внесува текстуално пребарување, по што:
     56
     571. Внесениот текст се претвора во embedding.
     582. Се пресметува косинусна дистанца помеѓу внесениот embedding и embedding-ите на рецептите.
     593. Резултатите се сортираат според најмала дистанца.
     604. Се прикажуваат 10-те најрелевантни рецепти.
     61
     62За споредба на векторите се користи операторот:
     63
     64{{{
     65embedding <=> query_embedding
     66}}}
     67
     68Колку вредноста е помала, толку рецептот е посличен на внесеното пребарување.
     69
     70=== Пример ===
     71
     72Доколку корисникот пребарува:
     73
     74{{{
     75healthy chicken dinner
     76}}}
     77
     78системот нема да бара само рецепти кои ги содржат токму тие зборови, туку ќе пронајде и рецепти со слично значење како:
     79
     80* Grilled Chicken
     81* High Protein Chicken Bowl
     82* Healthy Chicken Salad
     83* Mediterranean Chicken Recipe
     84
     85== Пристап до PostgreSQL Docker контејнер ==
     86
     87За работа со pgvector базата се користи Docker контејнер.
     88
     89Стартување на контејнер:
     90
     91{{{
     92docker start pgvector-db
     93}}}
     94
     95Проверка дали контејнерот е активен:
     96
     97{{{
     98docker ps
     99}}}
     100
     101Пристап до PostgreSQL:
     102
     103{{{
     104docker exec -it pgvector-db psql -U postgres -d recipesdb_local
     105}}}
     106
     107== Заклучок ==
     108
     109Со користење на pgvector и Sentence Transformers беше имплементирано семантичко пребарување на рецепти.
     110
     111Решението овозможува:
     112
     113* Векторизација на сите рецепти.
     114* Брзо пребарување со HNSW индекс.
     115* Пронаоѓање на рецепти според значење.
     116* Подобро корисничко искуство во однос на класичното пребарување со SQL LIKE оператори.
     117
     118Ова претставува напредна функционалност базирана на современи техники од областа на обработка на природен јазик (NLP) и векторски бази на податоци.