1. A computer system comprising: at least one processor; and memory storing: a bipartite graph having a first set of nodes and a second set of nodes, nodes in the first set being connected to nodes in the second set by edges, and instructions that, when executed by the at least one processor, cause the system to: partition each node in the second set into one category of a plurality of disjoint categories, for each category of the plurality of disjoint categories: generate a subgraph for the category, the subgraph comprised of a subset of nodes in the first set and edges linking the nodes in the subset, where the nodes in the subset are selected based on connection to a common neighbor node in the second set that is partitioned into the category, and where edges in the subgraph are based on edges between pairs of nodes in the first set that have the common neighbor node from the second set, and store the subgraph in the memory.