Package: hyperhyper
hyperhyperPython Library to Construct Word Embeddings for Small Data. Still work in progress.Building upon the work by Omer Levy et al. forHyperwords.Why?Nowadays,word embeddingsare mostly associated withWord2vecorfastText. Those approaches focus on scenarios, where an abundance of data is available. But to make them work, you also need a lot of data. This is not always the case. There exists alternative methods based on counting word pairs and some math magic around matrix operations. They need less data. This Python library implements the approaches (somewhat) efficiently (but there is there is still room for improvement.)hyperhyperis based ona paperfrom 2015. The authors, Omer Levy et al., published their research code asHyperwods.
Itriedto the port their original software to Python 3 but I ended up re-writing large parts of it. So this library was born.Limitations: Withhyperhyperyou will run into (memory) problems, if you need large vocabularies (set of possible words). It's fine if you have a vocabulary up until 50k. Word2vec and fastText especially solve thiscurse of dimensionality.InstallationpipinstallhyperhyperIf you have an Intel CPU, it's recommended to use the MKL library fornumpy. It can be challening to correctly set up MKL. A package by intel may help you.condainstall-cintelintelpython3_core
pipinstallhyperhyperVerify whetermkl_infois present:>>>importnumpy>>>numpy.__config__.show()Disable internal multithreading ability of MKL or OpenBLAS.exportOPENBLAS_NUM_THREADS=1exportMKL_NUM_THREADS=1This speeds up computation because we are using multiprocessing on an outer loop.Usageimporthyperhyperashycorpus=hy.Corpus.from_file('news.2010.en.shuffled')bunch=hy.Bunch("news_bunch",corpus)vectors,results=bunch.svd(keyed_vectors=True)results['results'][1]>>>{'name':'en_ws353','score':0.6510955349164682,'oov':0.014164305949008499,'fullscore':0.641873218557878}vectors.most_similar('berlin')>>>[('vienna',0.6323208808898926),('frankfurt',0.5965485572814941),('munich',0.5737138986587524),('amsterdam',0.5511572360992432),('stockholm',0.5423270463943481)]Seeexamplesfor more.The general concepts:Preprocess data once and save them in abunchCache all results and also record their perfomance on test dataMake it easy to fine-tune paramters for you dataMore documenation may be forthcoming. Until then you have to read thesource code.Scientific BackgroundThis software is based on the following papers:Improving Distributional Similarity with Lessons Learned from Word Embeddings, Omer Levy, Yoav Goldberg, Ido Dagan, TACL 2015.PaperCodeRecent trends suggest that neural-network-inspired word embedding models outperform traditional count-based distributional models on word similarity and analogy detection tasks. We reveal that much of the performance gains of word embeddings are due to certain system design choices and hyperparameter optimizations, rather than the embedding algorithms themselves. Furthermore, we show that these modifications can be transferred to traditional distributional models, yielding similar gains. In contrast to prior reports, we observe mostly local or insignificant performance differences between the methods, with no global advantage to any single approach over the others.The Influence of Down-Sampling Strategies on SVD Word Embedding Stability, Johannes Hellrich, Bernd Kampe, Udo Hahn, NAACL 2019.PaperCodeCodeThe stability of word embedding algorithms, i.e., the consistency of the word representations they reveal when trained repeatedly on the same data set, has recently raised concerns. We here compare word embedding algorithms on three corpora of different sizes, and evaluate both their stability and accuracy. We find strong evidence that down-sampling strategies (used as part of their training procedures) are particularly influential for the stability of SVD-PPMI-type embeddings. This finding seems to explain diverging reports on their stability and lead us to a simple modification which provides superior stability as well as accuracy on par with skip-gram embeddingDevelopmentInstallpipenv.git clone https://github.com/jfilter/hyperhyper && cd hyperhyper && pipenv install && pipenv shellpython -m spacy download en_core_web_smpytest testsContributingIf you have aquestion, found abugor want to propose a newfeature, have a look at theissues page.Pull requestsare especially welcomed when they fix bugs or improve the code quality.Future Work / TODOevaluation for analogiesreplace pipenv if they still don't ship any newer releaseimplement counting in a more efficient programming language, e.g. Cython.Why is this library namedhyperhyper?LicenseBSD-2-Clause.SponsoringThis work was created as part of aprojectthat was funded by the GermanFederal Ministry of Education and Research.