public PartitionedFeatureVectors(int numPartitions, ExecutorService executor, ToIntBiFunction<String,float[]> partitioner) { Preconditions.checkArgument(numPartitions > 0); Objects.requireNonNull(executor); Objects.requireNonNull(partitioner); partitions = new FeatureVectorsPartition[numPartitions]; for (int i = 0; i < numPartitions; i++) { partitions[i] = new FeatureVectorsPartition(); } partitionMap = ObjectIntHashMap.newMap(); partitionMapLock = new AutoReadWriteLock(); this.partitioner = partitioner; this.executor = executor; }
public FeatureVectorsPartition() { vectors = UnifiedMap.newMap(); recentIDs = UnifiedSet.newSet(); lock = new AutoReadWriteLock(); }
/** * Creates an empty model. * * @param features number of features expected for user/item feature vectors * @param implicit whether model implements implicit feedback * @param logStrength whether input strengths are log transformed * @param epsilon eps in log transform log(1 + r/eps) */ ALSSpeedModel(int features, boolean implicit, boolean logStrength, double epsilon) { Preconditions.checkArgument(features > 0); int numPartitions = Runtime.getRuntime().availableProcessors(); X = new PartitionedFeatureVectors(numPartitions, executor); Y = new PartitionedFeatureVectors(numPartitions, executor); expectedUserIDs = UnifiedSet.newSet(); expectedUserIDsLock = new AutoReadWriteLock(); expectedItemIDs = UnifiedSet.newSet(); expectedItemIDsLock = new AutoReadWriteLock(); this.features = features; this.implicit = implicit; this.logStrength = logStrength; this.epsilon = epsilon; cachedXTXSolver = new SolverCache(executor, X); cachedYTYSolver = new SolverCache(executor, Y); }
/** * Creates an empty model. * * @param features number of features expected for user/item feature vectors * @param implicit whether model implements implicit feedback * @param sampleRate consider only approximately this fraction of all items when making recommendations. * Candidates are chosen intelligently with locality sensitive hashing. * @param rescorerProvider optional instance of a {@link RescorerProvider} */ ALSServingModel(int features, boolean implicit, double sampleRate, RescorerProvider rescorerProvider) { Preconditions.checkArgument(features > 0); Preconditions.checkArgument(sampleRate > 0.0 && sampleRate <= 1.0); lsh = new LocalitySensitiveHash(sampleRate, features); X = new FeatureVectorsPartition(); Y = new PartitionedFeatureVectors( lsh.getNumPartitions(), executor, (String id, float[] vector) -> lsh.getIndexFor(vector)); knownItems = UnifiedMap.newMap(); knownItemsLock = new AutoReadWriteLock(); expectedUserIDs = UnifiedSet.newSet(); expectedUserIDsLock = new AutoReadWriteLock(); expectedItemIDs = UnifiedSet.newSet(); expectedItemIDsLock = new AutoReadWriteLock(); cachedYTYSolver = new SolverCache(executor, Y); this.features = features; this.implicit = implicit; this.rescorerProvider = rescorerProvider; }
@Test public void testReadLock() { ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); AutoReadWriteLock al = new AutoReadWriteLock(lock); assertEquals(0, lock.getReadLockCount()); try (AutoLock al2 = al.autoReadLock()) { assertEquals(1, lock.getReadLockCount()); } assertEquals(0, lock.getReadLockCount()); }
@Test public void testWriteLock() { ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); AutoReadWriteLock al = new AutoReadWriteLock(lock); assertFalse(lock.isWriteLocked()); try (AutoLock al2 = al.autoWriteLock()) { assertTrue(lock.isWriteLocked()); } assertFalse(lock.isWriteLocked()); }
@Test public void testDefault() throws Exception { AutoReadWriteLock al = new AutoReadWriteLock(); assertNotNull(al.toString()); assertNotNull(al.readLock()); assertNotNull(al.writeLock()); }
public PartitionedFeatureVectors(int numPartitions, ExecutorService executor, ToIntBiFunction<String,float[]> partitioner) { Preconditions.checkArgument(numPartitions > 0); Objects.requireNonNull(executor); Objects.requireNonNull(partitioner); partitions = new FeatureVectorsPartition[numPartitions]; for (int i = 0; i < numPartitions; i++) { partitions[i] = new FeatureVectorsPartition(); } partitionMap = ObjectIntHashMap.newMap(); partitionMapLock = new AutoReadWriteLock(); this.partitioner = partitioner; this.executor = executor; }
public FeatureVectorsPartition() { vectors = UnifiedMap.newMap(); recentIDs = UnifiedSet.newSet(); lock = new AutoReadWriteLock(); }
/** * Creates an empty model. * * @param features number of features expected for user/item feature vectors * @param implicit whether model implements implicit feedback * @param logStrength whether input strengths are log transformed * @param epsilon eps in log transform log(1 + r/eps) */ ALSSpeedModel(int features, boolean implicit, boolean logStrength, double epsilon) { Preconditions.checkArgument(features > 0); int numPartitions = Runtime.getRuntime().availableProcessors(); X = new PartitionedFeatureVectors(numPartitions, executor); Y = new PartitionedFeatureVectors(numPartitions, executor); expectedUserIDs = UnifiedSet.newSet(); expectedUserIDsLock = new AutoReadWriteLock(); expectedItemIDs = UnifiedSet.newSet(); expectedItemIDsLock = new AutoReadWriteLock(); this.features = features; this.implicit = implicit; this.logStrength = logStrength; this.epsilon = epsilon; cachedXTXSolver = new SolverCache(executor, X); cachedYTYSolver = new SolverCache(executor, Y); }