The author, Doug Summers Stay, explained the method to me a few years ago:<p>---<p>The idea is very simple.<p>You have a target word and a library of possible adjectives and nouns that start with the letter a, for example.<p>You add an extra element to each vector, so they are now 301 dimensional vectors. For adjectives, you set this to 10, for nouns to -10. In the target word, you set this element to zero. (You might have to play with the values 10 and -10 a little: they should be weighted high enough compared to the other elements that getting them right is a necessity rather than just a nice thing to have.)<p>A sparse decomposition function such as LASSO takes in a (1 x 301 target vector) and a library of n possible vectors stacked up as a (n x 301 matrix) and outputs a (n x 1 vector) which shows how each of the n possible vectors in the library should be weighted in a sum. You tune the sparsity parameter so that it is looking for exactly two non-zero weights. So it needs to find two vectors that add up as closely as possible to the target vector, and one of them must be an adjective and one must be a noun to make it work out right.<p>You perform the sparse decomposition and the non-zero weighted elements are the adj. and noun you want. You can run it again with those words removed from the dictionary if you want other choices.<p>This is just something I came up with and tested. It's never been published anywhere that I'm aware of. You can easily imagine variations to find any number of terms with particular properties or relationships to each other.