IP Library Patent Application 15908552
Patent Application
App. No. 15/908,552

DISTRIBUTED PROCESSING OF A LARGE MATRIX DATA SET

Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US None
App. No.
15/908,552
Filed
Feb 28, 2018
Art Unit
2129
USPC
706/52
Abstract

Distributed processing of a large matrix data set is disclosed. In various embodiments, a matrix having a plurality of entries having data values and a plurality of entries for which there are no data values is split into a plurality of chunks balanced based at least in part on a distribution of entries across the matrix. Each of the respective chunks is sent to a corresponding worker computer, processor, or thread configured to perform alternative least squares (ALS) processing with respect to the chunk. Results are received from each of the respective worker computers, processors, or threads. The respective results are combined to determine a predicted value for at least a subset of the missing entries of the matrix.

Claims (34)

1 . A system, comprising:

a memory configured to store data associated with a matrix having a plurality of entries having data values and a plurality of entries for which there are no data values;

a processor coupled to the memory and configured to:

split the matrix into a plurality of chunks balanced based at least in part on a distribution of entries across the matrix;

send each of the respective chunks to a corresponding worker computer, processor, or thread configured to perform alternative least squares (ALS) processing with respect to the chunk;

receive results from each of the respective worker computers, processors, or threads; and

combine the respective results to determine a predicted value for at least a subset of the missing entries of the matrix.

2 . The system of claim 1 , wherein the processor is configured to split the matrix into a plurality of chunks at least in part by computing a target number of entries per chunk.

3 . The system of claim 2 , wherein the processor is configured to compute the target number of entries per chunk by determining a total number of entries having data values by a number of computers, processors, or threads.

4 . The system of claim 1 , wherein the processor is configured to determine that the matrix is sparsely populated.

5 . The system of claim 4 , wherein the processor is configured to determine that the matrix is sparsely populated by comparing a total number of entries having data values to a size of the matrix.

6 . The system of claim 1 , wherein the processor is configured to split the matrix into a plurality of chunks at least in part by iterative adding columns or rows to a chunk until a next column or row would result in an aggregate number of entries having data values that exceeds a target number of entries.

7 . The system of claim 6 , wherein the processor is further configured to compute column counts and row counts reflecting for each column and row, or portion thereof not yet assigned to a chunk, respectively, a number of entries having data values in that column, row, or portion thereof.

8 . The system of claim 1 , wherein the matrix comprises a sparse set of ratings by each of a plurality of users and wherein the predicted values comprise predicted ratings, and wherein the processor is further configured to use the predicted ratings to determine a recommendation for a user.

9 . A method, comprising:

using a processor to split a matrix having a plurality of entries having data values and a plurality of entries for which there are no data values into a plurality of chunks balanced based at least in part on a distribution of entries across the matrix;

using the processor to send each of the respective chunks to a corresponding worker computer, processor, or thread configured to perform alternative least squares (ALS) processing with respect to the chunk;

receiving at the processor results from each of the respective worker computers, processors, or threads; and

combining the respective results to determine a predicted value for at least a subset of the missing entries of the matrix.

10 . The method of claim 9 , wherein the matrix is split into a plurality of chunks at least in part by computing a target number of entries per chunk.

11 . The method of claim 10 , wherein the target number of entries per chunk is computed at least in part by determining a total number of entries having data values by a number of computers, processors, or threads.

12 . The method of claim 9 , further comprising determining that the matrix is sparsely populated.

13 . The method of claim 12 , wherein the matrix is determined to be sparsely populated by comparing a total number of entries having data values to a size of the matrix.

14 . The method of claim 9 , wherein the matrix is split into a plurality of chunks at least in part by iterative adding columns or rows to a chunk until a next column or row would result in an aggregate number of entries having data values that exceeds a target number of entries.

15 . The method of claim 14 , further comprising computing column counts and row counts reflecting for each column and row, or portion thereof not yet assigned to a chunk, respectively, a number of entries having data values in that column, row, or portion thereof

16 . The method of claim 9 , wherein the matrix comprises a sparse set of ratings by each of a plurality of users and wherein the predicted values comprise predicted ratings, and wherein the predicted ratings are used to determine a recommendation for a user.

17 . A computer program product embodied in a non-transitory computer readable medium and comprising computer instructions for:

splitting a matrix having a plurality of entries having data values and a plurality of entries for which there are no data values into a plurality of chunks balanced based at least in part on a distribution of entries across the matrix;

sending each of the respective chunks to a corresponding worker computer, processor, or thread configured to perform alternative least squares (ALS) processing with respect to the chunk;

receiving results from each of the respective worker computers, processors, or threads; and

combining the respective results to determine a predicted value for at least a subset of the missing entries of the matrix.

18 . The computer program product of claim 17 , wherein the matrix is split into a plurality of chunks at least in part by computing a target number of entries per chunk.

19 . The computer program product of claim 18 , wherein the target number of entries per chunk is computed at least in part by determining a total number of entries having data values by a number of computers, processors, or threads.

20 . The computer program product of claim 17 , further comprising computer instructions for determining that the matrix is sparsely populated at least in part by comparing a total number of entries having data values to a size of the matrix.

Assignments (14)
CHANGE OF NAME Recorded Jul 1, 2026
From: CLOUD SOFTWARE GROUP, INC.
To: CLOUD SOFTWARE GROUP, LLC
Reel/Frame 075874/0220 →
PATENT SECURITY AGREEMENT Recorded Apr 14, 2023
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 063340/0164 →
RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001) Recorded Apr 14, 2023
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: CITRIX SYSTEMS, INC.; CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.)
Reel/Frame 063339/0525 →
CHANGE OF NAME Recorded Feb 7, 2023
From: TIBCO SOFTWARE INC.
To: CLOUD SOFTWARE GROUP, INC.
Reel/Frame 062714/0634 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 062113/0001 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062112/0262 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 062113/0470 →
RELEASE REEL 052115 / FRAME 0318 Recorded Oct 3, 2022
From: KKR LOAN ADMINISTRATION SERVICES LLC
To: TIBCO SOFTWARE INC.
Reel/Frame 061588/0511 →
RELEASE (REEL 045747 / FRAME 0307) Recorded Sep 30, 2022
From: JPMORGAN CHASE BANK, N.A.
To: TIBCO SOFTWARE INC.
Reel/Frame 061575/0359 →
RELEASE (REEL 054275 / FRAME 0975) Recorded May 7, 2021
From: JPMORGAN CHASE BANK, N.A.
To: TIBCO SOFTWARE INC.
Reel/Frame 056176/0398 →
SECURITY AGREEMENT Recorded Nov 2, 2020
From: TIBCO SOFTWARE INC.
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 054275/0975 →
SECURITY AGREEMENT Recorded Mar 6, 2020
From: TIBCO SOFTWARE INC.
To: KKR LOAN ADMINISTRATION SERVICES LLC, AS COLLATERAL AGENT
Reel/Frame 052115/0318 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded May 23, 2018
From: CHAKRABORTY, SAYAN
To: TIBCO SOFTWARE INC.
Reel/Frame 045884/0781 →
SECURITY INTEREST Recorded May 8, 2018
From: TIBCO SOFTWARE INC., AS GRANTOR
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 045747/0307 →