Changes between Version 3 and Version 4 of AdvancedPhase


Ignore:
Timestamp:
06/12/26 23:22:18 (3 days ago)
Author:
231012
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedPhase

    v3 v4  
    1313Инсталација на pgvector во Docker контејнерот и активирање на екстензијата во PostgreSQL
    1414
    15 {{{ docker exec -it camping-postgres bash -c \ "apt-get update && apt-get install -y postgresql-16-pgvector" }}}
     15{{{
     16docker exec -it camping-postgres bash -c \
     17"apt-get update && apt-get install -y postgresql-16-pgvector"
     18}}}
    1619
    17 {{{ CREATE EXTENSION IF NOT EXISTS vector; }}}
     20{{{
     21CREATE EXTENSION IF NOT EXISTS vector;
     22}}}
    1823* '''Чекор 2'''
    19 На табелите Activity, Service и Equipment се додава нова колона од тип vector(384). Димензијата 384 одговара на моделот all-MiniLM-L6-v2 кој се користи за генерирање на embeddings..
     24На табелите Activity, Service и Equipment се додава нова колона од тип vector(384). Димензијата 384 одговара на моделот all-MiniLM-L6-v2 кој се користи за генерирање на embeddings.
     25{{{
     26ALTER TABLE Activity  ADD COLUMN embedding vector(384);
     27ALTER TABLE Service   ADD COLUMN embedding vector(384);
     28ALTER TABLE Equipment ADD COLUMN embedding vector(384)
     29}}}
    2030* '''Чекор 3'''
    2131Embeddings се генерираат преку Python скрипта која користи sentence-transformers библиотека.
     32Инсталација на потребните библиотеки
     33{{{
     34pip install sentence-transformers psycopg2-binary python-dotenv
     35}}}
     36Во .env фајлот ги пополнуваме HOST, PORT, NAME, USER, PASSWORD.
     37
     38Креираме python скрипта generate_embeddings.py
     39{{{
     40import psycopg2
     41from sentence_transformers import SentenceTransformer
     42from dotenv import load_dotenv
     43import os
     44
     45load_dotenv()
     46
     47conn = psycopg2.connect(
     48    host=os.getenv("DB_HOST"),
     49    port=os.getenv("DB_PORT"),
     50    database=os.getenv("DB_NAME"),
     51    user=os.getenv("DB_USER"),
     52    password=os.getenv("DB_PASSWORD")
     53)
     54cursor = conn.cursor()
     55
     56model = SentenceTransformer('all-MiniLM-L6-v2')
     57
     58# Embeddings za Activity
     59print("Generating embeddings for activities...")
     60cursor.execute("SELECT activity_id, description FROM Activity WHERE description IS NOT NULL")
     61activities = cursor.fetchall()
     62
     63for activity_id, description in activities:
     64    embedding = model.encode(description).tolist()
     65    cursor.execute(
     66        "UPDATE Activity SET embedding = %s WHERE activity_id = %s",
     67        (embedding, activity_id)
     68    )
     69
     70conn.commit()
     71print(f"Done! {len(activities)} activities executed.")
     72
     73# Embeddings za Service
     74print("Generating embeddings for services...")
     75cursor.execute("SELECT serviceId, description FROM Service WHERE description IS NOT NULL")
     76services = cursor.fetchall()
     77
     78for service_id, description in services:
     79    embedding = model.encode(description).tolist()
     80    cursor.execute(
     81        "UPDATE Service SET embedding = %s WHERE serviceId = %s",
     82        (embedding, service_id)
     83    )
     84
     85conn.commit()
     86print(f"Done! {len(services)} services executed.")
     87
     88# Embeddings za Equipment
     89print("Generating embeddings for Equipment...")
     90cursor.execute("SELECT equipmentId, description FROM Equipment WHERE description IS NOT NULL")
     91equipments = cursor.fetchall()
     92
     93for equipment_id, description in equipments:
     94    embedding = model.encode(description).tolist()
     95    cursor.execute(
     96        "UPDATE Equipment SET embedding = %s WHERE equipmentId = %s",
     97        (embedding, equipment_id)
     98    )
     99
     100conn.commit()
     101print(f"Done! {len(equipments)} equipments executed.")
     102
     103cursor.close()
     104conn.close()
     105
     106}}}
    22107* '''Чекор 4'''
    23108За брзо пребарување по сличност се креираат ivfflat индекси. Со ivfflat индекс векторите се групираат во кластери и се пребарува само во најблиските — многу побрзо.