MCPcopy
hub / github.com/benfred/implicit / recommend

Method recommend

implicit/ann/nmslib.py:156–230  ·  view source on GitHub ↗
(
        self,
        userid,
        user_items,
        N=10,
        filter_already_liked_items=True,
        filter_items=None,
        recalculate_user=False,
        items=None,
    )

Source from the content-addressed store, hash-verified

154 return ids, scores
155
156 def recommend(
157 self,
158 userid,
159 user_items,
160 N=10,
161 filter_already_liked_items=True,
162 filter_items=None,
163 recalculate_user=False,
164 items=None,
165 ):
166 if (filter_already_liked_items or recalculate_user) and not isinstance(
167 user_items, csr_matrix
168 ):
169 raise ValueError("user_items needs to be a CSR sparse matrix")
170
171 if items is not None and self.approximate_recommend:
172 raise NotImplementedError("using a 'items' list with ANN search isn't supported")
173
174 if not self.approximate_recommend:
175 return self.model.recommend(
176 userid,
177 user_items,
178 N=N,
179 filter_already_liked_items=filter_already_liked_items,
180 filter_items=filter_items,
181 recalculate_user=recalculate_user,
182 items=items,
183 )
184
185 # batch computation is hard here, fallback to looping over items
186 if not np.isscalar(userid):
187 return _batch_call(
188 self.recommend,
189 userid,
190 user_items=user_items,
191 N=N,
192 filter_already_liked_items=filter_already_liked_items,
193 filter_items=filter_items,
194 recalculate_user=recalculate_user,
195 items=items,
196 )
197
198 # support recalculate_user if possible (TODO: come back to this since its a bit of a hack)
199 if hasattr(self.model, "+_user_factor"):
200 user = self.model._user_factor(userid, user_items, recalculate_user) # pylint: disable=protected-access
201 elif recalculate_user:
202 raise NotImplementedError(f"recalculate_user isn't supported with {self.model}")
203 else:
204 user = self.model.user_factors[userid]
205 if implicit.gpu.HAS_CUDA and isinstance(user, implicit.gpu.Matrix):
206 user = user.to_numpy()
207
208 # calculate the top N items, removing the users own liked items from
209 # the results
210 count = N
211 if filter_items:
212 count += len(filter_items)
213 filter_items = np.array(filter_items)

Callers

nothing calls this directly

Calls 3

_batch_callFunction · 0.90
_user_factorMethod · 0.80

Tested by

no test coverage detected