neighbor 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +15 -7
- data/lib/neighbor/version.rb +1 -1
- data/lib/neighbor.rb +5 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a71d9aff5133b9551dc47cfe490d5d6a0ee63d2b77ac1d3d2f381f58aef67d6
|
4
|
+
data.tar.gz: d22cab3140b979ee0d13ddd2c99f064282e896d49c265bf9b1946dafbda7783a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e24a71c6ace693525fc4866aaa21ee7c75f7251d5d6e0820da3b6abc0bd6fd5921b20c2edbb7fc656b75991e1fc5607357dc02870072900e7b6ef972c840280
|
7
|
+
data.tar.gz: 5b75200355c62c549c2d61820e74e1cc71e4ebce68a1e390af60dbe76b6e1b7a69e71d73c8121db42ea05fc296db4ecc1f5776c71ad988685f13f71fc00fec66
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -23,7 +23,7 @@ rails generate neighbor:cube
|
|
23
23
|
rails db:migrate
|
24
24
|
```
|
25
25
|
|
26
|
-
For vector, install
|
26
|
+
For vector, [install pgvector](https://github.com/ankane/pgvector#installation) and run:
|
27
27
|
|
28
28
|
```sh
|
29
29
|
rails generate neighbor:vector
|
@@ -39,7 +39,7 @@ class AddNeighborVectorToItems < ActiveRecord::Migration[6.1]
|
|
39
39
|
def change
|
40
40
|
add_column :items, :neighbor_vector, :cube
|
41
41
|
# or
|
42
|
-
add_column :items, :neighbor_vector, :vector, limit: 3
|
42
|
+
add_column :items, :neighbor_vector, :vector, limit: 3 # dimensions
|
43
43
|
end
|
44
44
|
end
|
45
45
|
```
|
@@ -88,7 +88,7 @@ class Item < ApplicationRecord
|
|
88
88
|
end
|
89
89
|
```
|
90
90
|
|
91
|
-
For inner product with cube, see [this example](examples/
|
91
|
+
For inner product with cube, see [this example](examples/disco_user_recs_cube.rb).
|
92
92
|
|
93
93
|
Records returned from `nearest_neighbors` will have a `neighbor_distance` attribute
|
94
94
|
|
@@ -116,12 +116,12 @@ For vector, add an approximate index to speed up queries. Create a migration wit
|
|
116
116
|
```ruby
|
117
117
|
class AddIndexToItemsNeighborVector < ActiveRecord::Migration[6.1]
|
118
118
|
def change
|
119
|
-
add_index :items, :neighbor_vector, using: :ivfflat
|
119
|
+
add_index :items, :neighbor_vector, using: :ivfflat, opclass: :vector_l2_ops
|
120
120
|
end
|
121
121
|
end
|
122
122
|
```
|
123
123
|
|
124
|
-
|
124
|
+
Use `:vector_cosine_ops` for cosine distance and `:vector_ip_ops` for inner product.
|
125
125
|
|
126
126
|
Set the number of probes
|
127
127
|
|
@@ -159,9 +159,11 @@ recommender.fit(data)
|
|
159
159
|
Use item factors for the neighbor vector
|
160
160
|
|
161
161
|
```ruby
|
162
|
+
movies = []
|
162
163
|
recommender.item_ids.each do |item_id|
|
163
|
-
|
164
|
+
movies << {name: item_id, neighbor_vector: recommender.item_factors(item_id)}
|
164
165
|
end
|
166
|
+
Movie.insert_all!(movies) # use create! for Active Record < 6
|
165
167
|
```
|
166
168
|
|
167
169
|
And get similar movies
|
@@ -171,7 +173,7 @@ movie = Movie.find_by(name: "Star Wars (1977)")
|
|
171
173
|
movie.nearest_neighbors(distance: "cosine").first(5).map(&:name)
|
172
174
|
```
|
173
175
|
|
174
|
-
|
176
|
+
See the complete code for [cube](examples/disco_item_recs_cube.rb) and [vector](examples/disco_item_recs_vector.rb)
|
175
177
|
|
176
178
|
## Upgrading
|
177
179
|
|
@@ -204,5 +206,11 @@ To get started with development:
|
|
204
206
|
git clone https://github.com/ankane/neighbor.git
|
205
207
|
cd neighbor
|
206
208
|
bundle install
|
209
|
+
createdb neighbor_test
|
210
|
+
|
211
|
+
# cube
|
207
212
|
bundle exec rake test
|
213
|
+
|
214
|
+
# vector
|
215
|
+
EXT=vector bundle exec rake test
|
208
216
|
```
|
data/lib/neighbor/version.rb
CHANGED
data/lib/neighbor.rb
CHANGED
@@ -44,5 +44,9 @@ ActiveSupport.on_load(:active_record) do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
# prevent unknown OID warning
|
47
|
-
ActiveRecord::
|
47
|
+
if ActiveRecord::VERSION::MAJOR >= 7
|
48
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.singleton_class.prepend(Neighbor::RegisterTypes)
|
49
|
+
else
|
50
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(Neighbor::RegisterTypes)
|
51
|
+
end
|
48
52
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neighbor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -60,7 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
requirements: []
|
63
|
-
rubygems_version: 3.2.
|
63
|
+
rubygems_version: 3.2.32
|
64
64
|
signing_key:
|
65
65
|
specification_version: 4
|
66
66
|
summary: Nearest neighbor search for Rails and Postgres
|