ვექტორული ძიება
ვექტორული ძიება PRX-Memory-ში სემანტიკური მეხსიერების მოძიების ძირითადი მექანიზმია. საკვანძო სიტყვების შეწყობის ნაცვლად, ვექტორული ძიება ადარებს შეკითხვასა და მეხსიერების embedding-ებს შორის მათემატიკურ მსგავსებას კონცეპტუალურად დაკავშირებული შედეგების მოსაძებნად.
მუშაობის პრინციპი
- შეკითხვის embedding: გამოძახების შეკითხვა კონფიგურირებულ embedding პროვაიდერს ეგზავნება, ვექტორის წარმოებით.
- მსგავსების გამოთვლა: შეკითხვის ვექტორი ყველა შენახულ მეხსიერების ვექტორს ადარება კოსინუს მსგავსების გამოყენებით.
- შეფასება: ყოველი მეხსიერება მსგავსების ქულას იღებს -1.0-დან 1.0-მდე (მეტი ნიშნავს უფრო მსგავსს).
- რანჟირება: შედეგები ქულის მიხედვით სორტდება და სხვა სიგნალებთან ერთდება (ლექსიკური შეწყობა, მნიშვნელობა, სიახლე).
graph TB
QUERY["Recall Query<br/>'SQL injection prevention'"]
QEMBED["Query Embedding<br/>[0.12, -0.03, 0.87, ...]"]
subgraph Storage["Stored Memory Vectors"]
M1["Memory 1<br/>[0.11, -0.02, 0.85, ...]<br/>similarity: 0.97"]
M2["Memory 2<br/>[0.45, 0.12, -0.33, ...]<br/>similarity: 0.23"]
M3["Memory 3<br/>[0.09, -0.05, 0.82, ...]<br/>similarity: 0.94"]
end
RESULTS["Ranked Results<br/>1. Memory 1 (0.97)<br/>2. Memory 3 (0.94)<br/>3. Memory 2 (0.23)"]
QUERY --> QEMBED
QEMBED --> M1
QEMBED --> M2
QEMBED --> M3
M1 --> RESULTS
M2 --> RESULTS
M3 --> RESULTSკოსინუს მსგავსება
PRX-Memory კოსინუს მსგავსებას იყენებს მანძილის მეტრიკად. კოსინუს მსგავსება ზომავს კუთხეს ორ ვექტორს შორის, სიდიდეს იგნორირებით:
similarity(A, B) = (A . B) / (|A| * |B|)| ქულა | მნიშვნელობა |
|---|---|
| 0.95--1.0 | თითქმის იდენტური მნიშვნელობა |
| 0.80--0.95 | მაღალ-დაკავშირებული |
| 0.60--0.80 | გარკვეულ-დაკავშირებული |
| < 0.60 | სავარაუდოდ დაუკავშირებელი |
კომბინირებული რანჟირება
ვექტორული მსგავსება PRX-Memory-ის მრავალ-სიგნალური რანჟირების ერთ-ერთი სიგნალია. საბოლოო ქულა აერთიანებს:
| სიგნალი | წონა | აღწერა |
|---|---|---|
| ვექტორული მსგავსება | მაღალი | სემანტიკური შესაბამისობა embedding-ის შედარებიდან |
| ლექსიკური შეწყობა | საშუალო | საკვანძო სიტყვების გადაფარვა შეკითხვასა და მეხსიერების ტექსტს შორის |
| მნიშვნელობის ქულა | საშუალო | მომხმარებლის მიერ მინიჭებული ან სისტემის მიერ გამოთვლილი მნიშვნელობა |
| სიახლე | დაბალი | უახლეს მეხსიერებებს მცირე boost |
ზუსტი წონა გამოძახების კონფიგურაციასა და embedding-ისა და reranking-ის ჩართვაზეა დამოკიდებული.
შესრულება
100k-ჩანაწერიანი benchmark გვიჩვენებს:
| მეტრიკა | მნიშვნელობა |
|---|---|
| ნაკრების ზომა | 100,000 ჩანაწერი |
| p95 latency | 122.683ms |
| ზღვარი | < 300ms |
| მეთოდი | ლექსიკური + მნიშვნელობა + სიახლე (ქსელის გამოძახებების გარეშე) |
INFO
ეს benchmark ზომავს მხოლოდ მოძიების რანჟირების გზას, ქსელური embedding ან rerank გამოძახებების გარეშე. end-to-end latency პროვაიდერის პასუხის დროებზეა დამოკიდებული.
მასშტაბირების მოსაზრებები
| ნაკრების ზომა | სასურველი მიდგომა |
|---|---|
| < 10,000 | Brute-force cosine მსგავსება (JSON ან SQLite backend) |
| 10,000--100,000 | SQLite მეხსიერებაში ვექტორული სკანით |
| > 100,000 | LanceDB ANN ინდექსირებით |
100,000 ჩანაწერს გადამეტებული ნაკრებებისთვის ჩართეთ LanceDB backend approximate nearest neighbor (ANN) ძიებისთვის, რომელიც sub-linear შეკითხვის დროს უზრუნველყოფს.
შემდეგი ნაბიჯები
- Embedding ძრავა -- ვექტორების გენერირების მეთოდი
- Reranking -- მეორე-საფეხურიანი სიზუსტის გაუმჯობესება
- შენახვის backend-ები -- სწორი შენახვის backend-ის არჩევა