297 karma · joined November 12, 2013
chrisemoody@gmail.com
Come lead a team to build real-time state-of-the-art recommender systems.
See more here: https://docs.google.com/presentation/d/1xCUatmnolfzUzfHR6Wmq...
Apply here: https://www.stitchfix.com/careers/jobs?gh_jid=2211077&gh_jid...
Answer: [0] No, there are no plans to support PyTorch. There is nothing to be gained in supporting every novelty framework that crops up every quarter. Our goal is to make deep learning accessible and useful to as many people as possible, and that goal is completely opposite to building up deep learning hipster cred.
I'd be interested in seeing more direct evidence, like SVD factorizing the PMI matrix (which is what similar to what word2vec is doing) and seeing how much of the variance is explained by the first components. If you want to do this, check out: https://minhlab.wordpress.com/2015/06/08/a-new-proof-for-the...
Ultimately, the goal is to use all of the information that is usually available alongside text. Word2vec treats this text like one long string. LDA has the notion of documents. But lda2vec can use more features (for example) the zip code a client comment might come from (and so you get regional topics, like outer wear in Vermont or cowboy boots in Texas) the client ID a comment comes from (so you get that a client might be a sporty client, or a expecting mother) in addition to document-level topics (which might surface customer comments like "perfect service!" or package delivery problems). Those topics are readily consumed by analysts and can be used to understand the business from the client's perspective; word2vec on the other hand produces representations that are hard for anything but machines to consume.
I think it makes more sense when CNNs are applied at the character level. The filter banks then activate for specific n-gram patterns of characters, like certain prefixes, suffixes, and root words. The higher level LSTMs are then relieved of having to understand that level of structure. Also, tokenization is hard, and might be especially wrong for media with grammatical abuse like Twitter, and this avoids that janky preprocessing. See: http://arxiv.org/abs/1508.06615
And has recently covered GAMs, mixed effects models, word2vec, and tools like Pyxley.
So we don't do any fancy deep learning from the images themselves, although this is on the horizon :)
This link is about document distances but still compares other techniques nicely: http://datascience.stackexchange.com/questions/678/what-are-...
(Speaking as one of the authors of the post)
I wonder if there's a simple but powerful example (like king-man+woman=queen for word2vec) of this technique.
http://inspectorgit.com/apache+hadoop-common
Found: Oozie, a 'worfklow' engine for Hadoop (https://github.com/yahoo/oozie) Netty, high-performance networking on top of Hadoop (https://github.com/netty/netty)
Gets Git itself as well memcached!
>> What is the dimensionality of each word vector and what does a words position in this space "mean"? What is this dimensionality determined by?
Each dimension roughly is a new way that words can be similar or dissimilar. So I've got 1000-dimensional vectors, so words can be similar or dissimilar in only one thousand 'ways'. So associations like 'luxury', 'thoughtful', 'person', 'place' or 'object' are learned (roughly speaking). Of course, real words are far more diverse, so this is an approximation. The 1000 dimensions is configurable, and in theory more dimensions means more contrast is captured, but you need more training data. In practice, the number 1000 is chosen because that maxes out the size of my large memory machine. That said, the word2vec paper shows good results with 1000D, so it doesn't seem to be a bad choice.
>> Have your tried any dimensionality reduction algorithms like PCA or Isomap?
Yes! I've tried out PCA, and some spectral biclustering using the off-the-shelf algorithms in SciKits Learn. I only played around with this for an hour or so but got discouraging results. Nevertheless, the word2vec papers actually show that this works really well for projecting France, USA, Paris, DC, London, etc. on a two-dimensional plane where the axis roughly correspond to countried & capitals -- exactly what you'd hope for! I wasn't able to replicate that, but Tomas Mikolov was!
>> It would be interesting to find the word vectors that contain the most variation across all of wikipedia.
Hmm, interesting indeed! I'm not sure how I'd got about measuring 'variation' -- would this amount to isolating word clusters and finding the most dense ones? Something like finding a cluster with a hundred variations of the word 'snow' (if you're Inuit)? I'd be willing to part with the raw vector database if there's interest.
>> Have you tried any other nearest neighbor search methods other than a simple dot product, such as locality sensitive hashing?
Only a little bit, although I'm very interested in finding a faster approach than finding the whole damn dot product (see: https://news.ycombinator.com/item?id=6720359). I worry that traditional location sensitive hashes, kd-trees, and the like work well for 3D locations, but miserably for 1000D data like I have here.
I should reiterate out that most of the hard work revolves around the word2vec algorithm which I used but didn't write. It's awesome, check it and the papers out here: https://code.google.com/p/word2vec/
Whoa, that was alot. Thanks!
Edit. In case you're interested in the source: https://github.com/cemoody/wizlang
So some of your examples, when clarified, are a bit clearer: Paul McCartney - Beatles + Rolling Stones = Mick Jagger is in the 3rd spot. (http://www.thisplusthat.me/search/Paul%20McCartney%20-%20Bea...) Change stone -> Rolling Stones.
Thank you for the comment!
So there's some exciting work to be done in parallelizing and streaming the word2vec algorithm!