diff --git a/CHANGELOG.md b/CHANGELOG.md
index b658cb84b4..db28d7a80a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,7 +6,34 @@ Unreleased:
===========
-2.0.0, 2017-04-10
+## 2.1.0, 2017-05-12
+
+:star2: New features:
+* Add modified save_word2vec_format for Doc2Vec, to save document vectors. (@parulsethi, [#1256](https://github.com/RaRe-Technologies/gensim/pull/1256))
+
+
+:+1: Improvements:
+* Add automatic code style check limited only to the code modified in PR (@tmylk, [#1287](https://github.com/RaRe-Technologies/gensim/pull/1287))
+* Replace `logger.warn` by `logger.warning` (@chinmayapancholi13, [#1295](https://github.com/RaRe-Technologies/gensim/pull/1295))
+* Docs word2vec docstring improvement, deprecation labels (@shubhvachher, [#1274](https://github.com/RaRe-Technologies/gensim/pull/1274))
+* Stop passing 'sentences' as parameter to Doc2Vec. Fix #511 (@gogokaradjov, [#1306](https://github.com/RaRe-Technologies/gensim/pull/1306))
+
+
+:red_circle: Bug fixes:
+* Allow indexing with np.int64 in doc2vec. Fix #1231 (@bogdanteleaga, [#1254](https://github.com/RaRe-Technologies/gensim/pull/1254))
+* Update Doc2Vec docstring. Fix #1302 (@datapythonista, [#1307](https://github.com/RaRe-Technologies/gensim/pull/1307))
+* Ignore rst and ipynb file in Travis flake8 validations (@datapythonista, [#1309](https://github.com/RaRe-Technologies/gensim/pull/1309))
+
+
+:books: Tutorial and doc improvements:
+* Update Tensorboard Doc2Vec notebook (@parulsethi, [#1286](https://github.com/RaRe-Technologies/gensim/pull/1286))
+* Update Doc2Vec IMDB Notebook, replace codesc to smart_open (@robotcator, [#1278](https://github.com/RaRe-Technologies/gensim/pull/1278))
+* Add explanation of `size` to Word2Vec Notebook (@jbcoe, [#1305](https://github.com/RaRe-Technologies/gensim/pull/1305))
+* Add extra param to WordRank notebook. Fix #1276 (@parulsethi, [#1300](https://github.com/RaRe-Technologies/gensim/pull/1300))
+* Update warning message in WordRank (@parulsethi, [#1299](https://github.com/RaRe-Technologies/gensim/pull/1299))
+
+
+## 2.0.0, 2017-04-10
Breaking changes:
@@ -17,169 +44,168 @@ See the [method documentation](https://github.com/RaRe-Technologies/gensim/blob/
* Explicit epochs and corpus size in word2vec train(). (@gojomo, @robotcator, [#1139](https://github.com/RaRe-Technologies/gensim/pull/1139), [#1237](https://github.com/RaRe-Technologies/gensim/pull/1237))
New features:
-* Add modified save_word2vec_format for Doc2Vec, to save document vectors. (@parulsethi,[#1256](https://github.com/RaRe-Technologies/gensim/pull/1256))
-* Add output word prediction in word2vec. Only for negative sampling scheme. See [ipynb]( https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/word2vec.ipynb) (@chinmayapancholi13,[#1209](https://github.com/RaRe-Technologies/gensim/pull/1209))
-* scikit_learn wrapper for LSI Model in Gensim (@chinmayapancholi13,[#1244](https://github.com/RaRe-Technologies/gensim/pull/1244))
-* Add the 'keep_tokens' parameter to 'filter_extremes'. (@toliwa,[#1210](https://github.com/RaRe-Technologies/gensim/pull/1210))
-* Load FastText models with specified encoding (@jayantj,[#1210](https://github.com/RaRe-Technologies/gensim/pull/1189))
+* Add output word prediction in word2vec. Only for negative sampling scheme. See [ipynb]( https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/word2vec.ipynb) (@chinmayapancholi13, [#1209](https://github.com/RaRe-Technologies/gensim/pull/1209))
+* scikit_learn wrapper for LSI Model in Gensim (@chinmayapancholi13, [#1244](https://github.com/RaRe-Technologies/gensim/pull/1244))
+* Add the 'keep_tokens' parameter to 'filter_extremes'. (@toliwa, [#1210](https://github.com/RaRe-Technologies/gensim/pull/1210))
+* Load FastText models with specified encoding (@jayantj, [#1210](https://github.com/RaRe-Technologies/gensim/pull/1189))
Improvements:
-* Fix loading large FastText models on Mac. (@jaksmid,[#1196](https://github.com/RaRe-Technologies/gensim/pull/1214))
-* Sklearn LDA wrapper now works in sklearn pipeline (@kris-singh,[#1213](https://github.com/RaRe-Technologies/gensim/pull/1213))
-* glove2word2vec conversion script refactoring (@parulsethi,[#1247](https://github.com/RaRe-Technologies/gensim/pull/1247))
-* Word2vec error message when update called before train . Fix #1162 (@hemavakade,[#1205](https://github.com/RaRe-Technologies/gensim/pull/1205))
-* Allow training if model is not modified by "_minimize_model". Add deprecation warning. (@chinmayapancholi13,[#1207](https://github.com/RaRe-Technologies/gensim/pull/1207))
-* Update the warning text when building vocab on a trained w2v model (@prakhar2b,[#1190](https://github.com/RaRe-Technologies/gensim/pull/1190))
+* Fix loading large FastText models on Mac. (@jaksmid, [#1196](https://github.com/RaRe-Technologies/gensim/pull/1214))
+* Sklearn LDA wrapper now works in sklearn pipeline (@kris-singh, [#1213](https://github.com/RaRe-Technologies/gensim/pull/1213))
+* glove2word2vec conversion script refactoring (@parulsethi, [#1247](https://github.com/RaRe-Technologies/gensim/pull/1247))
+* Word2vec error message when update called before train . Fix #1162 (@hemavakade, [#1205](https://github.com/RaRe-Technologies/gensim/pull/1205))
+* Allow training if model is not modified by "_minimize_model". Add deprecation warning. (@chinmayapancholi13, [#1207](https://github.com/RaRe-Technologies/gensim/pull/1207))
+* Update the warning text when building vocab on a trained w2v model (@prakhar2b, [#1190](https://github.com/RaRe-Technologies/gensim/pull/1190))
Bug fixes:
-* Fix word2vec reset_from bug in v1.0.1 Fix #1230. (@Kreiswolke,[#1234](https://github.com/RaRe-Technologies/gensim/pull/1234))
+* Fix word2vec reset_from bug in v1.0.1 Fix #1230. (@Kreiswolke, [#1234](https://github.com/RaRe-Technologies/gensim/pull/1234))
-* Distributed LDA: checking the length of docs instead of the boolean value, plus int index conversion (@saparina ,[#1191](https://github.com/RaRe-Technologies/gensim/pull/1191))
+* Distributed LDA: checking the length of docs instead of the boolean value, plus int index conversion (@saparina, [#1191](https://github.com/RaRe-Technologies/gensim/pull/1191))
-* syn0_lockf initialised with zero in intersect_word2vec_format() (@KiddoZhu,[#1267](https://github.com/RaRe-Technologies/gensim/pull/1267))
+* syn0_lockf initialised with zero in intersect_word2vec_format() (@KiddoZhu, [#1267](https://github.com/RaRe-Technologies/gensim/pull/1267))
-* Fix wordrank max_iter_dump calculation. Fix #1216 (@ajkl,[#1217](https://github.com/RaRe-Technologies/gensim/pull/1217))
+* Fix wordrank max_iter_dump calculation. Fix #1216 (@ajkl, [#1217](https://github.com/RaRe-Technologies/gensim/pull/1217))
-* Make SgNegative test use sg (@shubhvachher ,[#1252](https://github.com/RaRe-Technologies/gensim/pull/1252))
+* Make SgNegative test use skip-gram (@shubhvachher, [#1252](https://github.com/RaRe-Technologies/gensim/pull/1252))
-* pep8/pycodestyle fixes for hanging indents in Summarization module (@SamriddhiJain ,[#1202](https://github.com/RaRe-Technologies/gensim/pull/1202))
+* pep8/pycodestyle fixes for hanging indents in Summarization module (@SamriddhiJain, [#1202](https://github.com/RaRe-Technologies/gensim/pull/1202))
-* WordRank and Mallet wrappers single vs double quote issue in windows.(@prakhar2b,[#1208](https://github.com/RaRe-Technologies/gensim/pull/1208))
+* WordRank and Mallet wrappers single vs double quote issue in windows. (@prakhar2b, [#1208](https://github.com/RaRe-Technologies/gensim/pull/1208))
-* Fix #824 : no corpus in init, but trim_rule in init (@prakhar2b ,[#1186](https://github.com/RaRe-Technologies/gensim/pull/1186))
+* Fix #824 : no corpus in init, but trim_rule in init (@prakhar2b, [#1186](https://github.com/RaRe-Technologies/gensim/pull/1186))
-* Hardcode version number. Fix #1138. ( @tmylk, [#1138](https://github.com/RaRe-Technologies/gensim/pull/1138))
+* Hardcode version number. Fix #1138. (@tmylk, [#1138](https://github.com/RaRe-Technologies/gensim/pull/1138))
Tutorial and doc improvements:
* Color dictionary according to topic notebook update (@bhargavvader, [#1164](https://github.com/RaRe-Technologies/gensim/pull/1164))
-* Fix hdp show_topic/s docstring ( @parulsethi, [#1264](https://github.com/RaRe-Technologies/gensim/pull/1264))
+* Fix hdp show_topic/s docstring (@parulsethi, [#1264](https://github.com/RaRe-Technologies/gensim/pull/1264))
-* Add docstrings for word2vec.py forwarding functions ( @shubhvachher, [#1251](https://github.com/RaRe-Technologies/gensim/pull/1251))
+* Add docstrings for word2vec.py forwarding functions (@shubhvachher, [#1251](https://github.com/RaRe-Technologies/gensim/pull/1251))
-* updated description for worker_loop function used in score function ( @chinmayapancholi13 , [#1206](https://github.com/RaRe-Technologies/gensim/pull/1206))
+* updated description for worker_loop function used in score function (@chinmayapancholi13, [#1206](https://github.com/RaRe-Technologies/gensim/pull/1206))
-1.0.1, 2017-03-03
+## 1.0.1, 2017-03-03
-* Rebuild cumulative table on load. Fix #1180. (@tmylk,[#1181](https://github.com/RaRe-Technologies/gensim/pull/893))
+* Rebuild cumulative table on load. Fix #1180. (@tmylk, [#1181](https://github.com/RaRe-Technologies/gensim/pull/893))
* most_similar_cosmul bug fix (@dkim010, [#1177](https://github.com/RaRe-Technologies/gensim/pull/1177))
* Fix loading old word2vec models pre-1.0.0 (@jayantj, [#1179](https://github.com/RaRe-Technologies/gensim/pull/1179))
* Load utf-8 words in fasttext (@jayantj, [#1176](https://github.com/RaRe-Technologies/gensim/pull/1176))
-1.0.0, 2017-02-24
+## 1.0.0, 2017-02-24
New features:
-* Add Author-topic modeling (@olavurmortensen,[#893](https://github.com/RaRe-Technologies/gensim/pull/893))
-* Add FastText word embedding wrapper (@Jayantj,[#847](https://github.com/RaRe-Technologies/gensim/pull/847))
-* Add WordRank word embedding wrapper (@parulsethi,[#1066](https://github.com/RaRe-Technologies/gensim/pull/1066), [#1125](https://github.com/RaRe-Technologies/gensim/pull/1125))
-* Add VarEmbed word embedding wrapper (@anmol01gulati, [#1067](https://github.com/RaRe-Technologies/gensim/pull/1067)))
-* Add sklearn wrapper for LDAModel (@AadityaJ,[#932](https://github.com/RaRe-Technologies/gensim/pull/932))
+* Add Author-topic modeling (@olavurmortensen, [#893](https://github.com/RaRe-Technologies/gensim/pull/893))
+* Add FastText word embedding wrapper (@Jayantj, [#847](https://github.com/RaRe-Technologies/gensim/pull/847))
+* Add WordRank word embedding wrapper (@parulsethi, [#1066](https://github.com/RaRe-Technologies/gensim/pull/1066), [#1125](https://github.com/RaRe-Technologies/gensim/pull/1125))
+* Add VarEmbed word embedding wrapper (@anmol01gulati, [#1067](https://github.com/RaRe-Technologies/gensim/pull/1067)))
+* Add sklearn wrapper for LDAModel (@AadityaJ, [#932](https://github.com/RaRe-Technologies/gensim/pull/932))
Deprecated features:
-* Move `load_word2vec_format` and `save_word2vec_format` out of Word2Vec class to KeyedVectors (@tmylk,[#1107](https://github.com/RaRe-Technologies/gensim/pull/1107))
+* Move `load_word2vec_format` and `save_word2vec_format` out of Word2Vec class to KeyedVectors (@tmylk, [#1107](https://github.com/RaRe-Technologies/gensim/pull/1107))
* Move properties `syn0norm`, `syn0`, `vocab`, `index2word` from Word2Vec class to KeyedVectors (@tmylk,[#1147](https://github.com/RaRe-Technologies/gensim/pull/1147))
* Remove support for Python 2.6, 3.3 and 3.4 (@tmylk,[#1145](https://github.com/RaRe-Technologies/gensim/pull/1145))
Improvements:
-* Python 3.6 support (@tmylk [#1077](https://github.com/RaRe-Technologies/gensim/pull/1077))
+* Python 3.6 support (@tmylk [#1077](https://github.com/RaRe-Technologies/gensim/pull/1077))
* Phrases and Phraser allow a generator corpus (ELind77 [#1099](https://github.com/RaRe-Technologies/gensim/pull/1099))
-* Ignore DocvecsArray.doctag_syn0norm in save. Fix #789 (@accraze,[#1053](https://github.com/RaRe-Technologies/gensim/pull/1053))
-* Fix bug in LsiModel that occurs when id2word is a Python 3 dictionary. (@cvangysel,[#1103](https://github.com/RaRe-Technologies/gensim/pull/1103)
-* Fix broken link to paper in readme (@bhargavvader,[#1101](https://github.com/RaRe-Technologies/gensim/pull/1101))
-* Lazy formatting in evaluate_word_pairs (@akutuzov,[#1084](https://github.com/RaRe-Technologies/gensim/pull/1084))
-* Deacc option to keywords pre-processing (@bhargavvader,[#1076](https://github.com/RaRe-Technologies/gensim/pull/1076))
+* Ignore DocvecsArray.doctag_syn0norm in save. Fix #789 (@accraze, [#1053](https://github.com/RaRe-Technologies/gensim/pull/1053))
+* Fix bug in LsiModel that occurs when id2word is a Python 3 dictionary. (@cvangysel, [#1103](https://github.com/RaRe-Technologies/gensim/pull/1103)
+* Fix broken link to paper in readme (@bhargavvader, [#1101](https://github.com/RaRe-Technologies/gensim/pull/1101))
+* Lazy formatting in evaluate_word_pairs (@akutuzov, [#1084](https://github.com/RaRe-Technologies/gensim/pull/1084))
+* Deacc option to keywords pre-processing (@bhargavvader, [#1076](https://github.com/RaRe-Technologies/gensim/pull/1076))
* Generate Deprecated exception when using Word2Vec.load_word2vec_format (@tmylk, [#1165](https://github.com/RaRe-Technologies/gensim/pull/1165))
* Fix hdpmodel constructor docstring for print_topics (#1152) (@toliwa, [#1152](https://github.com/RaRe-Technologies/gensim/pull/1152))
-* Default to per_word_topics=False in LDA get_item for performance (@menshikh-iv, [#1154](https://github.com/RaRe-Technologies/gensim/pull/1154))
-* Fix bound computation in Author Topic models. (@olavurmortensen, [#1156](https://github.com/RaRe-Technologies/gensim/pull/1156))
-* Write UTF-8 byte strings in tensorboard conversion (@tmylk,[#1144](https://github.com/RaRe-Technologies/gensim/pull/1144))
-* Make top_topics and sparse2full compatible with numpy 1.12 strictly int idexing (@tmylk,[#1146](https://github.com/RaRe-Technologies/gensim/pull/1146))
+* Default to per_word_topics=False in LDA get_item for performance (@menshikh-iv, [#1154](https://github.com/RaRe-Technologies/gensim/pull/1154))
+* Fix bound computation in Author Topic models. (@olavurmortensen, [#1156](https://github.com/RaRe-Technologies/gensim/pull/1156))
+* Write UTF-8 byte strings in tensorboard conversion (@tmylk, [#1144](https://github.com/RaRe-Technologies/gensim/pull/1144))
+* Make top_topics and sparse2full compatible with numpy 1.12 strictly int idexing (@tmylk, [#1146](https://github.com/RaRe-Technologies/gensim/pull/1146))
Tutorial and doc improvements:
-* Clarifying comment in is_corpus func in utils.py (@greninja,[#1109](https://github.com/RaRe-Technologies/gensim/pull/1109))
-* Tutorial Topics_and_Transformations fix markdown and add references (@lgmoneda,[#1120](https://github.com/RaRe-Technologies/gensim/pull/1120))
-* Fix doc2vec-lee.ipynb results to match previous behavior (@bahbbc,[#1119](https://github.com/RaRe-Technologies/gensim/pull/1119))
-* Remove Pattern lib dependency in News Classification tutorial (@luizcavalcanti,[#1118](https://github.com/RaRe-Technologies/gensim/pull/1118))
-* Corpora_and_Vector_Spaces tutorial text clarification (@lgmoneda,[#1116](https://github.com/RaRe-Technologies/gensim/pull/1116))
-* Update Transformation and Topics link from quick start notebook (@mariana393,[#1115](https://github.com/RaRe-Technologies/gensim/pull/1115))
-* Quick Start Text clarification and typo correction (@luizcavalcanti,[#1114](https://github.com/RaRe-Technologies/gensim/pull/1114))
-* Fix typos in Author-topic tutorial (@Fil,[#1102](https://github.com/RaRe-Technologies/gensim/pull/1102))
-* Address benchmark inconsistencies in Annoy tutorial (@droudy,[#1113](https://github.com/RaRe-Technologies/gensim/pull/1113))
-* Add note about Annoy speed depending on numpy BLAS setup in annoytutorial.ipynb (@greninja,[#1137](https://github.com/RaRe-Technologies/gensim/pull/1137))
+* Clarifying comment in is_corpus func in utils.py (@greninja, [#1109](https://github.com/RaRe-Technologies/gensim/pull/1109))
+* Tutorial Topics_and_Transformations fix markdown and add references (@lgmoneda, [#1120](https://github.com/RaRe-Technologies/gensim/pull/1120))
+* Fix doc2vec-lee.ipynb results to match previous behavior (@bahbbc, [#1119](https://github.com/RaRe-Technologies/gensim/pull/1119))
+* Remove Pattern lib dependency in News Classification tutorial (@luizcavalcanti, [#1118](https://github.com/RaRe-Technologies/gensim/pull/1118))
+* Corpora_and_Vector_Spaces tutorial text clarification (@lgmoneda, [#1116](https://github.com/RaRe-Technologies/gensim/pull/1116))
+* Update Transformation and Topics link from quick start notebook (@mariana393, [#1115](https://github.com/RaRe-Technologies/gensim/pull/1115))
+* Quick Start Text clarification and typo correction (@luizcavalcanti, [#1114](https://github.com/RaRe-Technologies/gensim/pull/1114))
+* Fix typos in Author-topic tutorial (@Fil, [#1102](https://github.com/RaRe-Technologies/gensim/pull/1102))
+* Address benchmark inconsistencies in Annoy tutorial (@droudy, [#1113](https://github.com/RaRe-Technologies/gensim/pull/1113))
+* Add note about Annoy speed depending on numpy BLAS setup in annoytutorial.ipynb (@greninja, [#1137](https://github.com/RaRe-Technologies/gensim/pull/1137))
* Fix dependencies description on doc2vec-IMDB notebook (@luizcavalcanti, [#1132](https://github.com/RaRe-Technologies/gensim/pull/1132))
* Add documentation for WikiCorpus metadata. (@kirit93, [#1163](https://github.com/RaRe-Technologies/gensim/pull/1163))
-1.0.0RC2, 2017-02-16
+## 1.0.0RC2, 2017-02-16
-* Add note about Annoy speed depending on numpy BLAS setup in annoytutorial.ipynb (@greninja,[#1137](https://github.com/RaRe-Technologies/gensim/pull/1137))
-* Remove direct access to properties moved to KeyedVectors (@tmylk,[#1147](https://github.com/RaRe-Technologies/gensim/pull/1147))
-* Remove support for Python 2.6, 3.3 and 3.4 (@tmylk,[#1145](https://github.com/RaRe-Technologies/gensim/pull/1145))
-* Write UTF-8 byte strings in tensorboard conversion (@tmylk,[#1144](https://github.com/RaRe-Technologies/gensim/pull/1144))
-* Make top_topics and sparse2full compatible with numpy 1.12 strictly int idexing (@tmylk,[#1146](https://github.com/RaRe-Technologies/gensim/pull/1146))
+* Add note about Annoy speed depending on numpy BLAS setup in annoytutorial.ipynb (@greninja, [#1137](https://github.com/RaRe-Technologies/gensim/pull/1137))
+* Remove direct access to properties moved to KeyedVectors (@tmylk, [#1147](https://github.com/RaRe-Technologies/gensim/pull/1147))
+* Remove support for Python 2.6, 3.3 and 3.4 (@tmylk, [#1145](https://github.com/RaRe-Technologies/gensim/pull/1145))
+* Write UTF-8 byte strings in tensorboard conversion (@tmylk, [#1144](https://github.com/RaRe-Technologies/gensim/pull/1144))
+* Make top_topics and sparse2full compatible with numpy 1.12 strictly int idexing (@tmylk, [#1146](https://github.com/RaRe-Technologies/gensim/pull/1146))
-1.0.0RC1, 2017-01-31
+## 1.0.0RC1, 2017-01-31
New features:
-* Add Author-topic modeling (@olavurmortensen,[#893](https://github.com/RaRe-Technologies/gensim/pull/893))
-* Add FastText word embedding wrapper (@Jayantj,[#847](https://github.com/RaRe-Technologies/gensim/pull/847))
-* Add WordRank word embedding wrapper (@parulsethi,[#1066](https://github.com/RaRe-Technologies/gensim/pull/1066), [#1125](https://github.com/RaRe-Technologies/gensim/pull/1125))
-* Add sklearn wrapper for LDAModel (@AadityaJ,[#932](https://github.com/RaRe-Technologies/gensim/pull/932))
+* Add Author-topic modeling (@olavurmortensen, [#893](https://github.com/RaRe-Technologies/gensim/pull/893))
+* Add FastText word embedding wrapper (@Jayantj, [#847](https://github.com/RaRe-Technologies/gensim/pull/847))
+* Add WordRank word embedding wrapper (@parulsethi, [#1066](https://github.com/RaRe-Technologies/gensim/pull/1066), [#1125](https://github.com/RaRe-Technologies/gensim/pull/1125))
+* Add sklearn wrapper for LDAModel (@AadityaJ, [#932](https://github.com/RaRe-Technologies/gensim/pull/932))
Improvements:
-* Python 3.6 support (@tmylk [#1077](https://github.com/RaRe-Technologies/gensim/pull/1077))
+* Python 3.6 support (@tmylk [#1077](https://github.com/RaRe-Technologies/gensim/pull/1077))
* Phrases and Phraser allow a generator corpus (ELind77 [#1099](https://github.com/RaRe-Technologies/gensim/pull/1099))
-* Ignore DocvecsArray.doctag_syn0norm in save. Fix #789 (@accraze,[#1053](https://github.com/RaRe-Technologies/gensim/pull/1053))
-* Move load and save word2vec_format out of word2vec class to KeyedVectors (@tmylk,[#1107](https://github.com/RaRe-Technologies/gensim/pull/1107))
-* Fix bug in LsiModel that occurs when id2word is a Python 3 dictionary. (@cvangysel,[#1103](https://github.com/RaRe-Technologies/gensim/pull/1103)
-* Fix broken link to paper in readme (@bhargavvader,[#1101](https://github.com/RaRe-Technologies/gensim/pull/1101))
-* Lazy formatting in evaluate_word_pairs (@akutuzov,[#1084](https://github.com/RaRe-Technologies/gensim/pull/1084))
-* Deacc option to keywords pre-processing (@bhargavvader,[#1076](https://github.com/RaRe-Technologies/gensim/pull/1076))
+* Ignore DocvecsArray.doctag_syn0norm in save. Fix #789 (@accraze, [#1053](https://github.com/RaRe-Technologies/gensim/pull/1053))
+* Move load and save word2vec_format out of word2vec class to KeyedVectors (@tmylk, [#1107](https://github.com/RaRe-Technologies/gensim/pull/1107))
+* Fix bug in LsiModel that occurs when id2word is a Python 3 dictionary. (@cvangysel, [#1103](https://github.com/RaRe-Technologies/gensim/pull/1103)
+* Fix broken link to paper in readme (@bhargavvader, [#1101](https://github.com/RaRe-Technologies/gensim/pull/1101))
+* Lazy formatting in evaluate_word_pairs (@akutuzov, [#1084](https://github.com/RaRe-Technologies/gensim/pull/1084))
+* Deacc option to keywords pre-processing (@bhargavvader, [#1076](https://github.com/RaRe-Technologies/gensim/pull/1076))
Tutorial and doc improvements:
-* Clarifying comment in is_corpus func in utils.py (@greninja,[#1109](https://github.com/RaRe-Technologies/gensim/pull/1109))
-* Tutorial Topics_and_Transformations fix markdown and add references (@lgmoneda,[#1120](https://github.com/RaRe-Technologies/gensim/pull/1120))
-* Fix doc2vec-lee.ipynb results to match previous behavior (@bahbbc,[#1119](https://github.com/RaRe-Technologies/gensim/pull/1119))
-* Remove Pattern lib dependency in News Classification tutorial (@luizcavalcanti,[#1118](https://github.com/RaRe-Technologies/gensim/pull/1118))
-* Corpora_and_Vector_Spaces tutorial text clarification (@lgmoneda,[#1116](https://github.com/RaRe-Technologies/gensim/pull/1116))
-* Update Transformation and Topics link from quick start notebook (@mariana393,[#1115](https://github.com/RaRe-Technologies/gensim/pull/1115))
-* Quick Start Text clarification and typo correction (@luizcavalcanti,[#1114](https://github.com/RaRe-Technologies/gensim/pull/1114))
-* Fix typos in Author-topic tutorial (@Fil,[#1102](https://github.com/RaRe-Technologies/gensim/pull/1102))
-* Address benchmark inconsistencies in Annoy tutorial (@droudy,[#1113](https://github.com/RaRe-Technologies/gensim/pull/1113))
+* Clarifying comment in is_corpus func in utils.py (@greninja, [#1109](https://github.com/RaRe-Technologies/gensim/pull/1109))
+* Tutorial Topics_and_Transformations fix markdown and add references (@lgmoneda, [#1120](https://github.com/RaRe-Technologies/gensim/pull/1120))
+* Fix doc2vec-lee.ipynb results to match previous behavior (@bahbbc, [#1119](https://github.com/RaRe-Technologies/gensim/pull/1119))
+* Remove Pattern lib dependency in News Classification tutorial (@luizcavalcanti, [#1118](https://github.com/RaRe-Technologies/gensim/pull/1118))
+* Corpora_and_Vector_Spaces tutorial text clarification (@lgmoneda, [#1116](https://github.com/RaRe-Technologies/gensim/pull/1116))
+* Update Transformation and Topics link from quick start notebook (@mariana393, [#1115](https://github.com/RaRe-Technologies/gensim/pull/1115))
+* Quick Start Text clarification and typo correction (@luizcavalcanti, [#1114](https://github.com/RaRe-Technologies/gensim/pull/1114))
+* Fix typos in Author-topic tutorial (@Fil, [#1102](https://github.com/RaRe-Technologies/gensim/pull/1102))
+* Address benchmark inconsistencies in Annoy tutorial (@droudy, [#1113](https://github.com/RaRe-Technologies/gensim/pull/1113))
-0.13.4.1, 2017-01-04
+## 0.13.4.1, 2017-01-04
* Disable direct access warnings on save and load of Word2vec/Doc2vec (@tmylk, [#1072](https://github.com/RaRe-Technologies/gensim/pull/1072))
* Making Default hs error explicit (@accraze, [#1054](https://github.com/RaRe-Technologies/gensim/pull/1054))
-* Removed unnecessary numpy imports (@bhargavvader, [#1065](https://github.com/RaRe-Technologies/gensim/pull/1065))
-* Utils and Matutils changes (@bhargavvader, [#1062](https://github.com/RaRe-Technologies/gensim/pull/1062))
+* Removed unnecessary numpy imports (@bhargavvader, [#1065](https://github.com/RaRe-Technologies/gensim/pull/1065))
+* Utils and Matutils changes (@bhargavvader, [#1062](https://github.com/RaRe-Technologies/gensim/pull/1062))
* Tests for the evaluate_word_pairs function (@akutuzov, [#1061](https://github.com/RaRe-Technologies/gensim/pull/1061))
-0.13.4, 2016-12-22
+## 0.13.4, 2016-12-22
* Added suggested lda model method and print methods to HDP class (@bhargavvader, [#1055](https://github.com/RaRe-Technologies/gensim/pull/1055))
* New class KeyedVectors to store embedding separate from training code (@anmol01gulati and @droudy, [#980](https://github.com/RaRe-Technologies/gensim/pull/980))
* Evaluation of word2vec models against semantic similarity datasets like SimLex-999 (@akutuzov, [#1047](https://github.com/RaRe-Technologies/gensim/pull/1047))
* TensorBoard word embedding visualisation of Gensim Word2vec format (@loretoparisi, [#1051](https://github.com/RaRe-Technologies/gensim/pull/1051))
-* Throw exception if load() is called on instance rather than the class in word2vec and doc2vec (@dust0x,[(#889](https://github.com/RaRe-Technologies/gensim/pull/889))
+* Throw exception if load() is called on instance rather than the class in word2vec and doc2vec (@dust0x, [#889](https://github.com/RaRe-Technologies/gensim/pull/889))
* Loading and Saving LDA Models across Python 2 and 3. Fix #853 (@anmolgulati, [#913](https://github.com/RaRe-Technologies/gensim/pull/913), [#1093](https://github.com/RaRe-Technologies/gensim/pull/1093))
* Fix automatic learning of eta (prior over words) in LDA (@olavurmortensen, [#1024](https://github.com/RaRe-Technologies/gensim/pull/1024)).
* eta should have dimensionality V (size of vocab) not K (number of topics). eta with shape K x V is still allowed, as the user may want to impose specific prior information to each topic.
* eta is no longer allowed the "asymmetric" option. Asymmetric priors over words in general are fine (learned or user defined).
* As a result, the eta update (`update_eta`) was simplified some. It also no longer logs eta when updated, because it is too large for that.
* Unit tests were updated accordingly. The unit tests expect a different shape than before; some unit tests were redundant after the change; `eta='asymmetric'` now should raise an error.
-* Optimise show_topics to only call get_lambda once. Fix #1006. (@bhargavvader, [#1028](https://github.com/RaRe-Technologies/gensim/pull/1028))
+* Optimise show_topics to only call get_lambda once. Fix #1006. (@bhargavvader, [#1028](https://github.com/RaRe-Technologies/gensim/pull/1028))
* HdpModel doc improvement. Inference and print_topics (@dsquareindia, [#1029](https://github.com/RaRe-Technologies/gensim/pull/1029))
* Removing Doc2Vec defaults so that it won't override Word2Vec defaults. Fix #795. (@markroxor, [#929](https://github.com/RaRe-Technologies/gensim/pull/929))
* Remove warning on gensim import "pattern not installed". Fix #1009 (@shashankg7, [#1018](https://github.com/RaRe-Technologies/gensim/pull/1018))
@@ -195,7 +221,7 @@ Tutorial and doc improvements:
* Pyro annotations for lsi_worker (@markroxor, [#968](https://github.com/RaRe-Technologies/gensim/pull/968))
-0.13.3, 2016-10-20
+## 0.13.3, 2016-10-20
* Add vocabulary expansion feature to word2vec. (@isohyt, [#900](https://github.com/RaRe-Technologies/gensim/pull/900))
* Tutorial: Reproducing Doc2vec paper result on wikipedia. (@isohyt, [#654](https://github.com/RaRe-Technologies/gensim/pull/654))
@@ -206,7 +232,7 @@ Tutorial and doc improvements:
* Fix issue #743, in word2vec's n_similarity method if at least one empty list is passed ZeroDivisionError is raised (@pranay360, [#883](https://github.com/RaRe-Technologies/gensim/pull/883))
* Change export_phrases in Phrases model. Fix issue #794 (@AadityaJ, [#879](https://github.com/RaRe-Technologies/gensim/pull/879))
- bigram construction can now support multiple bigrams within one sentence
-* Fix issue [#838](https://github.com/RaRe-Technologies/gensim/issues/838), RuntimeWarning: overflow encountered in exp ([@markroxor](https://github.com/markroxor), [#895](https://github.com/RaRe-Technologies/gensim/pull/895))
+* Fix issue [#838](https://github.com/RaRe-Technologies/gensim/issues/838), RuntimeWarning: overflow encountered in exp ([@markroxor](https://github.com/markroxor), [#895](https://github.com/RaRe-Technologies/gensim/pull/895))
* Change some log messages to warnings as suggested in issue #828. (@rhnvrm, [#884](https://github.com/RaRe-Technologies/gensim/pull/884))
* Fix issue #851, In summarizer.py, RunTimeError is raised if single sentence input is provided to avoid ZeroDivionError. (@metalaman, #887)
* Fix issue [#791](https://github.com/RaRe-Technologies/gensim/issues/791), correct logic for iterating over SimilarityABC interface. ([@MridulS](https://github.com/MridulS), [#839](https://github.com/RaRe-Technologies/gensim/pull/839))
@@ -216,11 +242,11 @@ Tutorial and doc improvements:
* Add Annoy memory-mapping example (@harshul1610, [#899](https://github.com/RaRe-Technologies/gensim/pull/899))
* Fixed issue [#601](https://github.com/RaRe-Technologies/gensim/issues/601), correct docID in most_similar for clip range (@parulsethi, [#994](https://github.com/RaRe-Technologies/gensim/pull/994))
-0.13.2, 2016-08-19
+## 0.13.2, 2016-08-19
* wordtopics has changed to word_topics in ldamallet, and fixed issue #764. (@bhargavvader, [#771](https://github.com/RaRe-Technologies/gensim/pull/771))
- assigning wordtopics value of word_topics to keep backward compatibility, for now
-* topics, topn parameters changed to num_topics and num_words in show_topics() and print_topics()(@droudy, [#755](https://github.com/RaRe-Technologies/gensim/pull/755))
+* topics, topn parameters changed to num_topics and num_words in show_topics() and print_topics() (@droudy, [#755](https://github.com/RaRe-Technologies/gensim/pull/755))
- In hdpmodel and dtmmodel
- NOT BACKWARDS COMPATIBLE!
* Added random_state parameter to LdaState initializer and check_random_state() (@droudy, [#113](https://github.com/RaRe-Technologies/gensim/pull/113))
@@ -228,23 +254,23 @@ Tutorial and doc improvements:
* Added a check for empty (no words) documents before starting to run the DTM wrapper if model = "fixed" is used (DIM model) as this causes the an error when such documents are reached in training. (@eickho, [#806](https://github.com/RaRe-Technologies/gensim/pull/806))
* New parameters `limit`, `datatype` for load_word2vec_format(); `lockf` for intersect_word2vec_format (@gojomo, [#817](https://github.com/RaRe-Technologies/gensim/pull/817))
* Changed `use_lowercase` option in word2vec accuracy to `case_insensitive` to account for case variations in training vocabulary (@jayantj, [#804](https://github.com/RaRe-Technologies/gensim/pull/804)
-* Link to Doc2Vec on airline tweets example in tutorials page (@544895340 , [#823](https://github.com/RaRe-Technologies/gensim/pull/823))
+* Link to Doc2Vec on airline tweets example in tutorials page (@544895340, [#823](https://github.com/RaRe-Technologies/gensim/pull/823))
* Small error on Doc2vec notebook tutorial (@charlessutton, [#816](https://github.com/RaRe-Technologies/gensim/pull/816))
* Bugfix: Full2sparse clipped to use abs value (@tmylk, [#811](https://github.com/RaRe-Technologies/gensim/pull/811))
* WMD docstring: add tutorial link and query example (@tmylk, [#813](https://github.com/RaRe-Technologies/gensim/pull/813))
* Annoy integration to speed word2vec and doc2vec similarity. Tutorial update (@droudy, [#799](https://github.com/RaRe-Technologies/gensim/pull/799),[#792](https://github.com/RaRe-Technologies/gensim/pull/799) )
* Add converter of LDA model between Mallet, Vowpal Wabit and gensim (@dsquareindia, [#798](https://github.com/RaRe-Technologies/gensim/pull/798), [#766](https://github.com/RaRe-Technologies/gensim/pull/766))
-* Distributed LDA in different network segments without broadcast (@menshikh-iv , [#782](https://github.com/RaRe-Technologies/gensim/pull/782))
+* Distributed LDA in different network segments without broadcast (@menshikh-iv, [#782](https://github.com/RaRe-Technologies/gensim/pull/782))
* Update Corpora_and_Vector_Spaces.ipynb (@megansquire, [#772](https://github.com/RaRe-Technologies/gensim/pull/772))
-* DTM wrapper bug fixes caused by renaming num_words in #755 (@bhargavvader, [#770](https://github.com/RaRe-Technologies/gensim/pull/770))
+* DTM wrapper bug fixes caused by renaming num_words in #755 (@bhargavvader, [#770](https://github.com/RaRe-Technologies/gensim/pull/770))
* Add LsiModel.docs_processed attribute (@hobson, [#763](https://github.com/RaRe-Technologies/gensim/pull/763))
-* Dynamic Topic Modelling in Python. Google Summer of Code 2016 project. (@bhargavvader, [#739, #831](https://github.com/RaRe-Technologies/gensim/pull/739))
+* Dynamic Topic Modelling in Python. Google Summer of Code 2016 project. (@bhargavvader, [#739](https://github.com/RaRe-Technologies/gensim/pull/739), [#831](https://github.com/RaRe-Technologies/gensim/pull/831))
-0.13.1, 2016-06-22
+## 0.13.1, 2016-06-22
* Topic coherence C_v and U_mass (@dsquareindia, #710)
-0.13.0, 2016-06-21
+## 0.13.0, 2016-06-21
* Added Distance Metrics to matutils.pt (@bhargavvader, #656)
* Tutorials migrated from website to ipynb (@j9chan, #721), (@jesford, #733), (@jesford, #725), (@jesford, #716)
@@ -272,7 +298,7 @@ Tutorial and doc improvements:
* Doc2vec pre-processing script translated from bash to Python (@andrewjlm, #720)
-0.12.4, 2016-01-29
+## 0.12.4, 2016-01-29
* Better internal handling of job batching in word2vec (#535)
- up to 300% speed up when training on very short documents (~tweets)
@@ -303,7 +329,7 @@ Tutorial and doc improvements:
chunks_as_numpy=True/False (defaults to False) that allows controlling
this behaviour
-0.12.3, 2015-11-05
+## 0.12.3, 2015-11-05
* Make show_topics return value consistent across models (Christopher Corley, #448)
- All models with the `show_topics` method should return a list of
@@ -323,7 +349,7 @@ Tutorial and doc improvements:
* OSX wheels (#504)
* Win build (#492)
-0.12.2, 2015-09-19
+## 0.12.2, 2015-09-19
* tutorial on text summarization (Ólavur Mortensen, #436)
* more flexible vocabulary construction in word2vec & doc2vec (Philipp Dowling, #434)
@@ -334,7 +360,7 @@ Tutorial and doc improvements:
* Windows fix for setup.py (#428)
* fix compatibility for scipy 0.16.0 (#415)
-0.12.1, 2015-07-20
+## 0.12.1, 2015-07-20
* improvements to testing, switch to Travis CI containers
* support for loading old word2vec models (<=0.11.1) in 0.12+ (Gordon Mohr, #405)
@@ -343,7 +369,7 @@ Tutorial and doc improvements:
* support for word2vec[['word1', 'word2'...]] convenience API calls (Satish Palaniappan, #395)
* MatrixSimilarity supports indexing generator corpora (single pass)
-0.12.0, 2015-07-06
+## 0.12.0, 2015-07-06
* complete API, performance, memory overhaul of doc2vec (Gordon Mohr, #356, #373, #380, #384)
- fast infer_vector(); optional memory-mapped doc vectors; memory savings with int doc IDs
@@ -371,7 +397,7 @@ Tutorial and doc improvements:
* various doc improvements and fixes (Matti Lyra #331, Hongjoo Lee #334)
* fixes and improvements to LDA (Christopher Corley #323)
-0.11.0 = 0.11.1 = 0.11.1-1, 2015-04-10
+## 0.11.0 = 0.11.1 = 0.11.1-1, 2015-04-10
* added "topic ranking" to sort topics by coherence in LdaModel (jtmcmc, #311)
* new fast ShardedCorpus out-of-core corpus (Jan Hajic jr., #284)
@@ -385,7 +411,7 @@ Tutorial and doc improvements:
* lots of small fixes & py3k compatibility improvements (Chyi-Kwei Yau, Daniel Nouri, Timothy Emerick, Juarez Bochi, Christopher Corley, Chirag Nagpal, Jan Hajic jr., Flávio Codeço Coelho)
* re-released as 0.11.1 and 0.11.1-1 because of a packaging bug
-0.10.3, 2014-11-17
+## 0.10.3, 2014-11-17
* added streamed phrases = collocation detection (Miguel Cabrera, #258)
* added param for multiple word2vec epochs (sebastienj, #243)
@@ -397,7 +423,7 @@ Tutorial and doc improvements:
* fixes to setup.py (Maxim Avanov and Christopher Corley, #260, #251)
* ...and lots of minor fixes & updates all around
-0.10.2, 2014-09-18
+## 0.10.2, 2014-09-18
* new parallelized, LdaMulticore implementation (Jan Zikes, #232)
* Dynamic Topic Models (DTM) wrapper (Arttii, #205)
@@ -409,7 +435,7 @@ Tutorial and doc improvements:
* py3k fix to SparseCorpus (Andreas Madsen, #234)
* fix to LowCorpus when switching dictionaries (Christopher Corley, #237)
-0.10.1, 2014-07-22
+## 0.10.1, 2014-07-22
* word2vec: new n_similarity method for comparing two sets of words (François Scharffe, #219)
* make LDA print/show topics parameters consistent with LSI (Bram Vandekerckhove, #201)
@@ -424,7 +450,7 @@ Tutorial and doc improvements:
* ignore non-articles during wiki parsig
* utils.lemmatize now (optionally) ignores stopwords
-0.10.0 (aka "PY3K port"), 2014-06-04
+## 0.10.0 (aka "PY3K port"), 2014-06-04
* full Python 3 support (targeting 3.3+, #196)
* all internal methods now expect & store unicode, instead of utf8
@@ -435,7 +461,7 @@ Tutorial and doc improvements:
* added py3.3 and 3.4 to Travis CI tests
* fix a cbow word2vec bug (Liang-Chi Hsieh)
-0.9.1, 2014-04-12
+## 0.9.1, 2014-04-12
* MmCorpus fix for Windows
* LdaMallet support for printing/showing topics
@@ -445,7 +471,7 @@ Tutorial and doc improvements:
* more py3k fixes (Lars Buitinck)
* change order of LDA topic printing (Fayimora Femi-Balogun, #188)
-0.9.0, 2014-03-16
+## 0.9.0, 2014-03-16
* save/load automatically single out large arrays + allow mmap
* allow .gz/.bz2 corpus filenames => transparently (de)compressed I/O
@@ -463,7 +489,7 @@ Tutorial and doc improvements:
* parametrize LDA constructor (Christopher Corley, #174)
* steps toward py3k compatibility (Lars Buitinck, #154)
-0.8.9, 2013-12-26
+## 0.8.9, 2013-12-26
* use travis-ci for continuous integration
* auto-optimize LDA asymmetric prior (Ben Trahan)
@@ -475,7 +501,7 @@ Tutorial and doc improvements:
* allow compressed input in LineSentence corpus (Eric Moyer)
* upgrade ez_setup, doc improvements, minor fixes etc.
-0.8.8 (aka "word2vec release"), 2013-11-03
+## 0.8.8 (aka "word2vec release"), 2013-11-03
* python3 port by Parikshit Samant: https://github.com/samantp/gensimPy3
* massive optimizations to word2vec (cython, BLAS, multithreading): ~20x-300x speedup
@@ -485,7 +511,7 @@ Tutorial and doc improvements:
* add context manager support for older Python<=2.6 for gzip and bz2
* added unittests for word2vec
-0.8.7, 2013-09-18
+## 0.8.7, 2013-09-18
* initial version of word2vec, a neural network deep learning algo
* make distributed gensim compatible with the new Pyro
@@ -503,7 +529,7 @@ Tutorial and doc improvements:
* fixes for more robust Windows multiprocessing
* lots of small fixes, data checks and documentation updates
-0.8.6, 2012-09-15
+## 0.8.6, 2012-09-15
* added HashDictionary (by Homer Strong)
* support for adding target classes in SVMlight format (by Corrado Monti)
@@ -511,7 +537,7 @@ Tutorial and doc improvements:
* parallelization of Wikipedia processing + added script version that lemmatizes the input documents
* added class method to initialize Dictionary from an existing corpus (by Marko Burjek)
-0.8.5, 2012-07-22
+## 0.8.5, 2012-07-22
* improved performance of sharding (similarity queries)
* better Wikipedia parsing (thx to Alejandro Weinstein and Lars Buitinck)
@@ -519,7 +545,7 @@ Tutorial and doc improvements:
* several minor fixes (in HDP model thx to Greg Ver Steeg)
* improvements to documentation
-0.8.4, 2012-03-09
+## 0.8.4, 2012-03-09
* better support for Pandas series input (thx to JT Bates)
* a new corpus format: UCI bag-of-words (thx to Jonathan Esterhazy)
@@ -528,13 +554,13 @@ Tutorial and doc improvements:
* lemmatizer support for wikipedia parsing (via the `pattern` python package)
* extended the lemmatizer for multi-core processing, to improve its performance
-0.8.3, 2011-12-02
+## 0.8.3, 2011-12-02
* fixed Similarity sharding bug (issue #65, thx to Paul Rudin)
* improved LDA code (clarity & memory footprint)
* optimized efficiency of Similarity sharding
-0.8.2, 2011-10-31
+## 0.8.2, 2011-10-31
* improved gensim landing page
* improved accuracy of SVD (Latent Semantic Analysis) (thx to Mark Tygert)
@@ -543,7 +569,7 @@ Tutorial and doc improvements:
* started using `tox` for testing
* + several smaller fixes and optimizations
-0.8.1, 2011-10-10
+## 0.8.1, 2011-10-10
* transactional similarity server: see docs/simserver.html
* website moved from university hosting to radimrehurek.com
@@ -554,7 +580,7 @@ Tutorial and doc improvements:
* model.print_topics() debug fncs now support std output, in addition to logging (thx to Homer Strong)
* several smaller fixes and improvements
-0.8.0 (Armageddon), 2011-06-28
+## 0.8.0 (Armageddon), 2011-06-28
* changed all variable and function names to comply with PEP8 (numTopics->num_topics): BREAKS BACKWARD COMPATIBILITY!
* added support for similarity querying more documents at once (index[query_documents] in addition to index[query_document]; much faster)
@@ -562,14 +588,14 @@ Tutorial and doc improvements:
* simplified directory structure (src/gensim/ is now only gensim/)
* several small fixes and optimizations
-0.7.8, 2011-03-26
+## 0.7.8, 2011-03-26
* added `corpora.IndexedCorpus`, a base class for corpus serializers (thx to Dieter Plaetinck). This allows corpus formats that inherit from it (MmCorpus, SvmLightCorpus, BleiCorpus etc.) to retrieve individual documents by their id in O(1), e.g. `corpus[14]` returns document #14.
* merged new code from the LarKC.eu team (`corpora.textcorpus`, `models.logentropy_model`, lots of unit tests etc.)
* fixed a bug in `lda[bow]` transformation (was returning gamma distribution instead of theta). LDA model generation was not affected, only transforming new vectors.
* several small fixes and documentation updates
-0.7.7, 2011-02-13
+## 0.7.7, 2011-02-13
* new LDA implementation after Hoffman et al.: Online Learning for Latent Dirichlet Allocation
* distributed LDA
@@ -578,38 +604,38 @@ Tutorial and doc improvements:
* moved code to github
* started gensim Google group
-0.7.6, 2011-01-10
+## 0.7.6, 2011-01-10
* added workaround for a bug in numpy: pickling a fortran-order array (e.g. LSA model) and then loading it back and using it results in segfault (thx to Brian Merrel)
* bundled a new version of ez_setup.py: old failed with Python2.6 when setuptools were missing (thx to Alan Salmoni).
-0.7.5, 2010-11-03
+## 0.7.5, 2010-11-03
* further optimization to LSA; this is the version used in my NIPS workshop paper
* got rid of SVDLIBC dependency (one-pass LSA now uses stochastic algo for base-base decompositions)
-0.7.4
+## 0.7.4
* sped up Latent Dirichlet ~10x (through scipy.weave, optional)
* finally, distributed LDA! scales almost linearly, but no tutorial yet. see the tutorial on distributed LSI, everything's completely analogous.
* several minor fixes and improvements; one nasty bug fixed (lsi[corpus] didn't work; thx to Danilo Spinelli)
-0.7.3
+## 0.7.3
* added stochastic SVD decomposition (faster than the current one-pass LSI algo, but needs two passes over the input corpus)
* published gensim on mloss.org
-0.7.2
+## 0.7.2
* added workaround for a numpy bug where SVD sometimes fails to converge for no good reason
* changed content of gensims's PyPi title page
* completed HTML tutorial on distributed LSA
-0.7.1
+## 0.7.1
* fixed a bug in LSA that occurred when the number of features was smaller than the number of topics (thx to Richard Berendsen)
-0.7.0
+## 0.7.0
* optimized vocabulary generation in gensim.corpora.dictionary (faster and less memory-intense)
* MmCorpus accepts compressed input (file-like objects such as GzipFile, BZ2File; to save disk space)
@@ -617,7 +643,7 @@ Tutorial and doc improvements:
* added distributed LSA, updated tutorials (still experimental though)
* several minor bug fixes
-0.6.0
+## 0.6.0
* added option for online LSI training (yay!). the transformation can now be
used after any amount of training, and training can be continued at any time
@@ -628,49 +654,49 @@ Tutorial and doc improvements:
* added 'Topic :: Text Processing :: Linguistic' to gensim's pypi classifiers
* change of sphinx documentation css and layout
-0.5.0
+## 0.5.0
* finished all tutorials, stable version
-0.4.7
+## 0.4.7
* tutorial on transformations
-0.4.6
+## 0.4.6
* added Random Projections (aka Random Indexing), as another transformation model.
* several DML-CZ specific updates
-0.4.5
+## 0.4.5
* updated documentation
* further memory optimizations in SVD (LSI)
-0.4.4
+## 0.4.4
* added missing test files to MANIFEST.in
-0.4.3
+## 0.4.3
* documentation changes
* added gensim reference to Wikipedia articles (SVD, LSI, LDA, TFIDF, ...)
-0.4.2
+## 0.4.2
* finally, a tutorial!
* similarity queries got their own package
-0.4.1
+## 0.4.1
* pdf documentation
* removed dependency on python2.5 (theoretically, gensim now runs on 2.6 and 2.7 as well).
-0.4.0
+## 0.4.0
* support for ``python setup.py test``
* fixing package metadata
* documentation clean-up
-0.2.0
+## 0.2.0
* First version
diff --git a/README.md b/README.md
index 4b0593a2cb..719823031c 100644
--- a/README.md
+++ b/README.md
@@ -135,6 +135,7 @@ Adopters
| Stillwater Supercomputing | | [stillwater-sc.com](http://www.stillwater-sc.com/) | Document comprehension and association with word2vec |
| Channel 4 | | [channel4.com](http://www.channel4.com/) | Recommendation engine |
| Amazon | | [amazon.com](http://www.amazon.com/) | Document similarity|
+| SiteGround Hosting | | [siteground.com](https://www.siteground.com/) | An ensemble search engine which uses different embeddings models and similarities, including word2vec, WMD, and LDA. |
-------
diff --git a/continuous_integration/travis/flake8_diff.sh b/continuous_integration/travis/flake8_diff.sh
index 119e383fa6..50b2103e58 100755
--- a/continuous_integration/travis/flake8_diff.sh
+++ b/continuous_integration/travis/flake8_diff.sh
@@ -133,6 +133,6 @@ check_files() {
if [[ "$MODIFIED_FILES" == "no_match" ]]; then
echo "No file has been modified"
else
- check_files "$(echo "$MODIFIED_FILES" )" "--ignore=E501,E731,E12,W503 --exclude=*.sh,*.md,*.yml"
+ check_files "$(echo "$MODIFIED_FILES" )" "--ignore=E501,E731,E12,W503 --exclude=*.sh,*.md,*.yml,*.rst,*.ipynb,*.vec,Dockerfile*"
fi
echo -e "No problem detected by flake8\n"
diff --git a/docs/notebooks/Corpora_and_Vector_Spaces.ipynb b/docs/notebooks/Corpora_and_Vector_Spaces.ipynb
index 44560f952d..bccfa9cc91 100644
--- a/docs/notebooks/Corpora_and_Vector_Spaces.ipynb
+++ b/docs/notebooks/Corpora_and_Vector_Spaces.ipynb
@@ -17,7 +17,7 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {
"collapsed": true
},
@@ -27,6 +27,18 @@
"logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "import tempfile\n",
+ "TEMP_FOLDER = tempfile.gettempdir()\n",
+ "print('Folder \"{}\" will be used to save temporary dictionary and corpus.'.format(TEMP_FOLDER))"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -149,7 +161,7 @@
],
"source": [
"dictionary = corpora.Dictionary(texts)\n",
- "dictionary.save('/tmp/deerwester.dict') # store the dictionary, for future reference\n",
+ "dictionary.save(os.path.join(TEMP_FOLDER, 'deerwester.dict')) # store the dictionary, for future reference\n",
"print(dictionary)"
]
},
@@ -211,7 +223,11 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "The function `doc2bow()` simply counts the number of occurrences of each distinct word, converts the word to its integer word id and returns the result as a sparse vector. The sparse vector `[(word_id, 1), (word_id, 1)]` therefore reads: in the document *“Human computer interaction”*, the words *\"computer\"* and *\"human\"*, identified by an integer id given by the built dictionary, appear once; the other ten dictionary words appear (implicitly) zero times. Check their id at the dictionary displayed in the previous cell and see that they match."
+ "The function `doc2bow()` simply counts the number of occurrences of each distinct word, converts the word to its integer word id and returns the result as a bag-of-words--a sparse vector, in the form of `[(word_id, word_count), ...]`. \n",
+ "\n",
+ "As the token_id is 0 for *\"human\"* and 2 for *\"computer\"*, the new document *“Human computer interaction”* will be transformed to [(0, 1), (2, 1)]. The words *\"computer\"* and *\"human\"* exist in the dictionary and appear once. Thus, they become (0, 1), (2, 1) respectively in the sparse vector. The word *\"interaction\"* doesn't exist in the dictionary and, thus, will not show up in the sparse vector. The other ten dictionary words, that appear (implicitly) zero times, will not show up in the sparse vector and , ,there will never be a element in the sparse vector like (3, 0).\n",
+ "\n",
+ "For people familiar with scikit learn, `doc2bow()` has similar behaviors as calling `transform()` on [`CountVectorizer`](http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html). `doc2bow()` can behave like `fit_transform()` as well. For more details, please look at [gensim API Doc](https://radimrehurek.com/gensim/corpora/dictionary.html#gensim.corpora.dictionary.Dictionary.doc2bow)."
]
},
{
@@ -239,7 +255,7 @@
],
"source": [
"corpus = [dictionary.doc2bow(text) for text in texts]\n",
- "corpora.MmCorpus.serialize('/tmp/deerwester.mm', corpus) # store to disk, for later use\n",
+ "corpora.MmCorpus.serialize(os.path.join(TEMP_FOLDER, 'deerwester.mm'), corpus) # store to disk, for later use\n",
"for c in corpus:\n",
" print(c)"
]
@@ -338,7 +354,7 @@
"source": [
"Although the output is the same as for the plain Python list, the corpus is now much more memory friendly, because at most one vector resides in RAM at a time. Your corpus can now be as large as you want.\n",
"\n",
- "Similarly, to construct the dictionary without loading all texts into memory:"
+ "We are going to create the dictionary from the mycorpus.txt file without loading the entire file into memory. Then, we will generate the list of token ids to remove from this dictionary by querying the dictionary for the token ids of the stop words, and by querying the document frequencies dictionary (dictionary.dfs) for token ids that only appear once. Finally, we will filter these token ids out of our dictionary and call dictionary.compactify() to remove the gaps in the token id series."
]
},
{
@@ -399,14 +415,14 @@
"# create a toy corpus of 2 documents, as a plain Python list\n",
"corpus = [[(1, 0.5)], []] # make one document empty, for the heck of it\n",
"\n",
- "corpora.MmCorpus.serialize('/tmp/corpus.mm', corpus)"
+ "corpora.MmCorpus.serialize(os.path.join(TEMP_FOLDER, 'corpus.mm'), corpus)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "Other formats include [Joachim’s SVMlight format](http://svmlight.joachims.org/), [Blei’s LDA-C format](http://www.cs.princeton.edu/~blei/lda-c/) and [GibbsLDA++ format](http://gibbslda.sourceforge.net/)."
+ "Other formats include [Joachim’s SVMlight format](http://svmlight.joachims.org/), [Blei’s LDA-C format](http://www.cs.columbia.edu/~blei/lda-c/) and [GibbsLDA++ format](http://gibbslda.sourceforge.net/)."
]
},
{
@@ -417,9 +433,9 @@
},
"outputs": [],
"source": [
- "corpora.SvmLightCorpus.serialize('/tmp/corpus.svmlight', corpus)\n",
- "corpora.BleiCorpus.serialize('/tmp/corpus.lda-c', corpus)\n",
- "corpora.LowCorpus.serialize('/tmp/corpus.low', corpus)"
+ "corpora.SvmLightCorpus.serialize(os.path.join(TEMP_FOLDER, 'corpus.svmlight'), corpus)\n",
+ "corpora.BleiCorpus.serialize(os.path.join(TEMP_FOLDER, 'corpus.lda-c'), corpus)\n",
+ "corpora.LowCorpus.serialize(os.path.join(TEMP_FOLDER, 'corpus.low'), corpus)"
]
},
{
@@ -437,7 +453,7 @@
},
"outputs": [],
"source": [
- "corpus = corpora.MmCorpus('/tmp/corpus.mm')"
+ "corpus = corpora.MmCorpus(os.path.join(TEMP_FOLDER, 'corpus.mm'))"
]
},
{
@@ -539,7 +555,7 @@
},
"outputs": [],
"source": [
- "corpora.BleiCorpus.serialize('/tmp/corpus.lda-c', corpus)"
+ "corpora.BleiCorpus.serialize(os.path.join(TEMP_FOLDER, 'corpus.lda-c'), corpus)"
]
},
{
@@ -600,23 +616,23 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3",
+ "display_name": "Python 2",
"language": "python",
- "name": "python3"
+ "name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
- "version": 3
+ "version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.6.0"
+ "pygments_lexer": "ipython2",
+ "version": "2.7.6"
}
},
"nbformat": 4,
- "nbformat_minor": 0
+ "nbformat_minor": 1
}
diff --git a/docs/notebooks/Similarity_Queries.ipynb b/docs/notebooks/Similarity_Queries.ipynb
index 88f69da85f..34a367e8ee 100644
--- a/docs/notebooks/Similarity_Queries.ipynb
+++ b/docs/notebooks/Similarity_Queries.ipynb
@@ -16,7 +16,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 5,
"metadata": {
"collapsed": true
},
@@ -26,6 +26,28 @@
"logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Folder \"C:\\Users\\chaor\\AppData\\Local\\Temp\" will be used to save temporary dictionary and corpus.\n"
+ ]
+ }
+ ],
+ "source": [
+ "import os\n",
+ "import tempfile\n",
+ "TEMP_FOLDER = tempfile.gettempdir()\n",
+ "print('Folder \"{}\" will be used to save temporary dictionary and corpus.'.format(TEMP_FOLDER))"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -44,11 +66,22 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2017-05-22 14:27:18,911 : INFO : loading Dictionary object from C:\\Users\\chaor\\AppData\\Local\\Temp\\deerwester.dict\n",
+ "2017-05-22 14:27:18,911 : INFO : loaded C:\\Users\\chaor\\AppData\\Local\\Temp\\deerwester.dict\n",
+ "2017-05-22 14:27:18,921 : INFO : loaded corpus index from C:\\Users\\chaor\\AppData\\Local\\Temp\\deerwester.mm.index\n",
+ "2017-05-22 14:27:18,924 : INFO : initializing corpus reader from C:\\Users\\chaor\\AppData\\Local\\Temp\\deerwester.mm\n",
+ "2017-05-22 14:27:18,929 : INFO : accepted corpus with 9 documents, 12 features, 28 non-zero entries\n"
+ ]
+ },
{
"name": "stdout",
"output_type": "stream",
@@ -60,8 +93,8 @@
"source": [
"from gensim import corpora, models, similarities\n",
"\n",
- "dictionary = corpora.Dictionary.load('/tmp/deerwester.dict')\n",
- "corpus = corpora.MmCorpus('/tmp/deerwester.mm') # comes from the first tutorial, \"From strings to vectors\"\n",
+ "dictionary = corpora.Dictionary.load(os.path.join(TEMP_FOLDER, 'deerwester.dict'))\n",
+ "corpus = corpora.MmCorpus(os.path.join(TEMP_FOLDER, 'deerwester.mm')) # comes from the first tutorial, \"From strings to vectors\"\n",
"print(corpus)"
]
},
@@ -74,11 +107,30 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": 8,
"metadata": {
"collapsed": false
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2017-05-22 14:27:19,048 : INFO : using serial LSI version on this node\n",
+ "2017-05-22 14:27:19,050 : INFO : updating model with new documents\n",
+ "2017-05-22 14:27:19,054 : INFO : preparing a new chunk of documents\n",
+ "2017-05-22 14:27:19,057 : INFO : using 100 extra samples and 2 power iterations\n",
+ "2017-05-22 14:27:19,060 : INFO : 1st phase: constructing (12, 102) action matrix\n",
+ "2017-05-22 14:27:19,064 : INFO : orthonormalizing (12, 102) action matrix\n",
+ "2017-05-22 14:27:19,068 : INFO : 2nd phase: running dense svd on (12, 9) matrix\n",
+ "2017-05-22 14:27:19,070 : INFO : computing the final decomposition\n",
+ "2017-05-22 14:27:19,073 : INFO : keeping 2 factors (discarding 43.156% of energy spectrum)\n",
+ "2017-05-22 14:27:19,076 : INFO : processed documents up to #9\n",
+ "2017-05-22 14:27:19,078 : INFO : topic #0(3.341): 0.644*\"system\" + 0.404*\"user\" + 0.301*\"eps\" + 0.265*\"response\" + 0.265*\"time\" + 0.240*\"computer\" + 0.221*\"human\" + 0.206*\"survey\" + 0.198*\"interface\" + 0.036*\"graph\"\n",
+ "2017-05-22 14:27:19,081 : INFO : topic #1(2.542): 0.623*\"graph\" + 0.490*\"trees\" + 0.451*\"minors\" + 0.274*\"survey\" + -0.167*\"system\" + -0.141*\"eps\" + -0.113*\"human\" + 0.107*\"response\" + 0.107*\"time\" + -0.072*\"interface\"\n"
+ ]
+ }
+ ],
"source": [
"lsi = models.LsiModel(corpus, id2word=dictionary, num_topics=2)"
]
@@ -92,7 +144,7 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": 9,
"metadata": {
"collapsed": false
},
@@ -101,7 +153,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "[(0, 0.46182100453271591), (1, 0.070027665279000534)]\n"
+ "[(0, 0.46182100453271535), (1, -0.070027665279000437)]\n"
]
}
],
@@ -135,11 +187,20 @@
},
{
"cell_type": "code",
- "execution_count": 15,
+ "execution_count": 10,
"metadata": {
"collapsed": false
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2017-05-22 14:27:19,299 : WARNING : scanning corpus to determine the number of features (consider setting `num_features` explicitly)\n",
+ "2017-05-22 14:27:19,358 : INFO : creating matrix with 9 documents and 2 features\n"
+ ]
+ }
+ ],
"source": [
"index = similarities.MatrixSimilarity(lsi[corpus]) # transform corpus to LSI space and index it"
]
@@ -157,14 +218,23 @@
},
{
"cell_type": "code",
- "execution_count": 18,
+ "execution_count": 12,
"metadata": {
- "collapsed": true
+ "collapsed": false
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2017-05-22 14:27:52,760 : INFO : saving MatrixSimilarity object under C:\\Users\\chaor\\AppData\\Local\\Temp\\deerwester.index, separately None\n",
+ "2017-05-22 14:27:52,772 : INFO : saved C:\\Users\\chaor\\AppData\\Local\\Temp\\deerwester.index\n"
+ ]
+ }
+ ],
"source": [
- "index.save('/tmp/deerwester.index')\n",
- "index = similarities.MatrixSimilarity.load('/tmp/deerwester.index')"
+ "index.save(os.path.join(TEMP_FOLDER, 'deerwester.index'))\n",
+ "#index = similarities.MatrixSimilarity.load(os.path.join(TEMP_FOLDER, 'index'))"
]
},
{
@@ -190,7 +260,7 @@
},
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": 13,
"metadata": {
"collapsed": false
},
@@ -199,7 +269,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "[(0, 0.99809301), (1, 0.93748635), (2, 0.99844527), (3, 0.9865886), (4, 0.90755945), (5, -0.12416792), (6, -0.10639259), (7, -0.098794632), (8, 0.050041769)]\n"
+ "[(0, 0.99809301), (1, 0.93748635), (2, 0.99844527), (3, 0.9865886), (4, 0.90755945), (5, -0.12416792), (6, -0.10639259), (7, -0.098794639), (8, 0.050041765)]\n"
]
}
],
@@ -246,25 +316,34 @@
"* your **feedback is most welcome** and appreciated (and it’s not just the code!): [idea contributions](https://github.com/piskvorky/gensim/wiki/Ideas-&-Features-proposals), [bug reports](https://github.com/piskvorky/gensim/issues) or just consider contributing [user stories and general questions](http://groups.google.com/group/gensim/topics).\n",
"Gensim has no ambition to become an all-encompassing framework, across all NLP (or even Machine Learning) subfields. Its mission is to help NLP practicioners try out popular topic modelling algorithms on large datasets easily, and to facilitate prototyping of new algorithms for researchers."
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": []
}
],
"metadata": {
"kernelspec": {
- "display_name": "Python 2",
+ "display_name": "Python 3",
"language": "python",
- "name": "python2"
+ "name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
- "version": 2
+ "version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
- "pygments_lexer": "ipython2",
- "version": "2.7.10"
+ "pygments_lexer": "ipython3",
+ "version": "3.6.0"
}
},
"nbformat": 4,
diff --git a/docs/notebooks/Topics_and_Transformations.ipynb b/docs/notebooks/Topics_and_Transformations.ipynb
index 4c78cd6037..5a8ec7f985 100644
--- a/docs/notebooks/Topics_and_Transformations.ipynb
+++ b/docs/notebooks/Topics_and_Transformations.ipynb
@@ -16,18 +16,40 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import logging\n",
- "import os.path\n",
"\n",
"logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Folder \"C:\\Users\\chaor\\AppData\\Local\\Temp\" will be used to save temporary dictionary and corpus.\n"
+ ]
+ }
+ ],
+ "source": [
+ "import tempfile\n",
+ "import os.path\n",
+ "\n",
+ "TEMP_FOLDER = tempfile.gettempdir()\n",
+ "print('Folder \"{}\" will be used to save temporary dictionary and corpus.'.format(TEMP_FOLDER))"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -41,24 +63,16 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"metadata": {
"collapsed": false
},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Used files generated from first tutorial\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"from gensim import corpora, models, similarities\n",
- "if (os.path.exists(\"/tmp/deerwester.dict\")):\n",
- " dictionary = corpora.Dictionary.load('/tmp/deerwester.dict')\n",
- " corpus = corpora.MmCorpus('/tmp/deerwester.mm')\n",
+ "if os.path.isfile(os.path.join(TEMP_FOLDER, 'deerwester.dict')):\n",
+ " dictionary = corpora.Dictionary.load(os.path.join(TEMP_FOLDER, 'deerwester.dict'))\n",
+ " corpus = corpora.MmCorpus(os.path.join(TEMP_FOLDER, 'deerwester.mm'))\n",
" print(\"Used files generated from first tutorial\")\n",
"else:\n",
" print(\"Please run first tutorial to generate data set\")"
@@ -66,7 +80,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 4,
"metadata": {
"collapsed": false
},
@@ -75,16 +89,16 @@
"name": "stdout",
"output_type": "stream",
"text": [
+ "human\n",
"interface\n",
- "computer\n",
- "human\n"
+ "computer\n"
]
}
],
"source": [
- "print (dictionary[0])\n",
- "print (dictionary[1])\n",
- "print (dictionary[2])"
+ "print(dictionary[0])\n",
+ "print(dictionary[1])\n",
+ "print(dictionary[2])"
]
},
{
@@ -103,9 +117,9 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 5,
"metadata": {
- "collapsed": true
+ "collapsed": false
},
"outputs": [],
"source": [
@@ -124,7 +138,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 6,
"metadata": {
"collapsed": false
},
@@ -151,7 +165,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 7,
"metadata": {
"collapsed": false
},
@@ -161,14 +175,14 @@
"output_type": "stream",
"text": [
"[(0, 0.5773502691896257), (1, 0.5773502691896257), (2, 0.5773502691896257)]\n",
- "[(1, 0.44424552527467476), (3, 0.44424552527467476), (4, 0.44424552527467476), (5, 0.44424552527467476), (6, 0.3244870206138555), (7, 0.3244870206138555)]\n",
- "[(0, 0.5710059809418182), (6, 0.4170757362022777), (7, 0.4170757362022777), (8, 0.5710059809418182)]\n",
- "[(2, 0.49182558987264147), (6, 0.7184811607083769), (8, 0.49182558987264147)]\n",
- "[(3, 0.6282580468670046), (4, 0.6282580468670046), (7, 0.45889394536615247)]\n",
+ "[(2, 0.44424552527467476), (3, 0.44424552527467476), (4, 0.3244870206138555), (5, 0.3244870206138555), (6, 0.44424552527467476), (7, 0.44424552527467476)]\n",
+ "[(1, 0.5710059809418182), (4, 0.4170757362022777), (5, 0.4170757362022777), (8, 0.5710059809418182)]\n",
+ "[(0, 0.49182558987264147), (5, 0.7184811607083769), (8, 0.49182558987264147)]\n",
+ "[(4, 0.45889394536615247), (6, 0.6282580468670046), (7, 0.6282580468670046)]\n",
"[(9, 1.0)]\n",
"[(9, 0.7071067811865475), (10, 0.7071067811865475)]\n",
"[(9, 0.5080429008916749), (10, 0.5080429008916749), (11, 0.695546419520037)]\n",
- "[(5, 0.6282580468670046), (10, 0.45889394536615247), (11, 0.6282580468670046)]\n"
+ "[(3, 0.6282580468670046), (10, 0.45889394536615247), (11, 0.6282580468670046)]\n"
]
}
],
@@ -192,9 +206,9 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 8,
"metadata": {
- "collapsed": true
+ "collapsed": false
},
"outputs": [],
"source": [
@@ -211,7 +225,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 9,
"metadata": {
"collapsed": false
},
@@ -220,12 +234,12 @@
"data": {
"text/plain": [
"[(0,\n",
- " u'0.703*\"trees\" + 0.538*\"graph\" + 0.402*\"minors\" + 0.187*\"survey\" + 0.061*\"system\" + 0.060*\"time\" + 0.060*\"response\" + 0.058*\"user\" + 0.049*\"computer\" + 0.035*\"interface\"'),\n",
+ " '0.703*\"trees\" + 0.538*\"graph\" + 0.402*\"minors\" + 0.187*\"survey\" + 0.061*\"system\" + 0.060*\"response\" + 0.060*\"time\" + 0.058*\"user\" + 0.049*\"computer\" + 0.035*\"interface\"'),\n",
" (1,\n",
- " u'-0.460*\"system\" + -0.373*\"user\" + -0.332*\"eps\" + -0.328*\"interface\" + -0.320*\"response\" + -0.320*\"time\" + -0.293*\"computer\" + -0.280*\"human\" + -0.171*\"survey\" + 0.161*\"trees\"')]"
+ " '-0.460*\"system\" + -0.373*\"user\" + -0.332*\"eps\" + -0.328*\"interface\" + -0.320*\"time\" + -0.320*\"response\" + -0.293*\"computer\" + -0.280*\"human\" + -0.171*\"survey\" + 0.161*\"trees\"')]"
]
},
- "execution_count": 8,
+ "execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
@@ -245,7 +259,7 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 10,
"metadata": {
"collapsed": false
},
@@ -254,15 +268,15 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "[(0, 0.066007833960903733), (1, -0.52007033063618524)]\n",
- "[(0, 0.19667592859142552), (1, -0.76095631677000408)]\n",
- "[(0, 0.089926399724463882), (1, -0.72418606267525099)]\n",
- "[(0, 0.075858476521781265), (1, -0.63205515860034311)]\n",
- "[(0, 0.10150299184980148), (1, -0.57373084830029475)]\n",
- "[(0, 0.70321089393783065), (1, 0.16115180214025804)]\n",
- "[(0, 0.87747876731198282), (1, 0.16758906864659434)]\n",
- "[(0, 0.90986246868185772), (1, 0.14086553628719053)]\n",
- "[(0, 0.6165825350569285), (1, -0.053929075663893253)]\n"
+ "[(0, 0.066007833960904788), (1, -0.52007033063618524)]\n",
+ "[(0, 0.19667592859142516), (1, -0.76095631677000508)]\n",
+ "[(0, 0.089926399724465478), (1, -0.72418606267525021)]\n",
+ "[(0, 0.075858476521782792), (1, -0.63205515860034234)]\n",
+ "[(0, 0.10150299184980102), (1, -0.57373084830029564)]\n",
+ "[(0, 0.70321089393783121), (1, 0.16115180214025845)]\n",
+ "[(0, 0.87747876731198327), (1, 0.16758906864659459)]\n",
+ "[(0, 0.90986246868185772), (1, 0.14086553628719056)]\n",
+ "[(0, 0.61658253505692806), (1, -0.053929075663893752)]\n"
]
}
],
@@ -273,14 +287,14 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 14,
"metadata": {
- "collapsed": true
+ "collapsed": false
},
"outputs": [],
"source": [
- "lsi.save('/tmp/model.lsi') # same for tfidf, lda, ...\n",
- "lsi = models.LsiModel.load('/tmp/model.lsi')"
+ "lsi.save(os.path.join(TEMP_FOLDER, 'model.lsi')) # same for tfidf, lda, ...\n",
+ "#lsi = models.LsiModel.load(os.path.join(TEMP_FOLDER, 'model.lsi'))"
]
},
{
@@ -304,7 +318,7 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 15,
"metadata": {
"collapsed": false
},
@@ -323,7 +337,7 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 16,
"metadata": {
"collapsed": false
},
@@ -372,7 +386,7 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": 17,
"metadata": {
"collapsed": false
},
@@ -391,7 +405,7 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": 18,
"metadata": {
"collapsed": false
},
@@ -417,7 +431,7 @@
},
{
"cell_type": "code",
- "execution_count": 15,
+ "execution_count": 19,
"metadata": {
"collapsed": false
},
@@ -455,6 +469,15 @@
"[4]\tHalko, Martinsson, Tropp. 2009. Finding structure with randomness. \n",
"[5]\tŘehůřek. 2011. Subspace tracking for Latent Semantic Analysis. "
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": []
}
],
"metadata": {
diff --git a/docs/notebooks/Wordrank_comparisons.ipynb b/docs/notebooks/Wordrank_comparisons.ipynb
index e035e4f2b5..2aecbd3911 100644
--- a/docs/notebooks/Wordrank_comparisons.ipynb
+++ b/docs/notebooks/Wordrank_comparisons.ipynb
@@ -23,7 +23,9 @@
{
"cell_type": "code",
"execution_count": 1,
- "metadata": {},
+ "metadata": {
+ "collapsed": false
+ },
"outputs": [
{
"name": "stdout",
@@ -76,7 +78,9 @@
{
"cell_type": "code",
"execution_count": 2,
- "metadata": {},
+ "metadata": {
+ "collapsed": false
+ },
"outputs": [
{
"name": "stdout",
@@ -169,9 +173,10 @@
" \n",
" # Train using wordrank\n",
" output_file = '{:s}_wr'.format(output_name)\n",
+ " output_dir = 'wordrank_model' # directory to save embeddings and metadata to\n",
" if not os.path.isfile(os.path.join(MODELS_DIR, '{:s}.vec'.format(output_file))):\n",
" print('\\nTraining wordrank on {:s} corpus..'.format(corpus_file))\n",
- " %time wr_model = Wordrank.train(WR_HOME, corpus_file, **wr_params); wr_model\n",
+ " %time wr_model = Wordrank.train(WR_HOME, corpus_file, output_dir, **wr_params); wr_model\n",
" locals()['wr_model'].save_word2vec_format(os.path.join(MODELS_DIR, '{:s}.vec'.format(output_file)))\n",
" print('\\nSaved wordrank model as {:s}.vec'.format(output_file))\n",
" else:\n",
@@ -193,7 +198,9 @@
{
"cell_type": "code",
"execution_count": 3,
- "metadata": {},
+ "metadata": {
+ "collapsed": false
+ },
"outputs": [
{
"name": "stdout",
@@ -235,7 +242,9 @@
{
"cell_type": "code",
"execution_count": 1,
- "metadata": {},
+ "metadata": {
+ "collapsed": true
+ },
"outputs": [],
"source": [
"import logging\n",
@@ -263,7 +272,9 @@
{
"cell_type": "code",
"execution_count": 2,
- "metadata": {},
+ "metadata": {
+ "collapsed": false
+ },
"outputs": [
{
"name": "stderr",
@@ -587,7 +598,9 @@
{
"cell_type": "code",
"execution_count": 3,
- "metadata": {},
+ "metadata": {
+ "collapsed": false
+ },
"outputs": [
{
"name": "stderr",
@@ -973,14 +986,16 @@
{
"cell_type": "code",
"execution_count": 9,
- "metadata": {},
+ "metadata": {
+ "collapsed": false
+ },
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAATbCAYAAAAUBvjzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xt8zuX/wPHXeweHMdsY2YYZM6MoJqfCRhF9c8j5SyRF\nUUk51O9b0TlyqL6p7zpRlJwrlUSmqITNISGsLaSMmDOb7fr98bk3222bHe7tvjfv5+NxP+y+Ptfn\nut73Z8x71+dzXZcYY1BKKaWUUqWfm7MDUEoppZRSjqGJnVJKKaVUGaGJnVJKKaVUGaGJnVJKKaVU\nGaGJnVJKKaVUGaGJnVJKKaVUGaGJnVJKKaVUGaGJnVJKKaVUGaGJnVJKKaVUGaGJnVLqqiciHUQk\nXUTaOzuWoiqpz2Lr4+ni7EMpVXCa2CmlABCRJiKyWEQSReSciBwUkW9E5EFnx+YoIvKAiAzN5bDD\n91cUka62BOigo9u+gpLYK9KUUD9KqQIQ3StWKSUibYE1wB/AB8DfQG2gNVDfGBPmxPAcRkR+AY4Y\nYzrmcKycMSbFwf3NA9oAdYFbjTFrHNl+Ln12wPpeRhljvi/GfsoBF40x6cXVh1Kq4DycHYBSyiX8\nB0gGWhhjTmU9ICL+zgmpZBVDUucF9AAeB4YBg7ASrjLB0ddLKeUYeitWKQVQD/jVPqkDMMYctS8T\nkcEisllEzorIPyIyX0Rq2dVZKyLbbbd414rIGRHZKyK9bcc7iMgGWxu7RaST3fl1RORN27GzInJU\nRBaKSLBdvaG2251tRWSGiCSJyGkRWZo1KRWRBOBaINJWP11E1mSJ5bLn0kSklYh8JSLHbG1uE5GH\n83lN7wQqAIuABcCdtlEu+2uZLiKvi0gPEflFRM6LyA4R6VKY65EbEemb5Xt2RETmikhgLvV+td2O\n3y4iPUVkju362cf9tF1ZoIi8LyJ/Z/kc9+TQx0O2Y2ds13aTiAzIz+dQSuVNEzulFFi3YCNE5Nor\nVRSR/2Ddrv0NGAvMBDoB34lIlSxVDVAVWA5sAMYD54H5ItIPmA98AUwEKgGLRKRSlvNvxLoVPB94\nCHjL1k+MiFTIIbT/Ak2AycCbwB22sgxjgIPALqzRs8HAC3bxZv2ctwLfAeHAq8CjWCNut+dxebL6\nNxBjjEkCPgGq2GLKSTtgFtZnHQ+UBxaLSNUsdQp6PbJ+lruxkstUrBHEt7ESz3VZv2cicrst1gu2\n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\niYuLA2DChAmcccYZpKamkpiYCEBGRgYTJkygVq1agJ27N3bsWD744AO6dOkCwLvvvkuDBg3yxPTa\na68xZswY0tPTycjIoHLlygwePNhzvVy5cgwdOtTzvnHjxnzzzTdMnTo1V2JXq1YtRo0ahYiQkJDA\nVVddxfz58/Mkdg8//DATJ05k0aJFtGrVqkTPM5A0sVNKKaVC3MDEgXRr0S3f65XKVSr0Hh/e8KGn\nx66kcubZfffddxw4cICEhARiYmJISkritttuIz09nYULF9K0aVMaNGjAjBkzaNiwoSepA2jVqhU1\na9Zk3bp1nsSucePGnqQOYPPmzWRkZNChQwdPWXR0NC1atMgTU58+fXjsscc4cOAAQ4cO5YILLqBj\nx4656rz22muMGzeObdu2cezYMdLT0/P0/J1xxhmIiOd9bGwsa9asyVXnhRde4OjRo6xYseKk5g8G\nkyZ2SimlVIiLrVby4dPChmqLo2nTptSvX5+UlBQOHDhAUlISYJOghg0bsmTJklzz64wxuZKlHL7l\nVapUyXMd8PtZXzVq1KBJkyY0adKEKVOm0KxZM8477zwuuugiACZPnswDDzzAyJEjOe+886hWrRrD\nhw9n+fLlue5Tvnz5XO9FJNcKYIDOnTvz+eefM2XKFB566KFCYytNunhCKaWUUsWWnJxMSkoKCxcu\n9AyTgk16Zs2axfLlyz2JXevWrdm2bRs7d+701Fu7di0HDx6kdev8E85mzZpRrly5XAsyfv/9dzZs\n2FBgbFWqVGHw4MH861//8pR98803XHjhhQwcOJCzzz6b+Ph4Nm/eXNxvG4AOHTrw5Zdf8swzz/DC\nCy+c1D2CJawSOxG5R0S2isgxEVkqIucWUr+GiLwmIrucz6wXkctLK16llFKqrEpOTubrr79m1apV\nnh47sInd6NGjycjI8CR8l1xyCWeddRa9e/dm5cqVLF++nH79+pGcnFzgIogqVaowYMAAHnjgAVJS\nUlizZg39+/f3LKwoyMCBA9mwYQPTp08HoHnz5qxYsYI5c+awceNGnnjiCb777ruT/v47duzIrFmz\neOqpp3jppZdO+j6BFjaJnYjcBLwIDAXaAquA2SISk0/98sA8oBFwHdACuAPY6a++UkoppYouOTmZ\n48eP07x5c+rUqeMpT0pK4vDhw7Rs2ZJ69ep5yj/55BOio6NJSkqia9euNGvWjMmTJxfazvPPP0+n\nTp3o1q0bXbt2pVOnTp45eTn8DdVGR0fTt29fhg0bBthE77rrrqNnz56cd955HDhwgHvuuafY37d3\nWxdccAGfffYZTzzxBKNGjSr2vYJBcsavQ52ILAWWGWMGO+8F2A68YowZ7qf+XcC/gJbGmPw3oDlR\nvx2QmpqaSrt27QIbvFJKKeUjLS2NxMRE9N+dsq2gn3PONSDRGJMWiPbCosfO6X1LBObnlBmbkc4D\nzs/nY1cD3wKvi8ivIvKDiDwiImHxPSullFJKFVe4JDkxQCSwx6d8D1Avb3UA4oEbsN/jFcBT2B68\nR4MUo1IqH3v2wPHjbkehlFJlX7hvdyJAfmPJEdjE706nd2+liNQH7gf+m98NhwwZQo0aNXKV9erV\ni169egUmYqVOQXfcAUePwrx59n1mJpQL9799lFKqGL788kvPfL8cBw8eDHg74fJX634gCzjNp7wu\neXvxcuwG0k3uSYTrgHoiUs4Y4/d04ZEjR+pcB6UCbPhw2L/ffv3MM7BgAcyeDUVY2KaUUmXC5Zdf\nzqOP5h409JpjFzBhkdgZYzJEJBW4GPgUPIsnLgZeyedjSwDfbrYWwO78kjqlVHC0bHni6/POg8qV\noQj7jSqllCqmcJljBzACuFNE+opIS+BNIAoYDyAi74nIM1713wBqi8jLItJcRK4CHgFCYz2yUqeo\niy6CIUMgIpz+9lFKqTARFj12AMaYqc6edf/BDsl+D1xmjNnnVGkAZHrV3yEiXYGR2D3vdjpf59ka\nRSkVeOvXwx9/2B46pZRSpSNsEjsAY8zrwOv5XLvIT9ky4IJgx6WUyuuVV+xcuh9/zH8u3dGj8NFH\n0Ldv6camlFJllQ6GKKWC4tVXYc6cghdIfPEFDBwIW7aUXlxKKVWWaWKnlAqKyEho1KjgOj16wIYN\nEB9fOjEppVRZp4mdUso1ItCwodtRKKWKq3///kRERBAZGUlERITn6y0l7H7PysoiIiKCL774wlPW\nqVMnTxv+Xl27di3ptwPA559/TkREBNnZ2QG5n1vCao6dUiq0paXBlCnw5JNQqVLxP68bFysVPq64\n4grGjx+P93axderUKdE9/Z1fP3PmTNLT0wHYunUrF1xwAYsWLSIhIQGAihUrlqhN77ZFxG8M4UR7\n7JRSAbNmDSxadHLJ2fbtcOaZ8NVXgY9LKRV4FStWpE6dOtStW9fzEhG++OIL/va3vxEdHU1MTAzd\nunVj69atns+lp6czaNAg4uLiqFy5MvHx8bzwwgsANGnSBBHh73//OxERESQkJFCzZk3P/WNiYjDG\nUKtWLU9ZzmlR+/fvp1+/fsTExBAdHc1ll13G+vXrAcjOzubCCy/k+uuv98SxZ88eTjvtNF588UV+\n/PFHunXrBkD58uWJjIzk3nvvLa1HGVCa2CmlAqZvX/jmm5NL7OLi4JJLIDY28HEpFe5274Yffshb\n/v339ixmb/v3295zX2vXwo4dwYnP27Fjx3jggQdIS0tj/vz5GGPo0aOH5/qIESOYPXs206ZNY8OG\nDUyYMIFGzoTc7777DmMM77//Pr/++itLly4tcrvdu3cnPT2dBQsWsHz5cpo3b86ll17KkSNHiIiI\nYOLEicydO5dx48YBcNttt3HWWWfxr3/9i5YtWzJhwgQAdu3axe7du3n22WcD+FRKjw56KKUC6mQ3\nHo6MhFG6fbhSfo0eDW+/nTcx69wZhg2D++47Ufbxx/Z8Zt8RxRtugMsugxEjAhPTzJkzqVatmuf9\nlVdeyZQpU3IlcQBjxowhLi6ODRs2kJCQwPbt20lISOD8888HoKHXRNucodwaNWpQt27dIscye/Zs\ntm7dyuLFi4lw/hJ65ZVXmDFjBjNnzqRnz540adKEl19+mX/+85+sW7eOb7/9lh+cbDkyMpKaNWsC\nULduXc89wpEmdkqpEsvO1pMklAqmgQPtKnJfX32Vt5f7mmvA35HnH34I1asHLqaLLrqIN9980zMn\nrUqVKgBs3LiRxx9/nOXLl7N//37P3LVt27aRkJBA//796dq1Ky1btuTyyy/n6quv5uKLLy5RLKtW\nrWLv3r2eYdkcx48fZ/PmzZ73t956KzNmzOCFF17g/fffp379+iVqNxRpYqeUKpElS+w/OrNnQyD/\njlyyBGJioEWLwN1TqXAVG+t/msI55+Qti4mxL1+tWwc2pipVqtCkSZM85VdddRUJCQmMHTuW2NhY\n0tPTOfvssz0LINq3b88vv/zCrFmzmDdvHj169OCKK65g0qRJJx3L4cOHadasGbNmzcqz+KFWrVqe\nrw8dOsTq1aspV64cGzZsOOn2Qpn+jq2UKpGaNaFTJ6hXL3D3zMqyyWKghoyUUqVj7969bNq0iccf\nf5wuXbrQokULfvvtN0QkV71q1apx44038tZbb/HBBx8wZcoUDh8+TGRkJJGRkWRlZeXbhu+9ANq1\na8e2bduoUqUK8fHxuV45Q6wA99xzD7Vr1+bjjz/m6aefZvny5Z5rFSpUACiw7XCgPXZKqRI54wx4\n443A3jMyEr78MrDJolIq+GrXrk10dDSjR4+mTp06bN26lYcffjhXnRdffJGGDRtyjtPd+OGHH9Kg\nQQOqVq0KQKNGjZg3bx4dOnSgYsWKuRIz8L8lytVXX82ZZ55Jt27deOaZZ4iPj2fHjh3MnDmTW2+9\nlVatWjF16lSmT59OWloaLVq0YNCgQfTu3ZtVq1YRFRXF6aefDsCnn35KUlISUVFRREVFBeEpBZf2\n2CmlQlKDBrqnnVLhJjIykilTprBs2TLOPPNMHnjgAc9WJjmqVq3KM888Q/v27enYsSO7du3i888/\n91wfOXIkX375JY0aNaJDhw552vDXYxcZGcncuXNp164dt9xyC61ataJv377s27ePmJgYdu3axd13\n383zzz9PC2d+x/Dhw6lUqRKDBw8GoHnz5jz88MPcc8891KtXL09CGi4k3DfiCxQRaQekpqam0s7f\nrFOlVC4//wzOL7ilIiur4HNnlQo3aWlpJCYmov/ulG0F/ZxzrgGJxhg/m9QUn/bYKaWK7auvoGlT\n8JqeElT/+x907553+wallFK56UCHUqrYzj8f3nsPzj23dNpr08b+1xh7vqxSSin/NLFTShVb+fLQ\nu3fptXfFFfallFKqYDoUq5RSSilVRmhip5Qqsvffh2PH3I3h+HGYOtXdGPzZsAGc88ZVmMvMhMWL\n7YkqSoUbHYpVShXJhg3Qvz9UqwbdurkXx4wZNo4OHUp3VW5hpk+HRx+Fw4chDLe+Ul5277ZnsE6a\nBD17Br+9devWBb8R5ZrS/vlqYqeUKpKEBNi4ERo1cjeOnj2hY8fQSurAHsJ+ySWa1JUFDRvCrFlw\n6aXBbScmJoaoqCj69OkT3IaU66Kioojxd85bEGhip5QqssaN3Y7AroqNj3c7irwqVID27XOXzZoF\nR47Yw9t1NW94ufzy4LfRqFEj1q1bx/79+4PfmHJVTEwMjUrpt2JN7JRSYe2PP6BKFbtSt7Rt3mx7\nd5wjJvOYORO2b4frry/duFTxzZgBTZqAc8pVqWnUqFGp/YOvTg26eEKpMHTkCPzjH7B2be7yQE/2\nNgbuvRe++y6w9w2UzExISoKHHnKn7SuuAOc0Ir9efz00F3qo3LKz4YUX4M03817LyLDD7PPmlX5c\nSp0MTeyUCnH79sETT9hEIscff9jTHw4ezF33vvvgwgtzl2Vnw7hxsG1b8dv+/Xf45hsbQygqVw4e\nfxzuusudtj/4AAo7TrJy5dzv77wTXn01eHGp4ouIgNmz/f9cIiPtwqFffin9uJQ6GToUq1SI27oV\n3ngDbrwRzjzTltWvD6tX5617zTV2YYG3336D226zQ03eIz5vvmm3dHj//dz1f/zRLkyoUgVq1bLH\nhkWE8K+Abg5z+s6pK4wx9pnWqBGceNTJq1rVf3lEhB1S1zmSKlxoYqdUiOvQwfYWFGW1ZZcuecvq\n1LF7v/n+w1Szpk0Qvf31l00ex461W4pAaCd1/oTysWMi8NxzecsPHLAJnyo9e/bYX2IuuqjwuqH6\n50kpf8Lsr2ylyrbjx+Hf/847d66kW2hUrJh3gn/PnjB8eO6yyEg79Bqux3etXm170bZvD879jx2z\nzy2Q21L9+Se0bg2vvRa4e5a2I0dy/5k1BhYtci+eonjxRfvLy19/Fe9zR4/afe6UClWa2CkVYmbO\nhNRUd9ouVw7OPx/q1XOn/ZI67TRo2jT/VaoltXevXQkbyEUqVarYXrzu3QN3z9I2aBDccINN6AA+\n+QSSk/P+ghJKnn4aFi60v/QUx403wi23BCUkpQJCTM7/iac4EWkHpKamptKuXTu3w1GnsMxMm2Cp\n0FRaQ70ffQRXX138xMMNW7bY59K0qX1vDCxbBued525cwZCaanvQW7VyOxJVFqSlpZGYmAiQaIxJ\nC8Q9tcdOKRe9+WbelXia1IW20kjq1q+Hm26COXOC31Zx/fWX7VX2Fh9/IqkD+4xCLakzBpYuLfl9\nEhM1qVOhTRM7pVy0aZPt7VDBMWsWjBlTsntkZtpJ9qWpZUv46Sf4+99Lt92imDzZrkTesaPon0lP\nd39e2pw5dprBypXuxqFUsGlip5SLnn8eRo50O4qya948+OKLE3O/Tsabb9qVyXv3Bi6uomjWLHfv\n4N69do/CNWtKNw5fffrADz9AgwZF/8zdd8OVVwZ+A+3i6NoVUlKgbdvA3XP5cnjyycDdT6lA0MRO\nqVIyb56dYO79j5tuoxBcw4fbuWolec533GEXA9StG7i4TsahQ1C7NsTFlV6bmZn29Iw//zxRFhkJ\nCQnFu8+DD8JLL7m7dY6I/+2ASmL1avuLw9Gjgb1vsBkDb71lN2VWZY8mdkqVkkqV7HYmhw65Hcmp\nIzLSvkqiYkW45JLAxFMSzZrBp5/m3u8uOxtWrAhemzt32uPaSnqcVkKCBQN9FwAAIABJREFUPfqt\ntP3yS8l6awszYAAsWVLy7YhKmwhMm2Y3KAe7p98//wn797sblwoMTeyUChLff1D+9jc76bxmTXfi\nUfDxx+HXu1KQL76Ac88N3vBs48b25JNrrw3sfY8dC27CBfY4vMTE4E51EAmfxU7eRxICfPYZ/Pe/\n9uvISPs+lLenUUWniZ1SQbB1q52ovXGj25GoHLt32/lhH3xQeN1XX4Vnnw1+TCV15ZUwf/6Jo+ZK\nIjvbDs8tXJi7PCam5Pf2dvSoXTEb7PNyo6Nh9Gh7nF5pCdUzle+4w55R7K18+RNfx8TY/Rk7dy7d\nuFRwaGKnVBCcdpqdC5We7nYkKkdsLHz/vR0+K8zvv9szdkNdRETeI7G2bLHJTHGH1URg4sS8iV2g\nRUXZDX4vvji47QD06FF6PeRffAFNmsCGDaXTXnF06QKXXlpwnXA7OlDlL0w6kZUKbcbYV85fjlFR\nMH26uzGpvJo1K1q9J54I/lBhsGzZYhPY4s77EoG5c0tnQ+T77w/OfY8ds0Oj3r1RpSU52Z4gEh9f\n+m17O3jQjhS0b3+irHdv9+JRpS+scnQRuUdEtorIMRFZKiLnFlC3n4hki0iW899sESlDs2tUqMjM\nhKuuglGj3I5EFYcxdsg8P+G6YvmSS06cjpAjPT1vD97UqTB0aO4yt065CFQS3a8f3HxzYO5VXJUr\nwz/+4f6cu3/9yz6Dk9laxhh4+22b4KvwFTaJnYjcBLwIDAXaAquA2SJS0AyQg0A9r1fjYMepTj05\n56s2b+52JKo4Roywk+t//92+T0uDjAx3YwoU36R07FjbW3ngwImynTttz46be8uBnbB/4YXF2/A4\nP3feWbpz6kLRsGF2v76TGVoVsXNQFy0KeFiqFIXTUOwQYLQx5j0AEbkLuAq4DRiez2eMMSZEp7Oe\nnDfftL8Z9uvndiSntvT03AfNP/64e7GokzNggE12oqPtPm0XX2x7Ox57zO3IAu/666F69dxbpfzf\n/4VGr2TNmnbyfiDmeIXCtjRg/34YPtxuzOz9zANt8WL4/HM7BJyjOBtH+zN7tjtD2SpwwqLHTkTK\nA4nA/JwyY4wB5gHnF/DRqiLys4hsE5GPRaR1kEMNulWr7Eu5Z9gwu4t9uM7BUlbNmtC9u/26WjX7\nD9rgwe7GFCwxMXmHKEMhqQO7yOjTT09+4+WsrMDGEwj79tlVv19/Hdx2tm+3yV0gt/DRpC78hUuP\nXQwQCezxKd8DtMjnMz9he/NWAzWAB4BvROQMY8zOYAUabG+84f7QyakuKcmusDQmdP5xVCXXoYPb\nEajimjbNbkszb15o7Q9Zv77dPqRq1cDe99gxO2KTo1cv+9K/h5S3cEns8iOA334TY8xSYKmnosi3\nwDrgTuw8Pb+GDBlCjRo1cpX16tWLXr16BSLegPAessjOhttvh0GD7EalKviSk+1LKRV4CxbYXijf\nhR3+NG8OnTrZYeZQE+ikbto0uzhj7Vo7fQCCm9CtWgXLluXd/06dvEmTJjFp0qRcZQcPHgx4O+GS\n2O0HsoDTfMrrkrcXzy9jTKaIrAQK3PBg5MiRtGvX7qSCdMNvv9n/0Y8fdzuSsmvbNptAn36625Eo\nVfb98AN8841dyFLYsGCbNsE9WSJQjh+3i6xKsmL2b3+ziZ333N5gmjPHLrrp31+HZwPFXydRWloa\niYmJAW0nLObYGWMygFTAs6WliIjz/pui3ENEIoAzgd3BiNEtderAt9/a31pVcNx6q/7WqlRpGTzY\nbvZbVpKJ9HS7av5//yv6ZzIz7fF33vN4TzsN/v1vqFIl8DH6c++9NskuKz+HU0lYJHaOEcCdItJX\nRFoCbwJRwHgAEXlPRJ7JqSwij4vIpSLSRETaAu9jtzt5u/RDDy7f7vhNm+DGG0P3eJtwM3YsjBvn\ndhRKnToiI/2X791rV76uX1+68ZREhQowcCBcfXXRP/PVV/Z83rS04MVVmIoV3d+TT52csPmxGWOm\nOnvW/Qc7JPs9cJnXdiYNAO9jjqOBt7D71/2O7fE73xgTRn8lnJydO2HXruLvPK/80yFYpdwzaRK0\nbQstW9rhWZHSG44MlLvuKl795GQ7xaZVq+DEo8q2cOqxwxjzujHmdGNMZWPM+caYFV7XLjLG3Ob1\n/j5jTBOnbpwx5mpjzGp3Ii9dSUl28nFpddmXNQsWwIoVhddTSgVXejo88wxMmGDf169vT0Vw+9iu\nQNq1C3r2zL1Bs0joJHUHD8Irr5SdzbtPBWGV2Kmi8x2efeMNu/Gq7r1WMGPgqafsqQRKKXdVqGCH\nJf/7X7cjCZyVK+32LDmqVrVbo2zb5l5MBdm+HR58EL77zu1IVFGFzVCsKpljx+wmlrrfUcFEYMaM\n3HtFKaXck7O1R1nxzDO2FyznlIzq1WH58tD9u/nMM2H37rL3cyjLNLE7Rdx3n9sRhI9Q2uhUKVW2\njBmT9xfHUE3qcmhSF150KPYUZQzccAN88onbkbjvxRdh5ky3o1BKnQpq1rQrTpUKFk3sTlHHjtn9\niQK9O3q4yc62m6G6ua2AUkqFOmPs3MB169yORBVGh2JPUVFR8MEHbkfhvogImDo1/32zlFJK2V+C\n77zT7pH63HNuR6MKoj12yuOXX+DCC+0Gx2WZ78pgTeqUUqpgkZHw9dfw7LNuR6IKE5TETkTGi0jn\nYNxbBc/Ro1C7tj26pqzKzLS/cb72mtuRKKVUeImLC/2FHip4PXbRwFwR2Sgij4pI/SC1owKoVSv4\n9FOoVu1EWVnb9y4yEpo1g4YN3Y5EKaWUCrygJHbGmO7YI77eAG4CfhaRWSJyvYjokcJhZMwYu3o2\nM7PwuuFAxA4ldOvmdiRKKRWedu2yJ/So0BS0OXbGmH3GmBHGmLOBjsAmYAKwS0RGikjzYLWtAicm\nxh7fE86HQR86VPZ6HpVSyi1PPw0DB9oFFSr0BH3xhIjEApcCXYEs4AvgLGCtiAwJdvuqZK67Dv73\nv9xl4ZQk/fUXXHABPPmk25EopVTZMHSoPU87QpdfhqRgLZ4oLyI9ROQz4BfgBmAkEGuM6WeMuQS4\nEXgiGO2r4DEGune3h0KHg4oV4f774eab3Y5EKaXKhrp1oUYNt6NQ+QnWANtubNI4CehgjPneT50U\n4I8gta+CJCsL2ra1CxDCxa23uh2BUkopVTqCldgNAT40xhzPr4Ix5g+gSZDaV0FSrpz/Yc2srNDZ\nD27dOjsvUI/tUUqp4MnMhPnzoWtX3QYllARrhPxTIMq3UERqiUj1ILWpXLJjh90qZdkytyOBI0eg\nSxd46im3I1FKqbJt3jy4/HJYvdrtSJS3YCV2k4GefspvdK6pMqR8eZtMtWjhdiRQpQp8+CE89JDb\nkSilVNnWtSusXAlnn+12JMpbsBK7jtg5dL4WOtdUGXLaafDWW1Cz5okyY9zb+65z59ybLCullAq8\niAg45xy3o1C+gpXYVcT//L3yQOUgtalCyHvvQceOdmg02KZPh99/D347SimlVKgLVmK3HLjTT/ld\nQGqQ2lQhpHVruPpqOzQaTAcPwl13wdtvB7cdpZRS+duwAfbtczsKBcFbFfsYME9EzgbmO2UXA+di\nNypWZdy559qXt7/+CvxK1Ro17EaZevarUkq549gx6NABhgyxmxcrdwUlsTPGLBGR84EHsAsmjgGr\ngQHGmI3BaFOFNmPsmbPx8fDSS4G9d6NGgb2fUkqpoqtcGWbP1kUUoSJoJ4A6mxL3Dtb9Vfi58cbc\nCyxORnY2PP443H47NNFdEJVSKiR01GWRISPoR7uLSGXsogkPY8yhYLerQosI9OmTt/zYMfvbXlH9\n/jtMmwZt2mhip5RSSvkK1lmxUSIy6v/Zu+/4qur7j+OvD2HIEhCQIUNBgaoVBbXiXuBGxQkojrpq\nXVTratXWqlVbR7Xqz7oAFRTFgXsUFy6QiKOioqDIlCUQwkry+f3xPYGbSzb35ObevJ+Px3kkZ34/\n93BIPvmuY2Y/A3nA0qRFhAULQtPs+PGVP6d1a/jsMzjppPjiEhGR6lm1Cqarw1VaxTUq9h/AgcDv\ngDXAWcB1wFxgWExlSobZfPMwonXPPat2nl4VJiJSO51xBpxc2usJpMbEldgdBZzv7uOAAuA9d78B\nuBr1u5NI48ZhBFWbNhu2uUNe3ob1pUvhkENg0qSaj09ERKrmmmvgySfTHUXdFlditwUwM/p+ebQO\nMBHYN6YyJQs8+ST06BGaaQEaNgw1dPXielJFRCRldtgBtt023VHUbXENnpgBbA38CHxNmPJkEqEm\n75eYypQssPfecOml4TVlECY4rkofPBERkbosrnqQR4DiGW1uBn5vZmuAOwj970RK1alTSOxERCSz\nzZxZ8TGSenFNUHxHwvdvmlkvoC/wnbt/HkeZIiIiUjuMHQtDhsCMGZpEvqalvMbOzBqY2X/NbLvi\nbe7+o7s/o6ROREQk+x1xREjuttoq3ZHUPSmvsXP3dWa2U6qvKyIiIpmhaVMYNCjdUdRNcfWxewz4\nbUzXFhEREZFSxDUqtj5wppn1Bz4BVibudPc/xFSuiIiI1CK//BLmLdXk8jUjrhq7HYFcwhx2PYBd\nEpadYypTREREapGlS6FrVxg1Kt2R1B1xjYo9II7rioiISOZo1QruuQcOPjjdkdQdcTXFioiIiHDK\nKemOoG6JJbEzs7cAL2u/ux9Yzev+HrgMaA98Blzo7pMrcd7JwGjgOXfXOB0RERHJSnH1sZtKSLyK\nl6+AhkAf4IvqXNDMTgJuA64j9NX7DHjNzNpUcF5Xwtsu3q1OuSIiIrLp3GHZsnRHkf3i6mM3vLTt\nZvYXoFk1LzscuN/dR0XXOg84AjgTuLWM8uoRpl65FtgXaFHNskVERGQTnHgiFBTAs8+mO5LsVtN9\n7B4DJhGaUyvNzBoQXkl2U/E2d3czexPoV86p1wE/u/sjZrZvNeIVERGRFDj7bGjQIN1RZL+aTuz6\nAaurcV4bIAdYkLR9AdCztBPMbC/gDKB3NcoTERGRFBowIN0R1A1xDZ54JnkT0AHYFfhbKouilEEa\nZtYMeBQ4292XVuWCw4cPp0WLki22gwcPZvDgwZsSp4iIiNRhY8aMYcyYMSW2LYuh06G5lzl4tfoX\nNXskaVMRsBCY4O6vV+N6DYB84Dh3H5+wfQTQwt2PTTq+N2GC5EJC8gcbBooUAj3dfWbSOX2AKVOm\nTKFPnz5VDVFEREQqadWq8DaKui43N5e+ffsC9HX33FRcM67BE2ek+HrrzGwKcBAwHsDMLFq/q5RT\npgG/Ttp2I2HgxkXAT6mMT0RERCpnzBgYPhy++w6aVXc4pZQprqbY3YB67v5x0vbfAIXu/kk1Lns7\nMDJK8CYRRsk2AUZE1x4FzHb3q919LWGKlcSyfyGMuZhWjbJFREQkBfbaC/74R6gX14RrdVxct/Ue\noHMp27eK9lWZu48FLgWuBz4FdgIOcfeF0SGdCBMXi4iISC3VpQtceik0aZLuSLJTXKNityf0cUv2\nabSvWtz9XuDeMvaV+zaLVDcPi4iIiNQ2cdXYrQHalbK9A1AQU5kiIiKSQQoKwhspJHXiSuxeB/5u\nZuvnDTGzloQJht+IqUwRERHJEHPnwnbbwYQJ6Y4ku8TVFHsZ4d2sP5rZp9G2nQkTCp8aU5kiIiKS\nITp0gMGDYaut0h1JdolrupM5ZrYTMJTw5odVwCPAGHdfF0eZIiIikjnM4KabKj5Oqia2V4q5+0rg\nP3FdX0RERERKiqWPnZldZWZnlrL9TDO7Io4yRUREJHMVFaU7guwQ1+CJc4GvS9n+P+C8mMoUERGR\nDHT66XCFqn1SIq6m2PbAvFK2LyRMeSIiIiICwO67Q6tW6Y4iO8SV2P0E7AXMTNq+FzA3pjJFREQk\nA51/frojyB5xJXYPAHeaWQOgeIaag4BbgdtiKlNERESkTosrsfsH0Jrw+q+G0bbVwC3u/veYyhQR\nEZEM5x6mQpHqiWXwhAdXAG2BPQhz2W3h7tfHUZ6IiIhkvrFjYb/9NEJ2U8Q2jx2Au+cBk+MsQ0RE\nRLJD587QuzesWgVNm6Y7mswUW2JnZrsBJwBd2NAcC4C7D4qrXBEREclM/fqFRaovrgmKTwbeB34F\nHAs0ALYHDgSWxVGmiIiISF0X1wTFVwPD3f0oYC1wMSHJGwvMiqlMERERkTotrsSuO/BS9P1aoKm7\nO3AHcE5MZYqIiEgW+PHHMIhi+vR0R5J54krslgDNo+/nADtG37cEmsRUpoiIiGSBdu2gZUvIy0t3\nJJknrsET7wH9gS+Ap4B/mdmB0bb/xlSmiIiIZIHNNoPnn093FJkprsTuAmCz6PsbgXXAnsA44IaY\nyhQRERGp02JJ7Nx9ScL3RcDNcZQjIiIiIhvE1cdOREREZJO4w6WXwoMPpjuSzKHETkRERGolM1i7\nFtasSXckmSPWV4qJiIiIbIq77053BJlFNXYiIiIiWSLWxM7MtjWzQ8yscbRucZYnIiIiUpfF9a7Y\n1mb2JvAt8DLQIdr1kJndFkeZIiIikr1efBEuvjjdUdR+cdXY3QEUAF2A/ITtTwKHxlSmiIiIZKnl\ny2HmzDCYQsoW1+CJAcAh7j47qfV1OtA1pjJFREQkSw0ZEhYpX1w1dk0pWVNXbAtAg5ZFREREYhBX\nYvceMCxh3c2sHnA58FZMZYqIiIjUaXEldpcD55jZK0BD4FbgS2Bf4IqYyhQREZEsN2sW/Pa3sGxZ\nuiOpnWJJ7Nz9S6AHMBF4ntA0+wywi7t/H0eZIiIikv0aNICJE2H69HRHUjvF9uYJd18G3BjX9UVE\nRKTu6dABvv46vG5MNhZLYmdmO5Wxy4HVwCx31yAKERERqTIldWWLq8ZuKiGJAyi+/Z6wf52ZPQmc\n6+6rY4pBREREpE6Ja/DEsYQ5684BegM7R99/AwwBfgscCNwQU/kiIiKSxQoL4Y47YMKEdEdSu8RV\nY/cn4GJ3fy1h2+dmNhv4m7vvbmYrgduAy2KKQURERLJUvXrw7LOwbh0ceGC6o6k94qqx+zXwYynb\nf4z2QWiu7VDKMWUys9+b2UwzW2VmH5nZbuUce6yZTTazpWaWZ2afmtkpVSlPREREaiczeOstuPzy\ndEdSu8SV2H0NXGlmDYs3mFkD4MpoH8BWwILKXtDMTiLU8F0H7AJ8BrxmZm3KOGUxoal3D0Iy+Qjw\niJn1r9pHERERkdooJyfdEdQ+cTXF/h4YD8w2s88JAyd2AnKAI6NjugH3VuGaw4H73X0UgJmdBxwB\nnEmYALkEd383adNdZnYasDfwRhXKFREREckIsSR27v6BmW0NnEKYqNiAp4HR7r4iOubRyl4vqu3r\nC9yUUIab2ZtAv0pe46AolncqW66IiIjUfu+/D19+Ceeem+5I0i/OCYrzgP9L0eXaEGr7kptuFwA9\nyzrJzDYH5gCNgALgfHfX+BkREZEsMmECvPginH12GFRRl8WW2AGY2fZAF8L7Ytdz9/GpKoKS8+Ml\nW0GYbqUZcBBwh5nNKKWZdr3hw4fTokWLEtsGDx7M4MGDUxCuiIiIpNrll8Of/1y7Jy4eM2YMY8aM\nKbFtWQwvvDX38vKial7UrBvwLGHQgpM0SbG7V6m7Y9QUmw8cl5gUmtkIoIW7H1vJ6zwAdHL3w0rZ\n1weYMmXKFPr06VOV8ERERESqLDc3l759+wL0dffcVFwzrgrLfwEzgXaEhGwHYF/gE2D/ql7M3dcB\nUwi1bgCYmUXrH1ThUvUIzbIiIiIiWSeuxK4fcK27LwSKgCJ3nwhcBdxVzWveDpxjZsPMrBeh/14T\nYASAmY0ys/WDK8zsSjM72My2MbNeZnYpYTBHpQdtiIiISOZYuBBuvTW8laKuiquPXQ6QF32/COhI\neJ3Yj5Qz2KE87j42mrPuekJN4FTgkCh5BOhEGCBRrClwT7R9FWH+vKHu/nR1yhcREZHabdYsuP56\nOOQQ6N073dGkR1yJ3ZeEeetmAB8Dl5vZWsL7YmdU96Lufi9lzH3n7gcmrV8DXFPdskRERCSz9O0L\n8+ZB8+bpjiR94krsbiDUmAFcC7wIvEd4G8RJMZUpIiIidVxdTuogvgmKX0v4/jugl5ltASz1OIbh\nioiIiEjqB0+YWX0zKzCzHRO3u/sSJXUiIiISt6IiePZZ+PbbdEdS81Ke2Ll7ATCLMIBCREREpEYV\nFMCFF8K4cemOpObF1cfuRuAmMzvV3ZfEVIaIiIjIRho2hE8/hbZt0x1JzYsrsbsA2BaYa2Y/AisT\nd7q7Xu0gIiIisamLSR3El9g9F9N1RURERKQMcY2K/Wsc1xURERGpiu+/h5kz4eCD0x1JzYirxg4z\nawkcD3QH/uHuS8ysD7DA3efEVa6IiIhIsRtvDP3tcnPBLN3RxC+WxM7MdgLeBJYBWwMPAEuAQUAX\nYFgc5YqIiIgkuuUWaNq0biR1EMN0J5HbgRHuvh2wOmH7y8C+MZUpIiIiUkLbttCkSbqjqDlxJXa7\nAfeXsn0O0D6mMkVERETqtLgSuzXA5qVs7wEsjKlMERERkVKtXg3jx6c7ivjFldiNB641swbRuptZ\nF+AWoA7OAy0iIiLp9PLLcMwx8N136Y4kXnEldpcCzYCfgcbAO8B3wArgTzGVKSIiIlKqo4+GadNg\n223THUm84prHbhnQ38z2BnYiJHm57v5mHOWJiIiIlCcnB3r2THcU8YtrupPO7v6Tu08EJsZRhoiI\niIiUFFdT7A9m9raZnRVNVCwiIiJSK+TmwuLF6Y4iHnFOdzIZuA6Yb2bPmtlxZtYopvJEREREKrRs\nGey9N4wYke5I4hFLYufuue7+R8JbJg4DFhHePrHAzB6Oo0wRERGRirRoARMnwsUXpzuSeMRVYweA\nB2+5+9nAwcBM4LQ4yxQREREpT58+UD+WUQbpF2tiZ2adzexyM5tKaJpdCVwQZ5kiIiIidVVco2LP\nAYYCewHfAI8Dx7j7D3GUJyIiIlJVy5fD/PnQo0e6I0mduCoirwGeAC5296kxlSEiIiJSbUOGhOTu\n3XfTHUnqxJXYdXF3L22Hme3o7l/GVK6IiIhIpdxyC7Rqle4oUiuuN0+USOrMrDkwGDgL6AvkxFGu\niIiISGXtsEO6I0i9uAdP7GtmI4B5wGXABGCPOMsUERERqatSXmNnZh0IU5r8FtgcGAs0Igye+CrV\n5YmIiIhsCnf49tvseJdsSmvszGw88DWwE3AJ0NHdL0xlGSIiIiKp9PDDsNNOsGBBuiPZdKmusTsc\nuAu4z92np/jaIiIiIil3/PHQpQtsuWW6I9l0qe5jtw/QHPjEzD42swvMrG2KyxARERFJmRYtoH9/\nMEt3JJsupYmdu38YvT6sA3A/cDIwJyqnfzQ6VkRERERiEMuoWHfPd/eH3X1v4NfAbcCVwM9RPzwR\nERGRWmf+fFi3Lt1RVF+s050AuPs37n450Ikwl52IiIhIrTNvHmy9NTz5ZLojqb643jyxEXcvBJ6L\nFhEREZFapUMHGDkSDjkk3ZFUX40ldiIiIiK13UknpTuCTRN7U6yIiIiI1IyMSuzM7PdmNtPMVpnZ\nR2a2WznHnmVm75rZkmh5o7zjRURERIoVFsLSpemOouoyJrEzs5MIo2uvA3YBPgNeM7M2ZZyyHzAa\n2J/wftqfgNejV56JiIiIlOmww+D3v093FFWXSX3shgP3u/soADM7DzgCOBO4Nflgdz81cd3MzgKO\nAw4CHos9WhEREclYl14KrVunO4qqy4jEzswaAH2Bm4q3ubub2ZtAv0pepinQAFiS+ghFREQkm2Tq\nyNhMaYptA+QAya/nXQC0r+Q1biG8BePNFMYlIiIiUmtkSmJXFgO8woPMrgROBI5x97WxRyUiIiJZ\nIy8v3RFUXkY0xQKLgEKgXdL2Ldm4Fq8EM7sMuBw4yN3/V1FBw4cPp0WLFiW2DR48mMGD9dIMERGR\nuuY//4G//AVmzIDNNqv+dcaMGcOYMWNKbFu2bNmmBVcKc6+wwqtWMLOPgI/d/eJo3YBZwF3u/o8y\nzvkjcDUwwN0nV3D9PsCUKVOm0KdPn9QGLyIiIhnp++9hwgQ47TRo2DC1187NzaVv374Afd09NxXX\nzJQaO4DbgZFmNgWYRBgl2wQYAWBmo4DZ7n51tH45cD3h/bSzzKy4ti/P3VfWcOwiIiKSgbp3D0um\nyJjEzt3HRnPWXU9okp0KHOLuC6NDOgEFCaf8jjAK9umkS/01uoaIiIhIVsmYxA7A3e8F7i1j34FJ\n69vUSFAiIiIitUSmj4oVERERkYgSOxEREZEsocROREREJEsosRMRERHJEkrsRERERLKEEjsRERGR\nLKHETkRERCRLKLETERERyRJK7ERERESyhBI7ERERkSyhxE5EREQkSyixExEREckSSuxEREREsoQS\nOxEREZEsocROREREJEsosRMRERHJEkrsRERERLKEEjsRERGRLKHETkRERCRLKLETERERyRJK7ERE\nRESyhBI7ERERkSyhxE5EREQkSyixExEREckSSuxEREREsoQSOxEREZEsocROREREJEsosRMRERHJ\nEkrsRERERLKEEjsRERGRLKHETkRERCRLKLETERERyRJK7ERERESyhBI7ERERkSyhxE5EREQkSyix\nExEREckSSuxEREREsoQSOxEREZEskVGJnZn93sxmmtkqM/vIzHYr59jtzezp6PgiM7uoJmMVERER\nqWkZk9iZ2UnAbcB1wC7AZ8BrZtamjFOaAN8DVwDzaiRIERERkTTKmMQOGA7c7+6j3P1r4DwgHziz\ntIPd/RN3v8LdxwJrazBOERERkbTIiMTOzBoAfYH/Fm9zdwfeBPqlKy4RERGR2iQjEjugDZADLEja\nvgBoX/PhiIiIiNQ+9dMdwCYywFN5weHDh9OiRYsS2wYPHszgwYNTWYyIiIjUIWPGjGHMmDElti1b\n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\ncOnp6U5ERMRv6enprkQ/d9LTnYPwvsr5s+7JJ590CQkJLisry23fvt1Vq1bNbd682U2dOtX17dvX\nOefcrFmzXFxcnFu3bp378MMPXdWqVd1PP/2UV8eyZcucmbnFixc755wbO3asq169uvv111/z7tm5\nc6erXr26e/311/PKtm7d6mrVquVGjhxZZGx79+51KSkp7i9/+UtI+a233uqOOuqovPcrV650cXFx\nbs6cOXllrVu3dq+99lrIc2PHjnV9+vRxzjn32GOPuQYNGrjt27eX+LM61J9z7jWguwtTPqMeOxER\nkYqsQwcI91Bfhw7lejx3nt2iRYvYunUr7du3JzExkT59+nDllVeyf/9+5syZw1FHHUXz5s2ZPn06\nLVq0oGnTpnl1dOzYkfr167N8+fLc81Jp1aoVRxxxRN49q1atIjMzk549e+aVNWjQgKOPPrrIuA4c\nOMDFF1+MmTFp0qSQa8OGDeOBBx5gzpw59O3bl2effZbk5GT69OkDwI4dO/jxxx8ZMmQIQ4cOzXsu\nKyuLxMREAJYuXUpKSgoJCQnl+vz8pMRORESkIqtVCyrYkWNHHXUUzZo1Iy0tja1bt+YlR0lJSbRo\n0YJ58+aFzK9zzmFmheopWF67du1C14Einy0oN6lbt24ds2fPpk6dOiHX27Zty8knn8yzzz5Lnz59\neOGFFxgxYkTe9R07dgDe8GzBI95yh4Vr1qx52DiCpsUTIiIiUmqpqamkpaXl9YDl6t27N++99x4L\nFy7MS+w6derE2rVr+emnn/LuW7ZsGdu2baNTp07FttG2bVuqVKkSsiDjt99+Y8WKFSH35SZ1P/zw\nA7NmzaJBgwZF1jds2DBef/11Xn/9dTZs2MCQIUPyrjVt2pQjjzySVatW0aZNm5BXq1atAOjSpQsZ\nGRls37695B9UhCmxExERkVJLTU3l008/ZenSpXk9duAldpMnTyYzMzMv4TvllFPo3Lkzl19+OV98\n8QULFy5kyJAhpKamHnIRRO3atRk2bBijRo0iLS2Nr7/+miuuuCKvBw28odILL7yQjIwMXnzxRTIz\nM9m0aRObNm0iMzMzpL6LL76YKlWqMGLECAYMGECzZs1Cro8dO5b77ruPxx57jO+//56vvvqKZ555\nhkceeQSAQYMG0bBhQ84//3w+//xzVq9ezeuvvx6y9UvQlNiJiIhIqaWmprJ3717atWtHo0aN8sr7\n9OnDzp076dChA02aNMkrf+utt2jQoAF9+vRhwIABtG3blpdffvmw7YwfP56TTz6Zc845hwEDBnDy\nySfnzckDWL9+Pf/9739Zv349f/jDH2jatClJSUk0bdqUzz//PKSumjVrctlll/H7778zbNiwQm2N\nGDGCf//73zz99NN06dKFfv368eKLL5KcnAxAtWrVmDlzJg0aNOCMM86gS5cujB8/PiTRDJrljl9X\ndmbWHUhPT08vNLYuIiISbhkZGaSkpKCfO7HtUH/OudeAFOdcRjjaU4+diIiISIxQYiciIiISI5TY\niYiIiMQIJXYiIiIiMUKJnYiIiEiMUGInIiIiEiOU2ImIiIjECCV2IhJR778PEyZAdjZs3gzLlwcd\nkb8+/BAKbH4vIuIbJXYiElFLl8Ls2WAGgwfD1VcHHZF/fvwRzjgDpk0LOhIpyu7dUODIUZGop8RO\nRCJqzBh45x0vsfvXv+DVV4OOyD+tWnmJ7KWXBh2JFOWmm+Css+DAgaAjkdJKTU3lpptuCqTt5OTk\nvLNjKyIldiIScbnHKrZtC40bBxuL3449FqpUgd9/h2uvhY0bg46o8tq+HfKfonnPPfDyy96fj5Tc\n5MmTqVu3LtnZ2Xllu3btomrVqvTv3z/k3rS0NOLi4lizZo2vMfXt25e4uDji4uKoWbMmRx99NP/4\nxz98bbOiUmInIhIBWVneEPQ33wQdSeW0fTt07QqTJh0sO/JIyHeWvJRQamoqu3btYvHixXllc+fO\nJSkpifnz57N///688o8//phWrVrRunXrUrdzoBRdqWbGVVddxaZNm1ixYgW33XYbd911F5MnTy51\nu9FOiZ2I+O7bbyE1FdavL/6eN96A556LXEx+SkuDJUtCyxo29JK6U04JJqbKrm5dGDUK/vSn4u8p\n2KMnRWvfvj1JSUnMmTMnr2zOnDmcd955JCcnM3/+/JDy1NRUANatW8e5555LQkIC9erV49JLL+WX\nX37Ju/eee+6hW7duPP3007Rp04YaNWoAsHv3bgYPHkxCQgLNmjVj4sSJRcZVq1YtGjVqRIsWLRg6\ndChdunTho48+yruenZ3N8OHDadOmDbVq1aJDhw6FhlSvuOIKzj//fB588EGaNm1KYmIi119/PVlZ\nWcV+Hk899RQNGjQgLS2t5B+ij9QBLSK+27kTEhIgMbH4ez76yLtvyJDIxeWXceOgWjV4663Q8twh\naAnGtdcWf23XLujRA0aMgJtvjlxMJbVxx0Y27ix+HL9GlRp0atTpkHUs27yMvQf2klQniaSEpHLF\n07dvX9LS0hg9ejTgDbmOGTOGrKws0tLS6N27N/v27WPBggUMHz4cIC+pmzt3LpmZmVxzzTVcdtll\nzJ49O6/elStX8sYbbzB9+nTic/6HueWWW5g7dy7vvPMOjRo14rbbbiM9PZ1u3boVG9/cuXP59ttv\nad++fV5ZdnY2LVq04LXXXqNhw4Z89tlnXHXVVTRt2pSLLroo7760tDSaNm3KnDlzWLlyJZdccgnd\nunVj2LBhhdoZN24cEyZM4KOPPqJHjx7l+kzDxjmnl/crWnfApaenOxGJvP37ncvODjqK8Ni/37nN\nmw99z44dsfP9VkTTpzt3wQXOZWWV/JlJk5xbtcq/mApKT093Jf25c3fa3Y6xFPvq9Finw9bR6bFO\njrG4u9PuLnfsTz75pEtISHBZWVlu+/btrlq1am7z5s1u6tSprm/fvs4552bNmuXi4uLcunXr3Icf\nfuiqVq3qfvrpp7w6li1b5szMLV682Dnn3NixY1316tXdr7/+mnfPzp07XfXq1d3rr7+eV7Z161ZX\nq1YtN3LkyLyyvn37umrVqrk6deq4atWqOTNztWrVcvPnzz/k93H99de7iy++OO/90KFDXXJyssvO\n9z/nJZdc4gYOHJj3vnXr1u7hhx92Y8aMcc2aNXPLli07ZBuH+nPOvQZ0d2HKZ9RjJyIVQtWqQUcQ\nPlWrHrp3cvNm6NbN69n7858jF1dlUrcu1KgBe/dCrVole+aaa/yNqTxGpIzgnKPPKfZ6jSo1DlvH\nqxe/mtdjV1658+wWLVrE1q1bad++PYmJifTp04crr7yS/fv3M2fOHI466iiaN2/O9OnTadGiBU2b\nNs2ro2PHjtSvX5/ly5eTkjPZsVWrVhxxxBF596xatYrMzEx69uyZV9agQQOOPvroQjENGjSIO+64\ng61bt3L33Xdz4okncvzxx4fc89hjj/Hss8+ydu1a9uzZw/79+wv1/B1zzDGYWd77pKQkvv7665B7\nJkyYwO7du1m8eHGZ5g/6SYmdiPhm/35vSLIsDhyI3dWKjRrBjTfCH/8YdCSxq18/71Ueznnb8lQE\nSQnlHz493FBtaRx11FE0a9aMtLQ0tm7dSp8+fQAvCWrRogXz5s0LmV/nnAtJlnIVLK9du3ah60CR\n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\nKAAAAABJRU5ErkJggg==\n"
},
- "output_type": "display_data",
- "metadata": {}
+ "metadata": {},
+ "output_type": "display_data"
}
],
"source": [
@@ -1111,14 +1126,16 @@
{
"cell_type": "code",
"execution_count": 10,
- "metadata": {},
+ "metadata": {
+ "collapsed": false
+ },
"outputs": [
{
"data": {
"image/png": "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\nAdu3b6dJkyYAtGnThuvXr7Nx40bWrl3L8ePH6dy5c7L7Hjt2jEWLFrF48WL27NkDwIgRI9i4cSNL\nly5l9erVBAcHExIS8sj4Nm7cyOHDh8mTJ09iWVxcHKVLl2bhwoWEhYXx4Ycf8u6777Jw4cJk1wYF\nBXHixAmCg4P56aefmDVrFrNmzUq1nXHjxvHOO++wZs2axATVKmitc8UDqA3okJAQLYQQWeFk5End\neWFnzVh0jW9r6NXHVpsdkjBJSEiITu/PnIibETokIiTNx8FLBx97j4OXDuqQiBAdcTMi07H/73//\n087Ozjo2NlbfvHlT58mTR1++fFnPmzdP+/v7a621Xrdunbazs9NnzpzRq1ev1o6OjvrcuXOJ9zh0\n6JBWSuldu3ZprbUeO3aszps3r7569Wpindu3b+u8efPq3377LbHs2rVr2snJSQ8dOjSxzN/fX+fJ\nk0cXLFhQ58mTRyultJOTk962bdsjv45BgwbpDh06JD7v1auX9vT01HFxcYllHTt21F26dEl8Xq5c\nOf3NN9/o0aNH65IlS+pDhw49so1Hfc4JrwG1tQXzGQcTc0YhhMhRyhUux7z283ir3lsMWz2MFnNa\n8JL3SyzpvAQ7JQMcInWBIYF8tOGjNF+vUqwKBwccfOQ9OvzagUOXD/Gh34eM9R+bqXgS5rnt3LmT\na9eu4e3tjZubG35+fvTp04eoqCiCg4OpUKECpUqVYvHixZQuXRoPD4/Ee/j4+FC4cGHCwsLw9fUF\noGzZshQpUiSxzvHjx4mOjqZu3bqJZa6urlSqVOmhmLp37857773HtWvX+PDDD2nYsCH16tVLVmfq\n1KnMnDmT8PBw7t27R1RUFLVq1UpWp2rVqiilEp+7u7tz4MCBZHW+/PJL7t69y65duzI0fy+rSeIm\nhBAWVq9UPTb13sSisEUcvnJYkjbxSP18+9G6Uus0X8/nkO+x9/i1w6/cj7mPe0H3TMdToUIFSpYs\nSVBQENeuXcPPzw8wkpzSpUuzefPmZPPbtNbJkqEEKcsLFCjw0OtAqtem5OLigqenJ56ensyfP5+K\nFStSv379xKHaX375hZEjRzJx4kTq16+Ps7Mz48aNY8eOHcnu4+jomOy5UirZClqAxo0bs2zZMubP\nn8/o0aMfG1t2k8RNCCGygFKK9lXamx2GsAHuzu64O2cu4apSrIqFojEEBAQQFBREZGQko0aNSixv\n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\n2bIlHTt2pF27drRs2TJxThzAkSNH+P777zly5Ai33nor5cuXJzQ0lPLly/PLL6lhTAoAACAASURB\nVL8kuVeRIkXo0qULf/31F3379k3R1oABA/jss8+YPHkyDRo04K677mLWrFlUq1YNgIIFC7J8+XKC\ng4Pp0KEDDRo04MMPP0ySSPoCMflk3ExEGgFRUVFRKca387MlS+D//g9274bSpb0djVJK5Q3R0dE0\nbtwY/ZmTt6X1dU64BjQ2xkS7q03tccvn2re3vW7OSVt8PHTpAqtXey8upZRSSqWkiZuiQIGkz//8\nE06f9k4sSimllEqdbgeiUihTBpYvT1netSvcfDO8+mrOx6SUUkop7XFTmdCgAdSokbTsyhXdXkQp\npZTKKdrjpjLslVdSlv3zn7B4sd34OwN7KCqllFIqGzRxU9nSsaPdL845abtyxS54cKywVkoppZSb\n6FCpypZmzaB796Rl339vNwA+fNg7MSmllFJ5lSZuyu3uvdcmb5UqJS3/73/Bx08SUUoppXyaJm7K\n7YoWhfvuS1p2+DA89BAsW+admJRSSqm8QBM3lSMqVYJDh1ImdNOmwZo1XglJKaWUDwoPD2fIkCFe\nabtatWqJZ5f6Kk3cVI6pWBEKF77+3BiYMMGuSlVKKeV9EydOpHjx4sTHxyeWXbp0iQIFCtCmTZsk\ndSMiIvDz8+P333/3aExhYWH4+fnh5+dHkSJFqFOnDv/617882qYv01WlymtEYN06iIlJWv7DDxAb\nC506eScupZTKr8LDw7l06RIbN26kadOmAKxatYrQ0FDWrl1LTEwMBQsWBOCnn36iSpUqVK1aNdPt\nXLt2jYCAjKUgIkL//v155513uHr1KitWrKB///4EBwczYMCATLed22mPm/IqEShUKGnZvHkwZYp3\n4lFKqfysdu3ahIaGEhkZmVgWGRlJ586dqVatGmvXrk1SHh4eDsDhw4fp1KkTQUFBlChRgscff5yT\nJ08m1h0xYgQNGzZk8uTJVK9encKO4ZfLly/To0cPgoKCqFChAmPGjHEZV2BgIGXKlKFSpUr06tWL\nBg0asMxp0nR8fDz9+vWjevXqBAYGUrdu3RRDnr179+bBBx9k9OjRlC9fnpCQEJ555hni4uJS/Ty+\n+OILgoODiYiIyPiH6GHa46Z8zuTJcPly0rLDh+0wa5ky3olJKaU85fiF4xy/eDzV64UDClO/TP00\n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\nJCUZA7595fH33Pjx4010dLQ5f/68OX78uClSpIg5dOiQmTFjhmndurUxxpjFixebiIgIs3v3bvPt\nt9+awoULm71792ZcY8OGDUZEzOrVq40xxgwbNswULVrU/PnnnxnHnDx50hQtWtTMnj07Y9uRI0dM\nVFSU6d+/v9vYzp49a+Lj402PHj0ybR80aJCpVatWxvutW7eaiIgIs3Tp0oxtl112mfnss88ynTds\n2DDTqlUrY4wxY8eONTExMeb48eO5flbZfc7p+4Amxof5jNa4KaWUUsFSrx74uimuXr08nZ7ez+3n\nn3/myJEjxMXFUb58eVq1akWfPn1ISUlh6dKl1KpViypVqjB37lyqVq1KpUqVMq5Rv359ypQpw8aN\nG9PX66R69eqULVs245ht27aRmppK06ZNM7bFxMRQt25dt3GlpaXRqVMnRIT33nsv076+ffvyr3/9\ni6VLl9K6dWsmTZpEjRo1aNWqFQAnTpzg999/p1evXtx3330Z550/f57y5csD8MsvvxAfH090dHSe\nnp+/aeKmlFJKBUtUFITYkli1atWicuXKJCYmcuTIkYzkJzY2lqpVq7J8+fJM/duMMYjIRddx3V6i\nRImL9gNuz3WVnrTt3r2bJUuWULJkyUz7a9euTYsWLZg0aRKtWrVi6tSp9OvXL2P/iRMnANt86roE\nWXqzbfHixXOMIxTo4ASllFJKZZKQkEBiYmJGDVa6li1bMn/+fFatWpWRuDVo0IBdu3axd+/ejOM2\nbNjAsWPHaNCgQZZl1K5dm0KFCmUa8PDXX3+xefPmTMelJ23bt29n8eLFxMTEuL1e3759mT17NrNn\nz2bfvn306tUrY1+lSpW45JJL2LZtGzVr1sz0ql69OgANGzYkOTmZ48eP5/5BBYEmbkoppZTKJCEh\ngR9++IFffvklo8YNbOI2btw4UlNTMxK6m266iSuvvJJu3bqxZs0aVq1aRa9evUhISMh2kEGJEiXo\n27cvAwYMIDExkfXr19O7d++MGjCwTZkdO3YkOTmZadOmkZqayoEDBzhw4ACpqamZrtepUycKFSpE\nv379aNu2LZUrV860f9iwYbz22muMHTuWLVu28OuvvzJx4kTeffddALp37065cuW48847WbFiBTt2\n7GD27NmZpkYJBZq4KaWUUiqThIQEzp49S506dahQoULG9latWnHy5Enq1avHpZdemrH9iy++ICYm\n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\n"
},
- "output_type": "display_data",
- "metadata": {}
+ "metadata": {},
+ "output_type": "display_data"
}
],
"source": [
@@ -1197,16 +1214,16 @@
"language_info": {
"codemirror_mode": {
"name": "ipython",
- "version": 2.0
+ "version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
- "version": "2.7.12"
+ "version": "2.7.13"
}
},
"nbformat": 4,
"nbformat_minor": 2
-}
\ No newline at end of file
+}
diff --git a/docs/notebooks/annoytutorial-text8.ipynb b/docs/notebooks/annoytutorial-text8.ipynb
new file mode 100644
index 0000000000..61fa6a8508
--- /dev/null
+++ b/docs/notebooks/annoytutorial-text8.ipynb
@@ -0,0 +1,743 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Similarity Queries using Annoy Tutorial"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This tutorial is about using the ([Annoy Approximate Nearest Neighbors Oh Yeah](https://github.com/spotify/annoy \"Link to annoy repo\")) library for similarity queries with a Word2Vec model built with gensim.\n",
+ "\n",
+ "## Why use Annoy?\n",
+ "The current implementation for finding k nearest neighbors in a vector space in gensim has linear complexity via brute force in the number of indexed documents, although with extremely low constant factors. The retrieved results are exact, which is an overkill in many applications: approximate results retrieved in sub-linear time may be enough. Annoy can find approximate nearest neighbors much faster.\n",
+ "\n",
+ "\n",
+ "## Prerequisites\n",
+ "Additional libraries needed for this tutorial:\n",
+ "- annoy\n",
+ "- psutil\n",
+ "- matplotlib\n",
+ "\n",
+ "## Outline\n",
+ "1. Download Text8 Corpus\n",
+ "2. Build Word2Vec Model\n",
+ "3. Construct AnnoyIndex with model & make a similarity query\n",
+ "4. Verify & Evaluate performance\n",
+ "5. Evaluate relationship of `num_trees` to initialization time and accuracy"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "CPython 3.6.1\n",
+ "IPython 6.0.0\n",
+ "\n",
+ "gensim 2.1.0\n",
+ "numpy 1.12.1\n",
+ "scipy 0.19.0\n",
+ "psutil 5.2.2\n",
+ "matplotlib 2.0.2\n",
+ "\n",
+ "compiler : GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)\n",
+ "system : Darwin\n",
+ "release : 14.5.0\n",
+ "machine : x86_64\n",
+ "processor : i386\n",
+ "CPU cores : 8\n",
+ "interpreter: 64bit\n"
+ ]
+ }
+ ],
+ "source": [
+ "# pip install watermark\n",
+ "%reload_ext watermark\n",
+ "%watermark -v -m -p gensim,numpy,scipy,psutil,matplotlib"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 1. Download Text8 Corpus"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os.path\n",
+ "if not os.path.isfile('text8'):\n",
+ " !wget -c http://mattmahoney.net/dc/text8.zip\n",
+ " !unzip text8.zip"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Import & Set up Logging\n",
+ "I'm not going to set up logging due to the verbose input displaying in notebooks, but if you want that, uncomment the lines in the cell below."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "LOGS = False\n",
+ "\n",
+ "if LOGS:\n",
+ " import logging\n",
+ " logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 2. Build Word2Vec Model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Word2Vec(vocab=71290, size=100, alpha=0.05)\n"
+ ]
+ }
+ ],
+ "source": [
+ "from gensim.models import Word2Vec, KeyedVectors\n",
+ "from gensim.models.word2vec import Text8Corpus\n",
+ "\n",
+ "# using params from Word2Vec_FastText_Comparison\n",
+ "\n",
+ "lr = 0.05\n",
+ "dim = 100\n",
+ "ws = 5\n",
+ "epoch = 5\n",
+ "minCount = 5\n",
+ "neg = 5\n",
+ "loss = 'ns'\n",
+ "t = 1e-4\n",
+ "\n",
+ "# Same values as used for fastText training above\n",
+ "params = {\n",
+ " 'alpha': lr,\n",
+ " 'size': dim,\n",
+ " 'window': ws,\n",
+ " 'iter': epoch,\n",
+ " 'min_count': minCount,\n",
+ " 'sample': t,\n",
+ " 'sg': 1,\n",
+ " 'hs': 0,\n",
+ " 'negative': neg\n",
+ "}\n",
+ "\n",
+ "model = Word2Vec(Text8Corpus('text8'), **params)\n",
+ "print(model)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "See the [Word2Vec tutorial](https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/word2vec.ipynb) for how to initialize and save this model."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Comparing the traditional implementation and the Annoy approximation"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "#Set up the model and vector that we are using in the comparison\n",
+ "try:\n",
+ " from gensim.similarities.index import AnnoyIndexer\n",
+ "except ImportError:\n",
+ " raise ValueError(\"SKIP: Please install the annoy indexer\")\n",
+ "\n",
+ "model.init_sims()\n",
+ "annoy_index = AnnoyIndexer(model, 100)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[('the', 0.9999998807907104),\n",
+ " ('of', 0.8208043575286865),\n",
+ " ('in', 0.8024208545684814),\n",
+ " ('a', 0.7661813497543335),\n",
+ " ('and', 0.7392199039459229)]"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Dry run to make sure both indices are fully in RAM\n",
+ "vector = model.wv.syn0norm[0]\n",
+ "model.most_similar([vector], topn=5, indexer=annoy_index)\n",
+ "model.most_similar([vector], topn=5)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "import time\n",
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "def avg_query_time(annoy_index=None, queries=1000):\n",
+ " \"\"\"\n",
+ " Average query time of a most_similar method over 1000 random queries,\n",
+ " uses annoy if given an indexer\n",
+ " \"\"\"\n",
+ " total_time = 0\n",
+ " for _ in range(queries):\n",
+ " rand_vec = model.wv.syn0norm[np.random.randint(0, len(model.wv.vocab))]\n",
+ " start_time = time.clock()\n",
+ " model.most_similar([rand_vec], topn=5, indexer=annoy_index)\n",
+ " total_time += time.clock() - start_time\n",
+ " return total_time / queries"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Gensim (s/query):\t0.00571\n",
+ "Annoy (s/query):\t0.00028\n",
+ "\n",
+ "Annoy is 20.67 times faster on average on this particular run\n"
+ ]
+ }
+ ],
+ "source": [
+ "queries = 10000\n",
+ "\n",
+ "gensim_time = avg_query_time(queries=queries)\n",
+ "annoy_time = avg_query_time(annoy_index, queries=queries)\n",
+ "print(\"Gensim (s/query):\\t{0:.5f}\".format(gensim_time))\n",
+ "print(\"Annoy (s/query):\\t{0:.5f}\".format(annoy_time))\n",
+ "speed_improvement = gensim_time / annoy_time\n",
+ "print (\"\\nAnnoy is {0:.2f} times faster on average on this particular run\".format(speed_improvement))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n",
+ "**This speedup factor is by no means constant** and will vary greatly from run to run and is particular to this data set, BLAS setup, Annoy parameters(as tree size increases speedup factor decreases), machine specifications, among other factors.\n",
+ "\n",
+ ">**Note**: Initialization time for the annoy indexer was not included in the times. The optimal knn algorithm for you to use will depend on how many queries you need to make and the size of the corpus. If you are making very few similarity queries, the time taken to initialize the annoy indexer will be longer than the time it would take the brute force method to retrieve results. If you are making many queries however, the time it takes to initialize the annoy indexer will be made up for by the incredibly fast retrieval times for queries once the indexer has been initialized\n",
+ "\n",
+ ">**Note** : Gensim's 'most_similar' method is using numpy operations in the form of dot product whereas Annoy's method isnt. If 'numpy' on your machine is using one of the BLAS libraries like ATLAS or LAPACK, it'll run on multiple cores(only if your machine has multicore support ). Check [SciPy Cookbook](http://scipy-cookbook.readthedocs.io/items/ParallelProgramming.html) for more details."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 3. Construct AnnoyIndex with model & make a similarity query"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Creating an indexer\n",
+ "An instance of `AnnoyIndexer` needs to be created in order to use Annoy in gensim. The `AnnoyIndexer` class is located in `gensim.similarities.index`\n",
+ "\n",
+ "`AnnoyIndexer()` takes two parameters:\n",
+ "\n",
+ "**`model`**: A `Word2Vec` or `Doc2Vec` model\n",
+ "\n",
+ "**`num_trees`**: A positive integer. `num_trees` effects the build time and the index size. **A larger value will give more accurate results, but larger indexes**. More information on what trees in Annoy do can be found [here](https://github.com/spotify/annoy#how-does-it-work). The relationship between `num_trees`, build time, and accuracy will be investigated later in the tutorial. \n",
+ "\n",
+ "Now that we are ready to make a query, lets find the top 5 most similar words to \"science\" in the Text8 corpus. To make a similarity query we call `Word2Vec.most_similar` like we would traditionally, but with an added parameter, `indexer`. The only supported indexer in gensim as of now is Annoy. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Approximate Neighbors\n",
+ "('science', 1.0)\n",
+ "('interdisciplinary', 0.6099119782447815)\n",
+ "('astrobiology', 0.5975957810878754)\n",
+ "('actuarial', 0.596003383398056)\n",
+ "('robotics', 0.5942946970462799)\n",
+ "('sciences', 0.59312504529953)\n",
+ "('scientific', 0.5900688469409943)\n",
+ "('psychohistory', 0.5890524089336395)\n",
+ "('bioethics', 0.5867903232574463)\n",
+ "('cryobiology', 0.5854728817939758)\n",
+ "('xenobiology', 0.5836742520332336)\n",
+ "\n",
+ "Normal (not Annoy-indexed) Neighbors\n",
+ "('science', 1.0)\n",
+ "('fiction', 0.7495021224021912)\n",
+ "('interdisciplinary', 0.6956626772880554)\n",
+ "('astrobiology', 0.6761417388916016)\n",
+ "('actuarial', 0.6735734343528748)\n",
+ "('robotics', 0.6708062887191772)\n",
+ "('sciences', 0.6689055562019348)\n",
+ "('scientific', 0.6639128923416138)\n",
+ "('psychohistory', 0.6622439622879028)\n",
+ "('bioethics', 0.6585155129432678)\n",
+ "('vernor', 0.6571990251541138)\n"
+ ]
+ }
+ ],
+ "source": [
+ "# 100 trees are being used in this example\n",
+ "annoy_index = AnnoyIndexer(model, 100)\n",
+ "# Derive the vector for the word \"science\" in our model\n",
+ "vector = model[\"science\"]\n",
+ "# The instance of AnnoyIndexer we just created is passed \n",
+ "approximate_neighbors = model.most_similar([vector], topn=11, indexer=annoy_index)\n",
+ "# Neatly print the approximate_neighbors and their corresponding cosine similarity values\n",
+ "print(\"Approximate Neighbors\")\n",
+ "for neighbor in approximate_neighbors:\n",
+ " print(neighbor)\n",
+ "\n",
+ "normal_neighbors = model.most_similar([vector], topn=11)\n",
+ "print(\"\\nNormal (not Annoy-indexed) Neighbors\")\n",
+ "for neighbor in normal_neighbors:\n",
+ " print(neighbor)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Analyzing the results"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The closer the cosine similarity of a vector is to 1, the more similar that word is to our query, which was the vector for \"science\". There are some differences in the ranking of similar words and the set of words included within the 10 most similar words."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 4. Verify & Evaluate performance"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Persisting Indexes\n",
+ "You can save and load your indexes from/to disk to prevent having to construct them each time. This will create two files on disk, _fname_ and _fname.d_. Both files are needed to correctly restore all attributes. Before loading an index, you will have to create an empty AnnoyIndexer object."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "fname = 'index'\n",
+ "\n",
+ "# Persist index to disk\n",
+ "annoy_index.save(fname)\n",
+ "\n",
+ "# Load index back\n",
+ "if os.path.exists(fname):\n",
+ " annoy_index2 = AnnoyIndexer()\n",
+ " annoy_index2.load(fname)\n",
+ " annoy_index2.model = model"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "('science', 1.0)\n",
+ "('interdisciplinary', 0.6099119782447815)\n",
+ "('astrobiology', 0.5975957810878754)\n",
+ "('actuarial', 0.596003383398056)\n",
+ "('robotics', 0.5942946970462799)\n",
+ "('sciences', 0.59312504529953)\n",
+ "('scientific', 0.5900688469409943)\n",
+ "('psychohistory', 0.5890524089336395)\n",
+ "('bioethics', 0.5867903232574463)\n",
+ "('cryobiology', 0.5854728817939758)\n",
+ "('xenobiology', 0.5836742520332336)\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Results should be identical to above\n",
+ "vector = model[\"science\"]\n",
+ "approximate_neighbors2 = model.most_similar([vector], topn=11, indexer=annoy_index2)\n",
+ "for neighbor in approximate_neighbors2:\n",
+ " print(neighbor)\n",
+ " \n",
+ "assert approximate_neighbors == approximate_neighbors2"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Be sure to use the same model at load that was used originally, otherwise you will get unexpected behaviors."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Save memory by memory-mapping indices saved to disk\n",
+ "\n",
+ "Annoy library has a useful feature that indices can be memory-mapped from disk. It saves memory when the same index is used by several processes.\n",
+ "\n",
+ "Below are two snippets of code. First one has a separate index for each process. The second snipped shares the index between two processes via memory-mapping. The second example uses less total RAM as it is shared."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "# Remove verbosity from code below (if logging active)\n",
+ "\n",
+ "if LOGS:\n",
+ " logging.disable(logging.CRITICAL)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "from multiprocessing import Process\n",
+ "import os\n",
+ "import psutil"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Bad Example: Two processes load the Word2vec model from disk and create there own Annoy indices from that model. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Process Id: 6452\n",
+ "\n",
+ "Memory used by process 6452: pmem(rss=425226240, vms=3491692544, pfaults=149035, pageins=0) \n",
+ "---\n",
+ "Process Id: 6460\n",
+ "\n",
+ "Memory used by process 6460: pmem(rss=425136128, vms=3491692544, pfaults=149020, pageins=0) \n",
+ "---\n",
+ "CPU times: user 489 ms, sys: 204 ms, total: 693 ms\n",
+ "Wall time: 29.3 s\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%time\n",
+ "\n",
+ "model.save('/tmp/mymodel')\n",
+ "\n",
+ "def f(process_id):\n",
+ " print ('Process Id: ', os.getpid())\n",
+ " process = psutil.Process(os.getpid())\n",
+ " new_model = Word2Vec.load('/tmp/mymodel')\n",
+ " vector = new_model[\"science\"]\n",
+ " annoy_index = AnnoyIndexer(new_model,100)\n",
+ " approximate_neighbors = new_model.most_similar([vector], topn=5, indexer=annoy_index)\n",
+ " print('\\nMemory used by process {}: '.format(os.getpid()), process.memory_info(), \"\\n---\")\n",
+ "\n",
+ "# Creating and running two parallel process to share the same index file.\n",
+ "p1 = Process(target=f, args=('1',))\n",
+ "p1.start()\n",
+ "p1.join()\n",
+ "p2 = Process(target=f, args=('2',))\n",
+ "p2.start()\n",
+ "p2.join()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Good example. Two processes load both the Word2vec model and index from disk and memory-map the index\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Process Id: 6461\n",
+ "\n",
+ "Memory used by process 6461: pmem(rss=357363712, vms=3576012800, pfaults=105041, pageins=0) \n",
+ "---\n",
+ "Process Id: 6462\n",
+ "\n",
+ "Memory used by process 6462: pmem(rss=357097472, vms=3576012800, pfaults=104995, pageins=0) \n",
+ "---\n",
+ "CPU times: user 509 ms, sys: 181 ms, total: 690 ms\n",
+ "Wall time: 2.61 s\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%time\n",
+ "\n",
+ "model.save('/tmp/mymodel')\n",
+ "\n",
+ "def f(process_id):\n",
+ " print('Process Id: ', os.getpid())\n",
+ " process = psutil.Process(os.getpid())\n",
+ " new_model = Word2Vec.load('/tmp/mymodel')\n",
+ " vector = new_model[\"science\"]\n",
+ " annoy_index = AnnoyIndexer()\n",
+ " annoy_index.load('index')\n",
+ " annoy_index.model = new_model\n",
+ " approximate_neighbors = new_model.most_similar([vector], topn=5, indexer=annoy_index)\n",
+ " print('\\nMemory used by process {}: '.format(os.getpid()), process.memory_info(), \"\\n---\")\n",
+ "\n",
+ "# Creating and running two parallel process to share the same index file.\n",
+ "p1 = Process(target=f, args=('1',))\n",
+ "p1.start()\n",
+ "p1.join()\n",
+ "p2 = Process(target=f, args=('2',))\n",
+ "p2.start()\n",
+ "p2.join()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 5. Evaluate relationship of `num_trees` to initialization time and accuracy"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Build dataset of Initialization times and accuracy measures"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "exact_results = [element[0] for element in model.most_similar([model.wv.syn0norm[0]], topn=100)]\n",
+ "\n",
+ "x_values = []\n",
+ "y_values_init = []\n",
+ "y_values_accuracy = []\n",
+ "\n",
+ "for x in range(1, 300, 10):\n",
+ " x_values.append(x)\n",
+ " start_time = time.time()\n",
+ " annoy_index = AnnoyIndexer(model, x)\n",
+ " y_values_init.append(time.time() - start_time)\n",
+ " approximate_results = model.most_similar([model.wv.syn0norm[0]], topn=100, indexer=annoy_index)\n",
+ " top_words = [result[0] for result in approximate_results]\n",
+ " y_values_accuracy.append(len(set(top_words).intersection(exact_results)))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Plot results"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\nAElFTkSuQmCC\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.figure(1, figsize=(12, 6))\n",
+ "plt.subplot(121)\n",
+ "plt.plot(x_values, y_values_init)\n",
+ "plt.title(\"num_trees vs initalization time\")\n",
+ "plt.ylabel(\"Initialization time (s)\")\n",
+ "plt.xlabel(\"num_trees\")\n",
+ "plt.subplot(122)\n",
+ "plt.plot(x_values, y_values_accuracy)\n",
+ "plt.title(\"num_trees vs accuracy\")\n",
+ "plt.ylabel(\"% accuracy\")\n",
+ "plt.xlabel(\"num_trees\")\n",
+ "plt.tight_layout()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "##### Initialization:\n",
+ "Initialization time of the annoy indexer increases in a linear fashion with num_trees. Initialization time will vary from corpus to corpus, in the graph above the lee corpus was used\n",
+ "\n",
+ "##### Accuracy:\n",
+ "In this dataset, the accuracy seems logarithmically related to the number of trees. We see an improvement in accuracy with more trees, but the relationship is nonlinear. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Recap\n",
+ "In this notebook we used the Annoy module to build an indexed approximation of our word embeddings. To do so, we did the following steps:\n",
+ "1. Download Text8 Corpus\n",
+ "2. Build Word2Vec Model\n",
+ "3. Construct AnnoyIndex with model & make a similarity query\n",
+ "4. Verify & Evaluate performance\n",
+ "5. Evaluate relationship of `num_trees` to initialization time and accuracy"
+ ]
+ }
+ ],
+ "metadata": {
+ "anaconda-cloud": {},
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.6.1"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 1
+}
diff --git a/docs/notebooks/annoytutorial.ipynb b/docs/notebooks/annoytutorial.ipynb
index fd576d7b2f..61fa6a8508 100644
--- a/docs/notebooks/annoytutorial.ipynb
+++ b/docs/notebooks/annoytutorial.ipynb
@@ -11,58 +11,153 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "This tutorial is about using the [Annoy(Approximate Nearest Neighbors Oh Yeah)]((https://github.com/spotify/annoy \"Link to annoy repo\") library for similarity queries in gensim"
+ "This tutorial is about using the ([Annoy Approximate Nearest Neighbors Oh Yeah](https://github.com/spotify/annoy \"Link to annoy repo\")) library for similarity queries with a Word2Vec model built with gensim.\n",
+ "\n",
+ "## Why use Annoy?\n",
+ "The current implementation for finding k nearest neighbors in a vector space in gensim has linear complexity via brute force in the number of indexed documents, although with extremely low constant factors. The retrieved results are exact, which is an overkill in many applications: approximate results retrieved in sub-linear time may be enough. Annoy can find approximate nearest neighbors much faster.\n",
+ "\n",
+ "\n",
+ "## Prerequisites\n",
+ "Additional libraries needed for this tutorial:\n",
+ "- annoy\n",
+ "- psutil\n",
+ "- matplotlib\n",
+ "\n",
+ "## Outline\n",
+ "1. Download Text8 Corpus\n",
+ "2. Build Word2Vec Model\n",
+ "3. Construct AnnoyIndex with model & make a similarity query\n",
+ "4. Verify & Evaluate performance\n",
+ "5. Evaluate relationship of `num_trees` to initialization time and accuracy"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "CPython 3.6.1\n",
+ "IPython 6.0.0\n",
+ "\n",
+ "gensim 2.1.0\n",
+ "numpy 1.12.1\n",
+ "scipy 0.19.0\n",
+ "psutil 5.2.2\n",
+ "matplotlib 2.0.2\n",
+ "\n",
+ "compiler : GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)\n",
+ "system : Darwin\n",
+ "release : 14.5.0\n",
+ "machine : x86_64\n",
+ "processor : i386\n",
+ "CPU cores : 8\n",
+ "interpreter: 64bit\n"
+ ]
+ }
+ ],
+ "source": [
+ "# pip install watermark\n",
+ "%reload_ext watermark\n",
+ "%watermark -v -m -p gensim,numpy,scipy,psutil,matplotlib"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "## Why use Annoy?\n",
- "The current implementation for finding k nearest neighbors in a vector space in gensim has linear complexity via brute force in the number of indexed documents, although with extremely low constant factors. The retrieved results are exact, which is an overkill in many applications: approximate results retrieved in sub-linear time may be enough. Annoy can find approximate nearest neighbors much faster."
+ "### 1. Download Text8 Corpus"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import os.path\n",
+ "if not os.path.isfile('text8'):\n",
+ " !wget -c http://mattmahoney.net/dc/text8.zip\n",
+ " !unzip text8.zip"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "For the following examples, we'll use the Lee Corpus (which you already have if you've installed gensim)\n",
+ "#### Import & Set up Logging\n",
+ "I'm not going to set up logging due to the verbose input displaying in notebooks, but if you want that, uncomment the lines in the cell below."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "LOGS = False\n",
"\n",
- "See the [Word2Vec tutorial](https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/word2vec.ipynb) for how to initialize and save this model."
+ "if LOGS:\n",
+ " import logging\n",
+ " logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 2. Build Word2Vec Model"
]
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 4,
"metadata": {
- "collapsed": false
+ "scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Word2Vec(vocab=6981, size=100, alpha=0.025)\n"
+ "Word2Vec(vocab=71290, size=100, alpha=0.05)\n"
]
}
],
"source": [
- "# Load the model\n",
- "import gensim, os\n",
- "from gensim.models.word2vec import Word2Vec\n",
+ "from gensim.models import Word2Vec, KeyedVectors\n",
+ "from gensim.models.word2vec import Text8Corpus\n",
+ "\n",
+ "# using params from Word2Vec_FastText_Comparison\n",
"\n",
- "# Set file names for train and test data\n",
- "test_data_dir = '{}'.format(os.sep).join([gensim.__path__[0], 'test', 'test_data']) + os.sep\n",
- "lee_train_file = test_data_dir + 'lee_background.cor'\n",
+ "lr = 0.05\n",
+ "dim = 100\n",
+ "ws = 5\n",
+ "epoch = 5\n",
+ "minCount = 5\n",
+ "neg = 5\n",
+ "loss = 'ns'\n",
+ "t = 1e-4\n",
"\n",
- "class MyText(object):\n",
- " def __iter__(self):\n",
- " for line in open(lee_train_file):\n",
- " # assume there's one document per line, tokens separated by whitespace\n",
- " yield gensim.utils.simple_preprocess(line)\n",
+ "# Same values as used for fastText training above\n",
+ "params = {\n",
+ " 'alpha': lr,\n",
+ " 'size': dim,\n",
+ " 'window': ws,\n",
+ " 'iter': epoch,\n",
+ " 'min_count': minCount,\n",
+ " 'sample': t,\n",
+ " 'sg': 1,\n",
+ " 'hs': 0,\n",
+ " 'negative': neg\n",
+ "}\n",
"\n",
- "sentences = MyText()\n",
- "model = Word2Vec(sentences, min_count=1)\n",
+ "model = Word2Vec(Text8Corpus('text8'), **params)\n",
"print(model)"
]
},
@@ -70,22 +165,21 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "\n",
- "#### Comparing the traditional implementation and the Annoy \n"
+ "See the [Word2Vec tutorial](https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/word2vec.ipynb) for how to initialize and save this model."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "These benchmarks are run on a 2.4GHz 4 core i7 processor "
+ "#### Comparing the traditional implementation and the Annoy approximation"
]
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 5,
"metadata": {
- "collapsed": false
+ "collapsed": true
},
"outputs": [],
"source": [
@@ -96,27 +190,25 @@
" raise ValueError(\"SKIP: Please install the annoy indexer\")\n",
"\n",
"model.init_sims()\n",
- "annoy_index = AnnoyIndexer(model, 300)"
+ "annoy_index = AnnoyIndexer(model, 100)"
]
},
{
"cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "collapsed": false
- },
+ "execution_count": 6,
+ "metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "[(u'the', 1.0),\n",
- " (u'on', 0.999976396560669),\n",
- " (u'in', 0.9999759197235107),\n",
- " (u'two', 0.9999756217002869),\n",
- " (u'after', 0.9999749660491943)]"
+ "[('the', 0.9999998807907104),\n",
+ " ('of', 0.8208043575286865),\n",
+ " ('in', 0.8024208545684814),\n",
+ " ('a', 0.7661813497543335),\n",
+ " ('and', 0.7392199039459229)]"
]
},
- "execution_count": 3,
+ "execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
@@ -130,108 +222,82 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 7,
"metadata": {
- "collapsed": false
+ "collapsed": true
},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Gensim: 0.002638526\n",
- "Annoy: 0.001149898\n",
- "\n",
- "Annoy is 2.29 times faster on average over 1000 random queries on this particular run\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
- "import time, numpy\n",
- "\n",
- "def avg_query_time(annoy_index=None):\n",
+ "import time\n",
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "def avg_query_time(annoy_index=None, queries=1000):\n",
" \"\"\"\n",
" Average query time of a most_similar method over 1000 random queries,\n",
" uses annoy if given an indexer\n",
" \"\"\"\n",
" total_time = 0\n",
- " for _ in range(1000):\n",
- " rand_vec = model.wv.syn0norm[numpy.random.randint(0, len(model.vocab))]\n",
+ " for _ in range(queries):\n",
+ " rand_vec = model.wv.syn0norm[np.random.randint(0, len(model.wv.vocab))]\n",
" start_time = time.clock()\n",
" model.most_similar([rand_vec], topn=5, indexer=annoy_index)\n",
" total_time += time.clock() - start_time\n",
- " return total_time / 1000\n",
- "\n",
- "gensim_time = avg_query_time()\n",
- "annoy_time = avg_query_time(annoy_index)\n",
- "print \"Gensim: {}\".format(gensim_time) \n",
- "print \"Annoy: {}\".format(annoy_time)\n",
- "print \"\\nAnnoy is {} times faster on average over 1000 random queries on \\\n",
- "this particular run\".format(numpy.round(gensim_time / annoy_time, 2))"
+ " return total_time / queries"
]
},
{
- "cell_type": "markdown",
+ "cell_type": "code",
+ "execution_count": 9,
"metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Gensim (s/query):\t0.00571\n",
+ "Annoy (s/query):\t0.00028\n",
+ "\n",
+ "Annoy is 20.67 times faster on average on this particular run\n"
+ ]
+ }
+ ],
"source": [
+ "queries = 10000\n",
"\n",
- "**This speedup factor is by no means constant** and will vary greatly from run to run and is particular to this data set, BLAS setup, Annoy parameters(as tree size increases speedup factor decreases), machine specifications, among other factors.\n",
- "\n",
- ">**Note**: Initialization time for the annoy indexer was not included in the times. The optimal knn algorithm for you to use will depend on how many queries you need to make and the size of the corpus. If you are making very few similarity queries, the time taken to initialize the annoy indexer will be longer than the time it would take the brute force method to retrieve results. If you are making many queries however, the time it takes to initialize the annoy indexer will be made up for by the incredibly fast retrieval times for queries once the indexer has been initialized\n",
- "\n",
- ">**Note** : Gensim's 'most_similar' method is using numpy operations in the form of dot product whereas Annoy's method isnt. If 'numpy' on your machine is using one of the BLAS libraries like ATLAS or LAPACK, it'll run on multiple cores(only if your machine has multicore support ). Check [SciPy Cookbook](http://scipy-cookbook.readthedocs.io/items/ParallelProgramming.html) for more details."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## What is Annoy?"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Annoy is an open source library to search for points in space that are close to a given query point. It also creates large read-only file-based data structures that are mmapped into memory so that many processes may share the same data. For our purpose, it is used to find similarity between words or documents in a vector space. [See the tutorial on similarity queries for more information on them](https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/Similarity_Queries.ipynb)."
+ "gensim_time = avg_query_time(queries=queries)\n",
+ "annoy_time = avg_query_time(annoy_index, queries=queries)\n",
+ "print(\"Gensim (s/query):\\t{0:.5f}\".format(gensim_time))\n",
+ "print(\"Annoy (s/query):\\t{0:.5f}\".format(annoy_time))\n",
+ "speed_improvement = gensim_time / annoy_time\n",
+ "print (\"\\nAnnoy is {0:.2f} times faster on average on this particular run\".format(speed_improvement))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "## Getting Started"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "First thing to do is to install annoy, by running the following in the command line:\n",
"\n",
- "`sudo pip install annoy`\n",
+ "**This speedup factor is by no means constant** and will vary greatly from run to run and is particular to this data set, BLAS setup, Annoy parameters(as tree size increases speedup factor decreases), machine specifications, among other factors.\n",
"\n",
- "And then set up the logger: "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "# import modules & set up logging\n",
- "import logging\n",
- "logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)"
+ ">**Note**: Initialization time for the annoy indexer was not included in the times. The optimal knn algorithm for you to use will depend on how many queries you need to make and the size of the corpus. If you are making very few similarity queries, the time taken to initialize the annoy indexer will be longer than the time it would take the brute force method to retrieve results. If you are making many queries however, the time it takes to initialize the annoy indexer will be made up for by the incredibly fast retrieval times for queries once the indexer has been initialized\n",
+ "\n",
+ ">**Note** : Gensim's 'most_similar' method is using numpy operations in the form of dot product whereas Annoy's method isnt. If 'numpy' on your machine is using one of the BLAS libraries like ATLAS or LAPACK, it'll run on multiple cores(only if your machine has multicore support ). Check [SciPy Cookbook](http://scipy-cookbook.readthedocs.io/items/ParallelProgramming.html) for more details."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "## Making a Similarity Query"
+ "## 3. Construct AnnoyIndex with model & make a similarity query"
]
},
{
@@ -245,55 +311,63 @@
"\n",
"**`model`**: A `Word2Vec` or `Doc2Vec` model\n",
"\n",
- "**`num_trees`**: A positive integer. `num_trees` effects the build time and the index size. **A larger value will give more accurate results, but larger indexes**. More information on what trees in Annoy do can be found [here](https://github.com/spotify/annoy#how-does-it-work). The relationship between `num_trees`, build time, and accuracy will be investigated later in the tutorial. \n"
+ "**`num_trees`**: A positive integer. `num_trees` effects the build time and the index size. **A larger value will give more accurate results, but larger indexes**. More information on what trees in Annoy do can be found [here](https://github.com/spotify/annoy#how-does-it-work). The relationship between `num_trees`, build time, and accuracy will be investigated later in the tutorial. \n",
+ "\n",
+ "Now that we are ready to make a query, lets find the top 5 most similar words to \"science\" in the Text8 corpus. To make a similarity query we call `Word2Vec.most_similar` like we would traditionally, but with an added parameter, `indexer`. The only supported indexer in gensim as of now is Annoy. "
]
},
{
"cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "from gensim.similarities.index import AnnoyIndexer\n",
- "# 100 trees are being used in this example\n",
- "annoy_index = AnnoyIndexer(model, 100)"
- ]
- },
- {
- "cell_type": "markdown",
+ "execution_count": 10,
"metadata": {},
- "source": [
- "Now that we are ready to make a query, lets find the top 5 most similar words to \"army\" in the lee corpus. To make a similarity query we call `Word2Vec.most_similar` like we would traditionally, but with an added parameter, `indexer`. The only supported indexer in gensim as of now is Annoy. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "collapsed": false
- },
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "(u'science', 0.9998273665260058)\n",
- "(u'rates', 0.9086664393544197)\n",
- "(u'insurance', 0.9080813005566597)\n",
- "(u'north', 0.9077721834182739)\n",
- "(u'there', 0.9076579436659813)\n"
+ "Approximate Neighbors\n",
+ "('science', 1.0)\n",
+ "('interdisciplinary', 0.6099119782447815)\n",
+ "('astrobiology', 0.5975957810878754)\n",
+ "('actuarial', 0.596003383398056)\n",
+ "('robotics', 0.5942946970462799)\n",
+ "('sciences', 0.59312504529953)\n",
+ "('scientific', 0.5900688469409943)\n",
+ "('psychohistory', 0.5890524089336395)\n",
+ "('bioethics', 0.5867903232574463)\n",
+ "('cryobiology', 0.5854728817939758)\n",
+ "('xenobiology', 0.5836742520332336)\n",
+ "\n",
+ "Normal (not Annoy-indexed) Neighbors\n",
+ "('science', 1.0)\n",
+ "('fiction', 0.7495021224021912)\n",
+ "('interdisciplinary', 0.6956626772880554)\n",
+ "('astrobiology', 0.6761417388916016)\n",
+ "('actuarial', 0.6735734343528748)\n",
+ "('robotics', 0.6708062887191772)\n",
+ "('sciences', 0.6689055562019348)\n",
+ "('scientific', 0.6639128923416138)\n",
+ "('psychohistory', 0.6622439622879028)\n",
+ "('bioethics', 0.6585155129432678)\n",
+ "('vernor', 0.6571990251541138)\n"
]
}
],
"source": [
+ "# 100 trees are being used in this example\n",
+ "annoy_index = AnnoyIndexer(model, 100)\n",
"# Derive the vector for the word \"science\" in our model\n",
"vector = model[\"science\"]\n",
"# The instance of AnnoyIndexer we just created is passed \n",
- "approximate_neighbors = model.most_similar([vector], topn=5, indexer=annoy_index)\n",
+ "approximate_neighbors = model.most_similar([vector], topn=11, indexer=annoy_index)\n",
"# Neatly print the approximate_neighbors and their corresponding cosine similarity values\n",
+ "print(\"Approximate Neighbors\")\n",
"for neighbor in approximate_neighbors:\n",
+ " print(neighbor)\n",
+ "\n",
+ "normal_neighbors = model.most_similar([vector], topn=11)\n",
+ "print(\"\\nNormal (not Annoy-indexed) Neighbors\")\n",
+ "for neighbor in normal_neighbors:\n",
" print(neighbor)"
]
},
@@ -301,27 +375,34 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "### Analyzing the results"
+ "#### Analyzing the results"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "The closer the cosine similarity of a vector is to 1, the more similar that word is to our query, which was the vector for \"science\"."
+ "The closer the cosine similarity of a vector is to 1, the more similar that word is to our query, which was the vector for \"science\". There are some differences in the ranking of similar words and the set of words included within the 10 most similar words."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "## Persisting Indexes\n",
+ "### 4. Verify & Evaluate performance"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Persisting Indexes\n",
"You can save and load your indexes from/to disk to prevent having to construct them each time. This will create two files on disk, _fname_ and _fname.d_. Both files are needed to correctly restore all attributes. Before loading an index, you will have to create an empty AnnoyIndexer object."
]
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 11,
"metadata": {
"collapsed": true
},
@@ -341,29 +422,35 @@
},
{
"cell_type": "code",
- "execution_count": 9,
- "metadata": {
- "collapsed": false
- },
+ "execution_count": 12,
+ "metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "(u'science', 0.9998273665260058)\n",
- "(u'rates', 0.9086666032671928)\n",
- "(u'insurance', 0.9080811440944672)\n",
- "(u'north', 0.9077721834182739)\n",
- "(u'there', 0.9076577797532082)\n"
+ "('science', 1.0)\n",
+ "('interdisciplinary', 0.6099119782447815)\n",
+ "('astrobiology', 0.5975957810878754)\n",
+ "('actuarial', 0.596003383398056)\n",
+ "('robotics', 0.5942946970462799)\n",
+ "('sciences', 0.59312504529953)\n",
+ "('scientific', 0.5900688469409943)\n",
+ "('psychohistory', 0.5890524089336395)\n",
+ "('bioethics', 0.5867903232574463)\n",
+ "('cryobiology', 0.5854728817939758)\n",
+ "('xenobiology', 0.5836742520332336)\n"
]
}
],
"source": [
"# Results should be identical to above\n",
"vector = model[\"science\"]\n",
- "approximate_neighbors = model.most_similar([vector], topn=5, indexer=annoy_index2)\n",
- "for neighbor in approximate_neighbors:\n",
- " print neighbor"
+ "approximate_neighbors2 = model.most_similar([vector], topn=11, indexer=annoy_index2)\n",
+ "for neighbor in approximate_neighbors2:\n",
+ " print(neighbor)\n",
+ " \n",
+ "assert approximate_neighbors == approximate_neighbors2"
]
},
{
@@ -377,71 +464,82 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "## Save memory by memory-mapping indices saved to disk"
+ "#### Save memory by memory-mapping indices saved to disk\n",
+ "\n",
+ "Annoy library has a useful feature that indices can be memory-mapped from disk. It saves memory when the same index is used by several processes.\n",
+ "\n",
+ "Below are two snippets of code. First one has a separate index for each process. The second snipped shares the index between two processes via memory-mapping. The second example uses less total RAM as it is shared."
]
},
{
- "cell_type": "markdown",
- "metadata": {},
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
"source": [
- "Annoy library has a useful feature that indices can be memory-mapped from disk. It saves memory when the same index is used by several processes.\n",
+ "# Remove verbosity from code below (if logging active)\n",
"\n",
- "Below are two snippets of code. First one has a separate index for each process. The second snipped shares the index between two processes via memory-mapping. The second example uses less total RAM as it is shared."
+ "if LOGS:\n",
+ " logging.disable(logging.CRITICAL)"
]
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 14,
"metadata": {
- "collapsed": false
+ "collapsed": true
},
+ "outputs": [],
+ "source": [
+ "from multiprocessing import Process\n",
+ "import os\n",
+ "import psutil"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Bad Example: Two processes load the Word2vec model from disk and create there own Annoy indices from that model. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Process Id: 6216\n",
- "(u'klusener', 0.9090957194566727)\n",
- "(u'started', 0.908975400030613)\n",
- "(u'gutnick', 0.908865213394165)\n",
- "(u'ground', 0.9084076434373856)\n",
- "(u'interest', 0.9074432477355003)\n",
- "Memory used by process 6216= pmem(rss=126914560, vms=1385103360, shared=9273344, text=3051520, lib=0, data=1073524736, dirty=0)\n",
- "Process Id: 6231\n",
- "(u'klusener', 0.9090957194566727)\n",
- "(u'started', 0.908975400030613)\n",
- "(u'gutnick', 0.908865213394165)\n",
- "(u'ground', 0.9084076434373856)\n",
- "(u'interest', 0.9074432477355003)\n",
- "Memory used by process 6231= pmem(rss=126496768, vms=1385103360, shared=8835072, text=3051520, lib=0, data=1073524736, dirty=0)\n",
- "CPU times: user 64 ms, sys: 12 ms, total: 76 ms\n",
- "Wall time: 2.86 s\n"
+ "Process Id: 6452\n",
+ "\n",
+ "Memory used by process 6452: pmem(rss=425226240, vms=3491692544, pfaults=149035, pageins=0) \n",
+ "---\n",
+ "Process Id: 6460\n",
+ "\n",
+ "Memory used by process 6460: pmem(rss=425136128, vms=3491692544, pfaults=149020, pageins=0) \n",
+ "---\n",
+ "CPU times: user 489 ms, sys: 204 ms, total: 693 ms\n",
+ "Wall time: 29.3 s\n"
]
}
],
"source": [
"%%time\n",
"\n",
- "# Bad example. Two processes load the Word2vec model from disk and create there own Annoy indices from that model. \n",
- "\n",
- "from gensim import models\n",
- "from gensim.similarities.index import AnnoyIndexer\n",
- "from multiprocessing import Process\n",
- "import os\n",
- "import psutil\n",
- "\n",
"model.save('/tmp/mymodel')\n",
"\n",
"def f(process_id):\n",
- " print 'Process Id: ', os.getpid()\n",
+ " print ('Process Id: ', os.getpid())\n",
" process = psutil.Process(os.getpid())\n",
- " new_model = models.Word2Vec.load('/tmp/mymodel')\n",
+ " new_model = Word2Vec.load('/tmp/mymodel')\n",
" vector = new_model[\"science\"]\n",
" annoy_index = AnnoyIndexer(new_model,100)\n",
" approximate_neighbors = new_model.most_similar([vector], topn=5, indexer=annoy_index)\n",
- " for neighbor in approximate_neighbors:\n",
- " print neighbor\n",
- " print 'Memory used by process '+str(os.getpid())+'=', process.memory_info()\n",
+ " print('\\nMemory used by process {}: '.format(os.getpid()), process.memory_info(), \"\\n---\")\n",
"\n",
"# Creating and running two parallel process to share the same index file.\n",
"p1 = Process(target=f, args=('1',))\n",
@@ -452,61 +550,50 @@
"p2.join()"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "#### Good example. Two processes load both the Word2vec model and index from disk and memory-map the index\n"
+ ]
+ },
{
"cell_type": "code",
- "execution_count": 11,
- "metadata": {
- "collapsed": false
- },
+ "execution_count": 16,
+ "metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "Process Id: 6246\n",
- "(u'science', 0.9998273665260058)\n",
- "(u'rates', 0.9086664393544197)\n",
- "(u'insurance', 0.9080813005566597)\n",
- "(u'north', 0.9077721834182739)\n",
- "(u'there', 0.9076579436659813)\n",
- "Memory used by process 6246 pmem(rss=125091840, vms=1382862848, shared=22179840, text=3051520, lib=0, data=1058062336, dirty=0)\n",
- "Process Id: 6261\n",
- "(u'science', 0.9998273665260058)\n",
- "(u'rates', 0.9086664393544197)\n",
- "(u'insurance', 0.9080813005566597)\n",
- "(u'north', 0.9077721834182739)\n",
- "(u'there', 0.9076579436659813)\n",
- "Memory used by process 6261 pmem(rss=125034496, vms=1382862848, shared=22122496, text=3051520, lib=0, data=1058062336, dirty=0)\n",
- "CPU times: user 44 ms, sys: 16 ms, total: 60 ms\n",
- "Wall time: 202 ms\n"
+ "Process Id: 6461\n",
+ "\n",
+ "Memory used by process 6461: pmem(rss=357363712, vms=3576012800, pfaults=105041, pageins=0) \n",
+ "---\n",
+ "Process Id: 6462\n",
+ "\n",
+ "Memory used by process 6462: pmem(rss=357097472, vms=3576012800, pfaults=104995, pageins=0) \n",
+ "---\n",
+ "CPU times: user 509 ms, sys: 181 ms, total: 690 ms\n",
+ "Wall time: 2.61 s\n"
]
}
],
"source": [
"%%time\n",
"\n",
- "# Good example. Two processes load both the Word2vec model and index from disk and memory-map the index\n",
- "\n",
- "from gensim import models\n",
- "from gensim.similarities.index import AnnoyIndexer\n",
- "from multiprocessing import Process\n",
- "import os\n",
- "import psutil\n",
- "\n",
"model.save('/tmp/mymodel')\n",
"\n",
"def f(process_id):\n",
- " print 'Process Id: ', os.getpid()\n",
+ " print('Process Id: ', os.getpid())\n",
" process = psutil.Process(os.getpid())\n",
- " new_model = models.Word2Vec.load('/tmp/mymodel')\n",
+ " new_model = Word2Vec.load('/tmp/mymodel')\n",
" vector = new_model[\"science\"]\n",
" annoy_index = AnnoyIndexer()\n",
" annoy_index.load('index')\n",
" annoy_index.model = new_model\n",
" approximate_neighbors = new_model.most_similar([vector], topn=5, indexer=annoy_index)\n",
- " for neighbor in approximate_neighbors:\n",
- " print neighbor\n",
- " print 'Memory used by process '+str(os.getpid()), process.memory_info()\n",
+ " print('\\nMemory used by process {}: '.format(os.getpid()), process.memory_info(), \"\\n---\")\n",
"\n",
"# Creating and running two parallel process to share the same index file.\n",
"p1 = Process(target=f, args=('1',))\n",
@@ -521,71 +608,69 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "# Relationship between num_trees and initialization time"
+ "### 5. Evaluate relationship of `num_trees` to initialization time and accuracy"
]
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 17,
"metadata": {
- "collapsed": false
+ "collapsed": true
},
- "outputs": [
- {
- "data": {
- "image/png": "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\nAAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
- "%matplotlib inline\n",
- "import matplotlib.pyplot as plt, time\n",
- "x_cor = []\n",
- "y_cor = []\n",
- "for x in range(100):\n",
- " start_time = time.time()\n",
- " AnnoyIndexer(model, x)\n",
- " y_cor.append(time.time()-start_time)\n",
- " x_cor.append(x)\n",
- "\n",
- "plt.plot(x_cor, y_cor)\n",
- "plt.title(\"num_trees vs initalization time\")\n",
- "plt.ylabel(\"Initialization time (s)\")\n",
- "plt.xlabel(\"num_tress\")\n",
- "plt.show()"
+ "import matplotlib.pyplot as plt\n",
+ "%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "Initialization time of the annoy indexer increases in a linear fashion with num_trees. Initialization time will vary from corpus to corpus, in the graph above the lee corpus was used"
+ "#### Build dataset of Initialization times and accuracy measures"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "exact_results = [element[0] for element in model.most_similar([model.wv.syn0norm[0]], topn=100)]\n",
+ "\n",
+ "x_values = []\n",
+ "y_values_init = []\n",
+ "y_values_accuracy = []\n",
+ "\n",
+ "for x in range(1, 300, 10):\n",
+ " x_values.append(x)\n",
+ " start_time = time.time()\n",
+ " annoy_index = AnnoyIndexer(model, x)\n",
+ " y_values_init.append(time.time() - start_time)\n",
+ " approximate_results = model.most_similar([model.wv.syn0norm[0]], topn=100, indexer=annoy_index)\n",
+ " top_words = [result[0] for result in approximate_results]\n",
+ " y_values_accuracy.append(len(set(top_words).intersection(exact_results)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "# Relationship between num_trees and accuracy"
+ "#### Plot results"
]
},
{
"cell_type": "code",
- "execution_count": 13,
- "metadata": {
- "collapsed": false
- },
+ "execution_count": 19,
+ "metadata": {},
"outputs": [
{
"data": {
- "image/png": "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\n",
+ "image/png": "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\nAElFTkSuQmCC\n",
"text/plain": [
- ""
+ ""
]
},
"metadata": {},
@@ -593,20 +678,18 @@
}
],
"source": [
- "exact_results = [element[0] for element in model.most_similar([model.wv.syn0norm[0]], topn=100)]\n",
- "x_axis = []\n",
- "y_axis = []\n",
- "for x in range(1,30):\n",
- " annoy_index = AnnoyIndexer(model, x)\n",
- " approximate_results = model.most_similar([model.wv.syn0norm[0]],topn=100, indexer=annoy_index)\n",
- " top_words = [result[0] for result in approximate_results]\n",
- " x_axis.append(x)\n",
- " y_axis.append(len(set(top_words).intersection(exact_results)))\n",
- " \n",
- "plt.plot(x_axis, y_axis)\n",
+ "plt.figure(1, figsize=(12, 6))\n",
+ "plt.subplot(121)\n",
+ "plt.plot(x_values, y_values_init)\n",
+ "plt.title(\"num_trees vs initalization time\")\n",
+ "plt.ylabel(\"Initialization time (s)\")\n",
+ "plt.xlabel(\"num_trees\")\n",
+ "plt.subplot(122)\n",
+ "plt.plot(x_values, y_values_accuracy)\n",
"plt.title(\"num_trees vs accuracy\")\n",
"plt.ylabel(\"% accuracy\")\n",
"plt.xlabel(\"num_trees\")\n",
+ "plt.tight_layout()\n",
"plt.show()"
]
},
@@ -614,30 +697,47 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "This was again done with the lee corpus, a relatively small corpus. Results will vary from corpus to corpus"
+ "##### Initialization:\n",
+ "Initialization time of the annoy indexer increases in a linear fashion with num_trees. Initialization time will vary from corpus to corpus, in the graph above the lee corpus was used\n",
+ "\n",
+ "##### Accuracy:\n",
+ "In this dataset, the accuracy seems logarithmically related to the number of trees. We see an improvement in accuracy with more trees, but the relationship is nonlinear. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Recap\n",
+ "In this notebook we used the Annoy module to build an indexed approximation of our word embeddings. To do so, we did the following steps:\n",
+ "1. Download Text8 Corpus\n",
+ "2. Build Word2Vec Model\n",
+ "3. Construct AnnoyIndex with model & make a similarity query\n",
+ "4. Verify & Evaluate performance\n",
+ "5. Evaluate relationship of `num_trees` to initialization time and accuracy"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
- "display_name": "Python 2",
+ "display_name": "Python 3",
"language": "python",
- "name": "python2"
+ "name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
- "version": 2
+ "version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
- "pygments_lexer": "ipython2",
- "version": "2.7.12"
+ "pygments_lexer": "ipython3",
+ "version": "3.6.1"
}
},
"nbformat": 4,
- "nbformat_minor": 0
+ "nbformat_minor": 1
}
diff --git a/docs/notebooks/gensim Quick Start.ipynb b/docs/notebooks/gensim Quick Start.ipynb
index 7b53e489dd..5f25162cb6 100644
--- a/docs/notebooks/gensim Quick Start.ipynb
+++ b/docs/notebooks/gensim Quick Start.ipynb
@@ -21,7 +21,7 @@
"\n",
- "A *corpus* is a collection of digital documents. This collection is the input to `gensim` from which it will infer the structure of the documents, their topics, etc. The latent structure inferred from the corpus can later be used to assign topics to new documents which were not present in the training corpus. For this reason, we also refer to this collection as the *training corpus*. No human intervention (such as tagging the documents by hand) is required - the topic classification is [unsupervised](https://en.wikipedia.org/wiki/Unsupervised_learning.html).\n",
+ "A *corpus* is a collection of digital documents. This collection is the input to `gensim` from which it will infer the structure of the documents, their topics, etc. The latent structure inferred from the corpus can later be used to assign topics to new documents which were not present in the training corpus. For this reason, we also refer to this collection as the *training corpus*. No human intervention (such as tagging the documents by hand) is required - the topic classification is [unsupervised](https://en.wikipedia.org/wiki/Unsupervised_learning).\n",
"\n",
@@ -53,7 +53,7 @@
"source": [
"This is a particularly small example of a corpus for illustration purposes. Another example could be a list of all the plays written by Shakespeare, list of all wikipedia articles, or all tweets by a particular person of interest.\n",
"\n",
- "After collecting our corpus, there are typically a number of preprocessing steps we want to undertake. We'll keep it simple and just remove some commonly used English words (such as 'the') and words that occur only once in the corpus. In the process of doing so, we'll [tokenise](https://en.wikipedia.org/wiki/Tokenization_(lexical_analysis)) our data. Tokenization breaks up the documents into words (in this case using space as a delimiter)."
+ "After collecting our corpus, there are typically a number of preprocessing steps we want to undertake. We'll keep it simple and just remove some commonly used English words (such as 'the') and words that occur only once in the corpus. In the process of doing so, we'll [tokenise][1] our data. Tokenization breaks up the documents into words (in this case using space as a delimiter).\n[1]: https://en.wikipedia.org/wiki/Tokenization_(lexical_analysis)"
]
},
{
@@ -134,7 +134,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "Because our corpus is small, there is only 12 different tokens in this `Dictionary`. For larger corpuses, dictionaries that contains hundreds of thousands of tokens are quite common."
+ "Because our corpus is small, there are only 12 different tokens in this `Dictionary`. For larger corpuses, dictionaries that contains hundreds of thousands of tokens are quite common."
]
},
{
@@ -290,7 +290,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "The `tfidf` model agains returns a list of tuples, where the first entry is the token ID and the second entry is the tf-idf weighting. Note that the ID corresponding to \"system\" (which occurred 4 times in the original corpus) has been weighted lower than the ID corresponding to \"minors\" (which only occurred twice).\n",
+ "The `tfidf` model again returns a list of tuples, where the first entry is the token ID and the second entry is the tf-idf weighting. Note that the ID corresponding to \"system\" (which occurred 4 times in the original corpus) has been weighted lower than the ID corresponding to \"minors\" (which only occurred twice).\n",
"\n",
"`gensim` offers a number of different models/transformations. See [Transformations and Topics](https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/Topics_and_Transformations.ipynb) for details."
]
diff --git a/docs/notebooks/lda_model_difference.ipynb b/docs/notebooks/lda_model_difference.ipynb
new file mode 100644
index 0000000000..3a33b9ff27
--- /dev/null
+++ b/docs/notebooks/lda_model_difference.ipynb
@@ -0,0 +1,441 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Comparison of two LDA models & visualize difference"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## In this notebook, I want to show how you can compare models with itself and with other model and why you need it"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## First, clean up 20 newsgroups dataset. We will use it for fitting LDA"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "from string import punctuation\n",
+ "from nltk import RegexpTokenizer\n",
+ "from nltk.stem.porter import PorterStemmer\n",
+ "from nltk.corpus import stopwords\n",
+ "from sklearn.datasets import fetch_20newsgroups\n",
+ "\n",
+ "\n",
+ "newsgroups = fetch_20newsgroups()\n",
+ "eng_stopwords = set(stopwords.words('english'))\n",
+ "\n",
+ "tokenizer = RegexpTokenizer('\\s+', gaps=True)\n",
+ "stemmer = PorterStemmer()\n",
+ "translate_tab = {ord(p): u\" \" for p in punctuation}\n",
+ "\n",
+ "def text2tokens(raw_text):\n",
+ " \"\"\"\n",
+ " Convert raw test to list of stemmed tokens\n",
+ " \"\"\"\n",
+ " clean_text = raw_text.lower().translate(translate_tab)\n",
+ " tokens = [token.strip() for token in tokenizer.tokenize(clean_text)]\n",
+ " tokens = [token for token in tokens if token not in eng_stopwords]\n",
+ " stemmed_tokens = [stemmer.stem(token) for token in tokens]\n",
+ " \n",
+ " return filter(lambda token: len(token) > 2, stemmed_tokens) # skip short tokens\n",
+ "\n",
+ "dataset = [text2tokens(txt) for txt in newsgroups['data']] # convert a documents to list of tokens"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "from gensim.corpora import Dictionary\n",
+ "dictionary = Dictionary(documents=dataset, prune_at=None)\n",
+ "dictionary.filter_extremes(no_below=5, no_above=0.3, keep_n=None) # use Dictionary to remove un-relevant tokens\n",
+ "dictionary.compactify()\n",
+ "\n",
+ "d2b_dataset = [dictionary.doc2bow(doc) for doc in dataset] # convert list of tokens to bag of word representation"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Second, fit two LDA models"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "CPU times: user 3min 29s, sys: 39.8 s, total: 4min 9s\n",
+ "Wall time: 5min 2s\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%time\n",
+ "\n",
+ "from gensim.models import LdaMulticore\n",
+ "num_topics = 15\n",
+ "\n",
+ "lda_fst = LdaMulticore(corpus=d2b_dataset, num_topics=num_topics, \n",
+ " id2word=dictionary, workers=4, eval_every=None, passes=10, batch=True)\n",
+ "\n",
+ "lda_snd = LdaMulticore(corpus=d2b_dataset, num_topics=num_topics, \n",
+ " id2word=dictionary, workers=4, eval_every=None, passes=20, batch=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## It's time to cases with visualisation, Yay!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import plotly.offline as py\n",
+ "import plotly.graph_objs as go\n",
+ "\n",
+ "py.init_notebook_mode()\n",
+ "\n",
+ "def plot_difference(mdiff, title=\"\", annotation=None):\n",
+ " \"\"\"\n",
+ " Helper function for plot difference between models\n",
+ " \"\"\"\n",
+ " annotation_html = None\n",
+ " if annotation is not None:\n",
+ " annotation_html = [[\"+++ {}
--- {}\".format(\", \".join(int_tokens), \n",
+ " \", \".join(diff_tokens)) \n",
+ " for (int_tokens, diff_tokens) in row] \n",
+ " for row in annotation]\n",
+ " \n",
+ " data = go.Heatmap(z=mdiff, colorscale='RdBu', text=annotation_html)\n",
+ " layout = go.Layout(width=950, height=950, title=title,\n",
+ " xaxis=dict(title=\"topic\"), yaxis=dict(title=\"topic\"))\n",
+ " py.iplot(dict(data=[data], layout=layout))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In gensim, you can visualise topic different with matrix and annotation. For this purposes, you can use method `diff` from LdaModel.\n",
+ "\n",
+ "This function return matrix with distances mdiff and matrix with annotations annotation. Read the docstring for more detailed info.\n",
+ "\n",
+ "In cells mdiff[i][j] we can see a distance between topic_i from the first model and topic_j from the second model.\n",
+ "\n",
+ "In cells annotation[i][j] we can see [tokens from intersection, tokens from difference] between topic_i from first model and topic_j from the second model."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "LdaMulticore.diff?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Case 1: How topics in ONE model correlate with each other"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Short description:\n",
+ "- x-axis - topic\n",
+ "- y-axis - topic\n",
+ "- almost red cell - strongly decorrelated topics\n",
+ "- almost blue cell - strongly correlated topics\n",
+ "\n",
+ "In an ideal world, we would like to see different topics decorrelated between themselves. In this case, our matrix would look like this:\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "mdiff = [[1.] * num_topics for _ in range(num_topics)] # all topics will be decorrelated\n",
+ "for topic_num in range(num_topics):\n",
+ " mdiff[topic_num][topic_num] = 0. # topic_i == topic_i\n",
+ " \n",
+ "plot_difference(mdiff, title=\"Topic difference (one model) in ideal world\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Unfortunately, in real life, not everything is so good, and the matrix looks different."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Short description (annotations):\n",
+ "- +++ make, world, well - words from the intersection of topics\n",
+ "- --- money, day, still - words from the symmetric difference of topics"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "mdiff, annotation = lda_fst.diff(lda_fst, distance='jaccard', num_words=50)\n",
+ "plot_difference(mdiff, title=\"Topic difference (one model) [jaccard distance]\", annotation=annotation)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "If you compare a model with itself, you want to see as many red elements as possible (except diagonal). With this picture, you can look at the not very red elements and understand which topics in the model are very similar and why (you can read annotation if you move your pointer to cell).\n",
+ "\n",
+ "\n",
+ "Jaccard is stable and robust distance function, but this function not enough sensitive for some purposes. Let's try to use Hellinger distance now."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "mdiff, annotation = lda_fst.diff(lda_fst, distance='hellinger', num_words=50)\n",
+ "plot_difference(mdiff, title=\"Topic difference (one model)[hellinger distance]\", annotation=annotation)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "You see that everything has become worse, but remember that everything depends on the task.\n",
+ "\n",
+ "You need to choose the function with which your personal point of view about topics similarity and your task (from my experience, Jaccard is fine)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "## Case 2: How topics from DIFFERENT models correlate with each other"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Sometimes, we want to look at the patterns between two different models and compare them. \n",
+ "\n",
+ "You can do this by constructing a matrix with the difference"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "mdiff, annotation = lda_fst.diff(lda_snd, distance='jaccard', num_words=50)\n",
+ "plot_difference(mdiff, title=\"Topic difference (two models)[jaccard distance]\", annotation=annotation)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Looking at this matrix, you can find similar and different topics (and relevant tokens which describe the intersection and difference)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 2",
+ "language": "python",
+ "name": "python2"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 2
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython2",
+ "version": "2.7.13"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/docs/notebooks/sklearn_wrapper.ipynb b/docs/notebooks/sklearn_wrapper.ipynb
index e98047dedc..cc5e85d3a2 100644
--- a/docs/notebooks/sklearn_wrapper.ipynb
+++ b/docs/notebooks/sklearn_wrapper.ipynb
@@ -65,15 +65,17 @@
"outputs": [],
"source": [
"from gensim.corpora import Dictionary\n",
- "texts = [['complier', 'system', 'computer'],\n",
- " ['eulerian', 'node', 'cycle', 'graph', 'tree', 'path'],\n",
- " ['graph', 'flow', 'network', 'graph'],\n",
- " ['loading', 'computer', 'system'],\n",
- " ['user', 'server', 'system'],\n",
- " ['tree','hamiltonian'],\n",
- " ['graph', 'trees'],\n",
- " ['computer', 'kernel', 'malfunction','computer'],\n",
- " ['server','system','computer']]\n",
+ "texts = [\n",
+ " ['complier', 'system', 'computer'],\n",
+ " ['eulerian', 'node', 'cycle', 'graph', 'tree', 'path'],\n",
+ " ['graph', 'flow', 'network', 'graph'],\n",
+ " ['loading', 'computer', 'system'],\n",
+ " ['user', 'server', 'system'],\n",
+ " ['tree', 'hamiltonian'],\n",
+ " ['graph', 'trees'],\n",
+ " ['computer', 'kernel', 'malfunction', 'computer'],\n",
+ " ['server', 'system', 'computer']\n",
+ "]\n",
"dictionary = Dictionary(texts)\n",
"corpus = [dictionary.doc2bow(text) for text in texts]"
]
@@ -119,7 +121,7 @@
}
],
"source": [
- "model=SklearnWrapperLdaModel(num_topics=2,id2word=dictionary,iterations=20, random_state=1)\n",
+ "model=SklearnWrapperLdaModel(num_topics=2, id2word=dictionary, iterations=20, random_state=1)\n",
"model.fit(corpus)\n",
"model.print_topics(2)\n",
"model.transform(corpus)"
@@ -167,9 +169,7 @@
"source": [
"rand = np.random.mtrand.RandomState(1) # set seed for getting same result\n",
"cats = ['rec.sport.baseball', 'sci.crypt']\n",
- "data = fetch_20newsgroups(subset='train',\n",
- " categories=cats,\n",
- " shuffle=True)"
+ "data = fetch_20newsgroups(subset='train', categories=cats, shuffle=True)"
]
},
{
@@ -190,9 +190,9 @@
"vec = CountVectorizer(min_df=10, stop_words='english')\n",
"\n",
"X = vec.fit_transform(data.data)\n",
- "vocab = vec.get_feature_names() #vocab to be converted to id2word \n",
+ "vocab = vec.get_feature_names() # vocab to be converted to id2word \n",
"\n",
- "id2word=dict([(i, s) for i, s in enumerate(vocab)])"
+ "id2word = dict([(i, s) for i, s in enumerate(vocab)])"
]
},
{
@@ -230,8 +230,8 @@
}
],
"source": [
- "obj=SklearnWrapperLdaModel(id2word=id2word,num_topics=5,passes=20)\n",
- "lda=obj.fit(X)\n",
+ "obj = SklearnWrapperLdaModel(id2word=id2word, num_topics=5, passes=20)\n",
+ "lda = obj.fit(X)\n",
"lda.print_topics()"
]
},
@@ -264,7 +264,7 @@
},
"outputs": [],
"source": [
- "def scorer(estimator, X,y=None):\n",
+ "def scorer(estimator, X, y=None):\n",
" goodcm = CoherenceModel(model=estimator, texts= texts, dictionary=estimator.id2word, coherence='c_v')\n",
" return goodcm.get_coherence()"
]
@@ -297,8 +297,8 @@
}
],
"source": [
- "obj=SklearnWrapperLdaModel(id2word=dictionary,num_topics=5,passes=20)\n",
- "parameters = {'num_topics':(2, 3, 5, 10), 'iterations':(1,20,50)}\n",
+ "obj = SklearnWrapperLdaModel(id2word=dictionary, num_topics=5, passes=20)\n",
+ "parameters = {'num_topics': (2, 3, 5, 10), 'iterations': (1, 20, 50)}\n",
"model = GridSearchCV(obj, parameters, scoring=scorer, cv=5)\n",
"model.fit(corpus)"
]
@@ -342,12 +342,14 @@
"source": [
"from sklearn.pipeline import Pipeline\n",
"from sklearn import linear_model\n",
+ "\n",
+ "\n",
"def print_features_pipe(clf, vocab, n=10):\n",
" ''' Better printing for sorted list '''\n",
" coef = clf.named_steps['classifier'].coef_[0]\n",
" print coef\n",
" print 'Positive features: %s' % (' '.join(['%s:%.2f' % (vocab[j], coef[j]) for j in np.argsort(coef)[::-1][:n] if coef[j] > 0]))\n",
- " print 'Negative features: %s' % (' '.join(['%s:%.2f' % (vocab[j], coef[j]) for j in np.argsort(coef)[:n] if coef[j] < 0]))\n"
+ " print 'Negative features: %s' % (' '.join(['%s:%.2f' % (vocab[j], coef[j]) for j in np.argsort(coef)[:n] if coef[j] < 0]))"
]
},
{
@@ -358,7 +360,7 @@
},
"outputs": [],
"source": [
- "id2word=Dictionary(map(lambda x : x.split(),data.data))\n",
+ "id2word = Dictionary([_.split() for _ in data.data])\n",
"corpus = [id2word.doc2bow(i.split()) for i in data.data]"
]
},
@@ -391,8 +393,8 @@
}
],
"source": [
- "model=SklearnWrapperLdaModel(num_topics=15,id2word=id2word,iterations=50, random_state=37)\n",
- "clf=linear_model.LogisticRegression(penalty='l2', C=0.1) #l2 penalty used\n",
+ "model = SklearnWrapperLdaModel(num_topics=15, id2word=id2word, iterations=50, random_state=37)\n",
+ "clf = linear_model.LogisticRegression(penalty='l2', C=0.1) # l2 penalty used\n",
"pipe = Pipeline((('features', model,), ('classifier', clf)))\n",
"pipe.fit(corpus, data.target)\n",
"print_features_pipe(pipe, id2word.values())\n",
@@ -452,22 +454,13 @@
}
],
"source": [
- "model=SklearnWrapperLsiModel(num_topics=15, id2word=id2word)\n",
- "clf=linear_model.LogisticRegression(penalty='l2', C=0.1) #l2 penalty used\n",
+ "model = SklearnWrapperLsiModel(num_topics=15, id2word=id2word)\n",
+ "clf = linear_model.LogisticRegression(penalty='l2', C=0.1) # l2 penalty used\n",
"pipe = Pipeline((('features', model,), ('classifier', clf)))\n",
"pipe.fit(corpus, data.target)\n",
"print_features_pipe(pipe, id2word.values())\n",
"print pipe.score(corpus, data.target)"
]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": []
}
],
"metadata": {
diff --git a/docs/notebooks/word2vec.ipynb b/docs/notebooks/word2vec.ipynb
index 1f490950fa..61679cea4f 100644
--- a/docs/notebooks/word2vec.ipynb
+++ b/docs/notebooks/word2vec.ipynb
@@ -2,10 +2,7 @@
"cells": [
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"# Word2Vec Tutorial\n",
"\n",
@@ -22,23 +19,16 @@
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"## Preparing the Input\n",
- "Starting from the beginning, gensim’s `word2vec` expects a sequence of sentences as its input. Each sentence a list of words (utf8 strings):"
+ "Starting from the beginning, gensim’s `word2vec` expects a sequence of sentences as its input. Each sentence is a list of words (utf8 strings):"
]
},
{
"cell_type": "code",
"execution_count": 1,
- "metadata": {
- "collapsed": true,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [],
"source": [
"# import modules & set up logging\n",
@@ -49,17 +39,29 @@
{
"cell_type": "code",
"execution_count": 2,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
- "WARNING:gensim.models.word2vec:under 10 jobs per worker: consider setting a smaller `batch_words' for smoother alpha decay\n"
+ "2017-05-07 14:19:35,470 : INFO : collecting all words and their counts\n",
+ "2017-05-07 14:19:35,473 : INFO : PROGRESS: at sentence #0, processed 0 words, keeping 0 word types\n",
+ "2017-05-07 14:19:35,474 : INFO : collected 3 word types from a corpus of 4 raw words and 2 sentences\n",
+ "2017-05-07 14:19:35,476 : INFO : Loading a fresh vocabulary\n",
+ "2017-05-07 14:19:35,477 : INFO : min_count=1 retains 3 unique words (100% of original 3, drops 0)\n",
+ "2017-05-07 14:19:35,478 : INFO : min_count=1 leaves 4 word corpus (100% of original 4, drops 0)\n",
+ "2017-05-07 14:19:35,480 : INFO : deleting the raw counts dictionary of 3 items\n",
+ "2017-05-07 14:19:35,481 : INFO : sample=0.001 downsamples 3 most-common words\n",
+ "2017-05-07 14:19:35,483 : INFO : downsampling leaves estimated 0 word corpus (5.7% of prior 4)\n",
+ "2017-05-07 14:19:35,484 : INFO : estimated required memory for 3 words and 100 dimensions: 3900 bytes\n",
+ "2017-05-07 14:19:35,485 : INFO : resetting layer weights\n",
+ "2017-05-07 14:19:35,487 : INFO : training model with 3 workers on 3 vocabulary and 100 features, using sg=0 hs=0 sample=0.001 negative=5 window=5\n",
+ "2017-05-07 14:19:35,490 : INFO : worker thread finished; awaiting finish of 2 more threads\n",
+ "2017-05-07 14:19:35,490 : INFO : worker thread finished; awaiting finish of 1 more threads\n",
+ "2017-05-07 14:19:35,492 : INFO : worker thread finished; awaiting finish of 0 more threads\n",
+ "2017-05-07 14:19:35,494 : INFO : training on 20 raw words (0 effective words) took 0.0s, 0 effective words/s\n",
+ "2017-05-07 14:19:35,497 : WARNING : under 10 jobs per worker: consider setting a smaller `batch_words' for smoother alpha decay\n"
]
}
],
@@ -71,10 +73,7 @@
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"Keeping the input as a Python built-in list is convenient, but can use up a lot of RAM when the input is large.\n",
"\n",
@@ -87,9 +86,7 @@
"cell_type": "code",
"execution_count": 3,
"metadata": {
- "collapsed": true,
- "deletable": true,
- "editable": true
+ "collapsed": true
},
"outputs": [],
"source": [
@@ -111,9 +108,7 @@
"cell_type": "code",
"execution_count": 4,
"metadata": {
- "collapsed": true,
- "deletable": true,
- "editable": true
+ "collapsed": true
},
"outputs": [],
"source": [
@@ -130,17 +125,13 @@
{
"cell_type": "code",
"execution_count": 5,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "[['second'], ['sentence'], ['first'], ['sentence']]\n"
+ "[['first'], ['sentence'], ['second'], ['sentence']]\n"
]
}
],
@@ -152,17 +143,29 @@
{
"cell_type": "code",
"execution_count": 6,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
- "WARNING:gensim.models.word2vec:under 10 jobs per worker: consider setting a smaller `batch_words' for smoother alpha decay\n"
+ "2017-05-07 14:19:35,568 : INFO : collecting all words and their counts\n",
+ "2017-05-07 14:19:35,574 : INFO : PROGRESS: at sentence #0, processed 0 words, keeping 0 word types\n",
+ "2017-05-07 14:19:35,578 : INFO : collected 3 word types from a corpus of 4 raw words and 4 sentences\n",
+ "2017-05-07 14:19:35,579 : INFO : Loading a fresh vocabulary\n",
+ "2017-05-07 14:19:35,582 : INFO : min_count=1 retains 3 unique words (100% of original 3, drops 0)\n",
+ "2017-05-07 14:19:35,587 : INFO : min_count=1 leaves 4 word corpus (100% of original 4, drops 0)\n",
+ "2017-05-07 14:19:35,588 : INFO : deleting the raw counts dictionary of 3 items\n",
+ "2017-05-07 14:19:35,589 : INFO : sample=0.001 downsamples 3 most-common words\n",
+ "2017-05-07 14:19:35,590 : INFO : downsampling leaves estimated 0 word corpus (5.7% of prior 4)\n",
+ "2017-05-07 14:19:35,594 : INFO : estimated required memory for 3 words and 100 dimensions: 3900 bytes\n",
+ "2017-05-07 14:19:35,595 : INFO : resetting layer weights\n",
+ "2017-05-07 14:19:35,598 : INFO : training model with 3 workers on 3 vocabulary and 100 features, using sg=0 hs=0 sample=0.001 negative=5 window=5\n",
+ "2017-05-07 14:19:35,603 : INFO : worker thread finished; awaiting finish of 2 more threads\n",
+ "2017-05-07 14:19:35,605 : INFO : worker thread finished; awaiting finish of 1 more threads\n",
+ "2017-05-07 14:19:35,606 : INFO : worker thread finished; awaiting finish of 0 more threads\n",
+ "2017-05-07 14:19:35,607 : INFO : training on 20 raw words (0 effective words) took 0.0s, 0 effective words/s\n",
+ "2017-05-07 14:19:35,609 : WARNING : under 10 jobs per worker: consider setting a smaller `batch_words' for smoother alpha decay\n"
]
}
],
@@ -174,18 +177,14 @@
{
"cell_type": "code",
"execution_count": 7,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Word2Vec(vocab=3, size=100, alpha=0.025)\n",
- "{'second': , 'sentence': , 'first': }\n"
+ "{'second': , 'first': , 'sentence': }\n"
]
}
],
@@ -196,10 +195,7 @@
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"Say we want to further preprocess the words from the files — convert to unicode, lowercase, remove numbers, extract named entities… All of this can be done inside the `MySentences` iterator and `word2vec` doesn’t need to know. All that is required is that the input yields one sentence (list of utf8 words) after another.\n",
"\n",
@@ -213,17 +209,29 @@
{
"cell_type": "code",
"execution_count": 8,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
- "WARNING:gensim.models.word2vec:under 10 jobs per worker: consider setting a smaller `batch_words' for smoother alpha decay\n"
+ "2017-05-07 14:19:35,636 : INFO : collecting all words and their counts\n",
+ "2017-05-07 14:19:35,638 : INFO : PROGRESS: at sentence #0, processed 0 words, keeping 0 word types\n",
+ "2017-05-07 14:19:35,640 : INFO : collected 3 word types from a corpus of 4 raw words and 4 sentences\n",
+ "2017-05-07 14:19:35,641 : INFO : Loading a fresh vocabulary\n",
+ "2017-05-07 14:19:35,644 : INFO : min_count=1 retains 3 unique words (100% of original 3, drops 0)\n",
+ "2017-05-07 14:19:35,645 : INFO : min_count=1 leaves 4 word corpus (100% of original 4, drops 0)\n",
+ "2017-05-07 14:19:35,646 : INFO : deleting the raw counts dictionary of 3 items\n",
+ "2017-05-07 14:19:35,647 : INFO : sample=0.001 downsamples 3 most-common words\n",
+ "2017-05-07 14:19:35,649 : INFO : downsampling leaves estimated 0 word corpus (5.7% of prior 4)\n",
+ "2017-05-07 14:19:35,650 : INFO : estimated required memory for 3 words and 100 dimensions: 3900 bytes\n",
+ "2017-05-07 14:19:35,651 : INFO : resetting layer weights\n",
+ "2017-05-07 14:19:35,653 : INFO : training model with 3 workers on 3 vocabulary and 100 features, using sg=0 hs=0 sample=0.001 negative=5 window=5\n",
+ "2017-05-07 14:19:35,656 : INFO : worker thread finished; awaiting finish of 2 more threads\n",
+ "2017-05-07 14:19:35,657 : INFO : worker thread finished; awaiting finish of 1 more threads\n",
+ "2017-05-07 14:19:35,658 : INFO : worker thread finished; awaiting finish of 0 more threads\n",
+ "2017-05-07 14:19:35,660 : INFO : training on 20 raw words (0 effective words) took 0.0s, 0 effective words/s\n",
+ "2017-05-07 14:19:35,662 : WARNING : under 10 jobs per worker: consider setting a smaller `batch_words' for smoother alpha decay\n"
]
},
{
@@ -248,18 +256,14 @@
{
"cell_type": "code",
"execution_count": 9,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Word2Vec(vocab=3, size=100, alpha=0.025)\n",
- "{'second': , 'sentence': , 'first': }\n"
+ "{'second': , 'first': , 'sentence': }\n"
]
}
],
@@ -270,12 +274,9 @@
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
- "## More data would be nice\n",
+ "### More data would be nice\n",
"For the following examples, we'll use the [Lee Corpus](https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/test/test_data/lee_background.cor) (which you already have if you've installed gensim):"
]
},
@@ -283,9 +284,7 @@
"cell_type": "code",
"execution_count": 10,
"metadata": {
- "collapsed": true,
- "deletable": true,
- "editable": true
+ "collapsed": true
},
"outputs": [],
"source": [
@@ -297,17 +296,13 @@
{
"cell_type": "code",
"execution_count": 11,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "<__main__.MyText object at 0x7f5edcd03b90>\n"
+ "<__main__.MyText object at 0x106c65b50>\n"
]
}
],
@@ -325,40 +320,85 @@
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"## Training\n",
"`Word2Vec` accepts several parameters that affect both training speed and quality.\n",
- "\n",
- "One of them is for pruning the internal dictionary. Words that appear only once or twice in a billion-word corpus are probably uninteresting typos and garbage. In addition, there’s not enough data to make any meaningful training on those words, so it’s best to ignore them:"
+ "\n### min_count\n",
+ "`min_count` is for pruning the internal dictionary. Words that appear only once or twice in a billion-word corpus are probably uninteresting typos and garbage. In addition, there’s not enough data to make any meaningful training on those words, so it’s best to ignore them:"
]
},
{
"cell_type": "code",
"execution_count": 12,
- "metadata": {
- "collapsed": true,
- "deletable": true,
- "editable": true
- },
- "outputs": [],
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2017-05-07 14:19:35,718 : INFO : collecting all words and their counts\n",
+ "2017-05-07 14:19:35,721 : INFO : PROGRESS: at sentence #0, processed 0 words, keeping 0 word types\n",
+ "2017-05-07 14:19:35,765 : INFO : collected 10186 word types from a corpus of 59890 raw words and 300 sentences\n",
+ "2017-05-07 14:19:35,766 : INFO : Loading a fresh vocabulary\n",
+ "2017-05-07 14:19:35,787 : INFO : min_count=10 retains 806 unique words (7% of original 10186, drops 9380)\n",
+ "2017-05-07 14:19:35,789 : INFO : min_count=10 leaves 40964 word corpus (68% of original 59890, drops 18926)\n",
+ "2017-05-07 14:19:35,795 : INFO : deleting the raw counts dictionary of 10186 items\n",
+ "2017-05-07 14:19:35,799 : INFO : sample=0.001 downsamples 54 most-common words\n",
+ "2017-05-07 14:19:35,802 : INFO : downsampling leaves estimated 26224 word corpus (64.0% of prior 40964)\n",
+ "2017-05-07 14:19:35,804 : INFO : estimated required memory for 806 words and 100 dimensions: 1047800 bytes\n",
+ "2017-05-07 14:19:35,812 : INFO : resetting layer weights\n",
+ "2017-05-07 14:19:35,834 : INFO : training model with 3 workers on 806 vocabulary and 100 features, using sg=0 hs=0 sample=0.001 negative=5 window=5\n",
+ "2017-05-07 14:19:36,106 : INFO : worker thread finished; awaiting finish of 2 more threads\n",
+ "2017-05-07 14:19:36,110 : INFO : worker thread finished; awaiting finish of 1 more threads\n",
+ "2017-05-07 14:19:36,112 : INFO : worker thread finished; awaiting finish of 0 more threads\n",
+ "2017-05-07 14:19:36,113 : INFO : training on 299450 raw words (131202 effective words) took 0.3s, 478707 effective words/s\n"
+ ]
+ }
+ ],
"source": [
"# default value of min_count=5\n",
"model = gensim.models.Word2Vec(sentences, min_count=10)"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### size\n",
+ "`size` is the number of dimensions (N) of the N-dimensional space that gensim Word2Vec maps the words onto.\n",
+ "\n",
+ "Bigger size values require more training data, but can lead to better (more accurate) models. Reasonable values are in the tens to hundreds."
+ ]
+ },
{
"cell_type": "code",
"execution_count": 13,
- "metadata": {
- "collapsed": true,
- "deletable": true,
- "editable": true
- },
- "outputs": [],
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2017-05-07 14:19:36,122 : INFO : collecting all words and their counts\n",
+ "2017-05-07 14:19:36,125 : INFO : PROGRESS: at sentence #0, processed 0 words, keeping 0 word types\n",
+ "2017-05-07 14:19:36,159 : INFO : collected 10186 word types from a corpus of 59890 raw words and 300 sentences\n",
+ "2017-05-07 14:19:36,161 : INFO : Loading a fresh vocabulary\n",
+ "2017-05-07 14:19:36,173 : INFO : min_count=5 retains 1723 unique words (16% of original 10186, drops 8463)\n",
+ "2017-05-07 14:19:36,175 : INFO : min_count=5 leaves 46858 word corpus (78% of original 59890, drops 13032)\n",
+ "2017-05-07 14:19:36,186 : INFO : deleting the raw counts dictionary of 10186 items\n",
+ "2017-05-07 14:19:36,188 : INFO : sample=0.001 downsamples 49 most-common words\n",
+ "2017-05-07 14:19:36,190 : INFO : downsampling leaves estimated 32849 word corpus (70.1% of prior 46858)\n",
+ "2017-05-07 14:19:36,193 : INFO : estimated required memory for 1723 words and 200 dimensions: 3618300 bytes\n",
+ "2017-05-07 14:19:36,207 : INFO : resetting layer weights\n",
+ "2017-05-07 14:19:36,246 : INFO : training model with 3 workers on 1723 vocabulary and 200 features, using sg=0 hs=0 sample=0.001 negative=5 window=5\n",
+ "2017-05-07 14:19:36,485 : INFO : worker thread finished; awaiting finish of 2 more threads\n",
+ "2017-05-07 14:19:36,486 : INFO : worker thread finished; awaiting finish of 1 more threads\n",
+ "2017-05-07 14:19:36,490 : INFO : worker thread finished; awaiting finish of 0 more threads\n",
+ "2017-05-07 14:19:36,491 : INFO : training on 299450 raw words (164316 effective words) took 0.2s, 686188 effective words/s\n"
+ ]
+ }
+ ],
"source": [
"# default value of size=100\n",
"model = gensim.models.Word2Vec(sentences, size=200)"
@@ -366,30 +406,39 @@
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
- "Bigger size values require more training data, but can lead to better (more accurate) models. Reasonable values are in the tens to hundreds.\n",
- "\n",
- "The last of the major parameters (full list [here](http://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec)) is for training parallelization, to speed up training:"
+ "### workers\n",
+ "`workers`, the last of the major parameters (full list [here](http://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec)) is for training parallelization, to speed up training:"
]
},
{
"cell_type": "code",
"execution_count": 14,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
- "WARNING:gensim.models.word2vec:under 10 jobs per worker: consider setting a smaller `batch_words' for smoother alpha decay\n"
+ "2017-05-07 14:19:36,501 : INFO : collecting all words and their counts\n",
+ "2017-05-07 14:19:36,503 : INFO : PROGRESS: at sentence #0, processed 0 words, keeping 0 word types\n",
+ "2017-05-07 14:19:36,542 : INFO : collected 10186 word types from a corpus of 59890 raw words and 300 sentences\n",
+ "2017-05-07 14:19:36,545 : INFO : Loading a fresh vocabulary\n",
+ "2017-05-07 14:19:36,561 : INFO : min_count=5 retains 1723 unique words (16% of original 10186, drops 8463)\n",
+ "2017-05-07 14:19:36,564 : INFO : min_count=5 leaves 46858 word corpus (78% of original 59890, drops 13032)\n",
+ "2017-05-07 14:19:36,574 : INFO : deleting the raw counts dictionary of 10186 items\n",
+ "2017-05-07 14:19:36,580 : INFO : sample=0.001 downsamples 49 most-common words\n",
+ "2017-05-07 14:19:36,582 : INFO : downsampling leaves estimated 32849 word corpus (70.1% of prior 46858)\n",
+ "2017-05-07 14:19:36,583 : INFO : estimated required memory for 1723 words and 100 dimensions: 2239900 bytes\n",
+ "2017-05-07 14:19:36,598 : INFO : resetting layer weights\n",
+ "2017-05-07 14:19:36,631 : INFO : training model with 4 workers on 1723 vocabulary and 100 features, using sg=0 hs=0 sample=0.001 negative=5 window=5\n",
+ "2017-05-07 14:19:36,792 : INFO : worker thread finished; awaiting finish of 3 more threads\n",
+ "2017-05-07 14:19:36,794 : INFO : worker thread finished; awaiting finish of 2 more threads\n",
+ "2017-05-07 14:19:36,795 : INFO : worker thread finished; awaiting finish of 1 more threads\n",
+ "2017-05-07 14:19:36,801 : INFO : worker thread finished; awaiting finish of 0 more threads\n",
+ "2017-05-07 14:19:36,802 : INFO : training on 299450 raw words (164316 effective words) took 0.2s, 979062 effective words/s\n",
+ "2017-05-07 14:19:36,805 : WARNING : under 10 jobs per worker: consider setting a smaller `batch_words' for smoother alpha decay\n"
]
}
],
@@ -400,20 +449,14 @@
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"The `workers` parameter only has an effect if you have [Cython](http://cython.org/) installed. Without Cython, you’ll only be able to use one core because of the [GIL](https://wiki.python.org/moin/GlobalInterpreterLock) (and `word2vec` training will be [miserably slow](http://rare-technologies.com/word2vec-in-python-part-two-optimizing/))."
]
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"## Memory\n",
"At its core, `word2vec` model parameters are stored as matrices (NumPy arrays). Each array is **#vocabulary** (controlled by min_count parameter) times **#size** (size parameter) of floats (single precision aka 4 bytes).\n",
@@ -425,15 +468,12 @@
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"## Evaluating\n",
"`Word2Vec` training is an unsupervised task, there’s no good way to objectively evaluate the result. Evaluation depends on your end application.\n",
"\n",
- "Google have released their testing set of about 20,000 syntactic and semantic test examples, following the “A is to B as C is to D” task. It is provided in the 'datasets' folder.\n",
+ "Google has released their testing set of about 20,000 syntactic and semantic test examples, following the “A is to B as C is to D” task. It is provided in the 'datasets' folder.\n",
"\n",
"For example a syntactic analogy of comparative type is bad:worse;good:?. There are total of 9 types of syntactic comparisons in the dataset like plural nouns and nouns of opposite meaning.\n",
"\n",
@@ -442,23 +482,31 @@
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
- "Gensim support the same evaluation set, in exactly the same format:"
+ "Gensim supports the same evaluation set, in exactly the same format:"
]
},
{
"cell_type": "code",
"execution_count": 15,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2017-05-07 14:19:36,892 : INFO : precomputing L2-norms of word weight vectors\n",
+ "2017-05-07 14:19:36,896 : INFO : family: 0.0% (0/2)\n",
+ "2017-05-07 14:19:36,924 : INFO : gram3-comparative: 0.0% (0/12)\n",
+ "2017-05-07 14:19:36,935 : INFO : gram4-superlative: 0.0% (0/12)\n",
+ "2017-05-07 14:19:36,949 : INFO : gram5-present-participle: 5.0% (1/20)\n",
+ "2017-05-07 14:19:36,967 : INFO : gram6-nationality-adjective: 0.0% (0/20)\n",
+ "2017-05-07 14:19:36,983 : INFO : gram7-past-tense: 0.0% (0/20)\n",
+ "2017-05-07 14:19:36,998 : INFO : gram8-plural: 0.0% (0/12)\n",
+ "2017-05-07 14:19:37,006 : INFO : total: 1.0% (1/98)\n"
+ ]
+ },
{
"data": {
"text/plain": [
@@ -500,14 +548,13 @@
" (u'LARGE', u'LARGEST', u'GOOD', u'BEST'),\n",
" (u'LARGE', u'LARGEST', u'GREAT', u'GREATEST')],\n",
" 'section': u'gram4-superlative'},\n",
- " {'correct': [],\n",
+ " {'correct': [(u'LOOK', u'LOOKING', u'SAY', u'SAYING')],\n",
" 'incorrect': [(u'GO', u'GOING', u'LOOK', u'LOOKING'),\n",
" (u'GO', u'GOING', u'PLAY', u'PLAYING'),\n",
" (u'GO', u'GOING', u'RUN', u'RUNNING'),\n",
" (u'GO', u'GOING', u'SAY', u'SAYING'),\n",
" (u'LOOK', u'LOOKING', u'PLAY', u'PLAYING'),\n",
" (u'LOOK', u'LOOKING', u'RUN', u'RUNNING'),\n",
- " (u'LOOK', u'LOOKING', u'SAY', u'SAYING'),\n",
" (u'LOOK', u'LOOKING', u'GO', u'GOING'),\n",
" (u'PLAY', u'PLAYING', u'RUN', u'RUNNING'),\n",
" (u'PLAY', u'PLAYING', u'SAY', u'SAYING'),\n",
@@ -581,7 +628,7 @@
" (u'MAN', u'MEN', u'CHILD', u'CHILDREN')],\n",
" 'section': u'gram8-plural'},\n",
" {'correct': [], 'incorrect': [], 'section': u'gram9-plural-verbs'},\n",
- " {'correct': [],\n",
+ " {'correct': [(u'LOOK', u'LOOKING', u'SAY', u'SAYING')],\n",
" 'incorrect': [(u'HE', u'SHE', u'HIS', u'HER'),\n",
" (u'HIS', u'HER', u'HE', u'SHE'),\n",
" (u'GOOD', u'BETTER', u'GREAT', u'GREATER'),\n",
@@ -614,7 +661,6 @@
" (u'GO', u'GOING', u'SAY', u'SAYING'),\n",
" (u'LOOK', u'LOOKING', u'PLAY', u'PLAYING'),\n",
" (u'LOOK', u'LOOKING', u'RUN', u'RUNNING'),\n",
- " (u'LOOK', u'LOOKING', u'SAY', u'SAYING'),\n",
" (u'LOOK', u'LOOKING', u'GO', u'GOING'),\n",
" (u'PLAY', u'PLAYING', u'RUN', u'RUNNING'),\n",
" (u'PLAY', u'PLAYING', u'SAY', u'SAYING'),\n",
@@ -694,10 +740,7 @@
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"This `accuracy` takes an \n",
"[optional parameter](http://radimrehurek.com/gensim/models/word2vec.html#gensim.models.word2vec.Word2Vec.accuracy) `restrict_vocab` \n",
@@ -707,30 +750,32 @@
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"In the December 2016 release of Gensim we added a better way to evaluate semantic similarity.\n",
"\n",
- "By default it uses an academic dataset WS-353 but one can create a dataset specific to your business based on it. It contain word pairs together with human-assigned similarity judgments. It measures the relatedness or co-occurrence of two words. For example, coast and shore are very similar as they appear in the same context. At the same time clothes and closet are less similar because they are related but not interchangeable."
+ "By default it uses an academic dataset WS-353 but one can create a dataset specific to your business based on it. It contains word pairs together with human-assigned similarity judgments. It measures the relatedness or co-occurrence of two words. For example, 'coast' and 'shore' are very similar as they appear in the same context. At the same time 'clothes' and 'closet' are less similar because they are related but not interchangeable."
]
},
{
"cell_type": "code",
"execution_count": 16,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2017-05-07 14:19:37,057 : INFO : Pearson correlation coefficient against /usr/local/lib/python2.7/site-packages/gensim/test/test_data/wordsim353.tsv: 0.0819\n",
+ "2017-05-07 14:19:37,058 : INFO : Spearman rank-order correlation coefficient against /usr/local/lib/python2.7/site-packages/gensim/test/test_data/wordsim353.tsv: 0.0825\n",
+ "2017-05-07 14:19:37,060 : INFO : Pairs with unknown words ratio: 85.6%\n"
+ ]
+ },
{
"data": {
"text/plain": [
- "((0.064272459590938968, 0.65409410348547958),\n",
- " (0.041316891146214431, 0.77344654164156579),\n",
+ "((0.081883159986411394, 0.5678461885290379),\n",
+ " SpearmanrResult(correlation=0.082498020328092989, pvalue=0.56493264964360379),\n",
" 85.55240793201133)"
]
},
@@ -740,25 +785,19 @@
}
],
"source": [
- "model.evaluate_word_pairs(test_data_dir +'wordsim353.tsv')"
+ "model.evaluate_word_pairs(test_data_dir + 'wordsim353.tsv')"
]
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"Once again, **good performance on Google's or WS-353 test set doesn’t mean word2vec will work well in your application, or vice versa**. It’s always best to evaluate directly on your intended task. For an example of how to use word2vec in a classifier pipeline, see this [tutorial](https://github.com/RaRe-Technologies/movie-plots-by-genre)."
]
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"## Storing and loading models\n",
"You can store/load models using the standard gensim methods:"
@@ -767,12 +806,19 @@
{
"cell_type": "code",
"execution_count": 17,
- "metadata": {
- "collapsed": true,
- "deletable": true,
- "editable": true
- },
- "outputs": [],
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2017-05-07 14:19:37,075 : INFO : saving Word2Vec object under /var/folders/4t/xx08nfg15lj77zlfjz69314r0000gn/T/tmpZEHE9Wgensim_temp, separately None\n",
+ "2017-05-07 14:19:37,078 : INFO : not storing attribute syn0norm\n",
+ "2017-05-07 14:19:37,079 : INFO : not storing attribute cum_table\n",
+ "2017-05-07 14:19:37,101 : INFO : saved /var/folders/4t/xx08nfg15lj77zlfjz69314r0000gn/T/tmpZEHE9Wgensim_temp\n"
+ ]
+ }
+ ],
"source": [
"from tempfile import mkstemp\n",
"\n",
@@ -784,38 +830,41 @@
{
"cell_type": "code",
"execution_count": 18,
- "metadata": {
- "collapsed": true,
- "deletable": true,
- "editable": true
- },
- "outputs": [],
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2017-05-07 14:19:37,107 : INFO : loading Word2Vec object from /var/folders/4t/xx08nfg15lj77zlfjz69314r0000gn/T/tmpZEHE9Wgensim_temp\n",
+ "2017-05-07 14:19:37,118 : INFO : loading wv recursively from /var/folders/4t/xx08nfg15lj77zlfjz69314r0000gn/T/tmpZEHE9Wgensim_temp.wv.* with mmap=None\n",
+ "2017-05-07 14:19:37,119 : INFO : setting ignored attribute syn0norm to None\n",
+ "2017-05-07 14:19:37,120 : INFO : setting ignored attribute cum_table to None\n",
+ "2017-05-07 14:19:37,121 : INFO : loaded /var/folders/4t/xx08nfg15lj77zlfjz69314r0000gn/T/tmpZEHE9Wgensim_temp\n"
+ ]
+ }
+ ],
"source": [
"new_model = gensim.models.Word2Vec.load(temp_path) # open the model"
]
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"which uses pickle internally, optionally `mmap`‘ing the model’s internal large NumPy matrices into virtual memory directly from disk files, for inter-process memory sharing.\n",
"\n",
"In addition, you can load models created by the original C tool, both using its text and binary formats:\n",
- "\n",
- " model = gensim.models.KeyedVectors.load_word2vec_format('/tmp/vectors.txt', binary=False)\n",
- " # using gzipped/bz2 input works too, no need to unzip:\n",
- " model = gensim.models.KeyedVectors.load_word2vec_format('/tmp/vectors.bin.gz', binary=True)"
+ "```\n",
+ " model = gensim.models.KeyedVectors.load_word2vec_format('/tmp/vectors.txt', binary=False)\n",
+ " # using gzipped/bz2 input works too, no need to unzip:\n",
+ " model = gensim.models.KeyedVectors.load_word2vec_format('/tmp/vectors.bin.gz', binary=True)\n",
+ "```"
]
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"## Online training / Resuming training\n",
"Advanced users can load a model and continue training it with more sentences and [new vocabulary words](https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/online_w2v_tutorial.ipynb):"
@@ -824,24 +873,41 @@
{
"cell_type": "code",
"execution_count": 19,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
- "WARNING:gensim.models.word2vec:under 10 jobs per worker: consider setting a smaller `batch_words' for smoother alpha decay\n"
+ "2017-05-07 14:19:37,137 : INFO : loading Word2Vec object from /var/folders/4t/xx08nfg15lj77zlfjz69314r0000gn/T/tmpZEHE9Wgensim_temp\n",
+ "2017-05-07 14:19:37,146 : INFO : loading wv recursively from /var/folders/4t/xx08nfg15lj77zlfjz69314r0000gn/T/tmpZEHE9Wgensim_temp.wv.* with mmap=None\n",
+ "2017-05-07 14:19:37,147 : INFO : setting ignored attribute syn0norm to None\n",
+ "2017-05-07 14:19:37,149 : INFO : setting ignored attribute cum_table to None\n",
+ "2017-05-07 14:19:37,150 : INFO : loaded /var/folders/4t/xx08nfg15lj77zlfjz69314r0000gn/T/tmpZEHE9Wgensim_temp\n",
+ "2017-05-07 14:19:37,155 : INFO : collecting all words and their counts\n",
+ "2017-05-07 14:19:37,156 : INFO : PROGRESS: at sentence #0, processed 0 words, keeping 0 word types\n",
+ "2017-05-07 14:19:37,157 : INFO : collected 13 word types from a corpus of 13 raw words and 1 sentences\n",
+ "2017-05-07 14:19:37,158 : INFO : Updating model with new vocabulary\n",
+ "2017-05-07 14:19:37,159 : INFO : New added 0 unique words (0% of original 13)\n",
+ " and increased the count of 0 pre-existing words (0% of original 13)\n",
+ "2017-05-07 14:19:37,161 : INFO : deleting the raw counts dictionary of 13 items\n",
+ "2017-05-07 14:19:37,162 : INFO : sample=0.001 downsamples 0 most-common words\n",
+ "2017-05-07 14:19:37,163 : INFO : downsampling leaves estimated 0 word corpus (0.0% of prior 0)\n",
+ "2017-05-07 14:19:37,164 : INFO : estimated required memory for 1723 words and 100 dimensions: 2239900 bytes\n",
+ "2017-05-07 14:19:37,170 : INFO : updating layer weights\n",
+ "2017-05-07 14:19:37,172 : INFO : training model with 4 workers on 1723 vocabulary and 100 features, using sg=0 hs=0 sample=0.001 negative=5 window=5\n",
+ "2017-05-07 14:19:37,174 : INFO : worker thread finished; awaiting finish of 3 more threads\n",
+ "2017-05-07 14:19:37,176 : INFO : worker thread finished; awaiting finish of 2 more threads\n",
+ "2017-05-07 14:19:37,178 : INFO : worker thread finished; awaiting finish of 1 more threads\n",
+ "2017-05-07 14:19:37,179 : INFO : worker thread finished; awaiting finish of 0 more threads\n",
+ "2017-05-07 14:19:37,180 : INFO : training on 65 raw words (28 effective words) took 0.0s, 4209 effective words/s\n",
+ "2017-05-07 14:19:37,182 : WARNING : under 10 jobs per worker: consider setting a smaller `batch_words' for smoother alpha decay\n"
]
}
],
"source": [
"model = gensim.models.Word2Vec.load(temp_path)\n",
- "more_sentences = [['Advanced', 'users', 'can', 'load', 'a', 'model', 'and', 'continue', \n",
- " 'training', 'it', 'with', 'more', 'sentences']]\n",
+ "more_sentences = [['Advanced', 'users', 'can', 'load', 'a', 'model', 'and', 'continue', 'training', 'it', 'with', 'more', 'sentences']]\n",
"model.build_vocab(more_sentences, update=True)\n",
"model.train(more_sentences, total_examples=model.corpus_count, epochs=model.iter)\n",
"\n",
@@ -852,10 +918,7 @@
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"You may need to tweak the `total_words` parameter to `train()`, depending on what learning rate decay you want to simulate.\n",
"\n",
@@ -868,16 +931,19 @@
{
"cell_type": "code",
"execution_count": 20,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "2017-05-07 14:19:37,190 : INFO : precomputing L2-norms of word weight vectors\n"
+ ]
+ },
{
"data": {
"text/plain": [
- "[('ensure', 0.9916089773178101)]"
+ "[('longer', 0.9884582161903381)]"
]
},
"execution_count": 20,
@@ -892,17 +958,13 @@
{
"cell_type": "code",
"execution_count": 21,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
- "WARNING:gensim.models.keyedvectors:vectors for words set(['lunch', 'input', 'cat']) are not present in the model, ignoring these words\n"
+ "2017-05-07 14:19:37,202 : WARNING : vectors for words set(['lunch', 'input', 'cat']) are not present in the model, ignoring these words\n"
]
},
{
@@ -923,18 +985,14 @@
{
"cell_type": "code",
"execution_count": 22,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "0.999128693496\n",
- "0.995598721362\n"
+ "0.999186470298\n",
+ "0.995724529077\n"
]
}
],
@@ -945,10 +1003,7 @@
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"You can get the probability distribution for the center word given the context words as input:"
]
@@ -956,40 +1011,30 @@
{
"cell_type": "code",
"execution_count": 23,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "[('more', 0.0010214881), ('training', 0.0009804588), ('continue', 0.00094650878), ('can', 0.00092195231), ('it', 0.00089841458), ('australia', 0.00077773805), ('government', 0.00076788972), ('us', 0.00076459395), ('there', 0.00075191096), ('killed', 0.00074792351)]\n"
+ "[('more', 0.001048518), ('continue', 0.00090946292), ('can', 0.00090134487), ('training', 0.00088478095), ('it', 0.00077986595), ('australia', 0.0007500046), ('there', 0.00074296352), ('government', 0.00074113585), ('could', 0.00073843176), ('or', 0.00073749834)]\n"
]
}
],
"source": [
- "print(model.predict_output_word(['emergency','beacon','received']))"
+ "print(model.predict_output_word(['emergency', 'beacon', 'received']))"
]
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"The results here don't look good because the training corpus is very small. To get meaningful results one needs to train on 500k+ words."
]
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"If you need the raw output vectors in your application, you can access these either on a word-by-word basis:"
]
@@ -997,35 +1042,31 @@
{
"cell_type": "code",
"execution_count": 24,
- "metadata": {
- "collapsed": false,
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "array([ 0.00506193, 0.0226855 , -0.02943243, -0.00850953, -0.03299763,\n",
- " -0.03874256, 0.00795013, -0.09169962, -0.01347002, -0.02357206,\n",
- " 0.02472948, -0.02463134, -0.06745216, -0.02074538, -0.02165207,\n",
- " 0.04777974, -0.02944389, -0.00209709, 0.0225853 , -0.02756712,\n",
- " -0.06757693, -0.0062337 , 0.06952298, 0.0505537 , 0.02458209,\n",
- " 0.0140616 , -0.00495757, 0.0187903 , -0.0156572 , 0.00059901,\n",
- " 0.00026355, 0.07304576, 0.00949389, -0.00331612, 0.02460947,\n",
- " 0.02132211, -0.04548595, 0.01761133, 0.01257058, -0.06949953,\n",
- " -0.07925285, 0.00565318, -0.04476747, -0.02920126, 0.03141577,\n",
- " -0.05677001, 0.0391206 , 0.0042906 , -0.01415944, 0.04051396,\n",
- " 0.01597693, 0.00671787, -0.03740353, 0.00665488, 0.01475888,\n",
- " -0.01941732, 0.05768431, -0.02920702, 0.02015296, -0.03559965,\n",
- " -0.02955742, -0.04996177, 0.01774862, -0.031699 , -0.01097541,\n",
- " -0.06637666, -0.07993821, 0.03876927, 0.05615626, -0.00116237,\n",
- " -0.01270938, 0.00813914, -0.05149486, 0.01389496, -0.04919665,\n",
- " -0.05647518, 0.03727042, -0.00600072, 0.04672569, 0.04398456,\n",
- " -0.02320013, 0.03545921, -0.01651819, 0.00087945, 0.0174842 ,\n",
- " 0.00950102, -0.09364804, -0.08258698, 0.06699577, -0.03158378,\n",
- " -0.06168535, -0.04525115, -0.04849502, -0.00481538, -0.02783764,\n",
- " -0.02939486, -0.02511807, 0.0215294 , -0.05088007, -0.00214653], dtype=float32)"
+ "array([ 0.00349002, 0.02440139, -0.02936695, -0.00849617, -0.03318483,\n",
+ " -0.0382478 , 0.00597728, -0.09292595, -0.01093712, -0.02097394,\n",
+ " 0.02088499, -0.0280605 , -0.07108893, -0.02044513, -0.02337479,\n",
+ " 0.04878484, -0.03198365, -0.00347298, 0.02429976, -0.02761379,\n",
+ " -0.06878174, -0.00695439, 0.06986855, 0.05134906, 0.03044886,\n",
+ " 0.01195826, -0.00513146, 0.02122262, -0.01519287, 0.00502698,\n",
+ " 0.00088907, 0.07702309, 0.01296635, -0.00185401, 0.02448723,\n",
+ " 0.02151101, -0.04088883, 0.01947908, 0.01428026, -0.07242644,\n",
+ " -0.08013999, 0.00214788, -0.04682875, -0.02618166, 0.03343621,\n",
+ " -0.05884593, 0.03833489, 0.00581573, -0.01099163, 0.04513358,\n",
+ " 0.01407813, 0.00823141, -0.03918071, 0.0107606 , 0.01743653,\n",
+ " -0.01885621, 0.06017725, -0.03312737, 0.02473382, -0.03686444,\n",
+ " -0.03306546, -0.05434534, 0.01816491, -0.0386038 , -0.01055549,\n",
+ " -0.06602577, -0.08695736, 0.04147927, 0.05510609, -0.00292372,\n",
+ " -0.00839636, 0.00660775, -0.04910387, 0.01182455, -0.05183903,\n",
+ " -0.05662465, 0.03827399, -0.01096484, 0.05027501, 0.04410599,\n",
+ " -0.02027577, 0.03782682, -0.01756338, 0.00167882, 0.01706443,\n",
+ " 0.00842514, -0.09443056, -0.0869148 , 0.06825797, -0.02385623,\n",
+ " -0.06005816, -0.04784475, -0.05084028, -0.00288582, -0.02646183,\n",
+ " -0.0288031 , -0.0257737 , 0.02252337, -0.05444728, 0.00016777], dtype=float32)"
]
},
"execution_count": 24,
@@ -1039,10 +1080,7 @@
},
{
"cell_type": "markdown",
- "metadata": {
- "deletable": true,
- "editable": true
- },
+ "metadata": {},
"source": [
"…or en-masse as a 2D NumPy matrix from `model.wv.syn0`.\n",
"\n",
@@ -1060,9 +1098,7 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
- "collapsed": true,
- "deletable": true,
- "editable": true
+ "collapsed": true
},
"outputs": [],
"source": []
@@ -1085,9 +1121,9 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
- "version": "2.7.6"
+ "version": "2.7.13"
}
},
"nbformat": 4,
- "nbformat_minor": 0
+ "nbformat_minor": 1
}
diff --git a/docs/src/conf.py b/docs/src/conf.py
index b0b85005e3..dafd56c42c 100644
--- a/docs/src/conf.py
+++ b/docs/src/conf.py
@@ -52,9 +52,9 @@
# built documents.
#
# The short X.Y version.
-version = '2.0'
+version = '2.1'
# The full version, including alpha/beta/rc tags.
-release = '2.0.0'
+release = '2.1.0'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff --git a/docs/src/corpora/malletcorpus.rst b/docs/src/corpora/malletcorpus.rst
index 68973dd7be..184b832dc5 100644
--- a/docs/src/corpora/malletcorpus.rst
+++ b/docs/src/corpora/malletcorpus.rst
@@ -1,5 +1,5 @@
:mod:`corpora.malletcorpus` -- Corpus in Mallet format of List-Of-Words.
-==========================================================
+========================================================================
.. automodule:: gensim.corpora.malletcorpus
:synopsis: Corpus in Mallet format of List-Of-Words.
diff --git a/docs/src/corpora/sharded_corpus.rst b/docs/src/corpora/sharded_corpus.rst
index de41ec4302..74831b11bb 100644
--- a/docs/src/corpora/sharded_corpus.rst
+++ b/docs/src/corpora/sharded_corpus.rst
@@ -1,5 +1,5 @@
:mod:`corpora.sharded_corpus` -- Corpus stored in separate files
-==========================================================
+================================================================
.. automodule:: gensim.corpora.sharded_corpus
:synopsis: Numpy arrays on disk for iterative processing
diff --git a/docs/src/models/ldaseqmodel.rst b/docs/src/models/ldaseqmodel.rst
index 321977cba0..48114f2639 100644
--- a/docs/src/models/ldaseqmodel.rst
+++ b/docs/src/models/ldaseqmodel.rst
@@ -1,5 +1,5 @@
:mod:`models.ldaseqmodel` -- Dynamic Topic Modeling in Python
-================================
+=============================================================
.. automodule:: gensim.models.ldaseqmodel
:synopsis: Dynamic Topic Modeling in Python
diff --git a/docs/src/parsing/preprocessing.rst b/docs/src/parsing/preprocessing.rst
index bc5919bd72..36a2236d07 100644
--- a/docs/src/parsing/preprocessing.rst
+++ b/docs/src/parsing/preprocessing.rst
@@ -1,5 +1,5 @@
:mod:`parsing.preprocessing` -- Functions to preprocess raw text
-=========================================================
+================================================================
.. automodule:: gensim.parsing.preprocessing
:synopsis: Functions to preprocess raw text
diff --git a/docs/src/scripts/glove2word2vec.rst b/docs/src/scripts/glove2word2vec.rst
index ef941cd2ad..792b720f71 100644
--- a/docs/src/scripts/glove2word2vec.rst
+++ b/docs/src/scripts/glove2word2vec.rst
@@ -1,5 +1,5 @@
:mod:`scripts.glove2word2vec` -- Convert glove format to word2vec
-=========================================================
+=================================================================
.. automodule:: gensim.scripts.glove2word2vec
:synopsis: Convert glove format to word2vec
diff --git a/docs/src/scripts/make_wikicorpus.rst b/docs/src/scripts/make_wikicorpus.rst
index fd504c6701..56607bd222 100644
--- a/docs/src/scripts/make_wikicorpus.rst
+++ b/docs/src/scripts/make_wikicorpus.rst
@@ -1,5 +1,5 @@
:mod:`scripts.make_wikicorpus` -- Convert articles from a Wikipedia dump to vectors.
-=========================================================
+====================================================================================
.. automodule:: gensim.scripts.make_wikicorpus
:synopsis: Convert articles from a Wikipedia dump to vectors.
diff --git a/docs/src/scripts/word2vec_standalone.rst b/docs/src/scripts/word2vec_standalone.rst
index ab85831d76..85e7505b47 100644
--- a/docs/src/scripts/word2vec_standalone.rst
+++ b/docs/src/scripts/word2vec_standalone.rst
@@ -1,5 +1,5 @@
:mod:`scripts.word2vec_standalone` -- Train word2vec on text file CORPUS
-=========================================================
+========================================================================
.. automodule:: gensim.scripts.word2vec_standalone
:synopsis: Train word2vec on text file CORPUS
diff --git a/docs/src/similarities/index.rst b/docs/src/similarities/index.rst
index a2182f8d09..169b26b740 100644
--- a/docs/src/similarities/index.rst
+++ b/docs/src/similarities/index.rst
@@ -1,5 +1,5 @@
:mod:`similarities.index` -- Fast Approximate Nearest Neighbor Similarity with Annoy package
-========================================================================
+============================================================================================
.. automodule:: gensim.similarities.index
:synopsis: Fast Approximate Nearest Neighbor Similarity with Annoy package
diff --git a/docs/src/similarities/simserver.rst b/docs/src/similarities/simserver.rst
index 82b3101fc5..86a529b1c6 100644
--- a/docs/src/similarities/simserver.rst
+++ b/docs/src/similarities/simserver.rst
@@ -1,5 +1,5 @@
:mod:`simserver` -- Document similarity server
-======================================================
+==============================================
.. automodule:: simserver.simserver
:synopsis: Document similarity server
diff --git a/docs/src/sklearn_integration/sklearn_wrapper_gensim_ldamodel.rst b/docs/src/sklearn_integration/sklearn_wrapper_gensim_ldamodel.rst
index fbef2ee278..95c100c4b1 100644
--- a/docs/src/sklearn_integration/sklearn_wrapper_gensim_ldamodel.rst
+++ b/docs/src/sklearn_integration/sklearn_wrapper_gensim_ldamodel.rst
@@ -1,5 +1,5 @@
:mod:`sklearn_integration.sklearn_wrapper_gensim_ldamodel.SklearnWrapperLdaModel` -- Scikit learn wrapper for Latent Dirichlet Allocation
-======================================================
+=========================================================================================================================================
.. automodule:: gensim.sklearn_integration.sklearn_wrapper_gensim_ldamodel.SklearnWrapperLdaModel
:synopsis: Scikit learn wrapper for LDA model
diff --git a/docs/src/summarization/keywords.rst b/docs/src/summarization/keywords.rst
index 359cdd9eac..041c5dd10b 100644
--- a/docs/src/summarization/keywords.rst
+++ b/docs/src/summarization/keywords.rst
@@ -1,5 +1,5 @@
:mod:`summarization.keywords` -- Keywords for TextRank summarization algorithm
-=========================================================
+==============================================================================
.. automodule:: gensim.summarization.keywords
:synopsis: Keywords for TextRank summarization algorithm
diff --git a/docs/src/summarization/pagerank_weighted.rst b/docs/src/summarization/pagerank_weighted.rst
index 392440ae0a..0dd9638679 100644
--- a/docs/src/summarization/pagerank_weighted.rst
+++ b/docs/src/summarization/pagerank_weighted.rst
@@ -1,5 +1,5 @@
:mod:`summarization.pagerank_weighted` -- Weighted PageRank algorithm
-=========================================================
+=====================================================================
.. automodule:: gensim.summarization.pagerank_weighted
:synopsis: Weighted PageRank algorithm
diff --git a/docs/src/summarization/syntactic_unit.rst b/docs/src/summarization/syntactic_unit.rst
index dad505db10..5e20ec5a3e 100644
--- a/docs/src/summarization/syntactic_unit.rst
+++ b/docs/src/summarization/syntactic_unit.rst
@@ -1,5 +1,5 @@
:mod:`summarization.syntactic_unit` -- Syntactic Unit class
-=========================================================
+===========================================================
.. automodule:: gensim.summarization.syntactic_unit
:synopsis: Syntactic Unit class
diff --git a/docs/src/summarization/textcleaner.rst b/docs/src/summarization/textcleaner.rst
index 8ff300423b..dddaedcbbe 100644
--- a/docs/src/summarization/textcleaner.rst
+++ b/docs/src/summarization/textcleaner.rst
@@ -1,5 +1,5 @@
:mod:`summarization.textcleaner` -- Summarization pre-processing
-=========================================================
+================================================================
.. automodule:: gensim.summarization.textcleaner
:synopsis: Summarization pre-processing
diff --git a/gensim Quick Start.ipynb b/gensim Quick Start.ipynb
new file mode 100644
index 0000000000..f725b1a37d
--- /dev/null
+++ b/gensim Quick Start.ipynb
@@ -0,0 +1,401 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " # Getting Started with `gensim`\n",
+ " \n",
+ " The goal of this tutorial is to get a new user up-and-running with `gensim`. This notebook covers the following objectives.\n",
+ " \n",
+ " ## Objectives\n",
+ " \n",
+ " * Installing `gensim`.\n",
+ " * Accessing the `gensim` Jupyter notebook tutorials.\n",
+ " * Presenting the core concepts behind the library.\n",
+ " \n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Installing `gensim`\n",
+ "\n",
+ "Before we can start using `gensim` for [natural language processing (NLP)](https://en.wikipedia.org/wiki/Natural_language_processing), you will need to install Python along with `gensim` and its dependences. It is suggested that a new user install a prepackaged python distribution and a number of popular distributions are listed below.\n",
+ "\n",
+ "* [Anaconda ](https://www.continuum.io/downloads)\n",
+ "* [EPD ](https://store.enthought.com/downloads)\n",
+ "* [WinPython ](https://winpython.github.io)\n",
+ "\n",
+ "Once Python is installed, we will use `pip` to install the `gensim` library. First, we will make sure that Python is installed and accessible from the command line. From the command line, execute the following command:\n",
+ "\n",
+ " which python\n",
+ " \n",
+ "The resulting address should correspond to the Python distribution that you installed above. Now that we have verified that we are using the correct version of Python, we can install `gensim` from the command line as follows:\n",
+ "\n",
+ " pip install -U gensim\n",
+ " \n",
+ "To verify that `gensim` was installed correctly, you can activate Python from the command line and execute `import gensim`\n",
+ "\n",
+ " $ python\n",
+ " Python 3.5.1 |Anaconda custom (x86_64)| (default, Jun 15 2016, 16:14:02)\n",
+ " [GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin\n",
+ " Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n",
+ " >>> import gensim\n",
+ " >>> # No error is a good thing\n",
+ " >>> exit()\n",
+ "\n",
+ "**Note:** Windows users that are following long should either use [Windows subsystem for Linux](https://channel9.msdn.com/events/Windows/Windows-Developer-Day-Creators-Update/Developer-tools-and-updates) or another bash implementation for Windows, such as [Git bash](https://git-for-windows.github.io/)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Accessing the `gensim` Jupyter notebooks\n",
+ "\n",
+ "All of the `gensim` tutorials (including this document) are stored in [Jupyter notebooks](http://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/what_is_jupyter.html). These notebooks allow the user to run the code locally while working through the material. If you would like to run a tutorial locally, first clone the GitHub repository for the project.\n",
+ "``` bash\n",
+ " $ git clone https://github.com/RaRe-Technologies/gensim.git\n",
+ "``` \n",
+ "Next, start a Jupyter notebook server. This is accomplished using the following bash commands (or starting the notebook server from the GUI application).\n",
+ "\n",
+ "``` bash\n",
+ " $ cd gensim\n",
+ " $ pwd\n",
+ " /Users/user1/home/gensim\n",
+ " $ cd docs/notebooks\n",
+ " $ jupyter notebook\n",
+ "``` \n",
+ "After a few moments, Jupyter will open a web page in your browser and you can access each tutorial by clicking on the corresponding link. \n",
+ "\n",
+ "\n",
+ "\n",
+ "This will open the corresponding notebook in a separate tab. The Python code in the notebook can be executed by selecting/clicking on a cell and pressing SHIFT + ENTER.\n",
+ "\n",
+ "\n",
+ "\n",
+ "**Note:** The order of cell execution matters. Be sure to run all of the code cells in order from top to bottom, you you might encounter errors."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Core Concepts and Simple Example\n",
+ "\n",
+ "This section introduces the basic concepts and terms needed to understand and use `gensim` and provides a simple usage example. In particular, we will build a model that measures the importance of a particular word.\n",
+ "\n",
+ "At a very high-level, `gensim` is a tool for discovering the semantic structure of documents by examining the patterns of words (or higher-level structures such as entire sentences or documents). `gensim` accomplishes this by taking a *corpus*, a collection of text documents, and producing a *vector* representation of the text in the corpus. The vector representation can then be used to train a *model*, which is an algorithms to create different representations of the data, which are usually more semantic. These three concepts are key to understanding how `gensim` works so let's take a moment to explain what each of them means. At the same time, we'll work through a simple example that illustrates each of them.\n",
+ "\n",
+ "### Corpus\n",
+ "\n",
+ "A *corpus* is a collection of digital documents. This collection is the input to `gensim` from which it will infer the structure of the documents, their topics, etc. The latent structure inferred from the corpus can later be used to assign topics to new documents which were not present in the training corpus. For this reason, we also refer to this collection as the *training corpus*. No human intervention (such as tagging the documents by hand) is required - the topic classification is [unsupervised](https://en.wikipedia.org/wiki/Unsupervised_learning.html).\n",
+ "\n",
+ "For our corpus, we'll use a list of 9 strings, each consisting of only a single sentence."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "raw_corpus = [\"Human machine interface for lab abc computer applications\",\n",
+ " \"A survey of user opinion of computer system response time\",\n",
+ " \"The EPS user interface management system\",\n",
+ " \"System and human system engineering testing of EPS\", \n",
+ " \"Relation of user perceived response time to error measurement\",\n",
+ " \"The generation of random binary unordered trees\",\n",
+ " \"The intersection graph of paths in trees\",\n",
+ " \"Graph minors IV Widths of trees and well quasi ordering\",\n",
+ " \"Graph minors A survey\"]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This is a particularly small example of a corpus for illustration purposes. Another example could be a list of all the plays written by Shakespeare, list of all wikipedia articles, or all tweets by a particular person of interest.\n",
+ "\n",
+ "After collecting our corpus, there are typically a number of preprocessing steps we want to undertake. We'll keep it simple and just remove some commonly used English words (such as 'the') and words that occur only once in the corpus. In the process of doing so, we'll [tokenize](https://en.wikipedia.org/wiki/Lexical_analysis#Tokenization)) our data. Tokenization breaks up the documents into words (in this case using space as a delimiter)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[['human', 'interface', 'computer'],\n",
+ " ['survey', 'user', 'computer', 'system', 'response', 'time'],\n",
+ " ['eps', 'user', 'interface', 'system'],\n",
+ " ['system', 'human', 'system', 'eps'],\n",
+ " ['user', 'response', 'time'],\n",
+ " ['trees'],\n",
+ " ['graph', 'trees'],\n",
+ " ['graph', 'minors', 'trees'],\n",
+ " ['graph', 'minors', 'survey']]"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Create a set of frequent words\n",
+ "stoplist = set('for a of the and to in'.split(' '))\n",
+ "# Lowercase each document, split it by white space and filter out stopwords\n",
+ "texts = [[word for word in document.lower().split() if word not in stoplist]\n",
+ " for document in raw_corpus]\n",
+ "\n",
+ "# Count word frequencies\n",
+ "from collections import defaultdict\n",
+ "frequency = defaultdict(int)\n",
+ "for text in texts:\n",
+ " for token in text:\n",
+ " frequency[token] += 1\n",
+ "\n",
+ "# Only keep words that appear more than once\n",
+ "processed_corpus = [[token for token in text if frequency[token] > 1] for text in texts]\n",
+ "processed_corpus"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Before proceeding, we want to associate each word in the corpus with a unique integer ID. We can do this using the `gensim.corpora.Dictionary` class. This dictionary defines the vocabulary of all words that our processing knows about."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Dictionary(12 unique tokens: [u'minors', u'graph', u'system', u'trees', u'eps']...)\n"
+ ]
+ }
+ ],
+ "source": [
+ "from gensim import corpora\n",
+ "\n",
+ "dictionary = corpora.Dictionary(processed_corpus)\n",
+ "print(dictionary)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Because our corpus is small, there is only 12 different tokens in this `Dictionary`. For larger corpuses, dictionaries that contains hundreds of thousands of tokens are quite common."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Vector\n",
+ "\n",
+ "To infer the latent structure in our corpus we need a way to represent documents that we can manipulate mathematically. One approach is to represent each document as a vector. There are various approaches for creating a vector representation of a document but a simple example is the *bag-of-words model*. Under the bag-of-words model each document is represented by a vector containing the frequency counts of each word in the dictionary. For example, given a dictionary containing the words `['coffee', 'milk', 'sugar', 'spoon']` a document consisting of the string `\"coffee milk coffee\"` could be represented by the vector `[2, 1, 0, 0]` where the entries of the vector are (in order) the occurrences of \"coffee\", \"milk\", \"sugar\" and \"spoon\" in the document. The length of the vector is the number of entries in the dictionary. One of the main properties of the bag-of-words model is that it completely ignores the order of the tokens in the document that is encoded, which is where the name bag-of-words comes from.\n",
+ "\n",
+ "Our processed corpus has 12 unique words in it, which means that each document will be represented by a 12-dimensional vector under the bag-of-words model. We can use the dictionary to turn tokenized documents into these 12-dimensional vectors. We can see what these IDs correspond to:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{u'minors': 11, u'graph': 10, u'system': 6, u'trees': 9, u'eps': 8, u'computer': 1, u'survey': 5, u'user': 7, u'human': 2, u'time': 4, u'interface': 0, u'response': 3}\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(dictionary.token2id)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "For example, suppose we wanted to vectorize the phrase \"Human computer interaction\" (note that this phrase was not in our original corpus). We can create the bag-of-word representation for a document using the `doc2bow` method of the dictionary, which returns a sparse representation of the word counts:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[(1, 1), (2, 1)]"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "new_doc = \"Human computer interaction\"\n",
+ "new_vec = dictionary.doc2bow(new_doc.lower().split())\n",
+ "new_vec"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The first entry in each tuple corresponds to the ID of the token in the dictionary, the second corresponds to the count of this token."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Note that \"interaction\" did not occur in the original corpus and so it was not included in the vectorization. Also note that this vector only contains entries for words that actually appeared in the document. Because any given document will only contain a few words out of the many words in the dictionary, words that do not appear in the vectorization are represented as implicitly zero as a space saving measure.\n",
+ "\n",
+ "We can convert our entire original corpus to a list of vectors:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[[(0, 1), (1, 1), (2, 1)],\n",
+ " [(1, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1)],\n",
+ " [(0, 1), (6, 1), (7, 1), (8, 1)],\n",
+ " [(2, 1), (6, 2), (8, 1)],\n",
+ " [(3, 1), (4, 1), (7, 1)],\n",
+ " [(9, 1)],\n",
+ " [(9, 1), (10, 1)],\n",
+ " [(9, 1), (10, 1), (11, 1)],\n",
+ " [(5, 1), (10, 1), (11, 1)]]"
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "bow_corpus = [dictionary.doc2bow(text) for text in processed_corpus]\n",
+ "bow_corpus"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Note that while this list lives entirely in memory, in most applications you will want a more scalable solution. Luckily, `gensim` allows you to use any iterator that returns a single document vector at a time. See the documentation for more details.\n",
+ "\n",
+ "### Model\n",
+ "\n",
+ "Now that we have vectorized our corpus we can begin to transform it using *models*. We use model as an abstract term referring to a transformation from one document representation to another. In `gensim`, documents are represented as vectors so a model can be thought of as a transformation between two [vector spaces](https://en.wikipedia.org/wiki/Vector_space). The details of this transformation are learned from the training corpus.\n",
+ "\n",
+ "One simple example of a model is [tf-idf](https://en.wikipedia.org/wiki/Tf%E2%80%93idf). The tf-idf model transforms vectors from the bag-of-words representation to a vector space, where the frequency counts are weighted according to the relative rarity of each word in the corpus.\n",
+ "\n",
+ "Here's a simple example. Let's initialize the tf-idf model, training it on our corpus and transforming the string \"system minors\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[(6, 0.5898341626740045), (11, 0.8075244024440723)]"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from gensim import models\n",
+ "# train the model\n",
+ "tfidf = models.TfidfModel(bow_corpus)\n",
+ "# transform the \"system minors\" string\n",
+ "tfidf[dictionary.doc2bow(\"system minors\".lower().split())]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The `tfidf` model again returns a list of tuples, where the first entry is the token ID and the second entry is the tf-idf weighting. Note that the ID corresponding to \"system\" (which occurred 4 times in the original corpus) has been weighted lower than the ID corresponding to \"minors\" (which only occurred twice).\n",
+ "\n",
+ "`gensim` offers a number of different models/transformations. See [Transformations and Topics](https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/Topics_and_Transformations.ipynb) for details."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Next Steps\n",
+ "\n",
+ "Interested in learning more about `gensim`? Please read through the following notebooks.\n",
+ "\n",
+ "1. [Corpora_and_Vector_Spaces.ipynb](https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/Corpora_and_Vector_Spaces.ipynb)\n",
+ "2. [word2vec.ipynb](https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/word2vec.ipynb)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python [Root]",
+ "language": "python",
+ "name": "Python [Root]"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.5.1"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/gensim/__init__.py b/gensim/__init__.py
index 88e2e391f7..1999fc72ce 100644
--- a/gensim/__init__.py
+++ b/gensim/__init__.py
@@ -6,7 +6,7 @@
from gensim import parsing, matutils, interfaces, corpora, models, similarities, summarization
import logging
-__version__ = '2.0.0'
+__version__ = '2.1.0'
class NullHandler(logging.Handler):
"""For python versions <= 2.6; same as `logging.NullHandler` in 2.7."""
diff --git a/gensim/corpora/dictionary.py b/gensim/corpora/dictionary.py
index 484684c26d..1ff89a5b31 100644
--- a/gensim/corpora/dictionary.py
+++ b/gensim/corpora/dictionary.py
@@ -194,9 +194,11 @@ def filter_extremes(self, no_below=5, no_above=0.5, keep_n=100000, keep_tokens=N
# determine which tokens to keep
if keep_tokens:
keep_ids = [self.token2id[v] for v in keep_tokens if v in self.token2id]
- good_ids = (v for v in itervalues(self.token2id)
- if no_below <= self.dfs.get(v, 0) <= no_above_abs
- or v in keep_ids)
+ good_ids = (
+ v for v in itervalues(self.token2id)
+ if no_below <= self.dfs.get(v, 0) <= no_above_abs
+ or v in keep_ids
+ )
else:
good_ids = (
v for v in itervalues(self.token2id)
diff --git a/gensim/corpora/wikicorpus.py b/gensim/corpora/wikicorpus.py
index fb402da517..f5f30281eb 100755
--- a/gensim/corpora/wikicorpus.py
+++ b/gensim/corpora/wikicorpus.py
@@ -173,7 +173,7 @@ def tokenize(content):
"""
# TODO maybe ignore tokens with non-latin characters? (no chinese, arabic, russian etc.)
return [
- token.encode('utf8') for token in utils.tokenize(content, lower=True, errors='ignore')
+ utils.to_unicode(token) for token in utils.tokenize(content, lower=True, errors='ignore')
if 2 <= len(token) <= 15 and not token.startswith('_')
]
diff --git a/gensim/matutils.py b/gensim/matutils.py
index 93c750efd8..057e65a52f 100644
--- a/gensim/matutils.py
+++ b/gensim/matutils.py
@@ -532,6 +532,19 @@ def jaccard(vec1, vec2):
return 1 - float(len(intersection)) / float(len(union))
+def jaccard_distance(set1, set2):
+ """
+ Calculate a distance between set representation (1 minus the intersection divided by union).
+ Return a value in range <0, 1> where values closer to 0 mean smaller distance and thus higher similarity.
+ """
+
+ union_cardinality = len(set1 | set2)
+ if union_cardinality == 0: # Both sets are empty
+ return 1.
+
+ return 1. - float(len(set1 & set2)) / float(union_cardinality)
+
+
def dirichlet_expectation(alpha):
"""
For a vector `theta~Dir(alpha)`, compute `E[log(theta)]`.
diff --git a/gensim/models/doc2vec.py b/gensim/models/doc2vec.py
index e57945ce67..da1f5d01a8 100644
--- a/gensim/models/doc2vec.py
+++ b/gensim/models/doc2vec.py
@@ -580,7 +580,7 @@ def __init__(self, documents=None, dm_mean=None,
need about 1GB of RAM. Set to `None` for no limit (default).
`sample` = threshold for configuring which higher-frequency words are randomly downsampled;
- default is 0 (off), useful value is 1e-5.
+ default is 1e-3, useful value is 1e-5.
`workers` = use this many worker threads to train the model (=faster training with multicore machines).
@@ -597,7 +597,7 @@ def __init__(self, documents=None, dm_mean=None,
`dm_concat` = if 1, use concatenation of context vectors rather than sum/average;
default is 0 (off). Note concatenation results in a much-larger model, as the input
- is no longer the size of one (sampled or arithmatically combined) word vector, but the
+ is no longer the size of one (sampled or arithmetically combined) word vector, but the
size of the tag(s) and all words in the context strung together.
`dm_tag_count` = expected constant number of document tags per document, when using
@@ -614,9 +614,13 @@ def __init__(self, documents=None, dm_mean=None,
of the model.
"""
+ if 'sentences' in kwargs:
+ raise DeprecationWarning("'sentences' in doc2vec was renamed to 'documents'. Please use documents parameter.")
+
super(Doc2Vec, self).__init__(
sg=(1 + dm) % 2,
- null_word=dm_concat, **kwargs)
+ null_word=dm_concat,
+ **kwargs)
self.load = call_on_class_only
diff --git a/gensim/models/hdpmodel.py b/gensim/models/hdpmodel.py
index 2c74d15a15..6937d928d4 100755
--- a/gensim/models/hdpmodel.py
+++ b/gensim/models/hdpmodel.py
@@ -33,7 +33,9 @@
from __future__ import with_statement
-import logging, time
+import logging
+import time
+import warnings
import numpy as np
from scipy.special import gammaln, psi # gamma function utils
@@ -47,7 +49,6 @@
meanchangethresh = 0.00001
rhot_bound = 0.0
-
def expect_log_sticks(sticks):
"""
For stick-breaking hdp, return the E[log(sticks)]
@@ -436,7 +437,7 @@ def update_expectations(self):
self.m_timestamp[:] = self.m_updatect
self.m_status_up_to_date = True
- def show_topic(self, topic_id, num_words=20, log=False, formatted=False):
+ def show_topic(self, topic_id, topn=20, log=False, formatted=False, num_words=None):
"""
Print the `num_words` most probable words for topic `topic_id`.
@@ -444,12 +445,17 @@ def show_topic(self, topic_id, num_words=20, log=False, formatted=False):
`False` as lists of (weight, word) pairs.
"""
+ if num_words is not None: # deprecated num_words is used
+ logger.warning("The parameter num_words for show_topic() would be deprecated in the updated version.")
+ logger.warning("Please use topn instead.")
+ topn = num_words
+
if not self.m_status_up_to_date:
self.update_expectations()
betas = self.m_lambda + self.m_eta
hdp_formatter = HdpTopicFormatter(self.id2word, betas)
- return hdp_formatter.show_topic(topic_id, num_words, log, formatted)
-
+ return hdp_formatter.show_topic(topic_id, topn, log, formatted)
+
def show_topics(self, num_topics=20, num_words=20, log=False, formatted=True):
"""
Print the `num_words` most probable words for `num_topics` number of topics.
@@ -608,10 +614,17 @@ def show_topics(self, num_topics=10, num_words=10, log=False, formatted=True):
return shown
- def print_topic(self, topic_id, num_words):
- return self.show_topic(topic_id, num_words, formatted=True)
+ def print_topic(self, topic_id, topn= None, num_words=None):
+ if num_words is not None: # deprecated num_words is used
+ warnings.warn("The parameter num_words for print_topic() would be deprecated in the updated version. Please use topn instead.")
+ topn = num_words
+
+ return self.show_topic(topic_id, topn, formatted=True)
- def show_topic(self, topic_id, num_words, log=False, formatted=False):
+ def show_topic(self, topic_id, topn=20, log=False, formatted=False, num_words= None,):
+ if num_words is not None: # deprecated num_words is used
+ warnings.warn("The parameter num_words for show_topic() would be deprecated in the updated version. Please use topn instead.")
+ topn = num_words
lambdak = list(self.data[topic_id, :])
lambdak = lambdak / sum(lambdak)
@@ -619,7 +632,7 @@ def show_topic(self, topic_id, num_words, log=False, formatted=False):
temp = zip(lambdak, xrange(len(lambdak)))
temp = sorted(temp, key=lambda x: x[0], reverse=True)
- topic_terms = self.show_topic_terms(temp, num_words)
+ topic_terms = self.show_topic_terms(temp, topn)
if formatted:
topic = self.format_topic(topic_id, topic_terms)
diff --git a/gensim/models/keyedvectors.py b/gensim/models/keyedvectors.py
index 4d187bd7dd..e55e553d43 100644
--- a/gensim/models/keyedvectors.py
+++ b/gensim/models/keyedvectors.py
@@ -21,7 +21,7 @@
The vectors can also be instantiated from an existing file on disk in the original Google's word2vec C format as a KeyedVectors instance::
- >>> from gensim.keyedvectors import KeyedVectors
+ >>> from gensim.models.keyedvectors import KeyedVectors
>>> word_vectors = KeyedVectors.load_word2vec_format('/tmp/vectors.txt', binary=False) # C text format
>>> word_vectors = KeyedVectors.load_word2vec_format('/tmp/vectors.bin', binary=True) # C binary format
diff --git a/gensim/models/ldamodel.py b/gensim/models/ldamodel.py
index 67398ab099..77f7e68be9 100755
--- a/gensim/models/ldamodel.py
+++ b/gensim/models/ldamodel.py
@@ -33,11 +33,13 @@
import logging
import numpy as np
import numbers
+from random import sample
import os
from gensim import interfaces, utils, matutils
from gensim.matutils import dirichlet_expectation
from gensim.models import basemodel
+from gensim.matutils import kullback_leibler, hellinger, jaccard_distance
from itertools import chain
from scipy.special import gammaln, psi # gamma function utils
@@ -965,6 +967,74 @@ def get_term_topics(self, word_id, minimum_probability=None):
return values
+ def diff(self, other, distance="kulback_leibler", num_words=100, n_ann_terms=10, normed=True):
+ """
+ Calculate difference topic2topic between two Lda models
+ `other` instances of `LdaMulticore` or `LdaModel`
+ `distance` is function that will be applied to calculate difference between any topic pair.
+ Available values: `kulback_leibler`, `hellinger` and `jaccard`
+ `num_words` is quantity of most relevant words that used if distance == `jaccard` (also used for annotation)
+ `n_ann_terms` is max quantity of words in intersection/symmetric difference between topics (used for annotation)
+ Returns a matrix Z with shape (m1.num_topics, m2.num_topics), where Z[i][j] - difference between topic_i and topic_j
+ and matrix annotation with shape (m1.num_topics, m2.num_topics, 2, None),
+ where
+ annotation[i][j] = [[`int_1`, `int_2`, ...], [`diff_1`, `diff_2`, ...]] and
+ `int_k` is word from intersection of `topic_i` and `topic_j` and
+ `diff_l` is word from symmetric difference of `topic_i` and `topic_j`
+ `normed` is a flag. If `true`, matrix Z will be normalized
+ Example:
+ >>> m1, m2 = LdaMulticore.load(path_1), LdaMulticore.load(path_2)
+ >>> mdiff, annotation = m1.diff(m2)
+ >>> print(mdiff) # get matrix with difference for each topic pair from `m1` and `m2`
+ >>> print(annotation) # get array with positive/negative words for each topic pair from `m1` and `m2`
+ """
+
+ distances = {
+ "kulback_leibler": kullback_leibler,
+ "hellinger": hellinger,
+ "jaccard": jaccard_distance,
+ }
+
+ if distance not in distances:
+ valid_keys = ", ".join("`{}`".format(x) for x in distances.keys())
+ raise ValueError("Incorrect distance, valid only {}".format(valid_keys))
+
+ if not isinstance(other, self.__class__):
+ raise ValueError("The parameter `other` must be of type `{}`".format(self.__name__))
+
+ distance_func = distances[distance]
+ d1, d2 = self.state.get_lambda(), other.state.get_lambda()
+ t1_size, t2_size = d1.shape[0], d2.shape[0]
+
+ fst_topics = [{w for (w, _) in self.show_topic(topic, topn=num_words)} for topic in xrange(t1_size)]
+ snd_topics = [{w for (w, _) in other.show_topic(topic, topn=num_words)} for topic in xrange(t2_size)]
+
+ if distance == "jaccard":
+ d1, d2 = fst_topics, snd_topics
+
+ z = np.zeros((t1_size, t2_size))
+ for topic1 in range(t1_size):
+ for topic2 in range(t2_size):
+ z[topic1][topic2] = distance_func(d1[topic1], d2[topic2])
+
+ if normed:
+ if np.abs(np.max(z)) > 1e-8:
+ z /= np.max(z)
+
+ annotation = [[None] * t1_size for _ in range(t2_size)]
+
+ for topic1 in range(t1_size):
+ for topic2 in range(t2_size):
+ pos_tokens = fst_topics[topic1] & snd_topics[topic2]
+ neg_tokens = fst_topics[topic1].symmetric_difference(snd_topics[topic2])
+
+ pos_tokens = sample(pos_tokens, min(len(pos_tokens), n_ann_terms))
+ neg_tokens = sample(neg_tokens, min(len(neg_tokens), n_ann_terms))
+
+ annotation[topic1][topic2] = [pos_tokens, neg_tokens]
+
+ return z, annotation
+
def __getitem__(self, bow, eps=None):
"""
Return topic distribution for the given document `bow`, as a list of
@@ -1023,9 +1093,9 @@ def save(self, fname, ignore=['state', 'dispatcher'], separately=None, *args, **
separately_explicit = ['expElogbeta', 'sstats']
# Also add 'alpha' and 'eta' to separately list if they are set 'auto' or some
# array manually.
- if (isinstance(self.alpha, six.string_types) and self.alpha == 'auto') or len(self.alpha.shape) != 1:
+ if (isinstance(self.alpha, six.string_types) and self.alpha == 'auto') or (isinstance(self.alpha, np.ndarray) and len(self.alpha.shape) != 1):
separately_explicit.append('alpha')
- if (isinstance(self.eta, six.string_types) and self.eta == 'auto') or len(self.eta.shape) != 1:
+ if (isinstance(self.eta, six.string_types) and self.eta == 'auto') or (isinstance(self.eta, np.ndarray) and len(self.eta.shape) != 1):
separately_explicit.append('eta')
# Merge separately_explicit with separately.
if separately:
@@ -1049,18 +1119,28 @@ def load(cls, fname, *args, **kwargs):
"""
kwargs['mmap'] = kwargs.get('mmap', None)
result = super(LdaModel, cls).load(fname, *args, **kwargs)
+
+ # check if `random_state` attribute has been set after main pickle load
+ # if set -> the model to be loaded was saved using a >= 0.13.2 version of Gensim
+ # if not set -> the model to be loaded was saved using a < 0.13.2 version of Gensim, so set `random_state` as the default value
+ if not hasattr(result, 'random_state'):
+ result.random_state = utils.get_random_state(None) # using default value `get_random_state(None)`
+ logging.warning("random_state not set so using default value")
+
state_fname = utils.smart_extension(fname, '.state')
try:
result.state = super(LdaModel, cls).load(state_fname, *args, **kwargs)
except Exception as e:
logging.warning("failed to load state from %s: %s", state_fname, e)
+
id2word_fname = utils.smart_extension(fname, '.id2word')
+ # check if `id2word_fname` file is present on disk
+ # if present -> the model to be loaded was saved using a >= 0.13.2 version of Gensim, so set `result.id2word` using the `id2word_fname` file
+ # if not present -> the model to be loaded was saved using a < 0.13.2 version of Gensim, so `result.id2word` already set after the main pickle load
if (os.path.isfile(id2word_fname)):
try:
result.id2word = utils.unpickle(id2word_fname)
except Exception as e:
logging.warning("failed to load id2word dictionary from %s: %s", id2word_fname, e)
- else:
- result.id2word = None
return result
# endclass LdaModel
diff --git a/gensim/models/phrases.py b/gensim/models/phrases.py
index 46e915af17..be735b865a 100644
--- a/gensim/models/phrases.py
+++ b/gensim/models/phrases.py
@@ -250,7 +250,7 @@ def export_phrases(self, sentences, out_delimiter=b' ', as_tuples=False):
yield (out_delimiter.join((word_a, word_b)), score)
last_bigram = True
continue
- last_bigram = False
+ last_bigram = False
def __getitem__(self, sentence):
"""
diff --git a/gensim/models/tfidfmodel.py b/gensim/models/tfidfmodel.py
index 592cc9537c..1b4aea863b 100644
--- a/gensim/models/tfidfmodel.py
+++ b/gensim/models/tfidfmodel.py
@@ -28,8 +28,7 @@ def precompute_idfs(wglobal, dfs, total_docs):
"""Precompute the inverse document frequency mapping for all terms."""
# not strictly necessary and could be computed on the fly in TfidfModel__getitem__.
# this method is here just to speed things up a little.
- return dict((termid, wglobal(df, total_docs))
- for termid, df in iteritems(dfs))
+ return dict((termid, wglobal(df, total_docs)) for termid, df in iteritems(dfs))
class TfidfModel(interfaces.TransformationABC):
@@ -49,8 +48,9 @@ class TfidfModel(interfaces.TransformationABC):
Model persistency is achieved via its load/save methods.
"""
- def __init__(self, corpus=None, id2word=None, dictionary=None,
- wlocal=utils.identity, wglobal=df2idf, normalize=True):
+ def __init__(
+ self, corpus=None, id2word=None, dictionary=None,
+ wlocal=utils.identity, wglobal=df2idf, normalize=True):
"""
Compute tf-idf by multiplying a local component (term frequency) with a
global component (inverse document frequency), and normalizing
@@ -87,11 +87,13 @@ def __init__(self, corpus=None, id2word=None, dictionary=None,
# statistics we need to construct the IDF mapping. we can skip the
# step that goes through the corpus (= an optimization).
if corpus is not None:
- logger.warning("constructor received both corpus and explicit "
- "inverse document frequencies; ignoring the corpus")
+ logger.warning(
+ "constructor received both corpus and explicit inverse document frequencies; ignoring the corpus")
self.num_docs, self.num_nnz = dictionary.num_docs, dictionary.num_nnz
self.dfs = dictionary.dfs.copy()
self.idfs = precompute_idfs(self.wglobal, self.dfs, self.num_docs)
+ if id2word is None:
+ self.id2word = dictionary
elif corpus is not None:
self.initialize(corpus)
else:
@@ -114,7 +116,7 @@ def initialize(self, corpus):
numnnz, docno = 0, -1
for docno, bow in enumerate(corpus):
if docno % 10000 == 0:
- logger.info("PROGRESS: processing document #%i" % docno)
+ logger.info("PROGRESS: processing document #%i", docno)
numnnz += len(bow)
for termid, _ in bow:
dfs[termid] = dfs.get(termid, 0) + 1
@@ -126,8 +128,9 @@ def initialize(self, corpus):
# and finally compute the idf weights
n_features = max(dfs) if dfs else 0
- logger.info("calculating IDF weights for %i documents and %i features (%i matrix non-zeros)" %
- (self.num_docs, n_features, self.num_nnz))
+ logger.info(
+ "calculating IDF weights for %i documents and %i features (%i matrix non-zeros)",
+ self.num_docs, n_features, self.num_nnz)
self.idfs = precompute_idfs(self.wglobal, self.dfs, self.num_docs)
@@ -142,8 +145,10 @@ def __getitem__(self, bow, eps=1e-12):
# unknown (new) terms will be given zero weight (NOT infinity/huge weight,
# as strict application of the IDF formula would dictate)
- vector = [(termid, self.wlocal(tf) * self.idfs.get(termid))
- for termid, tf in bow if self.idfs.get(termid, 0.0) != 0.0]
+ vector = [
+ (termid, self.wlocal(tf) * self.idfs.get(termid))
+ for termid, tf in bow if self.idfs.get(termid, 0.0) != 0.0
+ ]
# and finally, normalize the vector either to unit length, or use a
# user-defined normalization function
diff --git a/gensim/models/word2vec.py b/gensim/models/word2vec.py
index aaa15660a1..85aeefe173 100644
--- a/gensim/models/word2vec.py
+++ b/gensim/models/word2vec.py
@@ -205,7 +205,6 @@ def score_sentence_sg(model, sentence, work=None):
will use the optimized version from word2vec_inner instead.
"""
-
log_prob_sentence = 0.0
if model.negative:
raise RuntimeError("scoring is only available for HS=True")
@@ -483,7 +482,6 @@ def __init__(
logger.warning("The rule, if given, is only used to prune vocabulary during build_vocab() and is not stored as part of the model. ")
logger.warning("Model initialized without sentences. trim_rule provided, if any, will be ignored." )
-
def initialize_word_vectors(self):
self.wv = KeyedVectors()
@@ -1208,7 +1206,6 @@ def most_similar(self, positive=[], negative=[], topn=10, restrict_vocab=None, i
Deprecated. Use self.wv.most_similar() instead.
Refer to the documentation for `gensim.models.KeyedVectors.most_similar`
"""
-
return self.wv.most_similar(positive, negative, topn, restrict_vocab, indexer)
def wmdistance(self, document1, document2):
@@ -1216,7 +1213,6 @@ def wmdistance(self, document1, document2):
Deprecated. Use self.wv.wmdistance() instead.
Refer to the documentation for `gensim.models.KeyedVectors.wmdistance`
"""
-
return self.wv.wmdistance(document1, document2)
def most_similar_cosmul(self, positive=[], negative=[], topn=10):
@@ -1224,7 +1220,6 @@ def most_similar_cosmul(self, positive=[], negative=[], topn=10):
Deprecated. Use self.wv.most_similar_cosmul() instead.
Refer to the documentation for `gensim.models.KeyedVectors.most_similar_cosmul`
"""
-
return self.wv.most_similar_cosmul(positive, negative, topn)
def similar_by_word(self, word, topn=10, restrict_vocab=None):
@@ -1232,7 +1227,6 @@ def similar_by_word(self, word, topn=10, restrict_vocab=None):
Deprecated. Use self.wv.similar_by_word() instead.
Refer to the documentation for `gensim.models.KeyedVectors.similar_by_word`
"""
-
return self.wv.similar_by_word(word, topn, restrict_vocab)
def similar_by_vector(self, vector, topn=10, restrict_vocab=None):
@@ -1240,7 +1234,6 @@ def similar_by_vector(self, vector, topn=10, restrict_vocab=None):
Deprecated. Use self.wv.similar_by_vector() instead.
Refer to the documentation for `gensim.models.KeyedVectors.similar_by_vector`
"""
-
return self.wv.similar_by_vector(vector, topn, restrict_vocab)
def doesnt_match(self, words):
@@ -1248,7 +1241,6 @@ def doesnt_match(self, words):
Deprecated. Use self.wv.doesnt_match() instead.
Refer to the documentation for `gensim.models.KeyedVectors.doesnt_match`
"""
-
return self.wv.doesnt_match(words)
def __getitem__(self, words):
@@ -1256,7 +1248,6 @@ def __getitem__(self, words):
Deprecated. Use self.wv.__getitem__() instead.
Refer to the documentation for `gensim.models.KeyedVectors.__getitem__`
"""
-
return self.wv.__getitem__(words)
def __contains__(self, word):
@@ -1264,7 +1255,6 @@ def __contains__(self, word):
Deprecated. Use self.wv.__contains__() instead.
Refer to the documentation for `gensim.models.KeyedVectors.__contains__`
"""
-
return self.wv.__contains__(word)
def similarity(self, w1, w2):
@@ -1272,7 +1262,6 @@ def similarity(self, w1, w2):
Deprecated. Use self.wv.similarity() instead.
Refer to the documentation for `gensim.models.KeyedVectors.similarity`
"""
-
return self.wv.similarity(w1, w2)
def n_similarity(self, ws1, ws2):
@@ -1280,7 +1269,6 @@ def n_similarity(self, ws1, ws2):
Deprecated. Use self.wv.n_similarity() instead.
Refer to the documentation for `gensim.models.KeyedVectors.n_similarity`
"""
-
return self.wv.n_similarity(ws1, ws2)
def predict_output_word(self, context_words_list, topn=10):
@@ -1347,7 +1335,6 @@ def log_evaluate_word_pairs(pearson, spearman, oov, pairs):
Deprecated. Use self.wv.log_evaluate_word_pairs() instead.
Refer to the documentation for `gensim.models.KeyedVectors.log_evaluate_word_pairs`
"""
-
return KeyedVectors.log_evaluate_word_pairs(pearson, spearman, oov, pairs)
def evaluate_word_pairs(self, pairs, delimiter='\t', restrict_vocab=300000, case_insensitive=True, dummy4unknown=False):
@@ -1355,7 +1342,6 @@ def evaluate_word_pairs(self, pairs, delimiter='\t', restrict_vocab=300000, case
Deprecated. Use self.wv.evaluate_word_pairs() instead.
Refer to the documentation for `gensim.models.KeyedVectors.evaluate_word_pairs`
"""
-
return self.wv.evaluate_word_pairs(pairs, delimiter, restrict_vocab, case_insensitive, dummy4unknown)
def __str__(self):
diff --git a/gensim/models/wrappers/dtmmodel.py b/gensim/models/wrappers/dtmmodel.py
index a953ce858a..94a2e5eb1a 100644
--- a/gensim/models/wrappers/dtmmodel.py
+++ b/gensim/models/wrappers/dtmmodel.py
@@ -22,6 +22,7 @@
import logging
import random
+import warnings
import tempfile
import os
from subprocess import PIPE
@@ -93,7 +94,7 @@ def __init__(
lencorpus = sum(1 for _ in corpus)
if lencorpus == 0:
raise ValueError("cannot compute DTM over an empty corpus")
- if model == "fixed" and any([i == 0 for i in [len(text) for text in corpus.get_texts()]]):
+ if model == "fixed" and any(not text for text in corpus):
raise ValueError("""There is a text without words in the input corpus.
This breaks method='fixed' (The DIM model).""")
if lencorpus != sum(time_slices):
@@ -283,12 +284,17 @@ def show_topics(self, num_topics=10, times=5, num_words=10, log=False, formatted
# topic))
return shown
- def show_topic(self, topicid, time, num_words=50):
+ def show_topic(self, topicid, time, topn=50, num_words=None):
"""
Return `num_words` most probable words for the given `topicid`, as a list of
`(word_probability, word)` 2-tuples.
"""
+ if num_words is not None: # deprecated num_words is used
+ logger.warning("The parameter num_words for show_topic() would be deprecated in the updated version.")
+ logger.warning("Please use topn instead.")
+ topn = num_words
+
topics = self.lambda_[:, :, time]
topic = topics[topicid]
# liklihood to probability
@@ -296,13 +302,17 @@ def show_topic(self, topicid, time, num_words=50):
# normalize to probability dist
topic = topic / topic.sum()
# sort according to prob
- bestn = matutils.argsort(topic, num_words, reverse=True)
+ bestn = matutils.argsort(topic, topn, reverse=True)
beststr = [(topic[id], self.id2word[id]) for id in bestn]
return beststr
- def print_topic(self, topicid, time, num_words=10):
+ def print_topic(self, topicid, time, topn=10, num_words=None):
"""Return the given topic, formatted as a string."""
- return ' + '.join(['%.3f*%s' % v for v in self.show_topic(topicid, time, num_words)])
+ if num_words is not None: # deprecated num_words is used
+ warnings.warn("The parameter num_words for print_topic() would be deprecated in the updated version. Please use topn instead.")
+ topn = num_words
+
+ return ' + '.join(['%.3f*%s' % v for v in self.show_topic(topicid, time, topn)])
def dtm_vis(self, corpus, time):
"""
diff --git a/gensim/models/wrappers/fasttext.py b/gensim/models/wrappers/fasttext.py
index 771c09b3de..926e994eaf 100644
--- a/gensim/models/wrappers/fasttext.py
+++ b/gensim/models/wrappers/fasttext.py
@@ -42,6 +42,8 @@
logger = logging.getLogger(__name__)
+FASTTEXT_FILEFORMAT_MAGIC = 793712314
+
class FastTextKeyedVectors(KeyedVectors):
"""
@@ -257,7 +259,15 @@ def load_binary_data(self, model_binary_file, encoding='utf8'):
self.load_vectors(f)
def load_model_params(self, file_handle):
- (dim, ws, epoch, minCount, neg, _, loss, model, bucket, minn, maxn, _, t) = self.struct_unpack(file_handle, '@12i1d')
+ magic, version = self.struct_unpack(file_handle, '@2i')
+ if magic == FASTTEXT_FILEFORMAT_MAGIC: # newer format
+ self.new_format = True
+ dim, ws, epoch, minCount, neg, _, loss, model, bucket, minn, maxn, _, t = self.struct_unpack(file_handle, '@12i1d')
+ else: # older format
+ self.new_format = False
+ dim = magic
+ ws = version
+ epoch, minCount, neg, _, loss, model, bucket, minn, maxn, _, t = self.struct_unpack(file_handle, '@10i1d')
# Parameters stored by [Args::save](https://github.com/facebookresearch/fastText/blob/master/src/args.cc)
self.vector_size = dim
self.window = ws
@@ -272,11 +282,13 @@ def load_model_params(self, file_handle):
self.sample = t
def load_dict(self, file_handle, encoding='utf8'):
- (vocab_size, nwords, _) = self.struct_unpack(file_handle, '@3i')
+ vocab_size, nwords, _ = self.struct_unpack(file_handle, '@3i')
# Vocab stored by [Dictionary::save](https://github.com/facebookresearch/fastText/blob/master/src/dictionary.cc)
assert len(self.wv.vocab) == nwords, 'mismatch between vocab sizes'
assert len(self.wv.vocab) == vocab_size, 'mismatch between vocab sizes'
- ntokens, = self.struct_unpack(file_handle, '@q')
+ self.struct_unpack(file_handle, '@1q') # number of tokens
+ if self.new_format:
+ pruneidx_size, = self.struct_unpack(file_handle, '@q')
for i in range(nwords):
word_bytes = b''
char_byte = file_handle.read(1)
@@ -285,12 +297,17 @@ def load_dict(self, file_handle, encoding='utf8'):
word_bytes += char_byte
char_byte = file_handle.read(1)
word = word_bytes.decode(encoding)
- count, _ = self.struct_unpack(file_handle, '@ib')
- _ = self.struct_unpack(file_handle, '@i')
+ count, _ = self.struct_unpack(file_handle, '@qb')
assert self.wv.vocab[word].index == i, 'mismatch between gensim word index and fastText word index'
self.wv.vocab[word].count = count
+ if self.new_format:
+ for j in range(pruneidx_size):
+ self.struct_unpack(file_handle, '@2i')
+
def load_vectors(self, file_handle):
+ if self.new_format:
+ self.struct_unpack(file_handle, '@?') # bool quant_input in fasttext.cc
num_vectors, dim = self.struct_unpack(file_handle, '@2q')
# Vectors stored by [Matrix::save](https://github.com/facebookresearch/fastText/blob/master/src/matrix.cc)
assert self.vector_size == dim, 'mismatch between model sizes'
diff --git a/gensim/models/wrappers/ldamallet.py b/gensim/models/wrappers/ldamallet.py
index fb9ae1e31d..640cf11dd8 100644
--- a/gensim/models/wrappers/ldamallet.py
+++ b/gensim/models/wrappers/ldamallet.py
@@ -43,7 +43,7 @@
from smart_open import smart_open
from gensim import utils, matutils
-from gensim.utils import check_output
+from gensim.utils import check_output, revdict
from gensim.models.ldamodel import LdaModel
from gensim.models import basemodel
@@ -190,7 +190,7 @@ def load_word_topics(self):
if hasattr(self.id2word, 'token2id'):
word2id = self.id2word.token2id
else:
- word2id = dict((v, k) for k, v in iteritems(self.id2word))
+ word2id = revdict(self.id2word)
with utils.smart_open(self.fstate()) as fin:
_ = next(fin) # header
@@ -240,14 +240,19 @@ def show_topics(self, num_topics=10, num_words=10, log=False, formatted=True):
logger.info("topic #%i (%.3f): %s", i, self.alpha[i], topic)
return shown
- def show_topic(self, topicid, num_words=10):
+ def show_topic(self, topicid, topn=10, num_words=None):
+ if num_words is not None: # deprecated num_words is used
+ logger.warning("The parameter num_words for show_topic() would be deprecated in the updated version.")
+ logger.warning("Please use topn instead.")
+ topn = num_words
+
if self.word_topics is None:
logger.warning(
"Run train or load_word_topics before showing topics."
)
topic = self.word_topics[topicid]
topic = topic / topic.sum() # normalize to probability dist
- bestn = matutils.argsort(topic, num_words, reverse=True)
+ bestn = matutils.argsort(topic, topn, reverse=True)
beststr = [(self.id2word[id], topic[id]) for id in bestn]
return beststr
diff --git a/gensim/models/wrappers/wordrank.py b/gensim/models/wrappers/wordrank.py
index e691a6b757..efeb020199 100644
--- a/gensim/models/wrappers/wordrank.py
+++ b/gensim/models/wrappers/wordrank.py
@@ -8,7 +8,7 @@
`Word2Vec` for that.
Example:
->>> model = gensim.models.wrappers.Wordrank('/Users/dummy/wordrank', corpus_file='text8', out_path='wr_model')
+>>> model = gensim.models.wrappers.Wordrank('/Users/dummy/wordrank', corpus_file='text8', out_name='wr_model')
>>> print model[word] # prints vector for given words
.. [1] https://bitbucket.org/shihaoji/wordrank/
@@ -45,14 +45,14 @@ class Wordrank(KeyedVectors):
"""
@classmethod
- def train(cls, wr_path, corpus_file, out_path, size=100, window=15, symmetric=1, min_count=5, max_vocab_size=0,
+ def train(cls, wr_path, corpus_file, out_name, size=100, window=15, symmetric=1, min_count=5, max_vocab_size=0,
sgd_num=100, lrate=0.001, period=10, iter=90, epsilon=0.75, dump_period=10, reg=0, alpha=100,
beta=99, loss='hinge', memory=4.0, cleanup_files=True, sorted_vocab=1, ensemble=0):
"""
`wr_path` is the path to the Wordrank directory.
`corpus_file` is the filename of the text file to be used for training the Wordrank model.
Expects file to contain space-separated tokens in a single line
- `out_path` is the path to directory which will be created to save embeddings and training data.
+ `out_name` is name of the directory which will be created (in wordrank folder) to save embeddings and training data.
`size` is the dimensionality of the feature vectors.
`window` is the number of context words to the left (and to the right, if symmetric = 1).
`symmetric` if 0, only use left context words, else use left and right both.
@@ -82,7 +82,7 @@ def train(cls, wr_path, corpus_file, out_path, size=100, window=15, symmetric=1,
meta_file = 'meta'
# prepare training data (cooccurrence matrix and vocab)
- model_dir = os.path.join(wr_path, out_path)
+ model_dir = os.path.join(wr_path, out_name)
meta_dir = os.path.join(model_dir, 'meta')
os.makedirs(meta_dir)
logger.info("Dumped data will be stored in '%s'", model_dir)
@@ -95,14 +95,16 @@ def train(cls, wr_path, corpus_file, out_path, size=100, window=15, symmetric=1,
cmd_del_vocab_freq = ['cut', '-d', " ", '-f', '1', temp_vocab_file]
commands = [cmd_vocab_count, cmd_cooccurence_count, cmd_shuffle_cooccurences]
- logger.info("Prepare training data using glove code '%s'", commands)
input_fnames = [corpus_file.split('/')[-1], corpus_file.split('/')[-1], cooccurrence_file]
output_fnames = [temp_vocab_file, cooccurrence_file, cooccurrence_shuf_file]
+ logger.info("Prepare training data (%s) using glove code", ", ".join(input_fnames))
for command, input_fname, output_fname in zip(commands, input_fnames, output_fnames):
with smart_open(input_fname, 'rb') as r:
with smart_open(output_fname, 'wb') as w:
utils.check_output(w, args=command, stdin=r)
+
+ logger.info("Deleting frequencies from vocab file")
with smart_open(vocab_file, 'wb') as w:
utils.check_output(w, args=cmd_del_vocab_freq)
@@ -117,7 +119,12 @@ def train(cls, wr_path, corpus_file, out_path, size=100, window=15, symmetric=1,
if iter % dump_period == 0:
iter += 1
else:
- logger.warning('Resultant embedding would be from %d iteration', iter - iter % dump_period)
+ logger.warning(
+ 'Resultant embedding will be from %d iterations rather than the input %d iterations, '
+ 'as wordrank dumps the embedding only at dump_period intervals. '
+ 'Input an appropriate combination of parameters (iter, dump_period) such that '
+ '"iter mod dump_period" is zero.', iter - (iter % dump_period), iter
+ )
wr_args = {
'path': 'meta',
@@ -142,11 +149,11 @@ def train(cls, wr_path, corpus_file, out_path, size=100, window=15, symmetric=1,
for option, value in wr_args.items():
cmd.append('--%s' % option)
cmd.append(str(value))
- logger.info("Running wordrank binary '%s'", cmd)
+ logger.info("Running wordrank binary")
output = utils.check_output(args=cmd)
# use embeddings from max. iteration's dump
- max_iter_dump = iter - iter % dump_period
+ max_iter_dump = iter - (iter % dump_period)
copyfile('model_word_%d.txt' % max_iter_dump, 'wordrank.words')
copyfile('model_context_%d.txt' % max_iter_dump, 'wordrank.contexts')
model = cls.load_wordrank_model('wordrank.words', os.path.join('meta', vocab_file), 'wordrank.contexts', sorted_vocab, ensemble)
diff --git a/gensim/sklearn_integration/sklearn_wrapper_gensim_ldamodel.py b/gensim/sklearn_integration/sklearn_wrapper_gensim_ldamodel.py
index 003d313e6d..3eae9d0265 100644
--- a/gensim/sklearn_integration/sklearn_wrapper_gensim_ldamodel.py
+++ b/gensim/sklearn_integration/sklearn_wrapper_gensim_ldamodel.py
@@ -16,8 +16,6 @@
from sklearn.base import TransformerMixin, BaseEstimator
-
-
class SklearnWrapperLdaModel(models.LdaModel, TransformerMixin, BaseEstimator):
"""
Base LDA module
@@ -68,7 +66,6 @@ def get_params(self, deep=True):
"gamma_threshold": self.gamma_threshold, "minimum_probability": self.minimum_probability,
"random_state": self.random_state}
-
def set_params(self, **parameters):
"""
Set all parameters.
@@ -81,7 +78,7 @@ def fit(self, X, y=None):
"""
For fitting corpus into the class object.
Calls gensim.model.LdaModel:
- >>>gensim.models.LdaModel(corpus=corpus,num_topics=num_topics,id2word=id2word,passes=passes,update_every=update_every,alpha=alpha,iterations=iterations,eta=eta,random_state=random_state)
+ >>> gensim.models.LdaModel(corpus=corpus, num_topics=num_topics, id2word=id2word, passes=passes, update_every=update_every, alpha=alpha, iterations=iterations, eta=eta, random_state=random_state)
"""
if sparse.issparse(X):
self.corpus = matutils.Sparse2Corpus(X)
@@ -106,16 +103,15 @@ def transform(self, docs, minimum_probability=None):
# The input as array of array
check = lambda x: [x] if isinstance(x[0], tuple) else x
docs = check(docs)
- X = [[] for i in range(0,len(docs))];
- for k,v in enumerate(docs):
+ X = [[] for _ in range(0, len(docs))]
+ for k, v in enumerate(docs):
doc_topics = self.get_document_topics(v, minimum_probability=minimum_probability)
probs_docs = list(map(lambda x: x[1], doc_topics))
# Everything should be equal in length
if len(probs_docs) != self.num_topics:
probs_docs.extend([1e-12]*(self.num_topics - len(probs_docs)))
X[k] = probs_docs
- probs_docs = []
return np.reshape(np.array(X), (len(docs), self.num_topics))
def get_topic_dist(self, bow, minimum_probability=None, minimum_phi_value=None, per_word_topics=False):
@@ -134,4 +130,4 @@ def partial_fit(self, X):
if sparse.issparse(X):
X = matutils.Sparse2Corpus(X)
- self.update(corpus=X)
\ No newline at end of file
+ self.update(corpus=X)
diff --git a/gensim/test/test_data/bgwiki-latest-pages-articles-shortened.xml.bz2 b/gensim/test/test_data/bgwiki-latest-pages-articles-shortened.xml.bz2
new file mode 100644
index 0000000000..11f3d795c3
Binary files /dev/null and b/gensim/test/test_data/bgwiki-latest-pages-articles-shortened.xml.bz2 differ
diff --git a/gensim/test/test_data/lee_fasttext_new.bin b/gensim/test/test_data/lee_fasttext_new.bin
new file mode 100644
index 0000000000..e9a8f07061
Binary files /dev/null and b/gensim/test/test_data/lee_fasttext_new.bin differ
diff --git a/gensim/test/test_data/lee_fasttext_new.vec b/gensim/test/test_data/lee_fasttext_new.vec
new file mode 100644
index 0000000000..9258025186
--- /dev/null
+++ b/gensim/test/test_data/lee_fasttext_new.vec
@@ -0,0 +1,1764 @@
+1763 10
+the -0.33022 -0.31812 0.10051 -1.0401 0.087806 -0.76704 0.39969 -0.19609 -0.13398 0.30554
+to -0.31987 0.1434 -0.091811 -0.843 -0.88571 -0.61017 0.48257 0.044776 -0.37158 0.36873
+of -0.40452 -0.17903 0.16196 -0.77842 -0.10352 -0.83879 0.57681 -0.027571 -0.21793 0.32038
+in -0.48886 -0.26498 0.044217 -0.9284 0.77722 -1.2153 0.58476 0.069224 -0.022603 -0.33941
+and -0.18378 -0.10715 0.0021384 -0.90693 -0.11685 -0.97686 0.28666 0.118 -0.26708 0.088453
+a -0.33519 -0.29483 -0.035565 -0.8615 0.041433 -1.0078 0.46877 0.016823 -0.047888 0.2902
+is -0.15199 0.30374 0.28534 -0.91076 -0.98414 -0.44665 0.32348 0.23459 -0.52628 0.62149
+for -0.22979 -0.13901 -0.015729 -0.8383 0.16051 -1.1942 0.38129 0.14235 -0.19877 -0.16216
+The -0.203 0.11324 0.099092 -0.86532 0.10771 -0.9537 0.51709 -0.013929 -0.35589 -0.091968
+on -0.20967 -0.19373 0.048881 -0.78054 -0.066953 -1.0141 0.45248 0.12231 -0.13282 0.20771
+he -0.65305 0.05148 -0.15596 -0.99271 -0.90892 -0.69412 0.28682 -0.37462 -0.16706 0.41628
+has -0.1483 -0.32801 0.34937 -1.0249 0.1493 -0.82411 0.37246 0.20367 -0.012695 0.29427
+says -0.20093 -0.28266 0.3047 -0.93661 -0.40017 -0.75988 0.24951 0.12185 -0.23146 0.37119
+was -0.049137 -0.05114 0.22581 -0.99179 0.1735 -0.9129 0.36463 0.097124 -0.19442 0.059312
+have -0.29204 0.045827 0.13382 -1.0406 -0.014144 -0.76245 0.3981 0.045299 -0.25308 0.10293
+that -0.37507 -0.22137 0.23466 -1.0205 -1.0564 -0.34831 0.25409 -0.13757 -0.32117 0.77917
+be -0.74752 -0.034953 0.10615 -1.0751 0.18641 -0.79894 0.42422 -0.5107 -0.15459 -0.0026315
+are 0.1874 -0.36622 0.54514 -1.2728 -0.014307 -0.43794 0.17535 0.059977 -0.25114 0.45772
+will -0.50062 -0.1738 0.050607 -0.8865 -0.19088 -0.78701 0.4637 0.030464 -0.27489 0.33913
+with 0.034973 0.026743 -0.015003 -0.97088 0.21784 -0.9557 0.45493 0.12413 -0.31648 -0.044328
+Mr -0.21121 -0.12407 0.15874 -0.76779 0.10648 -1.1075 0.3834 0.17831 -0.10013 0.20325
+said. -0.46169 -0.25106 0.25167 -0.96973 -0.40777 -0.68279 0.30918 -0.16919 -0.09165 0.50847
+ -0.20078 -0.10337 0.060461 -0.91415 0.1093 -0.90508 0.5017 0.12717 -0.31144 0.15824
+at -0.019143 -0.017879 0.25241 -1.2375 0.81273 -1.2265 0.16146 -0.14443 0.21601 -0.25264
+from -0.09197 -0.012729 -0.0060296 -0.9388 -0.10932 -0.83526 0.49825 0.030485 -0.26831 0.23417
+by -0.33604 -0.2464 0.29963 -0.94804 0.098661 -0.92171 0.32177 -0.0036779 -0.071185 0.048951
+been -0.25494 -0.074667 0.19737 -0.96355 0.0032124 -0.87794 0.34561 -0.10455 -0.16332 -0.050892
+not -0.19936 -0.24242 0.52563 -1.0341 -0.88076 -0.56225 0.13903 -0.015902 -0.11776 0.59915
+as -0.21367 -0.22472 0.12267 -1.0727 0.18493 -0.81337 0.44497 -0.045123 -0.14549 0.2321
+his -0.48603 0.025464 0.12305 -0.91551 -0.22244 -0.86314 0.35775 -0.092713 -0.23615 0.039325
+an -0.48816 -0.23777 0.21673 -0.89387 -0.085778 -0.95051 0.22186 0.051467 -0.054749 0.14937
+it 0.088151 0.06808 0.18461 -0.99546 -1.0999 -0.44344 0.18492 0.12933 -0.57249 0.66995
+were -0.3996 -0.35245 0.11363 -1.0223 -0.30912 -0.69173 0.16747 0.107 -0.19961 0.47033
+had -0.28349 -0.12388 0.22009 -1.0286 0.10782 -0.84988 0.45542 0.0085547 -0.24302 -0.0012204
+after -0.34786 0.045636 -0.023854 -0.82463 0.16736 -1.013 0.56963 0.027898 -0.20699 0.033479
+but -0.20207 -0.2405 0.19077 -0.8589 -0.5069 -0.81368 0.31668 0.39135 -0.29938 0.41487
+they -0.1298 -0.31476 0.38336 -1.1176 -0.15058 -0.56061 0.28551 -0.20703 -0.29367 0.34014
+said -0.39474 -0.36102 0.3086 -0.93279 -0.26217 -0.81679 0.25929 -0.16438 0.027083 0.45336
+this -0.092812 -0.10551 0.35124 -0.96899 -0.40498 -0.68296 0.30468 0.0917 -0.38239 0.35388
+who -0.20105 -0.095276 0.32085 -0.91372 -0.16938 -0.79356 0.38023 0.0038929 -0.37117 0.027668
+Australian -0.28387 -0.070388 0.13034 -0.80433 0.13356 -0.9253 0.67532 0.22014 -0.4056 -0.10834
+we -0.43378 -0.024427 -0.047516 -1.1312 -0.57399 -0.59072 0.2059 -0.40156 -0.31484 0.4411
+Palestinian -0.11929 -0.0022232 -0.3722 -1.021 1.0886 -1.3694 0.71574 -0.21566 0.077381 -0.28098
+their -0.18141 -0.17626 0.16614 -0.92324 -0.40464 -0.69394 0.26769 -0.055062 -0.30801 0.40075
+which -0.19957 -0.11257 0.22569 -0.88656 -0.070622 -0.89995 0.36561 -0.0093768 -0.28029 0.11368
+people 0.040337 -0.13309 0.12374 -0.90381 0.11218 -0.88308 0.48656 0.18849 -0.36103 0.23864
+two -0.10355 0.0031566 0.1133 -1.0841 0.44068 -0.84927 0.50567 -0.067127 -0.30814 -0.0035397
+up -0.25718 -0.099621 0.096818 -0.97874 0.13418 -0.89428 0.35766 -0.09086 -0.20867 0.14024
+there -0.20937 -0.37056 0.45481 -1.1153 -0.99885 -0.32444 0.14491 0.17278 -0.36451 0.87714
+about -0.28995 -0.19368 0.29839 -0.85869 0.072993 -0.97997 0.39695 0.28764 -0.28723 0.023871
+also -0.064228 -0.073123 0.15672 -0.89139 0.23014 -0.98076 0.5608 0.14038 -0.23721 0.099119
+its -0.094794 -0.0089572 -0.061089 -0.92513 0.15797 -0.89387 0.53339 0.099649 -0.25874 0.08474
+South 0.29405 0.3306 0.29858 -0.98334 0.3158 -0.82364 0.64126 0.40047 -0.65075 -0.17298
+out -0.48574 -0.13048 0.083028 -0.80023 -0.57943 -0.77788 0.37554 0.28506 -0.37562 0.32881
+into -0.36937 -0.17606 -0.13391 -0.94078 0.34168 -0.99665 0.64295 -0.11696 -0.1669 -0.0054359
+would -0.28577 -0.23793 0.18882 -0.95394 -0.58257 -0.59028 0.37692 0.12538 -0.2183 0.64066
+US -0.24584 -0.41715 0.18146 -0.92122 0.72152 -1.1306 0.47029 0.012934 0.053693 -0.0086742
+when -0.4617 -0.29113 0.1645 -1.0117 -0.043739 -0.84131 0.34338 -0.1758 -0.0047467 0.28804
+against -0.24538 0.078647 -0.056364 -0.85907 0.29025 -1.0199 0.58317 0.11893 -0.27324 -0.1253
+more 0.31973 -0.055314 0.46665 -0.98215 0.10186 -0.77057 0.36613 0.61176 -0.47173 0.26166
+I -0.3498 -0.20172 -0.020818 -1.0454 -1.1019 -0.45334 0.42848 -0.012756 -0.25491 0.65215
+last -0.18243 -0.29531 0.23062 -0.99804 0.62399 -1.0047 0.51393 0.31862 -0.26751 -0.041609
+first -0.13614 0.093762 0.13683 -0.96666 0.43209 -1.0278 0.54946 0.12433 -0.24603 -0.069502
+New 0.25543 0.27318 0.18001 -1.058 0.24951 -0.82687 0.54174 0.3602 -0.52094 -0.14335
+A -0.31209 0.011631 0.22446 -0.92899 0.067243 -0.93878 0.49181 0.0034494 -0.14883 -0.012253
+He -0.75237 -0.67949 0.049378 -0.93605 -0.078393 -0.99741 0.23349 0.020627 0.027144 0.28656
+Israeli -0.26379 -0.10594 -0.41009 -1.0794 1.2779 -1.3504 0.68809 -0.53596 0.089812 -0.21142
+Australia -0.21157 0.022314 0.07604 -0.78834 0.15132 -0.90568 0.72975 0.28225 -0.51305 -0.1799
+one 0.1261 -0.099178 0.15185 -1.06 0.17422 -0.92321 0.3207 0.11182 -0.13747 0.0563
+if -0.48178 -0.23325 0.025306 -0.92117 -0.29508 -0.82477 0.49644 -0.049607 -0.15429 0.30857
+United -0.42223 -0.26833 0.26968 -0.98168 0.49726 -1.0389 0.36316 -0.083795 -0.01649 -0.10937
+over -0.26667 -0.11149 0.37049 -0.90953 0.12751 -0.97556 0.35257 0.17014 -0.22273 0.17052
+Government -0.29815 -0.43747 0.24994 -0.82199 0.34598 -1.0416 0.54893 0.34044 -0.087492 0.035292
+or -0.27575 -0.096525 0.20245 -0.89668 -0.91115 -0.61982 0.16335 0.0376 -0.42491 0.53103
+than -0.33 -0.21229 0.19697 -1.0063 0.00041447 -0.6629 0.4611 0.093545 -0.33235 0.3079
+all -0.26628 -0.14896 0.24025 -0.89538 -0.16143 -0.8923 0.30807 0.12912 -0.084696 0.32484
+no -0.40013 -0.16031 0.15533 -0.84239 -0.20989 -0.87639 0.52505 0.050859 -0.22787 0.15883
+could -0.49695 -0.36794 0.25997 -0.88439 -0.49008 -0.65626 0.40343 0.15186 -0.16664 0.51918
+before -0.3407 -0.058254 0.0596 -0.95199 0.08027 -0.8974 0.41102 0.020095 -0.24425 0.012549
+three -0.26678 -0.015288 -0.047869 -0.95902 0.50998 -1.122 0.43916 -0.010073 -0.22936 -0.22466
+say -0.032002 -0.26703 0.19972 -0.94938 0.079993 -1.0376 0.34252 -0.020494 -0.10124 0.080242
+told -0.42438 -0.20704 -0.0056567 -0.90714 -0.24315 -0.75983 0.41709 -0.090443 -0.13259 0.37537
+new -0.54038 -0.21066 0.05754 -0.91031 0.2118 -0.8609 0.47213 -0.12175 -0.28987 0.020162
+some -0.20853 -0.07386 0.15236 -0.97983 -0.019563 -0.69457 0.50208 0.087262 -0.38281 0.18132
+any -0.22956 -0.25756 0.27368 -0.85082 -0.871 -0.73584 0.17203 0.35347 -0.39229 0.48237
+"We -0.24137 -0.11195 0.16273 -1.0519 0.15123 -0.91253 0.33623 -0.34671 -0.076989 0.071385
+bin -1.1369 -0.19739 0.43403 -1.2298 1.1812 -1.1997 0.2993 -0.53082 0.32635 -0.62403
+attacks -0.3315 -0.046235 0.0059848 -1.189 1.2997 -1.355 0.46851 -0.31042 0.00050552 -0.73975
+very -0.24525 -0.18 0.24736 -1.0176 -1.009 -0.44592 0.27645 -0.0046416 -0.3104 0.80213
+still -0.48843 -0.23529 0.18375 -0.91555 0.030518 -0.81222 0.49447 -0.10733 -0.12523 0.2623
+now -0.22925 -0.28336 0.41243 -0.96635 -0.11287 -0.77443 0.3012 0.037946 -0.20964 0.2162
+just -0.26101 -0.088722 0.26512 -0.96292 -0.06783 -0.72943 0.47772 0.24115 -0.38367 0.21506
+security -0.30075 -0.16487 -0.15123 -0.92988 0.50471 -1.1198 0.58145 -0.1661 -0.028197 0.014528
+police -0.1127 -0.1825 0.039113 -0.96865 -0.027693 -0.90584 0.39815 0.076821 -0.062821 0.37022
+our -0.14584 -0.04477 -0.14099 -0.80127 -0.90416 -0.79821 0.27668 -0.15629 -0.43345 0.38823
+killed -0.18154 -0.19708 0.10268 -0.97047 0.42065 -1.1094 0.34835 -0.076757 0.01084 -0.098382
+Arafat -0.52927 -0.03356 -0.17259 -0.96235 0.71803 -1.2615 0.49958 -0.55362 0.26507 -0.15125
+"I -0.39736 0.13625 -0.023159 -0.98296 -1.4491 -0.42356 0.37467 -0.19728 -0.26311 0.77596
+them -0.16723 -0.29989 0.2555 -1.0339 -0.59839 -0.57582 0.26505 -0.13065 -0.33663 0.47831
+being -0.29334 -0.13715 0.11571 -0.90582 -0.42662 -0.83744 0.29407 -0.0085566 -0.33293 -0.079894
+Minister -0.77857 -0.041647 0.055757 -0.78251 0.35742 -1.1563 0.62952 -0.24813 0.18156 0.0074797
+forces -0.31611 -0.26023 0.13476 -0.95077 0.68984 -1.1688 0.46259 0.055986 -0.04458 -0.18726
+States -0.21613 -0.22527 0.2876 -0.8926 0.5769 -1.0471 0.57627 0.048655 -0.192 -0.17265
+But -0.04944 -0.13106 0.14496 -0.89226 -0.10263 -0.82114 0.51183 0.072984 -0.2451 0.28737
+fire 0.4593 -0.2163 0.63263 -1.1762 0.35455 -0.69784 0.27687 0.50648 -0.33031 0.23918
+other -0.29501 -0.42237 0.33144 -1.0263 0.19114 -0.78719 0.38055 -0.11142 -0.1256 0.24444
+what -0.28618 -0.23335 0.4351 -1.0115 -0.54005 -0.5525 0.27984 -0.11731 -0.2719 0.50848
+man -0.2559 0.24893 0.065557 -0.8362 0.024539 -1.0033 0.51622 0.11164 -0.35693 -0.20309
+around -0.31284 -0.16331 0.21767 -1.0888 0.29451 -0.89781 0.24964 -0.052161 -0.10537 -0.017295
+where -0.3501 -0.35727 0.47376 -1.063 -0.22067 -0.68804 0.12911 0.058005 -0.1445 0.34572
+can -0.055922 0.030927 0.058761 -1.0212 0.14008 -0.88066 0.367 -0.07038 -0.22231 0.073602
+think -0.1731 -0.1926 0.32029 -1.0495 -0.84012 -0.48107 0.28456 0.059164 -0.4043 0.52989
+per -0.35812 0.11215 -0.18332 -0.80901 0.1944 -1.0827 0.57297 -0.26525 -0.10867 0.11525
+day 0.012601 0.1896 0.095068 -0.86566 0.34808 -1.0604 0.52837 0.19571 -0.52749 -0.26127
+next -0.31571 -0.060529 -0.0075701 -0.86395 0.11404 -0.95719 0.53605 -0.029668 -0.22698 0.14434
+Al -1.3353 -0.092465 0.39203 -1.0874 0.63041 -1.0789 0.35236 -0.71515 0.2539 -0.46528
+company -0.19165 -0.28963 0.25913 -0.84085 -0.2211 -0.83681 0.36584 0.31188 -0.30592 0.29555
+It -0.284 -0.11323 0.36562 -0.93056 -0.60506 -0.65385 0.23822 0.0019475 -0.25188 0.54004
+four 0.037041 0.084169 -0.089042 -0.91625 0.064523 -1.0705 0.28069 -0.05684 -0.33851 -0.033145
+Qaeda -0.91306 -0.15476 0.19559 -1.0222 0.77476 -1.1154 0.47116 -0.39111 0.024283 -0.52145
+"The -0.38686 -0.023665 0.048808 -0.95457 0.36467 -1.0604 0.50549 -0.097076 -0.02866 0.014342
+take -0.4219 -0.03483 0.0012477 -0.72079 -0.21566 -1.0017 0.52492 0.13763 -0.22839 0.072995
+you -0.087751 -0.16713 0.16542 -1.0399 -1.0658 -0.64585 0.15991 0.045301 -0.22861 0.5694
+officials -0.32051 -0.21077 0.037937 -0.95437 0.60363 -1.1237 0.57537 -0.21206 0.067605 -0.1028
+suicide -0.28618 -0.10063 -0.22642 -0.9794 0.79137 -1.1419 0.51294 -0.19923 -0.065382 -0.14762
+so -0.13635 -0.30147 -0.081736 -1.0996 0.067797 -0.51032 0.70453 -0.16876 -0.39209 0.58863
+Afghan -1.1706 -0.3155 0.067356 -1.0196 1.0935 -1.2534 0.6789 -0.43071 0.18712 -0.46391
+under -0.48811 -0.067802 0.0057148 -0.87174 -0.12285 -1.0058 0.40118 -0.17195 -0.19471 0.070437
+President -0.32441 -0.2851 0.16182 -0.85866 0.1776 -1.0136 0.41405 0.19381 -0.16785 -0.043423
+Federal -0.25055 -0.4163 0.36037 -0.87956 0.020906 -0.89772 0.38427 0.23415 -0.11237 0.12181
+In -0.56293 0.22817 0.088029 -0.71931 0.010781 -1.0672 0.64169 -0.25677 -0.24875 -0.038812
+time -0.52833 -0.056916 0.043438 -0.85557 -0.29898 -0.82812 0.40698 -0.15416 -0.31113 0.056874
+Taliban -0.74078 -0.31884 0.16068 -0.96942 0.53735 -1.053 0.48127 -0.18015 0.10536 -0.23858
+made -0.37549 0.23968 0.0083349 -0.85004 -0.51914 -0.76553 0.45113 0.21039 -0.44265 0.10979
+number -0.12057 -0.15317 0.18722 -0.90501 0.45588 -1.1197 0.42543 0.019829 -0.21294 -0.10256
+days -0.072485 0.027079 0.1092 -0.93477 0.11575 -0.9536 0.45806 0.2372 -0.4375 0.059927
+Laden -0.90037 -0.18422 0.36881 -1.1109 0.78784 -1.0523 0.24214 -0.38333 -0.059544 -0.4559
+down -0.072217 -0.12778 0.054756 -1.1118 0.34834 -0.82644 0.47349 -0.12034 -0.22186 0.052777
+through -0.25441 -0.033393 0.18056 -1.0011 0.15407 -0.97571 0.37446 0.020637 -0.20062 -0.072035
+those -0.21808 -0.19675 0.40513 -0.99374 -0.42841 -0.66267 0.22048 0.09974 -0.20575 0.43765
+meeting -0.45894 -0.0097337 -0.18976 -0.83278 0.23521 -1.156 0.46863 -0.13151 -0.10006 -0.19093
+including -0.22074 -0.15843 0.069876 -0.88368 0.28899 -1.0397 0.517 0.10314 -0.33756 -0.23928
+Hamas -0.18186 -0.22878 0.11349 -0.90034 0.53257 -1.0775 0.49148 0.10502 -0.13666 -0.042208
+Gaza 0.097114 0.057388 -0.021218 -0.92321 0.58338 -1.0238 0.54903 -0.006679 -0.42196 -0.066572
+workers -0.53701 -0.18398 0.14693 -0.95833 -0.065438 -0.76921 0.48484 0.010138 -0.10631 0.090272
+Sydney 0.42337 0.17773 0.41603 -1.1125 0.11717 -0.67133 0.60738 0.33638 -0.49206 0.19372
+she -0.74477 -0.083015 0.31348 -0.95676 0.12699 -0.94792 0.40537 -0.48402 0.0428 0.17063
+military -0.55691 -0.17432 0.019327 -0.91594 0.56586 -1.1349 0.52516 -0.18514 -0.013428 -0.18002
+should -0.44619 -0.28481 0.20766 -0.89841 -0.39622 -0.70786 0.38093 0.17609 -0.25709 0.38403
+called -0.18626 -0.18218 0.13878 -0.91435 0.2147 -1.1208 0.34494 0.16412 0.0060132 0.0092137
+since -0.36396 -0.0063352 -0.12582 -0.94967 0.46389 -0.94729 0.57313 -0.069767 -0.20223 -0.085856
+cent -0.1494 -0.15155 0.26716 -0.73245 -0.010617 -1.0085 0.59429 0.60725 -0.18189 0.039498
+second -0.22516 0.037361 -0.049318 -0.94383 -0.014107 -0.87578 0.54721 0.015513 -0.31377 0.16859
+Test -0.033719 0.34239 -0.17324 -0.83923 0.14746 -0.98619 0.72496 0.045624 -0.65275 -0.21728
+Wales 0.053656 0.28324 0.055285 -0.96671 0.22785 -0.81622 0.68125 0.21636 -0.27924 0.10288
+Islamic -0.22614 -0.19205 -0.016994 -0.91469 0.66012 -1.0559 0.57151 0.075808 -0.17611 -0.018144
+today -0.11086 -0.080891 0.070837 -0.83169 0.40189 -1.0907 0.53966 0.13669 -0.29179 -0.083567
+get -0.26654 0.11655 -0.0089127 -0.88745 -0.87471 -0.70857 0.35412 -0.061572 -0.26976 0.58908
+World -0.19331 -0.044139 0.28748 -0.94014 -0.073753 -0.8746 0.34228 0.15011 -0.2833 0.16732
+between -0.49888 -0.17084 0.071969 -0.98188 0.49201 -1.0247 0.51424 -0.14237 -0.085301 -0.17244
+September -0.18975 -0.064982 0.19584 -0.94499 0.34528 -0.98927 0.44114 -0.020988 -0.18947 -0.095848
+back -0.27283 -0.059433 0.13938 -0.94367 -0.15244 -0.87978 0.41035 0.014452 -0.19059 0.13653
+because -0.43831 -0.10384 0.093664 -1.0154 -0.2803 -0.67246 0.3828 -0.14649 -0.17899 0.40723
+members -0.30101 -0.18809 0.17142 -0.9703 0.73091 -1.1413 0.5201 -0.084871 -0.074367 -0.25823
+while -0.20608 -0.041047 0.18854 -0.90223 0.20482 -0.97908 0.46448 0.00026892 -0.23846 0.022349
+- -0.3817 -0.435 0.20958 -1.1556 -0.43852 -0.68643 0.37675 -0.36924 0.10648 0.5545
+Bank -0.19756 -0.18417 0.055352 -1.025 0.69146 -1.0088 0.56631 -0.15637 -0.20305 -0.22032
+staff -0.25389 -0.26152 0.32648 -0.85727 -0.22542 -0.81737 0.31717 0.039845 -0.20685 0.30589
+report -0.20298 -0.29043 0.13439 -0.86815 -0.22312 -0.77922 0.42075 0.2256 -0.22305 0.39632
+near 0.063087 -0.13746 0.04948 -0.97593 0.57767 -1.0817 0.54532 0.017656 -0.20763 -0.052598
+going -0.34285 -0.30352 0.10319 -0.94297 -0.59234 -0.6944 0.36893 -0.084732 -0.22855 0.39174
+further -0.21702 -0.11672 0.28065 -1.0878 -0.19926 -0.5478 0.38098 -0.15962 -0.2667 0.40168
+world -0.34496 -0.2073 0.31545 -0.97096 0.096099 -0.83532 0.37357 0.10556 -0.23433 0.10518
+him -0.68234 -0.058697 -0.16187 -0.83721 0.057589 -1.017 0.49891 -0.32563 0.050758 0.069657
+local -0.38225 -0.29285 0.21606 -0.9377 0.07638 -0.939 0.34291 0.045473 -0.044331 0.19069
+former -0.42283 -0.13981 0.18794 -0.81396 -0.11717 -0.9734 0.34292 0.087346 -0.16579 0.048752
+Australia's -0.25338 -0.06371 0.16415 -0.81694 0.052229 -0.90036 0.64271 0.22495 -0.4157 -0.061322
+end -0.15889 0.24558 -0.055311 -0.83453 -0.043634 -0.96825 0.43326 0.15381 -0.34587 -0.053832
+attack -0.17126 -0.013473 0.045089 -1.1729 1.0639 -1.2619 0.4447 -0.2385 -0.085905 -0.58779
+Israel -0.35389 -0.13604 -0.40936 -1.0228 1.3653 -1.4265 0.73706 -0.53007 0.19975 -0.26019
+West 0.23361 0.22398 -0.15368 -0.9687 0.64233 -0.98961 0.6875 -0.029865 -0.54572 -0.15117
+hours -0.043814 -0.041619 0.30682 -0.97939 -0.025469 -0.8232 0.25673 0.19288 -0.27147 0.15032
+government -0.30304 -0.35389 0.19802 -0.82989 0.28777 -1.0482 0.59923 0.34018 -0.12011 0.092391
+international -0.48173 -0.17748 0.049294 -0.75205 0.53984 -1.1959 0.64301 0.21821 -0.16932 -0.14384
+Afghanistan -1.1966 -0.44437 0.15186 -1.0763 1.0313 -1.1843 0.59815 -0.42975 0.27204 -0.37176
+leader -0.77413 -0.10514 -0.06776 -0.8829 0.21361 -1.121 0.39473 -0.36839 0.12408 -0.001276
+like -0.50088 -0.28038 0.22604 -0.99886 0.02199 -0.83443 0.38421 0.014473 -0.057847 0.098137
+only -0.23106 0.07436 -0.044206 -0.79498 -0.98372 -0.62288 0.41626 0.080259 -0.44068 0.59421
+do -0.36461 -0.098158 -0.041925 -1.0584 -0.58619 -0.52612 0.47479 -0.20727 -0.26433 0.47595
+off -0.35971 -0.31598 0.18306 -1.0005 0.46072 -1.01 0.54209 -0.072324 0.022646 0.030194
+make -0.30113 0.049585 -0.073341 -0.891 -0.5538 -0.77719 0.42122 -0.023962 -0.29509 0.41399
+claims -0.36885 -0.26892 0.27832 -0.92341 0.031652 -0.83457 0.3885 -0.014591 -0.22142 0.17689
+another -0.20017 -0.37784 0.34455 -0.99432 -0.22374 -0.69401 0.30434 -0.0451 -0.16091 0.41697
+expected -0.26527 -0.079034 0.15499 -0.94017 -0.033431 -0.92758 0.37691 0.090954 -0.22083 0.12863
+it's -0.14742 -0.21869 0.0124 -1.1749 -0.38998 -0.56266 0.50493 -0.11677 -0.22547 0.50131
+many 0.057404 0.085441 0.17244 -0.87545 -0.25314 -0.8043 0.35708 0.27594 -0.41464 0.18643
+spokesman -0.10824 -0.084093 0.24338 -1.0036 0.37949 -1.0592 0.44724 0.10272 -0.095293 -0.069468
+given -0.43047 0.071514 0.0050702 -0.82036 -0.12134 -1.0035 0.50737 0.094394 -0.21531 -0.032985
+five -0.16969 0.029744 0.15184 -0.97348 0.25694 -0.95445 0.43115 0.071704 -0.24367 -0.043415
+go 0.078374 -0.19796 0.088563 -1.1733 -0.30378 -0.71145 0.24977 0.049791 -0.22449 0.48565
+good -0.15264 -0.054147 0.08512 -0.93805 -0.23591 -0.88373 0.4757 -0.030068 -0.34181 0.23762
+looking -0.34264 -0.11517 0.12333 -0.91539 -0.50244 -0.80002 0.422 0.03678 -0.32918 0.2594
+Osama -0.72648 -0.056445 0.38 -0.94188 0.057955 -0.91816 0.26583 -0.19597 -0.10273 -0.14943
+left -0.35945 -0.33987 0.4253 -1.0454 0.20377 -0.83701 0.36679 0.091791 -0.042632 0.10899
+group -0.3377 -0.11551 0.16781 -0.90786 0.28475 -0.99937 0.36675 0.016636 -0.304 -0.17077
+saying -0.13771 -0.21288 0.22513 -0.85351 -0.53943 -0.84151 0.33804 0.1424 -0.37602 0.18033
+Tora -0.9356 -0.25858 0.31026 -1.0856 0.4355 -0.96089 0.36838 -0.35437 0.1891 -0.12649
+Qantas -0.65939 -0.30487 0.28702 -0.902 -0.1617 -0.80426 0.37087 0.018263 -0.0082757 0.099808
+work -0.47285 -0.073762 0.35523 -1.0526 -0.31577 -0.55673 0.26701 0.084506 -0.16215 0.26032
+Prime -0.46482 0.1016 0.027213 -0.77844 -0.26784 -0.9513 0.5403 -0.21129 -0.1866 0.029596
+put -0.1248 -0.16775 0.41894 -1.0333 -0.583 -0.44898 0.27078 0.20875 -0.49565 0.57485
+know -0.59676 -0.37725 0.34874 -1.1539 -0.45241 -0.53131 0.22397 -0.29578 0.012399 0.39678
+during -0.21109 -0.10078 0.039143 -0.76322 0.25825 -1.179 0.54879 0.27295 -0.27751 -0.26122
+most 0.13793 0.04456 0.22526 -0.98488 -0.36391 -0.65328 0.40291 0.42988 -0.60882 0.25216
+air 0.26741 -0.074068 0.29465 -1.0677 0.15293 -0.85312 0.1924 -0.0063716 -0.39769 -0.0064085
+action -0.75958 -0.37306 0.11814 -0.88526 -0.14207 -0.83496 0.34372 0.20376 -0.090856 0.1885
+Indian -0.52359 0.00096827 0.19522 -0.90832 0.41361 -1.1591 0.5906 -0.22471 0.025619 -0.19738
+these -0.40536 -0.37146 0.31893 -1.0205 -0.58433 -0.45952 0.29835 -0.0078722 -0.31221 0.56102
+way -0.043924 -0.17663 0.024529 -1.0232 -0.037238 -0.90182 0.28442 0.025983 -0.18049 0.087988
+Yasser -0.55153 0.097803 -0.13613 -0.90587 0.54645 -1.1794 0.63655 -0.20578 0.077585 -0.14809
+found -0.29833 -0.023452 0.13144 -1.0503 0.34796 -0.98793 0.32726 -0.12611 -0.15783 -0.18491
+support -0.3308 -0.052304 0.051654 -0.93353 0.072362 -0.84319 0.49866 0.040403 -0.26077 0.12345
+died -0.29559 -0.13104 -0.025482 -0.9058 0.30137 -1.1359 0.33124 0.014805 -0.038687 -0.14306
+whether -0.4517 -0.20994 0.25801 -0.89994 -0.60469 -0.66229 0.33923 -0.060431 -0.19682 0.57263
+years -0.11243 -0.15501 0.057288 -1.009 0.33752 -0.83704 0.64005 0.12612 -0.21893 0.1085
+national -0.32425 -0.18239 0.0956 -0.66453 0.46247 -1.1941 0.63184 0.46011 -0.27304 -0.11904
+metres -0.0024676 -0.017324 0.34124 -0.92656 0.13016 -1.0326 0.44193 0.43597 -0.22321 0.11957
+Afghanistan. -1.0575 -0.4603 0.2064 -1.0681 0.91871 -1.0909 0.54211 -0.34105 0.23903 -0.29086
+come -0.28172 -0.26435 0.032234 -0.82914 -0.27653 -0.82745 0.48779 0.29357 -0.29068 0.23432
+set -0.54167 -0.095208 -0.075166 -0.82243 -0.09791 -0.8961 0.59911 -0.017329 -0.092535 0.13694
+six -0.49273 -0.098289 -0.13952 -0.86139 0.18714 -1.1441 0.54307 -0.063048 -0.10221 -0.088211
+year. -0.02107 -0.076537 0.025904 -0.88686 0.28219 -0.8883 0.62195 0.1519 -0.30504 0.083323
+interim -0.55091 -0.063612 -0.098585 -0.75635 0.36788 -1.1661 0.75483 0.019867 -0.26509 -0.16353
+team -0.23807 0.076507 0.10539 -0.84693 0.44473 -1.1163 0.69508 0.094907 -0.054019 -0.16245
+power -0.36772 -0.052696 0.19511 -0.89868 -0.34209 -0.84353 0.38587 -0.047361 -0.21216 0.3796
+Foreign -0.42638 -0.33748 0.13848 -0.87259 0.047046 -0.92526 0.46018 -0.0052589 -0.023769 0.1715
+terrorist -0.48168 -0.18911 0.20601 -0.90702 0.50172 -1.0465 0.52332 0.0094234 -0.23281 -0.23079
+how -0.01793 -0.1927 0.35889 -1.0481 -0.16997 -0.64969 0.38255 0.078809 -0.21499 0.39838
+arrested -0.24013 -0.030285 0.077353 -0.99602 0.77287 -1.1554 0.5164 -0.05334 0.0040569 -0.19586
+11 -0.22958 0.060746 0.23076 -1.0176 0.38595 -0.94242 0.46941 0.048733 -0.25515 -0.10744
+trying -0.35715 -0.17342 0.086758 -0.82987 0.054978 -1.0587 0.47409 0.0037893 -0.21448 -0.1188
+don't 0.054365 0.057473 0.0429 -1.0606 -0.8671 -0.48444 0.41769 0.11095 -0.55092 0.47744
+start -0.12029 -0.16384 0.22578 -1.0056 -0.23547 -0.64488 0.49944 0.068158 -0.33384 0.32661
+Africa -0.24422 0.33216 -0.17724 -0.96404 0.15966 -0.93151 0.67632 -0.058485 -0.47762 -0.23633
+official -0.27807 -0.27393 0.050194 -0.95618 0.68695 -1.1649 0.52643 -0.1773 0.10471 -0.11005
+part -0.34295 -0.38945 -0.008875 -0.8628 0.13704 -1.0347 0.53515 0.22521 -0.10832 0.0017831
+Bora -0.761 -0.16929 0.2101 -1.1157 0.74454 -1.1218 0.47463 -0.29481 0.17755 -0.29277
+force -0.43796 -0.28804 -0.086755 -0.91122 0.42819 -1.1881 0.41628 0.079343 -0.11514 -0.073932
+us -0.27594 -0.071172 -0.20932 -0.96433 0.67585 -1.2376 0.37581 -0.30314 -0.14262 -0.33753
+John -0.23649 0.10085 -0.032482 -0.76448 -0.44261 -0.85056 0.49864 0.14196 -0.2002 0.32642
+early -0.27264 0.025757 0.10665 -0.91027 0.36301 -1.0546 0.51371 -0.058836 -0.30955 -0.20738
+groups -0.36844 -0.17499 0.19636 -0.95065 0.53639 -1.0072 0.3913 -0.11098 -0.19514 -0.15957
+third -0.010789 0.10851 0.11942 -0.86795 -0.41811 -0.78002 0.41311 0.31304 -0.47069 0.19831
+week -0.3272 -0.23908 0.076761 -0.98408 0.073715 -0.74294 0.37483 -0.016686 -0.19666 0.20611
+Meanwhile, -0.34793 -0.12484 0.015576 -0.82154 0.21952 -1.0105 0.49337 -0.031845 -0.23596 0.0039735
+several -0.29225 -0.38715 0.37939 -0.87924 -0.10337 -0.82511 0.32297 0.17878 -0.12513 0.21207
+area 0.051532 -0.079689 0.48495 -1.1795 0.40117 -0.7519 0.39812 -0.12376 -0.091419 0.2226
+believe -0.79137 -0.19282 0.30649 -1.0801 -0.20069 -0.65642 0.28836 -0.38646 -0.090604 0.1288
+war -0.072243 -0.19775 0.16679 -0.94965 0.23958 -0.99727 0.35177 0.22279 -0.092642 0.1017
+authorities -0.30937 -0.19796 0.20576 -1.0058 0.10396 -0.80331 0.4773 0.098594 -0.19382 0.21115
+yesterday -0.28142 0.068957 0.0015726 -0.86612 0.43597 -1.0735 0.69558 -0.018298 -0.23959 -0.10578
+50 -0.0055131 0.080877 0.11533 -1.0507 -0.39545 -0.64091 0.43053 0.24701 -0.28416 0.40795
+100 -0.16565 0.06535 -0.018297 -0.87717 -0.23263 -0.92046 0.48097 0.33465 -0.40374 0.057434
+troops -0.36922 -0.29548 0.19338 -0.87142 0.10742 -0.94169 0.4159 0.10247 -0.18104 0.051702
+few -0.16567 0.076985 0.16912 -0.88033 -0.37245 -0.86022 0.42284 0.21798 -0.42656 0.18659
+does -0.13963 0.10813 0.28804 -0.99911 -0.79363 -0.50716 0.35456 0.10862 -0.4552 0.42702
+Defence -0.33275 -0.25229 0.073641 -0.92387 0.25551 -0.8613 0.59302 0.015404 -0.076559 0.048157
+Arafat's -0.4413 -0.043291 -0.081289 -0.97458 0.29104 -0.9891 0.52851 -0.36433 0.084934 0.11324
+Dr 0.16032 0.22758 0.71706 -0.94864 -0.35815 -0.64197 0.41628 0.65847 -0.48944 0.11823
+Minister, -0.70766 -0.14913 0.079326 -0.81266 0.38258 -1.1154 0.59941 -0.16916 0.14987 -0.007826
+peace -0.40619 -0.10977 -0.29056 -0.8501 0.38124 -1.085 0.66782 0.041173 -0.11891 0.071098
+best -0.27665 -0.072405 -0.094569 -1.0096 0.1308 -0.86547 0.53475 -0.20991 -0.53823 -0.085448
+following -0.050905 0.051095 -0.0067287 -0.87015 -0.10041 -0.9497 0.49073 0.17642 -0.31966 0.035212
+areas -0.10445 -0.21987 0.52734 -1.1521 0.12014 -0.59408 0.40009 0.0093 -0.16673 0.35121
+leaders -0.67576 -0.26126 -0.010294 -1.0261 0.66205 -1.0784 0.4177 -0.33904 0.10604 -0.17319
+weather -0.3792 -0.21008 0.34221 -1.0772 -0.26225 -0.60824 0.28774 -0.069025 -0.24615 0.40984
+match -0.117 0.17501 -0.069883 -0.81983 -0.32765 -0.87824 0.53774 0.20668 -0.56704 -0.036571
+militants -0.40722 -0.23625 -0.014737 -0.91665 0.84706 -1.1936 0.56538 -0.074623 -0.067505 -0.24198
+eight -0.062936 -0.11716 0.24904 -0.90097 0.28141 -0.97546 0.4945 0.33458 -0.26289 -0.054645
+want -0.40733 -0.26792 0.10897 -0.84382 -0.76376 -0.80675 0.35178 0.14463 -0.20792 0.12911
+need -0.27294 -0.12376 0.088059 -1.0434 0.055144 -0.95699 0.26591 -0.15744 -0.16685 0.1328
+confirmed -0.45606 -0.34261 0.15985 -1.0169 0.38209 -0.9086 0.42904 -0.030701 0.025065 0.054046
+Christmas -0.42346 -0.20059 0.11211 -0.95636 0.26371 -0.97323 0.45247 -0.045015 -0.040042 0.050131
+close -0.38157 -0.17253 0.1743 -0.9326 0.27512 -0.97731 0.53688 -0.076656 -0.15657 0.030634
+state -0.017015 -0.26476 0.50601 -1.0991 0.40481 -0.83473 0.3761 0.065668 -0.24655 0.11798
+came -0.037252 -0.09478 0.041212 -0.91742 0.24824 -1.0215 0.38391 0.092885 -0.28134 -0.13021
+Pakistan -1.0344 -0.55098 0.11778 -1.0003 0.79482 -1.3063 0.43674 -0.25713 0.10226 -0.45291
+must -0.3736 -0.19977 0.10201 -0.80054 -0.0041245 -0.89754 0.58479 0.23427 -0.44577 0.069285
+months -0.047902 0.014662 0.089159 -0.83993 0.14977 -1.0455 0.43782 0.33566 -0.41078 -0.15639
+agreement -0.42855 -0.30447 0.23283 -0.90504 0.33957 -1.0427 0.55064 0.21444 -0.030315 -0.019234
+Sharon -0.69808 0.10407 -0.08883 -0.79992 0.5812 -1.3704 0.55518 -0.65019 0.26103 -0.22204
+fighters -0.39655 -0.19813 0.39436 -1.0541 0.8874 -1.0215 0.56892 0.041546 -0.087308 -0.36139
+12 -0.061409 0.12732 0.26817 -0.92274 -0.4023 -0.67929 0.46967 0.30867 -0.55092 0.21683
+help -0.21131 -0.05732 0.10325 -0.8906 0.01684 -0.99759 0.36714 0.14182 -0.34479 0.019159
+reports -0.088877 -0.17663 0.053594 -0.84656 0.040128 -0.8556 0.52898 0.23915 -0.24587 0.21702
+East -0.13076 -0.14889 0.23242 -0.90461 0.3774 -0.84839 0.49526 0.35142 -0.45245 -0.023691
+They -0.13025 -0.011063 0.16687 -1.0313 0.29914 -0.87881 0.45788 -0.13691 -0.2807 -0.09322
+brought -0.26909 -0.16135 0.31796 -0.95253 0.0753 -0.92622 0.39879 0.19852 -0.20287 0.016761
+city 0.18714 0.034228 -0.02816 -1.0117 0.45029 -0.99585 0.50922 0.12603 -0.26503 -0.035275
+Peter -0.28762 0.030569 0.17909 -0.83232 0.16319 -0.98571 0.45237 0.033855 -0.16878 0.0051439
+pay -0.19245 -0.22097 0.087784 -0.78108 -0.016373 -1.1001 0.29659 0.24276 -0.19958 -0.0072483
+hit -0.029509 -0.098019 0.2516 -1.0285 -0.30607 -0.86616 0.22168 0.18218 -0.26614 0.24156
+pressure -0.35528 -0.19301 0.12892 -0.89867 -0.22716 -0.77736 0.37761 0.095688 -0.28776 0.3276
+then -0.35176 -0.12039 -0.031151 -0.97461 -0.50257 -0.66456 0.3705 -0.16971 -0.25899 0.4849
+taken -0.57664 -0.13542 0.028271 -0.78419 0.30666 -1.1149 0.5694 -0.046325 -0.076419 -0.10462
+better -0.59077 -0.0051027 0.019789 -1.0218 0.16008 -0.91138 0.47098 -0.33228 -0.1158 0.07229
+believed -0.60145 -0.22611 0.30478 -1.1601 0.07217 -0.74924 0.26245 -0.33365 0.0025145 0.072238
+did -0.3958 -0.38905 0.18655 -1.0382 0.16038 -1.1677 0.057599 -0.20014 0.19879 -0.0073938
+took -0.10839 0.15146 -0.15541 -0.81116 -0.44431 -0.89837 0.53021 0.16957 -0.40483 0.11652
+senior -0.38855 -0.17306 0.11395 -0.94729 0.3511 -0.99365 0.53431 -0.10283 0.043805 0.069495
+held -0.41108 -0.37821 0.22226 -0.99807 0.42861 -0.94562 0.37285 -0.16397 -0.086166 -0.051732
+got -0.11397 -0.15438 0.13865 -0.97647 -0.35867 -0.73659 0.31706 0.14362 -0.24058 0.4386
+talks -0.49931 -0.24516 -0.034256 -0.92318 0.021433 -0.91349 0.44587 -0.16768 -0.11938 0.10184
+British -0.22552 -0.16832 0.169 -0.97782 -0.012919 -0.7888 0.42968 0.070682 -0.23556 0.22442
+her -0.56598 0.055176 0.047555 -0.94216 -0.24176 -0.80909 0.40857 -0.51021 -0.30132 0.29705
+without -0.25886 0.032211 0.1553 -0.93582 -0.25533 -0.85048 0.38057 0.20898 -0.3702 0.15656
+injured 0.00074489 -0.19117 0.18654 -0.98108 0.79047 -1.1871 0.46141 0.30228 -0.15298 -0.24834
+Northern -0.39826 -0.15638 0.18488 -1.0521 0.46062 -0.85188 0.52095 -0.034399 -0.10565 0.060159
+well -0.48799 -0.12225 0.032829 -1.0237 -0.50361 -0.5965 0.29598 -0.28021 -0.44472 0.27521
+maintenance -0.61375 -0.15998 -0.027396 -0.85445 0.032333 -0.9155 0.50017 0.058579 -0.084606 0.031407
+Melbourne -0.066233 0.013403 0.13338 -0.98869 -0.047375 -0.90083 0.39517 0.051843 -0.37869 0.085985
+lot -0.41807 -0.029617 0.20499 -1.028 -1.1215 -0.49001 0.24849 -0.1816 -0.20683 0.79841
+both -0.25871 -0.12474 0.18061 -1.0886 0.4581 -0.94714 0.46536 -0.34784 -0.017741 0.008381
+much -0.23254 -0.44972 0.19097 -0.92214 -0.70927 -0.51109 0.40323 0.2331 -0.29684 0.75299
+south 0.14374 -0.010507 0.36496 -1.127 0.7505 -0.80757 0.644 0.12086 -0.45496 0.0085237
+cut -0.20004 -0.091944 0.12072 -0.73048 -0.74231 -0.68913 0.36247 0.32306 -0.43043 0.42861
+accused -0.33038 -0.23776 0.13033 -0.92194 0.54449 -1.2079 0.43274 -0.019504 0.057967 -0.24631
+earlier -0.41149 -0.010543 0.10353 -0.90578 0.39562 -1.0189 0.52437 -0.15676 -0.17788 -0.17027
+asylum -0.11538 -0.20893 0.10297 -0.86109 -0.50573 -0.62727 0.37326 0.067346 -0.33961 0.6031
+10 -0.49438 -0.050398 -0.16229 -0.73428 0.53319 -1.2559 0.65049 -0.10158 -0.056939 -0.27456
+see -0.45122 -0.12177 -0.070854 -0.87715 0.040913 -0.86575 0.49731 -0.13756 -0.12492 0.24944
+too 0.18287 0.10614 0.18846 -0.96015 -0.44039 -0.75929 0.37792 0.27915 -0.43332 0.24308
+armed -0.45016 -0.20113 0.10785 -1.0627 0.9071 -1.2118 0.48822 -0.21134 0.16624 -0.29639
+across -0.075699 -0.19022 0.3084 -0.9353 0.038318 -0.82468 0.41577 0.25869 -0.37853 0.1539
+family -0.33615 -0.3111 0.19088 -0.97136 -0.15573 -0.72959 0.43323 -0.12522 -0.099185 0.41385
+such -0.26143 -0.21594 -0.064741 -0.88669 0.069956 -0.83751 0.53223 0.10565 -0.3756 0.13515
+Royal -0.27418 -0.14938 0.23725 -0.83529 -0.044903 -0.91108 0.41084 0.21683 -0.15486 0.22923
+court -0.29437 -0.34959 0.23248 -0.80349 -0.42829 -0.74289 0.328 0.19074 -0.2465 0.34028
+children -0.13545 -0.1111 0.18071 -0.91423 -0.18138 -0.891 0.37643 0.22425 -0.2165 0.20958
+shot -0.43351 -0.030061 0.041995 -1.0517 0.018698 -0.88439 0.39441 -0.18968 -0.093336 0.14719
+that's -0.32107 -0.31654 0.20442 -1.0791 -0.60048 -0.50862 0.31307 -0.054204 -0.17481 0.64328
+won -0.24805 -0.090059 0.23784 -1.0392 -0.25679 -0.82697 0.40986 0.015292 -0.13416 0.47716
+Labor -0.28452 -0.016484 0.13024 -0.82394 -0.092419 -0.88592 0.36317 0.10737 -0.36493 0.10804
+lead -0.6846 -0.14887 0.018467 -0.89821 -0.15861 -0.89749 0.43335 -0.21159 -0.091138 0.16415
+There -0.12561 -0.18585 0.26807 -1.0295 -0.14237 -0.65248 0.3227 0.12425 -0.29543 0.31737
+economy -0.13179 -0.041875 0.16667 -0.94119 -0.19573 -0.78074 0.54168 0.26438 -0.43674 0.28742
+change -0.24467 -0.17946 0.32127 -0.92869 -0.58275 -0.69887 0.24735 0.21868 -0.29403 0.5092
+Authority -0.42217 -0.25264 0.022447 -0.9286 0.28218 -0.95497 0.52786 0.025805 -0.13965 0.068731
+despite -0.27543 -0.041766 0.18001 -0.89649 -0.11945 -0.94989 0.47286 0.19412 -0.37398 0.012583
+Commission -0.53551 -0.17218 0.0092348 -0.83712 0.11043 -0.99994 0.50412 0.058624 -0.050097 0.075623
+return -0.36737 0.11555 -0.16405 -0.92815 0.37975 -1.0945 0.55478 -0.1456 -0.05689 -0.03853
+David -0.29403 -0.2399 0.18094 -0.8574 0.5962 -1.0227 0.5455 0.081132 -0.16507 -0.11859
+commission -0.50002 -0.21257 -0.037708 -0.77535 0.21794 -1.0495 0.53008 0.13119 -0.0026982 0.026108
+call -0.43877 -0.13721 0.060423 -0.79857 -0.11072 -1.0173 0.41725 0.10147 -0.11236 0.098438
+statement -0.26195 -0.34525 0.2732 -0.99823 0.61947 -1.0717 0.46618 0.012719 -0.010397 -0.12125
+past -0.28915 -0.24112 0.17668 -0.87909 0.27451 -1.0496 0.47349 0.31347 -0.22181 -0.047715
+information -0.45086 -0.23671 0.13233 -0.80661 -0.14774 -0.91442 0.46415 0.22982 -0.20506 0.13103
+even -0.27058 0.048198 0.1213 -1.0117 0.10055 -0.90405 0.63489 -0.07906 -0.12025 0.057478
+arrest -0.086376 -0.058381 0.046312 -0.99876 0.7556 -1.1305 0.61311 0.063976 -0.18774 -0.18132
+place -0.4674 -0.10882 -0.080005 -0.83937 -0.094726 -0.98055 0.49015 -0.032161 -0.28943 0.15186
+year 0.27039 -0.007233 0.012092 -0.95417 0.52353 -0.99487 0.63841 0.25306 -0.25799 0.010371
+play -0.27862 0.060327 -0.093838 -0.85528 -0.30116 -0.93001 0.49092 -0.0087302 -0.35281 0.2132
+asked -0.35223 -0.14514 -0.012209 -1.0488 0.58157 -1.2223 0.42761 -0.20006 0.052649 -0.1946
+public -0.18334 -0.1192 0.10097 -0.97386 -0.028791 -0.84513 0.43904 0.045472 -0.2538 0.19906
+working -0.4241 -0.18273 0.19895 -0.99109 -0.27194 -0.70348 0.3491 -0.006734 -0.17877 0.17169
+Union -0.70263 -0.24755 0.16509 -0.7781 -0.16795 -0.91712 0.41789 0.088135 -0.013141 -0.040677
+night 0.3338 -0.081474 0.50338 -1.0528 0.50759 -0.95374 0.4198 0.65809 -0.2817 -0.074874
+key -0.20595 0.18618 0.12332 -0.91346 -0.035322 -0.8324 0.40848 0.15421 -0.45605 -0.01563
+north 0.20955 0.088155 0.17457 -1.0621 0.55754 -0.98414 0.57941 0.19041 -0.20828 -0.012402
+continuing -0.32642 -0.11595 0.059364 -0.91338 0.023336 -0.87647 0.44437 0.19161 -0.25225 0.02376
+morning 0.11553 -0.086749 0.34038 -0.89217 -0.11287 -0.90697 0.4043 0.25783 -0.49138 0.012475
+leading -0.40523 -0.14475 0.0038426 -0.85295 0.21737 -1.0282 0.50669 -0.020732 -0.21039 -0.12723
+George -0.26592 -0.074049 0.13953 -0.91944 0.27929 -0.92697 0.43571 0.043364 -0.22461 -0.017088
+Police -0.15652 -0.10478 0.25991 -0.99124 0.11237 -0.88833 0.36961 0.1514 -0.1261 0.27155
+used -0.18958 -0.30279 0.24588 -1.0075 0.61903 -1.1353 0.33997 -0.018343 0.050965 -0.15997
+An -0.73566 -0.74929 -0.083344 -0.85408 1.1541 -1.4149 0.54669 -0.041512 0.28698 -0.33833
+southern -0.19998 -0.22607 0.29311 -1.0376 0.53842 -0.77811 0.56998 0.045338 -0.23899 0.16733
+captured -0.32281 0.002107 0.028081 -0.98009 0.4448 -1.0749 0.43451 -0.10775 -0.11066 -0.18329
+fighting -0.4162 -0.16521 0.11722 -0.96955 0.39053 -1.0457 0.48753 -0.038334 -0.084151 -0.24748
+released -0.22014 -0.23812 0.27713 -1.0124 0.2663 -0.93555 0.38565 0.0074626 -0.11337 -0.023907
+Waugh -0.22164 0.31172 -0.15097 -0.9313 -0.1693 -0.91597 0.56799 0.0009978 -0.40726 -0.1532
+Bush -0.21058 -0.060153 0.13604 -0.93105 -0.019194 -0.84492 0.35936 -0.12177 -0.25703 0.039739
+crew -0.25699 -0.1299 0.11452 -0.96782 0.51338 -1.0019 0.54531 -0.18658 -0.11839 -0.057076
+Pentagon -0.50376 -0.14918 0.27364 -0.93791 0.11913 -0.87984 0.36275 0.073624 -0.18463 0.011025
+At -0.040947 0.050582 0.15598 -0.94083 -0.22792 -0.76664 0.49245 0.17632 -0.43636 0.22072
+possible -0.18651 -0.11057 0.16929 -0.87023 -0.24695 -0.88211 0.36847 0.13555 -0.31755 0.19685
+December -0.30598 -0.10927 0.042717 -0.92013 0.52984 -1.1102 0.5527 -0.040006 -0.15978 -0.17016
+major -0.44952 -0.12188 0.14541 -0.92805 -0.015055 -0.9586 0.41725 0.020641 -0.19495 -0.050842
+economic -0.1941 -0.053602 0.18002 -0.87354 -0.12584 -0.75682 0.49391 0.26234 -0.40212 0.21214
+least -0.4078 -0.10687 0.12923 -1.0402 0.62992 -0.99161 0.53722 -0.11336 -0.11638 -0.14722
+head -0.26216 -0.18496 0.23588 -1.0013 0.25817 -0.88177 0.3235 0.0361 -0.21237 0.069663
+"If -0.31976 -0.32386 0.082281 -0.95444 -0.43486 -0.67138 0.38064 0.081474 -0.24689 0.43899
+eastern -0.68697 -0.16474 0.29965 -1.0627 0.81823 -1.0332 0.50845 -0.20251 0.10151 -0.2734
+American -0.1649 0.027856 0.083113 -0.93408 0.087311 -0.90684 0.49512 0.053134 -0.26319 0.060772
+win -0.32446 0.17796 -0.062549 -0.98462 -0.17157 -0.72011 0.52971 -0.15452 -0.46296 0.22632
+Queensland 0.016527 0.044988 0.066651 -0.98336 0.13892 -0.92871 0.43538 0.28002 -0.28573 0.070304
+winds -0.025473 -0.0088529 0.28802 -1.0519 0.037637 -0.7839 0.40417 0.21201 -0.39116 0.16377
+final -0.17817 0.037405 0.10366 -0.84472 0.24134 -1.0356 0.50595 0.20273 -0.2776 -0.029239
+Australians -0.17072 -0.092185 0.14527 -0.85526 0.19707 -0.95961 0.64503 0.21698 -0.453 -0.11382
+received -0.23806 -0.34423 0.38949 -1.0045 0.07478 -0.92204 0.20017 0.28745 -0.14465 0.1326
+give -0.304 0.094438 0.14191 -0.81612 -0.71065 -0.79482 0.35153 0.23877 -0.35483 0.26816
+Hill -0.59047 -0.42286 0.35883 -1.0262 -0.15735 -0.52297 0.46119 -0.056186 -0.089813 0.56627
+charged -0.11786 -0.16061 0.1471 -0.92866 0.27995 -1.1529 0.23516 0.0059955 -0.097249 -0.033219
+unions -0.51975 -0.38418 0.23387 -0.82299 -0.13937 -0.86892 0.37861 0.32471 -0.13947 0.16578
+behind -0.28614 -0.042677 0.25453 -0.93283 -0.42581 -0.7827 0.30868 -0.013495 -0.30824 0.3429
+within -0.076887 -0.09889 0.20743 -1.003 -0.54968 -0.64844 0.32648 0.1392 -0.52967 0.41043
+use -0.27491 -0.19348 0.06734 -0.99719 -0.31027 -0.82378 0.36823 0.011094 -0.27744 0.27496
+detainees -0.22612 -0.050389 0.22689 -0.88058 0.086684 -0.97112 0.49411 0.20803 -0.16081 0.12214
+fires 0.32144 -0.1585 0.72934 -1.1739 0.13582 -0.74533 0.26257 0.40625 -0.28486 0.26694
+director -0.16241 -0.20705 0.25557 -0.91044 -0.081741 -0.91521 0.2435 0.21604 -0.21635 0.12319
+Afghanistan, -1.0889 -0.40139 0.15554 -1.0654 0.87947 -1.1022 0.55014 -0.39719 0.21156 -0.28073
+Two 0.039483 0.10582 0.0092365 -0.86606 0.25223 -1.0646 0.52589 0.044008 -0.14283 0.068588
+large 0.060472 -0.077479 0.43381 -1.0201 0.17983 -0.93253 0.278 0.23135 -0.31978 0.12265
+your -0.017639 -0.13241 0.012114 -1.0383 -0.67943 -0.81817 0.1693 -0.11422 -0.35786 0.36868
+far -0.064217 -0.017994 0.13792 -1.0614 0.68439 -1.1755 0.46011 0.17765 -0.15849 -0.33652
+Williams -0.40211 -0.099452 0.039003 -0.94621 0.13136 -0.90192 0.449 -0.10279 -0.20152 0.032541
+India -0.48269 0.028407 0.23908 -0.9185 0.78234 -1.3202 0.63529 -0.1195 -0.045859 -0.58352
+damage -0.071572 -0.053924 0.26836 -0.91188 -0.25969 -0.78529 0.3703 0.42384 -0.40989 0.28618
+known -0.34469 -0.33091 0.15857 -1.096 0.087767 -0.74902 0.34905 -0.19035 -0.035211 0.20957
+child -0.022981 -0.24182 0.31703 -0.8507 -0.24837 -0.86491 0.27661 0.40675 -0.14529 0.28148
+million -0.68378 -0.34192 0.10969 -0.83539 0.16323 -1.0869 0.3785 0.039167 -0.029955 -0.029096
+legal -0.3215 -0.2221 0.14686 -0.88873 -0.33615 -0.78393 0.38696 0.15758 -0.22108 0.29789
+able -0.37697 -0.13266 0.22291 -0.95258 -0.20151 -0.85636 0.33762 -0.17219 -0.15911 0.36692
+stop -0.41403 -0.08617 0.19544 -0.98944 0.12766 -0.91673 0.31749 -0.10126 -0.1994 0.037702
+high -0.034964 -0.0018303 0.032594 -0.95032 0.40361 -1.1331 0.54806 0.02092 -0.12699 -0.16178
+may -0.088139 0.17051 -0.11849 -0.83318 -0.21708 -0.98455 0.50248 0.20886 -0.60238 -0.1351
+long -0.58904 -0.29478 0.20529 -1.0233 0.20982 -0.93275 0.38765 -0.3167 -0.12836 -0.037084
+soldiers -0.54631 -0.24664 -0.0013115 -0.98134 0.50507 -0.97717 0.5551 -0.23703 -0.051598 -0.064674
+centre -0.16357 -0.088873 0.23781 -0.91368 0.50806 -1.0944 0.56083 0.43539 -0.15288 -0.12649
+water 0.0163 0.15115 0.20899 -0.90915 -0.17346 -0.85685 0.42673 0.20662 -0.37154 0.3471
+process -0.3912 -0.33273 0.13729 -0.98103 -0.18425 -0.71818 0.32323 -0.064817 -0.20143 0.42002
+interest -0.22889 -0.10378 -0.04432 -0.77426 0.41609 -1.0316 0.66139 0.07026 -0.27459 -0.038257
+remain -0.33546 -0.041843 0.19591 -0.98053 0.27623 -0.93689 0.51675 0.089744 -0.15228 -0.088631
+Cup -0.39222 0.20582 -0.19441 -1.04 0.49042 -1.0834 0.74202 -0.31475 -0.10536 -0.2315
+forced -0.26048 -0.20505 0.033136 -0.93682 0.54523 -1.2521 0.37319 0.11684 -0.073001 -0.23612
+cricket -0.079899 0.23933 0.080047 -0.87499 0.057947 -0.94591 0.57732 0.27945 -0.42145 -0.17575
+Centre -0.098491 -0.098919 0.29968 -0.88787 0.36578 -0.91792 0.519 0.44358 -0.24666 -0.097863
+there's -0.14267 -0.37116 0.43398 -1.1361 -0.58011 -0.43721 0.23176 -0.046849 -0.2551 0.63644
+services -0.027633 -0.11073 0.24148 -0.94517 0.099167 -0.81618 0.48252 0.27186 -0.22543 0.21946
+role -0.25075 -0.14711 -0.016529 -0.84185 -0.30629 -0.91197 0.4177 0.0034674 -0.28862 0.18281
+morning. -0.13115 -0.12871 0.30529 -0.93988 0.13057 -0.9026 0.42958 0.10169 -0.33749 -0.0042525
+seen -0.25503 -0.14886 -0.0071094 -0.96396 0.29621 -0.96718 0.52247 -0.13596 -0.084971 0.042143
+might -0.12136 -0.015283 0.34012 -0.99759 0.18655 -0.90543 0.46259 0.18435 -0.22641 -0.00030777
+radio -0.31587 -0.025496 0.12696 -0.90522 0.19487 -1.0003 0.47502 -0.046322 -0.19526 -0.051484
+15 -0.0027815 -0.010627 0.35139 -0.91984 0.031506 -1.0024 0.38359 0.30927 -0.34202 -0.027485
+failed -0.28408 -0.13997 0.13126 -0.95783 0.23679 -1.0263 0.38851 0.03713 -0.10962 -0.058015
+"It -0.2127 0.0065145 0.15431 -0.9023 -0.72538 -0.57713 0.47729 0.13848 -0.30031 0.56853
+conditions -0.30619 -0.33596 0.28766 -0.97664 0.16578 -0.84737 0.39348 0.24603 -0.24549 0.12226
+heard -0.036849 -0.13805 0.32521 -0.96742 -0.21658 -0.76473 0.27268 0.16032 -0.36014 0.33078
+training -0.33004 -0.10865 0.19393 -0.90618 0.15863 -1.0472 0.41182 0.043335 -0.24102 -0.12324
+Palestinians -0.084665 -0.042344 -0.32423 -1.0157 0.99253 -1.327 0.65852 -0.17126 0.014889 -0.21945
+already -0.23222 -0.17401 0.1536 -0.9142 0.0067545 -0.88513 0.39916 0.076321 -0.14774 0.19729
+taking -0.34111 -0.083927 -0.076089 -0.8193 -0.3044 -0.88678 0.43857 0.010839 -0.37356 -0.063635
+towards -0.24141 -0.067541 0.1225 -0.93239 0.29631 -1.0728 0.46656 0.034587 -0.15042 -0.10345
+dead -0.30904 -0.2196 0.0068343 -1.0166 0.67039 -1.0183 0.52865 -0.24931 0.014482 0.069926
+same -0.28721 -0.05681 0.067372 -0.89551 -0.75304 -0.62097 0.23121 -0.10415 -0.427 0.42835
+Lee -0.57065 0.287 -0.31648 -0.79795 0.079652 -1.0968 0.48908 -0.042647 -0.30256 -0.36131
+board -0.085416 -0.21346 0.17409 -0.90036 0.13884 -0.87745 0.48846 0.12395 -0.19114 0.17559
+latest -0.1553 -0.098918 0.045245 -0.85515 0.51157 -1.0497 0.60468 0.062235 -0.3672 -0.13693
+However, -0.35929 -0.23019 0.23856 -1.0014 0.3696 -1.105 0.36722 -0.010449 0.081887 -0.039713
+due 0.26217 0.15237 0.08374 -0.82533 0.73949 -1.1983 0.7406 0.44587 -0.39938 -0.33752
+rates -0.23545 -0.052488 0.23878 -0.89587 0.30736 -0.91888 0.59585 0.16932 -0.24906 0.027702
+thought -0.34475 -0.14509 0.32866 -0.99768 -0.054778 -0.80094 0.37854 0.053205 -0.15685 0.18667
+Alliance -0.74028 -0.15661 -0.045948 -1.0052 0.34901 -0.97857 0.50019 -0.30252 -0.01314 -0.063821
+canyoning 0.00096151 -0.12593 0.14691 -0.81281 0.069324 -1.097 0.39818 0.10198 -0.35588 -0.11744
+offer -0.50201 -0.24419 -0.022542 -0.82268 0.15344 -1.0637 0.50403 -0.11537 -0.020506 -0.019694
+strikes -0.13813 -0.10681 0.082023 -0.95404 0.37004 -0.9642 0.49136 -0.0023333 -0.20633 0.023301
+half -0.29326 -0.17483 0.10851 -0.99788 0.093941 -0.83061 0.39508 -0.13702 -0.15929 0.11612
+Shane -0.40518 0.13598 -0.035674 -0.97505 0.06794 -1.0409 0.40337 -0.10238 -0.069763 -0.0046095
+storm 0.022854 -0.01158 0.37061 -1.0505 0.087099 -0.8141 0.37323 0.10991 -0.26812 0.23018
+I'm -0.21456 -0.013578 -0.085031 -0.91216 -0.49315 -0.83478 0.57767 -0.052232 -0.30253 0.2994
+aircraft 0.042737 -0.070513 0.23712 -1.0473 0.20835 -0.94714 0.36037 0.081297 -0.24822 0.043258
+bowler -0.34089 0.33838 -0.0016996 -0.93128 0.025725 -0.98494 0.49746 -0.047297 -0.2425 -0.10725
+Adelaide -0.044939 0.079867 0.074706 -0.9117 -0.040047 -0.9078 0.47254 0.1713 -0.47185 -0.026522
+great -0.071226 0.030578 0.21264 -1.0573 -0.11088 -0.70531 0.4732 0.026426 -0.30536 0.34767
+army -0.42827 -0.206 -0.03653 -1.0522 0.77898 -1.1822 0.52938 -0.39546 0.2095 -0.16596
+position -0.57825 -0.26886 0.043969 -0.81203 0.15898 -1.0362 0.46842 0.12703 -0.12563 0.07192
+administration -0.58092 -0.22505 0.080669 -0.81091 0.26554 -1.035 0.53144 0.077576 -0.095358 0.10347
+control -0.050748 -0.17503 0.22343 -0.97335 0.094469 -0.84336 0.42982 0.27929 -0.24484 0.24974
+violence -0.2323 -0.070436 -0.0079771 -0.94813 0.36988 -0.97238 0.48493 0.013139 -0.16171 -0.021263
+continue -0.28833 -0.014519 0.15639 -0.97033 0.23828 -0.90154 0.47412 0.29717 -0.22186 0.0051712
+news -0.59215 -0.15621 0.017262 -0.94796 0.27223 -0.91985 0.42573 -0.12415 -0.18765 -0.061016
+After -0.33253 0.14233 0.075992 -0.78174 -0.0085916 -0.97334 0.50921 0.097841 -0.27502 0.032031
+series -0.2891 -0.085626 0.17297 -0.90951 -0.092798 -0.70652 0.57757 -0.022069 -0.20133 0.29959
+York -0.23988 0.20609 0.11751 -1.0175 0.17168 -0.82336 0.44681 0.045135 -0.14793 -0.023503
+ago -0.37093 -0.35865 0.10456 -1.0275 -0.18844 -0.77547 0.29485 0.23651 -0.19287 0.21604
+strong -0.12487 -0.19973 0.31163 -0.93742 -0.26036 -0.73653 0.34761 0.14708 -0.36251 0.34623
+likely -0.5693 -0.3563 0.11266 -1.0417 0.012559 -0.80848 0.34499 -0.17244 -0.031366 0.24764
+later -0.54452 -0.075866 0.11857 -0.81861 0.2648 -1.0883 0.51375 -0.080365 -0.077602 0.030132
+today. -0.17828 -0.08966 0.19215 -0.86792 0.20829 -0.98452 0.53873 0.094942 -0.31039 0.004548
+Australia, -0.19928 -0.043556 0.17708 -0.80673 0.045817 -0.89914 0.66936 0.28328 -0.47921 -0.097498
+along -0.35875 -0.23487 0.13841 -0.99281 0.28109 -0.96264 0.46829 -0.088655 -0.25587 -0.18575
+Blue -0.32921 0.17929 0.14827 -0.96856 0.19427 -0.97128 0.51554 0.15698 -0.37641 -0.024242
+line -0.25023 -0.10539 0.15418 -0.97211 0.24883 -1.0799 0.38552 0.039534 0.052945 -0.069131
+right -0.10617 -0.11315 0.23144 -0.97867 0.33221 -1.0104 0.52065 0.12385 -0.14311 -0.133
+claimed -0.35025 -0.17717 0.27294 -0.95935 0.34933 -0.97263 0.38423 -0.025992 -0.20119 -0.17129
+Nations -0.46612 -0.40396 0.13747 -0.84393 0.28359 -0.93601 0.51385 0.24839 -0.26527 0.10986
+risk -0.16904 -0.17755 0.30726 -0.98054 -0.065309 -0.8264 0.33338 0.11302 -0.1219 0.21404
+own -0.014097 -0.26602 0.11106 -0.89549 0.46691 -0.89507 0.45256 -0.030322 -0.22677 0.04712
+buildings -0.061143 -0.0047946 -0.025975 -0.89984 0.095714 -0.994 0.49 0.15945 -0.31889 0.022768
+hospital -0.037349 -0.12998 0.18955 -0.95268 0.21243 -0.91339 0.46714 0.13491 -0.21672 0.073965
+chief -0.36788 -0.1658 0.11414 -0.84898 -0.033546 -0.87442 0.46921 0.15726 -0.25923 0.1799
+matter -0.54564 0.006823 -0.029043 -0.86175 0.077958 -1.0526 0.52024 -0.086473 -0.3017 -0.070833
+concerned -0.1732 -0.20173 0.32926 -1.0133 0.084236 -0.86609 0.36841 0.20493 -0.10091 0.17977
+campaign -0.40699 -0.27161 0.025515 -0.89658 0.24313 -0.98682 0.44068 0.035115 -0.091242 0.032817
+show -0.21416 -0.27701 0.3153 -1.0321 -0.15971 -0.67999 0.3832 0.09236 -0.17343 0.30864
+Adventure -0.040517 -0.13532 0.353 -0.95168 0.023476 -0.93465 0.30689 0.23992 -0.28893 0.11019
+guilty -0.20216 -0.043522 0.083572 -0.92687 0.20071 -0.92099 0.43184 -0.067119 -0.3179 0.00091516
+African -0.2024 0.35056 -0.066211 -0.93961 0.14744 -0.97384 0.62526 -0.010557 -0.41916 -0.24435
+envoy -0.67473 -0.14806 -0.046447 -0.81502 0.33356 -1.1331 0.44533 -0.16175 0.05812 -0.085223
+homes 0.14088 -0.034475 0.39976 -1.0534 0.10088 -0.71782 0.52129 0.29373 -0.34711 0.14863
+boat 0.0086287 -0.10716 0.22524 -0.98937 -0.10005 -0.61566 0.41495 -0.068118 -0.2481 0.32673
+rate -0.39919 -0.069286 0.0034546 -0.84483 0.2335 -0.92006 0.62933 0.1589 -0.31521 0.08722
+month -0.091638 -0.071536 0.12925 -0.9252 0.43046 -1.0922 0.45127 0.1197 -0.20081 -0.17437
+west 0.0094504 0.022666 -0.043279 -1.0138 0.60269 -0.97813 0.59047 0.02209 -0.39855 -0.031355
+launched -0.28076 0.0035345 0.09612 -1.0289 0.55087 -1.0934 0.46398 -0.030732 -0.08573 -0.20215
+Ms -0.1693 -0.024214 0.2036 -1.065 -0.48284 -0.8086 0.24235 -0.10775 -0.33241 0.33664
+move -0.12252 -0.17686 0.078811 -0.85205 -0.16308 -0.942 0.38466 0.059054 -0.22594 0.2758
+industrial -0.51341 -0.1521 0.060852 -0.82769 -0.37555 -0.86717 0.37908 0.13903 -0.1444 0.093291
+special -0.24727 -0.25317 0.05622 -0.88789 0.0026893 -0.82646 0.35959 0.20746 -0.21304 0.23176
+Downer -0.58852 -0.22938 0.35931 -0.94535 -0.29586 -0.76081 0.32812 -0.16499 -0.045356 0.26698
+Kandahar -0.29682 -0.11128 0.13414 -0.92091 0.58496 -1.0662 0.5407 0.041656 -0.14686 -0.16771
+plans -0.26949 -0.17732 0.129 -0.91765 0.26921 -0.93932 0.51331 0.029577 -0.18829 0.081238
+officers -0.28559 -0.22919 0.1258 -0.93854 0.61275 -1.151 0.53171 -0.063958 0.03405 -0.1115
+town -0.035656 -0.22186 0.089919 -1.04 0.84213 -1.14 0.45628 -0.166 -0.035811 -0.095347
+firefighters -0.12692 -0.19933 0.46779 -1.0823 0.31873 -0.84548 0.45963 0.24173 -0.21691 0.042936
+decision -0.48339 -0.020654 0.030877 -0.85514 0.19915 -1.0503 0.51939 0.055609 -0.1193 0.00057066
+flight -0.17949 -0.1495 0.18775 -0.88991 0.39984 -1.0605 0.47715 0.15983 -0.10361 -0.20439
+death 0.057547 -0.13383 0.095832 -0.95011 0.12673 -0.86911 0.37013 0.14583 -0.21993 0.17032
+Swiss -0.25035 -0.17656 0.15292 -0.85423 -0.50274 -0.69927 0.32663 0.21845 -0.31788 0.43299
+me -0.35403 -0.10642 -0.16637 -0.77878 -0.60913 -0.94614 0.47597 -0.023491 -0.16753 0.2014
+Trade -0.21383 0.019332 0.046942 -0.93263 0.30361 -1.0082 0.44523 0.032281 -0.26381 -0.049947
+men -0.08405 -0.17308 -0.12009 -0.97632 0.90007 -1.2422 0.57854 -0.26449 0.020887 -0.25508
+today, -0.13313 -0.11522 0.17201 -0.90986 0.29172 -0.96278 0.53729 0.11652 -0.26396 0.079324
+captain -0.33279 0.11211 0.05412 -0.91826 0.17814 -0.98857 0.53571 -0.015231 -0.25209 -0.11477
+really -0.35473 -0.097594 0.19306 -0.91792 -0.78484 -0.678 0.38567 0.20476 -0.3916 0.50253
+planning -0.24482 -0.083709 0.097347 -0.85534 -0.10172 -0.92347 0.36516 0.0084243 -0.38041 -0.081162
+jobs -0.14945 -0.047958 0.27719 -0.84695 -0.48319 -0.70103 0.48378 0.16802 -0.35257 0.43338
+Laden's -0.84876 -0.22134 0.40069 -1.1128 0.73137 -1.0188 0.2719 -0.36349 0.013102 -0.33474
+event -0.024604 -0.072418 0.23616 -0.96716 0.32212 -0.99293 0.64446 0.38017 -0.13658 0.0059757
+enough -0.32023 0.098302 0.0096032 -0.85613 -0.16518 -0.99403 0.48051 -0.030379 -0.2096 0.080321
+bus -0.71213 -0.079262 -0.25133 -0.92337 1.0806 -1.4162 0.78796 -0.48473 0.078979 -0.33458
+UN -0.54816 -0.048432 0.12611 -0.86137 0.27431 -1.0655 0.59413 -0.031415 -0.13637 -0.003523
+Zinni -0.50128 0.017488 -0.1918 -0.93632 0.22123 -0.94346 0.60073 -0.18784 0.0024587 0.066372
+important -0.22451 -0.2042 0.18431 -0.9583 0.047671 -0.85765 0.44231 0.11295 -0.27287 0.10683
+health -0.10558 -0.17499 0.2288 -0.94858 0.22865 -0.97927 0.37151 0.10052 -0.10578 0.02896
+others -0.28787 -0.395 0.34208 -1.0667 0.40654 -0.84971 0.45401 0.0066727 -0.10223 0.083959
+Industrial -0.57372 -0.09693 0.02127 -0.83164 -0.49892 -0.89496 0.39075 0.063725 -0.16263 0.13486
+Mark -0.36877 0.27568 -0.03104 -0.90449 -0.48173 -0.91208 0.40797 0.147 -0.29862 0.023239
+union -0.6202 -0.28923 0.21896 -0.77973 -0.28947 -0.94769 0.37978 0.32314 -0.027591 0.07152
+"He -0.45909 -0.21562 0.058993 -0.84483 -0.099631 -0.87833 0.43008 0.078521 -0.29326 0.10338
+late -0.3475 -0.25341 0.25738 -0.9397 0.35775 -1.0721 0.51631 0.10118 -0.22909 -0.032748
+sure -0.14035 -0.058039 0.11566 -0.92932 -0.49738 -0.66551 0.38233 0.16903 -0.45261 0.49004
+side -0.31318 -0.055371 -0.13075 -0.93074 -0.095578 -0.98997 0.42557 -0.00036938 -0.31781 0.0050635
+weapons -0.4718 -0.2076 0.10377 -0.92709 0.22634 -0.9232 0.38295 -0.13678 -0.20357 -0.015071
+Service 0.10996 -0.18879 0.25716 -1.0271 -0.25646 -0.64395 0.33704 0.37956 -0.33758 0.45461
+jail -0.37638 0.026194 -0.025368 -0.92421 0.23885 -0.87398 0.55937 -0.048547 -0.18372 0.054618
+Zealand 0.0043498 0.13487 0.09079 -0.8991 -0.030375 -0.8348 0.50432 0.36604 -0.35552 0.095627
+International -0.3996 -0.14946 0.11295 -0.73793 0.39268 -1.1519 0.57884 0.2536 -0.20171 -0.08369
+probably -0.33818 -0.12145 0.18426 -0.95942 -0.076147 -0.75996 0.4724 0.059822 -0.3102 0.21379
+network -0.76982 -0.14867 0.29491 -1.0421 0.31272 -0.82967 0.35551 -0.3277 -0.070193 -0.056567
+Australia. -0.22091 -0.017653 0.187 -0.80241 0.0045872 -0.84669 0.65882 0.30617 -0.49004 -0.096869
+find -0.3074 0.13148 0.22503 -0.90008 -0.27705 -0.77319 0.38533 -0.092883 -0.28932 0.13818
+my -0.55451 0.12144 -0.0093719 -0.97671 -0.62483 -0.66736 0.48245 -0.25872 -0.50878 0.077701
+station -0.53447 -0.29584 0.13297 -0.85269 0.32235 -1.0057 0.42896 0.17143 -0.1653 0.042014
+Bichel -0.40509 -0.044277 -0.0088616 -0.88798 0.24663 -1.1217 0.52461 0.015741 -0.17843 -0.15178
+1999 -0.18455 0.069741 0.18764 -0.8856 0.53729 -1.1298 0.46995 0.0017765 -0.30787 -0.26738
+life -0.24612 -0.33524 0.18092 -0.93094 0.15349 -0.92696 0.32574 0.04259 -0.15932 0.10387
+National -0.32576 -0.18403 0.13924 -0.69377 0.30312 -1.1257 0.63131 0.3921 -0.2447 0.010923
+prepared -0.21991 -0.20488 0.12785 -0.885 0.14089 -0.97711 0.3799 0.14702 -0.18668 0.038318
+home -0.17758 -0.073843 -0.056814 -0.9827 0.25884 -0.88551 0.56779 -0.03591 -0.26311 -0.022736
+Sydney, 0.38089 0.10582 0.37774 -1.1327 0.37215 -0.75697 0.59491 0.24816 -0.40122 0.19168
+political -0.23895 -0.17101 0.093477 -0.8838 0.17914 -0.98695 0.50693 0.25728 -0.17116 0.046091
+14 -0.31575 -0.076226 0.018773 -0.82727 0.83066 -1.2612 0.6004 -0.37257 0.009522 -0.22477
+helicopters -0.23121 -0.12721 0.081126 -0.9841 0.62077 -1.0337 0.47125 0.0061639 -0.20141 -0.12253
+wants -0.39181 -0.28013 0.16434 -0.88982 0.34146 -1.0773 0.43535 0.0763 -0.12478 -0.13743
+General -0.33731 -0.36169 0.34625 -0.91321 -0.25595 -0.83866 0.32095 0.27438 -0.14076 0.26922
+carrying -0.37832 -0.025182 -0.028287 -0.89457 0.22042 -1.0354 0.52053 -0.11677 -0.2781 -0.29793
+Middle -0.40746 -0.1289 -0.089367 -0.91371 0.2377 -0.95979 0.52702 -0.015126 -0.079519 0.1346
+using -0.26039 -0.19974 0.0027378 -0.85818 0.07639 -0.91421 0.45785 -0.044387 -0.19986 0.036548
+northern -0.1314 -0.10187 0.16731 -1.0625 0.51044 -0.84401 0.53194 0.10286 -0.16342 0.10458
+operations -0.4037 -0.3316 0.025667 -0.89908 0.47275 -1.0024 0.56941 0.22835 -0.24424 -0.031465
+defence -0.34835 -0.2211 0.050224 -0.95564 0.17038 -0.8682 0.51416 -0.0026649 -0.068871 0.15956
+carried -0.26137 -0.13546 -0.019057 -0.94378 0.33946 -1.0995 0.42136 0.014035 -0.021979 -0.016227
+Hollingworth -0.030212 0.07015 0.23553 -0.96126 -0.022018 -0.89547 0.47997 0.25544 -0.2351 0.065736
+comes -0.12515 -0.21734 0.30096 -0.96863 0.091718 -0.82099 0.52801 0.28297 -0.21324 0.20068
+person -0.31443 -0.073895 -0.07208 -0.99595 0.39315 -1.0454 0.47549 -0.15756 -0.21276 -0.042487
+Unions -0.58393 -0.34103 0.16019 -0.85448 -0.010625 -0.86669 0.40667 0.13006 -0.11536 0.059159
+Jihad -0.25044 -0.1311 0.11354 -0.91889 0.56741 -1.0475 0.54933 -0.036782 -0.07521 -0.13064
+every -0.23024 -0.18855 0.20065 -0.97747 -0.54483 -0.62561 0.38552 0.046008 -0.21172 0.57272
+Israelis -0.3279 -0.092185 -0.3384 -1.0311 0.98386 -1.3114 0.63479 -0.45063 0.025191 -0.21609
+years. -0.071905 -0.16077 0.028975 -0.98995 0.16042 -0.80394 0.58575 0.14118 -0.29376 0.15611
+Relations -0.47999 -0.22928 0.007061 -0.82066 0.38031 -1.0734 0.60641 0.2529 -0.34925 -0.099694
+abuse -0.41617 -0.17554 0.11074 -0.97323 -0.09883 -0.84307 0.39191 0.030254 -0.13567 0.22793
+kilometres -0.23393 -0.077966 0.26269 -0.95865 0.21062 -0.98748 0.44364 0.1892 -0.14065 0.021218
+until -0.36532 -0.015918 0.015624 -0.91358 0.06594 -0.95147 0.50103 -0.04358 -0.14284 0.088419
+tried -0.3707 -0.23133 0.098954 -0.93306 0.34043 -1.1061 0.2772 0.037984 0.050213 -0.051578
+become -0.30943 -0.1512 0.041733 -0.94765 -0.16194 -0.72357 0.51597 0.0077977 -0.36744 0.21203
+Fire 0.44447 -0.19245 0.64022 -1.2496 -0.43456 -0.4926 0.11751 0.48495 -0.56266 0.60643
+alleged -0.13987 -0.14386 0.23963 -0.96288 0.2887 -1.1934 0.18076 0.18774 0.023957 -0.033033
+policy -0.23414 -0.14868 0.037421 -0.92876 -0.17332 -0.80174 0.47739 0.083862 -0.1634 0.30527
+job -0.29817 0.15863 -0.011452 -0.73014 -0.44408 -0.80389 0.59752 0.047052 -0.40874 0.17
+race -0.23623 0.12272 -0.12789 -0.87828 0.12137 -1.0007 0.55153 0.084974 -0.30908 -0.056355
+raids -0.4405 0.055256 0.062423 -0.97207 0.59969 -1.1253 0.52018 -0.20184 -0.073733 -0.19791
+Security -0.25179 -0.26211 0.012311 -0.99779 0.54335 -1.0733 0.49651 -0.13276 -0.044672 0.03434
+each -0.25856 0.074421 0.05647 -0.83658 -0.083764 -0.9344 0.56955 0.26072 -0.35617 0.015302
+said, -0.25902 -0.23099 0.28328 -1.0505 -0.28032 -0.65906 0.29252 -0.11605 -0.18789 0.41448
+deal -0.17886 -0.34216 0.20539 -0.84713 -0.13152 -0.9213 0.3724 0.21342 -0.14918 0.36828
+making -0.28803 -0.08816 0.0096906 -0.82431 -0.64894 -0.738 0.39803 0.1298 -0.52578 0.13695
+emergency -0.26612 -0.1099 0.065147 -0.91568 0.41001 -1.0744 0.52717 0.037593 -0.18953 -0.10363
+sent -0.19357 -0.27141 0.29263 -0.77914 -0.046579 -0.91439 0.52573 0.31398 -0.057896 0.13753
+plane -0.34638 -0.1023 0.082522 -0.96101 0.2565 -1.0639 0.36914 -0.16762 -0.031945 -0.043187
+McGrath -0.17043 -0.051306 -0.020217 -0.9169 0.27615 -1.0228 0.48797 0.020804 -0.22426 -0.031734
+seekers -0.48644 -0.44184 0.13376 -0.96734 0.12767 -0.66738 0.49504 -0.098521 -0.095709 0.32882
+immediately -0.36355 -0.227 0.043711 -0.96031 0.26305 -1.0306 0.46492 0.039272 -0.097878 0.042057
+opening -0.17873 0.038679 0.038125 -0.85227 0.24574 -1.1265 0.48156 -0.01966 -0.35637 -0.31265
+financial -0.30118 -0.27108 0.12209 -0.83559 0.11444 -1.009 0.40422 0.124 -0.10492 0.10687
+opposition -0.52953 -0.28352 0.024003 -0.82079 0.18808 -1.0265 0.48246 0.12408 -0.16336 0.077984
+beat -0.44952 0.047498 -0.059399 -1.057 -0.36293 -0.67571 0.42371 -0.24185 -0.28456 0.22016
+HIH -0.47638 -0.30372 0.11696 -0.78749 -0.012724 -0.80612 0.40415 0.14367 -0.23078 0.29014
+am -0.46544 0.14943 -0.027456 -0.98103 0.27046 -0.88687 0.48696 -0.33832 -0.11751 -0.088589
+proposed -0.22032 -0.21796 0.32289 -0.90467 -0.45117 -0.7144 0.30345 0.28281 -0.27091 0.30881
+evidence -0.40336 -0.16851 0.057301 -0.99487 0.063628 -0.8195 0.45084 -0.0023912 -0.15993 0.12882
+issue -0.20286 0.14266 0.12136 -0.92091 -0.2528 -0.76598 0.39263 0.30105 -0.31183 0.19294
+community -0.23492 -0.37318 0.25533 -0.91363 0.059018 -0.88329 0.39885 0.32284 -0.1588 0.23015
+suspected -0.34525 -0.10702 0.18567 -1.0473 0.27441 -0.84641 0.39509 -0.14546 -0.14767 -0.013768
+bombing -0.27627 -0.12407 -0.025868 -0.8967 0.11571 -0.88214 0.44439 -0.13446 -0.24008 -0.0067358
+deaths -0.080647 -0.10233 0.13786 -0.92447 0.033617 -0.85785 0.36213 0.16064 -0.30454 0.10584
+radical -0.14642 -0.02874 0.0063376 -0.8976 0.41309 -1.0202 0.49822 0.15056 -0.23713 -0.13541
+laws -0.21059 -0.044915 0.19047 -0.93203 0.11675 -0.97785 0.42655 0.20573 -0.3067 -0.03825
+went -0.45038 -0.11098 0.18192 -0.94314 -0.014208 -0.95047 0.4455 0.14278 -0.11996 0.082557
+allow -0.090794 -0.074926 0.1755 -0.97726 0.088112 -0.94784 0.37043 0.15258 -0.090754 0.18805
+result -0.29583 -0.18522 0.2357 -0.91104 0.0054902 -0.92295 0.34697 0.17311 -0.19238 0.17041
+"It's -0.37833 -0.11473 -0.013531 -1.0353 0.011208 -0.81535 0.59501 -0.086298 -0.14879 0.24644
+Senator -0.36911 -0.24955 0.33815 -1.0253 0.043189 -0.81357 0.30949 0.046325 -0.17431 0.24162
+Department -0.30033 -0.34507 0.26669 -0.84222 -0.049876 -0.91746 0.46195 0.35211 -0.11222 0.14093
+warplanes -0.29239 -0.09469 0.18425 -0.94719 0.32186 -0.9657 0.37826 -0.04488 -0.047268 0.035734
+Council -0.35524 -0.3422 0.12564 -0.89316 0.2501 -0.97434 0.483 0.20005 -0.14954 0.0051255
+Ariel -0.48719 0.037788 0.031469 -0.74902 -0.10285 -0.97876 0.61608 -0.13939 -0.040404 0.20097
+different -0.098991 -0.16926 0.22102 -0.98309 0.02349 -0.91166 0.49676 0.16403 -0.161 0.13375
+"There -0.19236 -0.17333 0.25456 -1.0477 -0.0088454 -0.76699 0.321 0.086953 -0.15734 0.26294
+rejected -0.28531 -0.049575 0.055564 -0.89875 0.026118 -0.95553 0.38317 0.037622 -0.12241 0.067581
+reported -0.19702 -0.19608 0.18906 -0.91063 -0.021168 -0.88541 0.3912 0.13244 -0.17061 0.17465
+One -0.1883 -0.021232 0.32823 -1.0043 0.34116 -1.0373 0.30109 -0.0078587 0.017532 -0.097623
+details -0.2459 -0.0043803 0.17589 -0.8699 -0.030403 -0.96819 0.41229 0.11994 -0.21326 0.03971
+hundreds -0.1179 -0.098527 0.14361 -0.99988 0.28367 -0.97639 0.47041 0.074146 -0.18637 -0.08792
+Secretary -0.35576 -0.20606 0.075651 -0.93688 0.191 -0.90759 0.51749 -0.11536 -0.036384 0.024759
+full -0.12038 0.14044 0.20748 -0.92319 -0.29811 -0.66853 0.4504 0.078529 -0.33246 0.34165
+calls -0.29975 -0.15709 0.15753 -0.84773 -0.14706 -0.86039 0.36401 0.27873 -0.19795 0.14575
+drop -0.42159 -0.13677 0.080038 -0.94191 0.11131 -1.0293 0.42309 -0.16101 -0.19606 0.01346
+growth -0.07259 -0.28981 0.27615 -1.0298 0.29384 -0.78796 0.46195 0.11602 -0.19833 0.19302
+hard -0.20498 -0.02465 0.1661 -0.9054 0.0013864 -0.94509 0.44938 -0.043615 -0.14109 0.10793
+fight -0.25409 -0.15276 0.3869 -1.0736 0.57205 -0.94709 0.49104 0.060624 -0.061899 -0.23552
+Woomera -0.24158 -0.055035 0.19377 -0.91819 -0.016829 -0.87466 0.50685 0.29162 -0.17826 0.2253
+allegations -0.30052 -0.30396 0.21668 -0.86851 -0.016164 -0.94555 0.37399 0.33265 -0.20512 0.17885
+caught -0.28616 -0.038503 0.10752 -0.95922 0.27824 -1.0011 0.51716 0.058671 -0.05291 -0.085257
+opened -0.16128 -0.099327 0.041465 -0.97883 0.51974 -1.1129 0.40655 -0.14017 -0.0966 -0.24245
+getting -0.60234 -0.078298 -0.16695 -0.90073 0.0048955 -0.99791 0.46585 -0.19268 -0.1735 -0.077584
+bombings -0.18144 -0.045621 -0.08839 -0.93942 0.35837 -0.94121 0.53292 -0.071254 -0.24936 -0.024677
+although -0.39983 -0.086445 0.2458 -1.0253 -0.13943 -0.83683 0.36993 -0.12281 -0.076385 0.21606
+building -0.17313 -0.06911 0.02497 -0.86335 -0.10145 -0.91135 0.46626 0.11933 -0.34054 -0.01262
+always -0.099338 -0.16392 0.23017 -0.99304 -0.091784 -0.71582 0.35264 0.086487 -0.2496 0.3216
+2 -0.15545 0.035836 -0.0077972 -0.98733 0.25396 -1.0182 0.48962 -0.015344 -0.22089 -0.24752
+look -0.20214 -0.12049 0.13222 -0.91602 -0.7254 -0.70241 0.40645 0.13836 -0.3255 0.44921
+Jewish -0.056948 -0.041342 0.04173 -0.94601 0.38495 -0.97229 0.52959 0.0022186 -0.2429 -0.076027
+source -0.33497 -0.087328 -0.1113 -0.9172 0.34065 -0.9776 0.57745 -0.1448 -0.21374 -0.012633
+flights -0.22701 -0.10587 0.22915 -0.90944 0.37374 -1.0377 0.47777 0.1837 -0.14216 -0.19452
+quite -0.25175 -0.22422 0.27164 -1.0326 -0.18216 -0.74256 0.33936 0.06437 -0.28912 0.29318
+killing -0.25686 -0.14649 -0.00014256 -0.90274 -0.12336 -0.98858 0.44911 0.0068644 -0.20173 -0.040376
+Strip -0.1356 -0.26696 0.18214 -0.98423 0.82974 -1.1219 0.42037 0.036817 -0.078735 -0.12709
+bid -0.37077 -0.23103 0.19757 -1.0146 0.81412 -1.2049 0.28057 -0.12465 0.22361 -0.28075
+understand -0.37883 -0.15315 0.098055 -0.94035 -0.0089921 -0.86651 0.40035 0.027029 -0.22866 0.048836
+year's -0.0078248 -0.09619 0.17557 -0.97446 0.1173 -0.83811 0.59289 0.18105 -0.29963 0.17022
+innings -0.17982 0.076362 -0.15785 -0.92241 0.49047 -1.13 0.59651 0.023168 -0.32511 -0.32717
+access -0.35938 -0.23449 0.048085 -0.88403 0.11329 -0.97133 0.5078 -0.035407 -0.18539 0.068704
+ago. -0.16745 -0.11987 0.047255 -0.98502 0.091684 -0.94066 0.48054 0.059722 -0.26523 0.11259
+young -0.052772 -0.1533 0.21176 -0.98047 -0.1703 -0.86867 0.28618 0.16079 -0.2614 0.1791
+himself -0.41513 -0.01386 -0.013133 -0.96159 -0.03035 -0.83948 0.4415 -0.073896 -0.18098 0.13272
+meet -0.6892 0.12278 -0.059613 -0.82415 0.1907 -1.1716 0.49659 -0.23193 -0.034196 -0.17992
+On -0.24926 0.2477 -0.054523 -0.80452 -0.51011 -0.76588 0.50566 0.037485 -0.20762 0.23825
+Commonwealth -0.23119 -0.14886 0.14519 -0.90128 -0.0035436 -0.92767 0.44947 0.10889 -0.23743 0.18265
+Bureau -0.16077 -0.021117 0.24038 -0.91542 0.17771 -0.8947 0.5087 -0.02436 -0.29051 0.085372
+targets -0.14882 -0.11944 0.053442 -0.94995 0.34197 -0.88971 0.48677 -0.026809 -0.26734 0.032219
+"We're -0.086301 -0.012208 0.073553 -0.97498 0.04867 -0.88478 0.40897 0.088269 -0.24305 0.13491
+militant -0.4391 -0.29585 0.026277 -0.95421 0.69054 -1.1851 0.54031 -0.11661 -0.024484 -0.18447
+running -0.079897 0.05711 0.038853 -0.91501 -0.13324 -1.0015 0.39354 0.18559 -0.45126 -0.18506
+caves -0.28691 0.11883 0.066076 -1.0442 0.57614 -0.99247 0.55009 -0.031571 -0.032725 -0.20788
+declared -0.052889 -0.05141 0.15401 -0.96843 0.46864 -1.0297 0.46719 0.10203 -0.21326 -0.12957
+reached -0.44212 -0.16723 0.12568 -0.91301 0.024306 -0.90236 0.39833 0.062853 -0.08777 0.046893
+18 0.054921 -0.11309 0.11605 -0.77062 -0.060609 -0.92333 0.35447 0.30628 -0.45244 0.18787
+20 -0.22533 -0.1106 0.14139 -0.8831 0.4986 -1.1438 0.49541 0.11371 -0.20783 0.0040105
+among -0.49796 -0.27051 0.11415 -0.94687 0.47517 -0.96776 0.47731 -0.12582 -0.13888 -0.090727
+based -0.25069 -0.22415 0.25071 -0.98506 0.13426 -0.90901 0.29891 0.037888 -0.048462 0.078416
+Howard -0.094855 0.025978 0.21725 -1.0421 -0.22107 -0.83696 0.3628 0.026865 -0.2639 0.11659
+try -0.46085 -0.26442 0.20995 -0.99564 0.10121 -0.90349 0.35863 -0.057345 -0.12138 0.15032
+believes -0.67137 -0.17036 0.26685 -1.0768 0.14739 -0.72407 0.35888 -0.36828 -0.040496 -0.0035927
+July -0.32955 -0.36062 0.39482 -0.94008 -0.14972 -0.71303 0.32794 0.19853 -0.2126 0.25866
+actually -0.2289 -0.073151 0.14274 -0.93537 -0.43631 -0.73256 0.33608 0.085956 -0.31936 0.35602
+currently -0.30254 -0.11033 0.17194 -0.84159 -0.084001 -0.8061 0.50987 0.17284 -0.28415 0.13813
+announced -0.42028 -0.18456 0.18197 -0.9778 0.14524 -0.92541 0.39784 -0.054199 -0.044202 0.042121
+clear -0.01766 -0.14938 0.25252 -1.0235 -0.07958 -0.72622 0.41753 -0.029375 -0.27612 0.2745
+State -0.37626 -0.24598 0.14162 -0.87221 0.56295 -1.087 0.61413 0.022581 -0.19923 -0.25108
+Parliament -0.46191 -0.25638 0.23833 -0.90053 0.43435 -0.99233 0.53144 0.1489 -0.10922 -0.11228
+here -0.29754 -0.28154 0.27744 -1.0449 -0.3836 -0.61764 0.23703 0.12542 -0.27986 0.43399
+Britain -0.41509 -0.16547 0.19246 -0.93156 0.4166 -1.0847 0.5131 0.12528 -0.23074 -0.25184
+year, -0.10651 -0.013289 0.075046 -0.9704 0.31971 -0.93009 0.60224 0.21259 -0.30398 0.0022467
+executive -0.15144 0.032854 0.10856 -0.85138 -0.23817 -0.86353 0.43772 0.14153 -0.40333 0.21818
+surrender -0.39416 -0.1037 0.12542 -0.92244 0.022295 -0.92797 0.50559 0.03057 -0.17871 0.13987
+Alexander -0.39375 -0.070985 0.019329 -0.82865 0.25753 -1.1342 0.5418 -0.13856 -0.035291 -0.0044781
+flying -0.12358 -0.085658 0.0039751 -0.90072 -0.052444 -0.98421 0.44649 0.076044 -0.35365 -0.11421
+weekend -0.27191 -0.20531 0.14953 -1.0588 0.21455 -0.8166 0.39648 -0.052563 -0.24843 0.1731
+time. -0.27678 -0.035373 0.015089 -0.85877 -0.17774 -0.82998 0.40956 0.0045983 -0.29376 0.14535
+human -0.325 0.040529 0.1051 -0.91902 0.32687 -1.0524 0.5324 0.015324 -0.20708 -0.086047
+Immigration -0.62166 -0.32346 0.16311 -0.83192 0.17072 -0.95213 0.47813 0.17228 -0.11817 0.084171
+days. -0.21962 -0.072669 0.16506 -0.92774 0.24268 -1.0086 0.4454 0.040181 -0.32095 -0.066109
+airline -0.23745 -0.10759 0.25576 -1.0061 -0.017262 -0.93116 0.33664 0.060348 -0.14106 0.0597
+river -0.31547 -0.14686 0.24461 -0.79813 -0.53261 -0.88609 0.33665 0.082408 -0.27995 0.35627
+annual -0.07151 -0.0082519 0.10891 -0.90364 0.13375 -0.95719 0.39925 0.14119 -0.27644 0.024862
+yet 0.032871 0.011395 0.30045 -0.93906 -0.21429 -0.78424 0.52674 0.21043 -0.27387 0.25205
+we're -0.11724 -0.2325 0.16908 -1.0447 -0.12363 -0.72712 0.359 0.076173 -0.26036 0.31823
+travel -0.24645 -0.12484 0.29633 -0.85444 -0.19344 -0.84535 0.40432 0.08839 -0.29996 0.27319
+sex -0.12885 -0.17146 0.17803 -0.94059 0.29546 -0.91931 0.50233 0.047885 -0.077329 0.21403
+expect -0.24927 -0.091875 0.0239 -0.89745 -0.25451 -0.82458 0.39189 0.11725 -0.31161 0.24229
+outside -0.29979 -0.087116 0.094266 -0.8943 0.00045409 -0.93309 0.41995 0.077897 -0.32089 0.0948
+gave -0.20511 0.10134 0.27444 -1.0108 -0.50872 -0.68088 0.28404 0.065595 -0.31698 0.37159
+future -0.13391 -0.038217 0.22378 -1.0037 0.1114 -0.96022 0.29762 0.099481 -0.26009 0.013145
+people, -0.12077 -0.13285 0.064225 -0.89586 0.20543 -0.92167 0.52999 0.11773 -0.3363 0.041737
+Kallis -0.22297 0.042648 0.024925 -0.89704 -0.25563 -0.93736 0.43078 0.055985 -0.2876 0.061194
+arrived -0.20971 -0.11303 0.15902 -1.0245 0.44714 -1.0242 0.40287 -0.048344 -0.0052894 -0.069317
+responsibility -0.10669 -0.19514 0.24343 -1.0107 0.27539 -0.92534 0.34749 0.13125 -0.22071 -0.023336
+Chief -0.21446 -0.028111 0.10836 -0.85874 0.050764 -0.97388 0.51436 0.1159 -0.30729 0.038645
+sources -0.26177 -0.10926 0.082926 -0.91144 0.37326 -0.96432 0.54344 -0.004703 -0.21427 -0.05484
+expressed -0.29158 -0.1309 0.084792 -0.89884 0.067026 -0.92867 0.46335 -0.021058 -0.17247 0.10516
+again -0.28054 0.10503 -0.031662 -0.87632 0.13049 -1.0395 0.5817 0.1995 -0.31702 -0.13758
+needs -0.69947 -0.16154 0.12364 -1.0156 0.20539 -0.97623 0.36055 -0.27137 -0.10422 -0.095865
+times -0.19059 -0.082645 0.23329 -0.95971 -0.10218 -0.79772 0.4028 0.085123 -0.26922 0.19396
+leader, -0.63614 -0.15872 -0.021229 -0.97841 0.23224 -1.0678 0.37307 -0.24234 0.069236 0.059875
+media -0.36359 -0.33511 0.11944 -0.96789 0.53827 -1.1395 0.51612 0.081919 -0.025864 -0.17633
+overnight 0.0026782 -0.16337 0.5379 -1.0077 0.30795 -0.95688 0.40591 0.4137 -0.20355 0.067067
+caused -0.32583 -0.15928 0.24236 -1.1669 0.65764 -1.1243 0.40977 -0.038673 0.019246 -0.15685
+investigation -0.24167 -0.16591 0.095002 -0.84671 0.093706 -0.96468 0.47883 0.28363 -0.23212 0.12051
+victory -0.14237 -0.031346 -0.040868 -0.86656 0.10501 -0.99638 0.47517 0.052506 -0.37078 0.020271
+cost -0.33531 -0.31573 0.21847 -0.93661 0.098379 -0.70413 0.42365 0.12404 -0.28671 0.21083
+means -0.21139 -0.21608 0.035407 -0.95129 0.066174 -0.84813 0.46002 0.059957 -0.26126 0.21452
+guides -0.195 -0.11011 0.1319 -0.89564 0.31203 -1.038 0.43995 0.011187 -0.29771 -0.16936
+Afghanistan's -1.0852 -0.42476 0.11174 -1.0582 1.0038 -1.1647 0.58459 -0.38897 0.24901 -0.34677
+Test. -0.35461 0.17268 -0.081656 -0.87091 -0.061653 -0.94691 0.54565 -0.035941 -0.46732 -0.15517
+parties -0.25651 -0.23092 0.10005 -0.87591 -0.013637 -0.92388 0.46985 0.22713 -0.19787 0.16205
+November -0.15432 -0.02002 -0.035073 -0.88768 0.66978 -1.2153 0.60292 -0.031687 -0.15572 -0.21273
+away -0.026386 -0.011804 0.03243 -0.95371 0.010804 -0.85442 0.58628 0.049947 -0.38244 0.091771
+Glenn -0.2025 0.10252 -0.18489 -0.82056 -0.064589 -0.94112 0.5735 0.08154 -0.16768 0.098507
+night. 0.14726 -0.13411 0.43348 -0.98423 0.48031 -1.0034 0.48321 0.56319 -0.26636 -0.052575
+less -0.34774 -0.087851 0.020444 -0.975 0.24762 -0.89823 0.53689 -0.19108 -0.17694 0.10416
+gives -0.30648 0.00095754 0.12032 -0.87802 -0.081254 -0.92676 0.50007 0.22389 -0.18439 -0.0023295
+refused -0.20994 -0.12008 0.043993 -0.95577 0.43249 -1.1323 0.47532 0.082949 -0.042781 -0.082605
+decided -0.25164 -0.15128 0.14698 -0.93189 0.42 -1.1056 0.4041 0.03367 -0.13229 -0.021897
+wage -0.15918 -0.18509 0.15199 -0.94062 0.094331 -0.86955 0.37411 0.32563 -0.27524 0.11126
+certainly -0.36459 -0.25731 0.20807 -0.96518 -0.3249 -0.76573 0.36741 0.088155 -0.2325 0.37688
+face -0.41217 -0.10768 0.014726 -0.9521 0.52086 -1.1 0.50755 0.03151 -0.021106 -0.17162
+having -0.21479 -0.094558 0.02323 -0.92666 -0.26909 -0.80156 0.35772 -0.052212 -0.30304 0.14079
+bombers -0.25448 -0.24683 -0.018675 -1.0088 0.98883 -1.1495 0.57514 -0.24854 0.0085853 -0.30157
+13 -0.2514 -0.17806 0.23568 -0.97128 0.20978 -0.84804 0.46292 0.032578 -0.44878 -0.12467
+More -0.17663 -0.063707 0.21824 -0.97878 0.1765 -0.85505 0.40461 0.18004 -0.35206 0.12186
+Musharraf -0.31525 -0.17799 0.15549 -0.96105 0.086704 -0.96223 0.36748 -0.010628 -0.14574 0.11553
+Sir -0.079121 -0.16903 0.152 -0.92032 -0.10546 -0.7863 0.37201 0.1975 -0.27092 0.33351
+Western -0.35848 -0.0024335 0.15828 -1.0712 0.76845 -1.0325 0.61841 -0.21278 -0.080128 -0.20051
+Warne -0.17762 0.088479 0.051883 -0.98411 0.27026 -1.0481 0.45843 0.04756 -0.20877 -0.23601
+we've -0.27202 -0.062883 0.079416 -1.1073 -0.22395 -0.74813 0.32714 -0.062417 -0.18222 0.27504
+returned -0.25684 -0.014633 -0.013888 -0.9261 0.34609 -1.0596 0.40779 -0.1468 -0.081473 -0.062052
+house -0.25438 -0.19207 0.098137 -1.08 0.3123 -0.92787 0.35562 0.0027978 -0.076825 0.14032
+figures -0.24194 -0.11312 0.34844 -0.95948 -0.0096087 -0.81971 0.48248 0.17377 -0.29287 0.066865
+soon -0.50325 -0.24627 0.077906 -0.85691 -0.057127 -0.89574 0.49108 -0.072185 -0.13845 0.16944
+Opposition -0.55172 -0.28795 0.025411 -0.82279 0.15422 -1.0296 0.43879 0.087711 -0.12644 0.081617
+Energy -0.52219 0.0083993 0.13363 -0.99076 0.077371 -0.91272 0.46538 -0.10207 -0.15002 -0.045709
+appeared -0.07688 -0.12422 0.15721 -0.98941 0.32351 -1.022 0.33754 0.039885 -0.14885 -0.028518
+"What -0.11813 -0.12509 0.11716 -0.96938 0.18886 -0.96622 0.43089 -0.085791 -0.11728 0.12231
+parts -0.15738 -0.13451 -0.028285 -0.92109 0.36979 -1.0102 0.59461 0.23022 -0.24569 -0.019808
+point -0.31625 -0.15522 0.11486 -0.85343 -0.091388 -0.86706 0.49356 0.15778 -0.21028 0.15196
+weeks -0.31093 -0.12954 0.15842 -1.0454 0.14362 -0.78349 0.3397 -0.15216 -0.18535 0.086455
+step -0.24769 -0.085087 0.14128 -1.0074 -0.053275 -0.74336 0.48037 -0.027143 -0.17706 0.29505
+Hicks -0.7295 -0.27189 -0.031627 -1.0161 0.38705 -1.0018 0.4731 -0.20284 0.079142 -0.086215
+ended -0.46385 -0.18155 -0.094221 -0.89408 0.8742 -1.3229 0.50061 -0.12044 0.0057563 -0.33374
+big -0.10401 0.029808 -0.11517 -1.132 0.90247 -1.2428 0.42649 -0.23731 -0.041625 -0.43859
+run -0.026621 0.058854 0.23927 -0.88576 0.22445 -0.97455 0.42719 0.25457 -0.43438 -0.13246
+Robert -0.18885 -0.24728 0.16502 -0.98001 0.23693 -0.83256 0.53339 0.0054403 -0.14761 0.18343
+rather -0.3921 -0.18474 0.26465 -1.0403 -0.1311 -0.66115 0.3769 -0.095472 -0.27836 0.36664
+dispute -0.38151 -0.13673 -0.055228 -0.96796 0.28504 -0.99155 0.46686 -0.097563 -0.17168 -0.066103
+thousands -0.20815 -0.052841 0.13491 -1.0094 0.16653 -0.96091 0.44757 0.058202 -0.20876 0.060942
+countries -0.30045 -0.16149 0.20757 -0.9137 0.050078 -0.93056 0.44059 0.26011 -0.20321 0.065365
+Reserve -0.12533 -0.037669 0.16344 -0.95301 0.48337 -0.99076 0.5605 0.14818 -0.23771 -0.18154
+biggest -0.17696 -0.16626 0.0047131 -0.98654 0.71474 -1.1002 0.51817 -0.038413 -0.11861 -0.14601
+can't -0.14316 -0.038243 0.029441 -0.95136 -0.084281 -0.90605 0.38663 0.036244 -0.27861 0.048795
+region -0.67664 -0.11581 0.1894 -0.92088 0.14594 -1.015 0.44602 0.078378 0.019968 -0.07271
+issues -0.18967 0.2033 0.15594 -0.96702 -0.22947 -0.86135 0.43302 0.28347 -0.29927 0.10877
+beyond -0.31479 -0.26768 0.24727 -1.0479 -0.071206 -0.80629 0.36612 -0.041367 -0.24782 0.18122
+huge -0.081257 0.32418 0.050619 -0.83504 -0.26709 -0.95097 0.45568 0.19193 -0.39068 0.031293
+them. -0.22048 -0.31103 0.13912 -0.97638 -0.10318 -0.75878 0.42885 -0.033493 -0.25774 0.35585
+break -0.034984 -0.16235 0.10839 -0.87804 -0.10658 -0.79174 0.56585 0.22224 -0.2667 0.28082
+ensure -0.13504 -0.10694 0.22563 -0.9484 -0.052151 -0.80939 0.35235 0.16253 -0.32167 0.21016
+ground -0.23677 -0.18518 0.27125 -1.0726 0.19723 -0.85167 0.26207 -0.030968 -0.17042 0.04772
+tourists -0.36032 -0.11573 0.067654 -0.80911 0.14706 -1.072 0.548 0.14094 -0.24755 -0.11331
+shortly -0.22155 -0.017607 0.093779 -1.0259 0.31995 -0.92463 0.50257 0.045857 -0.19887 0.016661
+something -0.21869 -0.1265 0.17115 -0.92387 -0.29442 -0.71776 0.42465 0.14374 -0.37656 0.23146
+terms -0.45899 -0.1411 0.16535 -0.99854 -0.086348 -0.81406 0.37841 -0.10845 -0.26085 0.059
+top -0.52027 0.15306 -0.28095 -0.71283 -0.35815 -1.0341 0.46039 -0.13882 -0.28352 0.043035
+safety -0.1443 -0.1671 0.089085 -0.86247 0.047306 -0.9441 0.42246 0.14677 -0.2587 0.1754
+whose -0.15884 -0.16834 0.28541 -0.90295 0.061624 -0.948 0.33678 0.10392 -0.17018 0.067711
+order -0.61937 -0.18925 -0.087087 -0.87335 0.32193 -1.1745 0.53799 -0.12251 -0.097608 -0.11936
+21 -0.35252 -0.3032 0.19308 -0.73447 0.1381 -1.053 0.5186 0.49776 -0.37451 -0.02863
+seven -0.32449 -0.090214 0.01174 -0.86455 0.13791 -0.91959 0.56921 -0.12242 -0.083617 0.06326
+worst -0.093513 0.13321 0.21029 -0.89142 -0.16556 -0.82448 0.47646 0.23528 -0.4839 0.10489
+200 -0.07257 0.050468 0.089691 -0.95671 -0.28409 -0.75853 0.45668 0.16083 -0.44957 0.24796
+changes -0.23516 -0.19769 0.32922 -0.90195 -0.31492 -0.78549 0.30952 0.20265 -0.23301 0.35419
+Mountains -0.52557 -0.0070327 0.1814 -1.1009 0.42383 -0.93624 0.50681 0.024818 -0.13433 -0.11177
+1,000 -0.13408 -0.0031082 -0.0071555 -1.0484 0.062027 -0.81847 0.46957 0.075143 -0.34528 0.0069611
+attempt -0.21777 -0.13646 0.037072 -0.99718 0.42526 -1.057 0.46832 -0.007266 -0.13694 -0.073133
+wave -0.1237 0.06939 0.13382 -0.97782 -0.31499 -0.75068 0.31747 0.15389 -0.31235 0.26425
+She -0.57889 0.024528 0.29046 -0.75118 -0.40824 -0.97542 0.2939 -0.14587 -0.20861 0.24839
+heavy -0.25764 -0.17552 0.18984 -0.94983 0.12568 -0.86752 0.3063 -0.017535 -0.095908 0.13068
+banks -0.21874 -0.1408 0.14122 -0.9399 0.16793 -0.85874 0.41583 0.11357 -0.21469 0.05204
+struck -0.21501 -0.12046 0.25122 -0.90835 0.044797 -0.91014 0.40803 0.11327 -0.32215 0.14165
+bill -0.51599 -0.271 -0.00073813 -0.9119 0.64295 -1.1705 0.52009 0.043544 0.089397 -0.25129
+massive -0.32483 -0.06258 -0.013938 -0.83339 -0.061484 -0.86455 0.4527 0.091288 -0.25824 0.15906
+foreign -0.4108 -0.35808 0.051144 -0.92501 0.25962 -1.0232 0.3764 0.024047 -0.0070203 -0.0068743
+Monday -0.30755 0.021482 0.19795 -0.85557 0.11402 -0.9588 0.44421 0.17013 -0.24844 -0.019671
+residents -0.18282 -0.17343 0.16833 -0.89066 0.055371 -0.95199 0.4216 0.31978 -0.299 0.0037635
+Detention -0.39476 -0.14458 0.15996 -0.82447 0.041516 -0.93888 0.51081 0.35091 -0.20424 0.057306
+protect -0.15792 -0.18836 0.083067 -0.88514 -0.20558 -0.83509 0.45219 0.19162 -0.32459 0.25114
+crash -0.37378 -0.15719 0.27305 -0.95702 0.087902 -0.82382 0.34335 0.042488 -0.15859 0.054763
+Kabul -0.26443 -0.16481 0.3114 -0.94373 -0.19575 -0.79068 0.40535 0.15031 -0.24102 0.28756
+Jacques -0.16548 0.058804 0.152 -0.97539 0.056449 -0.92379 0.45371 0.11116 -0.24996 -0.015329
+gunmen -0.063602 -0.13022 0.0073489 -0.93044 0.24926 -1.0779 0.53094 -0.0072605 -0.221 -0.029566
+River -0.34144 -0.19561 0.22203 -0.75358 -0.077981 -1.023 0.34737 0.094786 -0.17132 0.1026
+denied -0.38527 -0.30648 0.16933 -0.94346 0.72253 -1.2464 0.36061 -0.068193 0.098559 -0.25226
+Governor-General -0.32618 -0.34426 0.26649 -0.91605 0.058059 -0.92269 0.40493 0.17553 -0.14275 0.17862
+act -0.50422 -0.27666 0.10494 -1.0576 0.42009 -1.0005 0.3776 -0.14642 -0.01395 -0.10325
+Safety 0.075012 -0.13791 0.25712 -0.92599 0.1798 -0.91217 0.42602 0.34453 -0.34069 0.074462
+he's -0.76149 -0.25187 0.16369 -1.0071 -0.25816 -0.7671 0.30205 -0.32931 0.036876 0.21559
+general -0.34393 -0.29248 0.27743 -0.82782 -0.18493 -0.88201 0.34027 0.26915 -0.13627 0.16395
+inside -0.18642 -0.14043 0.18562 -0.95672 -0.01729 -0.88924 0.36219 0.24348 -0.22756 0.077796
+"In -0.37246 0.014417 -0.04582 -0.72871 -0.92338 -0.67055 0.44785 0.30004 -0.49557 0.20112
+feel -0.18015 -0.17165 0.10289 -1.0476 -0.39224 -0.67754 0.40273 0.046544 -0.27883 0.51188
+beginning -0.31562 -0.040915 0.044385 -0.94139 0.12054 -0.97017 0.45147 -0.047391 -0.3183 -0.19903
+it, -0.058407 0.022432 0.35018 -0.94972 -0.4629 -0.56738 0.37619 0.096636 -0.4813 0.30966
+Israel, -0.31752 -0.079865 -0.38344 -0.98436 0.97659 -1.2919 0.65736 -0.39128 0.072302 -0.12737
+Pakistani -0.88321 -0.48353 0.10139 -0.98664 0.71346 -1.2353 0.44264 -0.25487 0.059342 -0.40104
+decide -0.18269 -0.13465 0.062756 -0.90553 0.10744 -0.99522 0.40557 0.15254 -0.20989 0.15111
+though -0.43559 -0.026187 0.16191 -0.99179 -0.087738 -0.82109 0.37879 -0.17426 -0.10786 0.15234
+Russian -0.41079 -0.094812 -0.0072505 -0.90948 0.27982 -1.0214 0.55015 -0.10899 -0.13083 -0.074736
+trees -0.045673 -0.030206 0.30045 -0.91687 -0.1976 -0.84275 0.45741 0.4433 -0.34606 0.24949
+giving -0.11861 0.065388 -0.08762 -0.88097 0.031239 -1.0487 0.46707 -0.0079952 -0.36886 -0.17169
+attacks. -0.25392 -0.032236 0.016311 -1.1569 1.1794 -1.3267 0.5168 -0.23359 -0.076471 -0.64156
+commanders -0.46258 -0.24119 0.10232 -0.96894 0.4164 -1.0378 0.4784 -0.054836 -0.077072 -0.14536
+president -0.33677 -0.30219 0.11797 -0.84533 0.16699 -1.0107 0.424 0.19408 -0.20011 0.0065484
+witnesses -0.14075 -0.027639 0.11048 -0.9081 0.07699 -0.87359 0.48174 0.018874 -0.28779 0.079268
+"They -0.2338 -0.139 0.11731 -1.0643 0.39083 -0.97842 0.42528 -0.15528 -0.069783 -0.059073
+fact -0.60335 -0.19652 0.11474 -1.006 -0.10808 -0.7693 0.35506 -0.13315 -0.030147 0.2337
+longer -0.55887 -0.24209 0.29306 -0.99047 0.18211 -0.94771 0.3721 -0.19865 -0.02897 0.17724
+Powell -0.51358 -0.10002 0.075846 -1.0233 -0.023909 -0.83873 0.41738 -0.22141 -0.25485 0.096454
+collapse -0.19438 -0.084022 0.080058 -0.90043 0.00063324 -0.83945 0.49146 0.062255 -0.23982 0.1335
+boy -0.16384 -0.11246 0.014311 -1.1305 0.25015 -0.68509 0.4744 -0.26999 -0.076922 0.1922
+involved -0.23396 -0.1966 0.18392 -1.0082 0.052488 -0.92838 0.3691 0.11502 -0.10534 0.17506
+forward -0.23214 -0.14703 0.15094 -0.98371 -0.23519 -0.98797 0.36629 0.099242 -0.22711 0.1875
+militia -0.43077 -0.22653 -0.067671 -0.92817 0.68308 -1.1518 0.55044 -0.1347 -0.026065 -0.12228
+situation -0.5339 -0.14488 0.032761 -0.79896 0.25281 -1.0406 0.50343 0.18194 -0.12588 0.0018157
+ASIO -0.23567 -0.30546 0.39225 -0.89077 -0.5876 -0.67046 0.27892 0.33283 -0.21739 0.49707
+response -0.1571 -0.087453 0.26491 -0.95863 -0.086937 -0.78355 0.31053 0.20016 -0.26188 0.041097
+As -0.34266 -0.024876 0.19252 -0.9934 0.56732 -1.1094 0.45626 0.15147 -0.27764 -0.42731
+disease -0.030411 0.047909 0.062412 -0.95125 0.2199 -0.95773 0.42018 0.080438 -0.22037 0.027476
+placed -0.31413 -0.078587 0.059193 -0.94205 -0.040332 -0.99733 0.36912 -0.054451 -0.2258 0.095615
+chance -0.52828 -0.12485 0.095101 -1.0493 -0.17369 -0.78443 0.39704 -0.036474 -0.14919 0.25015
+address -0.21817 0.010137 0.092077 -0.89644 -0.15827 -0.90724 0.42719 0.10645 -0.30291 0.22053
+States. -0.16341 -0.15763 0.15576 -0.92377 0.64676 -1.1334 0.57526 -0.03691 -0.25793 -0.2704
+party -0.35005 -0.18344 -0.040608 -0.96678 0.11393 -0.97366 0.46049 -0.010412 -0.17804 0.11221
+entered -0.19469 -0.22309 0.15619 -0.87189 0.35959 -0.97711 0.5195 0.14584 -0.16542 -0.056635
+Day -0.26448 -0.067392 -0.0062925 -0.9677 0.62361 -1.1215 0.65933 -0.16353 -0.13543 -0.27834
+short -0.29861 -0.096258 0.051112 -0.99715 0.2501 -0.87024 0.50111 0.013569 -0.15373 0.040428
+Boxing -0.17312 0.25159 -0.16338 -0.84506 -0.1219 -1.0209 0.54002 0.042375 -0.49181 -0.31169
+Martin -0.23051 0.14617 -0.1226 -0.81136 -0.39254 -0.929 0.4845 0.17899 -0.31655 0.10688
+Donald -0.3668 -0.31585 0.18055 -0.88702 -0.082501 -0.83075 0.43068 0.057527 -0.060287 0.3466
+Local -0.4166 -0.31576 0.13843 -0.79674 -0.091945 -0.97806 0.37698 0.074839 -0.084672 0.20961
+followed -0.068441 0.044316 0.091602 -0.93525 0.32473 -1.0785 0.4884 0.17029 -0.1689 -0.057822
+warned -0.27548 -0.099088 0.13718 -0.94938 0.18932 -0.9183 0.2788 -0.048953 -0.1141 -0.11389
+48 -0.84419 -0.18653 0.29293 -0.83778 0.3217 -0.97718 0.43714 -0.17774 0.010283 -0.20241
+serious -0.32479 -0.19952 0.01172 -0.87772 0.61493 -1.0947 0.58385 -0.10002 -0.019106 -0.014508
+inquiry -0.29588 -0.25489 0.087912 -0.87935 0.29723 -1.0276 0.47503 -0.048841 -0.10658 -0.055423
+sort -0.051322 -0.15173 0.14363 -0.88693 -0.18115 -0.69567 0.41564 0.012624 -0.30785 0.38157
+prevent -0.17982 -0.1031 0.17494 -0.90397 -0.22325 -0.77348 0.48222 0.2477 -0.2021 0.29359
+strike -0.26249 -0.10207 0.077732 -0.93117 0.2996 -0.95785 0.51303 0.083574 -0.1658 0.014509
+Anglican -0.1808 -0.056134 0.25429 -1.002 -0.16747 -0.79432 0.39045 0.19596 -0.15251 0.22658
+cancer -0.2918 -0.14501 0.19404 -0.87255 0.014863 -0.88379 0.3752 0.15281 -0.1911 0.11058
+bring -0.082268 0.0039916 -0.0066104 -0.83081 -0.13348 -0.92132 0.54214 0.17418 -0.4141 -0.034829
+available -0.32264 -0.075275 0.033305 -0.98118 0.086585 -0.90595 0.42473 -0.20275 -0.16315 0.13557
+morning, 0.071681 -0.084214 0.37602 -0.92478 -0.07168 -0.85084 0.41671 0.25985 -0.39865 0.13377
+Brett -0.39988 0.12227 -0.14695 -0.84352 0.26524 -1.0828 0.5565 -0.031347 -0.19666 -0.13479
+money 0.10693 -0.24461 0.33205 -0.98638 -0.26491 -0.85389 0.28839 0.2983 -0.35361 0.30637
+Muslim -0.37519 -0.1731 0.21203 -0.97612 -0.01014 -0.85301 0.41571 0.0089575 -0.18362 0.096238
+mountains -0.52235 -0.0313 0.19906 -1.0696 0.45976 -0.95238 0.44859 -0.0063259 -0.10718 -0.17352
+main -0.4307 -0.096279 0.18151 -0.87066 -0.3373 -0.87146 0.37781 0.24209 -0.3128 0.046284
+overnight. -0.05978 -0.17425 0.50098 -0.97825 0.32724 -0.98814 0.44684 0.38269 -0.20557 0.056648
+border -0.61028 -0.14578 0.017971 -0.95586 0.41711 -1.0875 0.48467 -0.21194 0.0062121 -0.20204
+current -0.15874 -0.1446 0.20205 -0.79474 -0.091161 -0.85191 0.54808 0.33502 -0.32097 0.15464
+AFP -0.43069 -0.06174 0.041412 -1.035 0.36056 -0.91176 0.55137 -0.32412 0.032452 -0.011461
+Daryl -0.49073 -0.11078 0.0059247 -0.9298 0.20923 -0.97749 0.41212 -0.31057 -0.061639 -0.028531
+level -0.23517 -0.16461 0.18845 -1.0032 0.53353 -0.97729 0.52615 -0.16901 -0.1271 0.019749
+never -0.47821 -0.085864 0.14045 -0.78639 0.063474 -1.027 0.46941 -0.1867 -0.1437 0.026296
+cannot -0.32269 -0.13929 0.24225 -1.0206 -0.03028 -0.9009 0.3505 -0.049398 -0.092678 0.139
+royal -0.54 -0.23168 0.16237 -0.86746 0.082618 -0.9545 0.37876 -0.044377 -0.038106 0.020396
+calling -0.27627 -0.10037 0.003318 -0.8251 -0.072697 -1.0253 0.38615 0.12013 -0.18733 -0.10744
+Anthony -0.29676 -0.056315 -0.14688 -0.86255 0.1869 -0.96764 0.48321 0.04497 -0.19118 0.084065
+lives -0.33202 -0.28284 0.25269 -1.0548 0.70137 -1.1561 0.44864 -0.04875 0.078248 -0.23948
+according -0.36104 -0.20245 0.088021 -0.90923 0.24059 -1.0262 0.48457 0.03779 -0.21451 -0.22357
+Geoff -0.18856 -0.29532 0.25044 -1.0282 -0.25594 -0.67297 0.33488 0.17971 -0.23647 0.43254
+state's -0.18054 -0.27202 0.37814 -1.1113 0.30717 -0.89957 0.35238 -0.019664 -0.18023 0.1016
+"This -0.42224 -0.05965 0.14074 -0.88887 -0.14413 -0.90186 0.42267 -0.049023 -0.23884 0.11355
+movement -0.15536 -0.36437 0.16587 -0.91736 0.45287 -1.0791 0.48025 0.20168 -0.027551 -0.036841
+Justice -0.16172 -0.08131 0.01455 -0.8468 -0.25169 -0.91213 0.50762 0.17318 -0.24023 0.29564
+Vaughan -0.52576 -0.039893 0.10583 -0.93523 0.36761 -1.0281 0.5194 0.0068841 -0.16615 -0.14374
+deadly -0.20142 -0.12306 -0.062067 -0.97255 0.40423 -0.8879 0.50728 -0.052048 -0.19292 0.084739
+ruled -0.071221 -0.070779 0.19589 -0.96566 0.27633 -1.0952 0.38484 0.27097 -0.084554 -0.013572
+fast -0.37751 0.026316 -0.011812 -0.89545 0.23886 -1.0078 0.54184 0.22559 -0.32299 -0.14724
+led -0.35603 -0.40632 0.26926 -1.1032 0.86261 -1.1361 0.38627 -0.12178 0.28368 -0.1525
+insurance -0.28391 -0.13389 0.054707 -0.92632 0.23121 -0.92442 0.46559 0.15454 -0.19599 0.050628
+burning -0.16641 -0.098378 0.33981 -0.95832 -0.2186 -0.84922 0.37866 0.13416 -0.35948 0.076853
+fired 0.24878 -0.16657 0.38399 -1.1783 0.50918 -0.91939 0.31095 0.27848 -0.22079 -0.022189
+anything -0.18968 -0.25379 0.13284 -0.87075 -0.4172 -0.75594 0.36244 0.088717 -0.29159 0.26666
+study 0.0016092 -0.019816 0.10753 -0.98043 0.24135 -0.87145 0.48581 0.057884 -0.26077 0.080121
+"These -0.45929 -0.19157 0.10329 -0.98596 0.10077 -0.87076 0.40393 -0.10262 -0.096417 0.082231
+trip -0.25091 -0.34149 0.097458 -0.86118 0.71392 -1.1633 0.39403 0.025984 -0.16656 -0.15394
+Workers -0.55923 -0.13892 0.13249 -0.86279 -0.048219 -0.84642 0.50666 -0.00838 -0.098121 0.067299
+speaking -0.37817 -0.098246 0.004995 -0.87793 -0.15698 -0.88181 0.432 0.067994 -0.26448 -0.022681
+White -0.60335 -0.1973 0.2229 -0.93662 0.36819 -0.92215 0.37535 -0.068352 -0.12827 -0.17589
+cent. -0.11218 -0.078002 0.27892 -0.91788 0.18222 -0.98627 0.5622 0.40077 -0.24635 0.040361
+difficult -0.25006 -0.2152 0.12371 -0.9856 0.1282 -0.83924 0.4174 0.041246 -0.22196 0.079786
+rule -0.2409 -0.055641 0.12339 -0.86898 0.12055 -1.0115 0.45835 0.22055 -0.09693 0.096909
+Allan -0.40569 0.11774 0.033441 -0.902 0.1465 -0.98182 0.5628 -0.15242 -0.18927 -0.010615
+costs -0.1733 -0.14964 0.12231 -0.90499 0.17765 -0.84202 0.45353 0.23073 -0.23502 0.14769
+yesterday. -0.28329 0.027702 0.053544 -0.87839 0.21135 -0.96857 0.65698 0.020271 -0.28429 0.020266
+fighter -0.41604 -0.095168 0.30198 -0.98387 0.47422 -0.99762 0.53228 -0.0050993 -0.15331 -0.15822
+member -0.2331 -0.095176 0.15376 -0.85168 0.52189 -1.1619 0.51991 -0.013982 -0.14735 -0.13126
+case -0.21558 -0.12124 0.05104 -1.0042 0.11426 -1.0545 0.31161 -0.022932 -0.089511 -0.034249
+tanks -0.27714 -0.19358 0.15383 -0.96794 0.59145 -1.0232 0.52408 0.015189 -0.18396 -0.13722
+"You -0.36109 0.037503 0.077384 -0.81445 -0.58514 -0.75906 0.41245 -0.0055023 -0.38252 0.27519
+If -0.29336 -0.078326 -0.023694 -0.89329 -0.38684 -0.77139 0.33765 0.068822 -0.23169 0.23285
+accept -0.15804 -0.22481 0.079074 -0.83507 0.0013924 -1.0224 0.49693 0.27896 -0.18544 0.070565
+week. -0.23583 -0.11154 0.093785 -1.0395 0.097095 -0.74529 0.41449 -0.011722 -0.31721 0.24879
+yacht -0.13359 -0.056216 0.28246 -0.86754 0.24431 -1.0462 0.56034 0.078065 -0.15967 0.027042
+receiving -0.18568 -0.19509 0.20359 -0.8793 0.040725 -0.95688 0.3492 0.18718 -0.21646 0.018865
+complex -0.27979 -0.20965 0.24597 -0.94615 0.11754 -0.85075 0.4135 0.11823 -0.18139 0.10872
+bomb -0.10411 -0.16758 0.027894 -1.0043 0.68615 -0.91996 0.59801 -0.17001 -0.11265 0.029732
+Islands 0.055929 -0.073953 0.089914 -0.98044 0.40534 -0.93344 0.52493 0.17405 -0.2064 0.14249
+nine -0.092495 -0.01118 0.22485 -1.0003 0.88985 -1.2477 0.49838 0.12774 -0.051487 -0.48241
+companies -0.18152 -0.18917 0.22312 -0.85622 0.056556 -0.93547 0.46695 0.18621 -0.24087 0.085655
+Rafter -0.38032 0.070217 0.086042 -0.96352 -0.19821 -0.90648 0.49956 -0.001303 -0.31352 0.15224
+front -0.24326 -0.077296 0.20992 -0.90475 -0.092187 -0.86735 0.41712 0.15823 -0.16778 0.25111
+population -0.50601 -0.19196 0.10535 -0.7761 0.1146 -1.0252 0.52991 0.15474 -0.13684 0.060423
+confident -0.24342 -0.31847 0.26516 -0.94511 0.12772 -0.8851 0.38657 0.19577 -0.10378 0.11863
+industry. -0.38611 -0.033498 0.04676 -0.89376 -0.12277 -0.9335 0.47413 0.060874 -0.19488 0.051604
+tour -0.22967 -0.033846 0.16736 -0.90689 -0.3228 -0.86314 0.43663 0.046934 -0.34227 0.14822
+Suharto -0.24116 -0.1497 0.069632 -0.99369 0.16442 -0.92596 0.47624 -0.030149 -0.1259 0.1019
+tomorrow. -0.12844 -0.063605 0.11452 -0.88008 -0.01359 -0.9403 0.44478 0.2316 -0.2995 0.089737
+Hobart -0.043345 -0.06854 0.18042 -0.99022 0.30043 -0.93527 0.54179 0.080807 -0.22913 -0.0052467
+yesterday, -0.24837 0.047107 0.070702 -0.89129 0.36037 -0.98175 0.671 0.0075154 -0.24511 -0.020356
+2,000 -0.060149 0.045672 0.04958 -0.92051 -0.3615 -0.87124 0.47828 0.18592 -0.39622 0.15934
+wicket -0.10815 0.3282 -0.048706 -0.92659 0.14362 -0.96174 0.6269 0.13785 -0.51049 -0.13903
+Reid -0.42345 -0.13997 0.12807 -0.84637 -0.38389 -0.78013 0.37707 0.08608 -0.19094 0.15275
+cabinet -0.51716 0.067514 0.12552 -0.9087 0.49022 -1.0966 0.54915 -0.089107 -0.054725 -0.30751
+provide -0.15278 -0.24973 0.16126 -0.98997 -0.21103 -0.76852 0.35432 0.21726 -0.33472 0.3697
+Richard -0.20802 -0.19244 0.17873 -0.94466 0.021598 -0.93777 0.41304 0.037062 -0.22068 0.15586
+share -0.086957 -0.23213 0.39035 -1.0906 0.10842 -0.72498 0.25639 0.076963 -0.26053 0.20299
+Hewitt -0.15998 -0.0096643 0.087519 -0.93864 -0.0011411 -0.87672 0.5044 0.16864 -0.36648 0.17587
+federal -0.28263 -0.29288 0.22994 -0.85214 0.06155 -1.0086 0.45926 0.17111 -0.12936 0.048581
+ever -0.38852 -0.040496 0.18186 -0.84779 0.11522 -0.97393 0.47106 -0.12381 -0.12139 0.069396
+tribal -0.40427 -0.20428 0.14494 -0.90537 0.092135 -0.83685 0.43331 -0.029453 -0.20316 0.086098
+country -0.46126 -0.22923 0.20224 -0.93519 0.028441 -0.87746 0.40873 0.12325 -0.18586 0.1082
+changed -0.27061 -0.23506 0.30103 -0.96906 -0.1871 -0.8849 0.22815 0.098739 -0.12629 0.2929
+starting -0.30591 -0.14842 0.045408 -0.88547 -0.10373 -0.86482 0.4751 0.059188 -0.25864 0.044166
+5,000 0.0012201 0.032442 -0.0054541 -0.9087 0.054951 -0.94923 0.46876 0.23447 -0.37541 -0.034613
+stage -0.2685 -0.26042 0.19196 -0.90154 0.15439 -0.93922 0.38876 0.05271 -0.20931 0.11808
+survey -0.068021 0.099633 0.14039 -0.91497 0.19726 -0.90641 0.52173 0.081349 -0.35895 -0.0089281
+absolutely -0.46804 -0.23809 0.14699 -0.95181 -0.1983 -0.86208 0.35705 0.084608 -0.27237 0.15851
+small -0.34361 -0.16832 0.17509 -0.93314 0.14324 -0.98891 0.43486 -0.013861 -0.064008 0.16603
+offices -0.18445 -0.099133 0.099574 -0.94606 0.59011 -1.1729 0.59228 -0.020341 0.012397 -0.098159
+global -0.42663 -0.18687 0.0884 -0.87023 0.11399 -0.91431 0.50815 0.0091142 -0.19424 0.1397
+nearly -0.2713 -0.088893 0.13328 -0.94283 0.27597 -0.9861 0.47448 -0.024321 -0.32087 -0.11705
+French -0.51021 -0.11283 0.034828 -0.87723 0.48862 -1.1731 0.55609 -0.14416 0.018067 -0.1416
+ministers -0.77847 -0.20559 0.04935 -0.89388 0.51098 -1.1126 0.58615 -0.26023 0.087819 -0.0047207
+secretary -0.40332 -0.13563 0.095235 -0.89046 -0.052473 -0.85771 0.49431 -0.084074 -0.11483 0.083349
+area. -0.069575 -0.1074 0.32267 -1.0579 0.074068 -0.7113 0.38478 0.023557 -0.25413 0.30862
+House -0.52806 -0.18135 0.26993 -1.1003 0.094986 -0.86281 0.36131 -0.048165 -0.020116 0.1606
+proposals -0.36694 -0.28187 0.27781 -0.93572 -0.45139 -0.71488 0.33804 0.18409 -0.24178 0.39308
+Steve -0.27019 0.21753 -0.072046 -0.91778 -0.060812 -0.91587 0.52003 -0.040411 -0.2842 -0.072086
+powers -0.29463 -0.19813 0.28684 -1.014 0.080471 -0.81738 0.36285 -0.052792 -0.21976 0.16303
+helicopter -0.25687 -0.064613 0.045338 -0.90035 0.38695 -1.0113 0.43999 0.0056159 -0.22388 -0.028703
+total -0.19574 -0.19443 0.19962 -0.90192 0.12229 -0.94611 0.41304 0.18708 -0.24157 0.10976
+well, -0.24042 -0.0048114 -0.10428 -0.98395 -0.24487 -0.74945 0.50611 -0.11992 -0.48088 0.26573
+terror -0.37502 -0.19371 0.22344 -0.89512 0.26076 -0.94791 0.40102 -0.02156 -0.27957 -0.12665
+list -0.31649 -0.10805 0.088525 -0.87109 0.39583 -0.94694 0.56579 -0.020434 -0.30059 -0.091529
+wickets -0.11094 0.25547 -0.028393 -0.98382 0.37106 -0.98481 0.64935 0.016147 -0.50319 -0.18784
+confidence -0.38178 -0.29464 0.069465 -1.0372 0.24086 -0.91127 0.42344 -0.060514 -0.059409 0.12219
+post -0.071096 -0.1008 0.19798 -0.95918 -0.16612 -0.8353 0.488 0.29332 -0.38116 0.10752
+base -0.21322 -0.1371 0.27562 -1.0178 -0.35491 -0.63268 0.34969 0.21059 -0.25413 0.38995
+commander -0.45147 -0.16981 0.063563 -0.87107 0.21224 -1.0843 0.49199 -0.015571 -0.080977 -0.022907
+increase -0.15533 -0.07075 0.19984 -0.90473 0.1906 -0.91756 0.4335 0.14786 -0.24569 0.043626
+moved -0.19785 -0.14604 0.12517 -1.0153 0.57268 -1.129 0.28721 -0.077822 0.065845 -0.14377
+Rural 0.10639 -0.29489 0.43193 -0.96248 -0.42105 -0.75275 0.23308 0.4188 -0.44515 0.33611
+Highway -0.25074 -0.13236 0.077874 -0.98353 0.16993 -0.94955 0.51033 -0.038909 -0.21028 0.021032
+overall -0.21224 -0.16805 0.365 -0.90428 -0.059735 -0.94327 0.37135 0.30456 -0.23009 0.17049
+coming -0.29379 -0.19742 0.12593 -0.80605 -0.24166 -0.93986 0.44044 0.10291 -0.2298 0.12655
+Tony -0.39816 -0.23335 0.021897 -0.85312 0.39238 -1.0179 0.43609 0.026345 -0.12991 -0.16952
+time, -0.26195 -0.045255 0.054461 -0.91151 0.019257 -0.91574 0.43555 0.0052445 -0.21838 0.060998
+Perth. -0.10565 -0.0084844 0.14234 -1.0362 0.054377 -0.90548 0.46144 0.083715 -0.19048 0.058815
+rights -0.20597 -0.081837 0.23318 -0.95121 0.41999 -1.0853 0.54029 0.19495 -0.12341 -0.20142
+Pacific -0.36132 -0.22185 0.15185 -0.91572 0.11814 -0.98048 0.49792 0.085878 -0.12503 0.16658
+Simon -0.11685 -0.038896 0.079094 -0.84486 -0.31179 -0.8822 0.37843 0.17594 -0.24671 0.21485
+fellow -0.45967 -0.043865 0.13649 -0.96167 0.12351 -0.86724 0.40706 -0.046775 -0.1364 -0.08718
+force, -0.34743 -0.29381 0.050942 -0.95045 0.59266 -1.2173 0.36728 0.035491 -0.18104 -0.20573
+freeze -0.49273 -0.15795 0.18215 -0.92833 0.079104 -0.90847 0.41997 0.11126 -0.19785 -0.084013
+damaged 0.0012511 -0.030074 0.25001 -0.92128 -0.0029533 -0.96183 0.34022 0.3789 -0.33441 0.096431
+mean -0.4804 -0.16951 0.048943 -0.8598 -0.24383 -0.88889 0.42948 -0.0015202 -0.15628 0.17191
+tennis -0.24646 -0.071839 0.15165 -0.98835 0.22813 -0.84679 0.51183 0.010715 -0.28158 0.15038
+him. -0.27782 -0.08642 0.096749 -0.80777 -0.36018 -0.76288 0.38563 0.046946 -0.23796 0.26555
+threat -0.26372 -0.050867 0.14379 -1.0282 0.031866 -0.79964 0.37458 -0.098354 -0.31621 0.17716
+significant -0.1301 -0.2203 0.23583 -0.98073 -0.03564 -0.90559 0.40939 0.090843 -0.18276 0.19704
+car -0.095605 0.10722 -0.013124 -0.82008 0.068251 -0.88256 0.50676 0.27472 -0.32002 -0.062105
+criticism -0.38729 -0.087101 0.10936 -0.88617 0.10806 -0.92521 0.51285 0.040669 -0.13519 0.046207
+anti-Taliban -0.56867 -0.17994 0.062338 -0.94939 0.29974 -0.98646 0.44749 -0.12485 -0.060586 -0.10028
+India. -0.44284 -0.081479 0.32682 -0.89064 0.10462 -0.9727 0.4773 -0.0348 -0.15041 -0.12865
+quickly -0.19946 -0.062956 0.1154 -0.90002 -0.20247 -0.82015 0.49506 0.11739 -0.27552 0.22045
+accident -0.20306 -0.20297 0.27341 -0.86218 -0.085632 -0.95416 0.39384 0.30935 -0.23489 0.046771
+months. -0.14498 0.0096728 0.084306 -0.88581 0.18665 -1.0543 0.50127 0.21423 -0.37771 -0.1417
+places -0.28233 -0.016887 0.11459 -0.98382 0.16488 -0.99112 0.47978 -0.0063082 -0.24797 0.044266
+hearings -0.072585 -0.033269 0.033601 -0.92202 0.20151 -0.98647 0.45259 0.17178 -0.35125 -0.016036
+control. -0.068946 -0.18804 0.15451 -0.96441 0.13366 -0.85439 0.44594 0.25796 -0.29269 0.21424
+began -0.50454 -0.24755 0.12876 -0.91359 0.13738 -0.95903 0.47035 -0.066543 -0.18543 0.0047818
+hour 0.045793 0.092578 0.14008 -0.95575 -0.041559 -0.93366 0.37378 0.18275 -0.45589 -0.011432
+airport -0.092699 -0.1598 0.17511 -0.98575 0.21607 -0.82413 0.43506 0.063688 -0.17872 0.20286
+management -0.30659 -0.33859 0.14841 -0.85527 0.066927 -0.95052 0.4215 0.204 -0.13698 0.074181
+areas. -0.051095 -0.24853 0.46468 -1.0684 0.18378 -0.69016 0.43616 0.13457 -0.18965 0.33674
+confirm -0.43539 -0.32098 0.1932 -1.0501 0.14579 -0.792 0.37887 -0.013652 -0.033518 0.20015
+direct -0.082884 -0.18384 0.26525 -0.93763 0.065223 -0.92336 0.21136 0.23335 -0.21433 -0.011837
+crackdown -0.33707 -0.15978 0.19845 -0.96674 0.18365 -0.92571 0.43693 0.018279 -0.18878 0.032471
+everything -0.28963 -0.19187 0.12756 -0.86967 -0.39614 -0.72188 0.42214 0.060443 -0.25329 0.29818
+Laden, -0.92949 -0.26304 0.38363 -1.1598 0.41546 -0.88893 0.15614 -0.41996 0.010165 -0.21182
+March -0.38713 0.086237 0.15301 -0.86982 -0.33435 -0.78235 0.48544 0.094351 -0.31309 0.13725
+Attorney-General -0.25057 -0.19638 0.18944 -0.93629 -0.090629 -0.86499 0.42347 0.20342 -0.21998 0.22308
+Endeavour -0.22169 -0.092432 0.035077 -0.8808 0.029427 -0.86335 0.45579 0.044855 -0.27194 0.15782
+Pakistan's -0.92088 -0.49816 0.079493 -1.014 0.8061 -1.2665 0.45884 -0.23544 0.10661 -0.39567
+Ian -0.3708 -0.067236 0.096163 -0.93513 0.45945 -1.062 0.56056 -0.14612 -0.066785 -0.0086675
+Bank, -0.26307 -0.19509 0.17071 -1.0483 0.64624 -1.0057 0.50766 -0.13061 -0.14266 -0.067282
+space -0.24785 0.031023 -0.20854 -0.93185 0.16903 -0.94983 0.57514 0.011342 -0.29523 0.03631
+remains -0.27094 0.020081 0.089926 -0.99737 0.34499 -0.91512 0.50734 0.072577 -0.15759 -0.05245
+explosives -0.36031 -0.15429 0.078313 -0.92549 0.08738 -0.9409 0.45157 0.0516 -0.18237 0.033363
+east -0.19675 0.12544 0.10072 -1.019 0.81313 -1.0884 0.62149 0.11888 -0.29042 -0.42242
+25 0.11895 -0.056397 0.090409 -1.0446 0.10077 -0.95928 0.33355 0.070212 -0.30139 0.21796
+battle -0.27846 -0.070352 0.15079 -0.98463 -0.38279 -0.72243 0.37669 -0.068275 -0.2686 0.37715
+Jason -0.187 -0.015456 0.11623 -0.84792 0.19114 -1.0272 0.57475 0.18859 -0.29507 -0.12471
+Lockett -0.46609 -0.11666 0.14205 -0.89711 -0.25063 -0.81773 0.36452 0.064722 -0.31159 0.10607
+capital -0.22541 -0.12107 0.028604 -0.9452 0.57696 -1.1292 0.53787 -0.050462 -0.10325 -0.17973
+ahead -0.24124 -0.16768 0.13893 -0.91959 0.26864 -0.91944 0.44784 0.040978 -0.18457 0.11707
+Party -0.23333 -0.12322 0.061631 -0.94488 0.12722 -0.97368 0.53133 0.095747 -0.20035 0.10882
+didn't -0.37202 -0.12961 0.099155 -0.96571 0.32674 -1.1425 0.39862 -0.089292 -0.15754 -0.16824
+storms -0.13308 -0.07898 0.3656 -1.0861 -0.076813 -0.763 0.3458 0.080008 -0.2326 0.2837
+signed -0.2608 -0.26592 0.21975 -1.0783 0.43314 -0.98418 0.34998 -0.14913 -0.069144 -0.058183
+January -0.57483 -0.064061 -0.0063107 -0.88573 0.20769 -1.0344 0.50173 -0.12499 -0.15397 -0.094807
+hopes -0.073326 0.014969 0.3224 -1.0171 -0.37621 -0.62876 0.36393 0.094118 -0.30377 0.4029
+private -0.38831 -0.14378 0.084549 -0.86793 -0.35893 -0.8119 0.42237 0.17419 -0.30477 0.311
+suspended -0.39136 -0.18597 0.041544 -1.016 0.60437 -1.0746 0.45986 -0.19855 -0.054115 -0.17317
+Shaun -0.32093 0.16317 -0.096377 -0.8842 -0.11604 -0.91614 0.56229 -0.06852 -0.32679 0.12307
+payment -0.25827 -0.31973 0.22182 -0.92272 -0.039587 -0.92623 0.39454 0.29695 -0.13683 0.10222
+remaining -0.26889 -0.12486 0.17687 -0.96169 0.25128 -0.94744 0.46965 0.082772 -0.19431 -0.088614
+Harrison's -0.34397 -0.081245 0.11922 -1.0049 0.15445 -0.9469 0.45309 -0.040188 -0.12697 -0.017896
+wanted -0.32708 -0.23356 0.15721 -0.94677 0.11878 -1.0302 0.33616 0.0061313 -0.05673 -0.076851
+gas -0.21353 -0.17003 0.30298 -0.98714 -0.040188 -0.75639 0.33372 -0.027209 -0.23979 0.20234
+wind -0.038783 0.23472 0.17419 -0.94069 -0.49704 -0.72763 0.40959 0.13712 -0.47081 0.33106
+land -0.028609 -0.018359 0.18715 -0.90246 0.045488 -0.98513 0.44541 0.24472 -0.21424 0.13154
+Americans -0.14396 -0.053435 0.091117 -0.97989 0.13175 -0.92375 0.50287 0.10374 -0.3305 0.049118
+market -0.25229 0.091016 0.12493 -0.82617 -0.36877 -0.84742 0.43253 0.21714 -0.35559 0.13219
+wounded -0.3291 -0.25446 0.083525 -1.0483 0.48991 -1.0708 0.47048 -0.087657 -0.073512 -0.02871
+provisional -0.28291 -0.14185 0.011425 -0.79579 0.055761 -0.99861 0.54567 0.1421 -0.211 0.1105
+measures -0.19868 -0.14164 0.28929 -0.90265 0.025215 -0.83739 0.41811 0.21035 -0.22273 0.10311
+added. -0.42632 -0.17106 0.12843 -0.92895 0.14204 -0.93931 0.47269 -0.059101 -0.11808 0.034853
+mission -0.61278 -0.16954 0.00067001 -0.76193 0.061803 -1.0087 0.46712 0.021911 -0.038718 0.030982
+wake -0.093672 0.055472 -0.019713 -0.92111 -0.11022 -0.97104 0.41747 0.10263 -0.27675 0.12806
+airline's -0.22412 -0.12503 0.25227 -0.95896 -0.059966 -0.86024 0.36567 0.09931 -0.19185 0.11832
+secret -0.458 -0.081446 0.11812 -0.8207 -0.17783 -0.88348 0.52513 -0.024678 -0.096435 0.16607
+Ruddock -0.34777 -0.029505 0.024112 -0.80824 0.11575 -0.93498 0.55054 0.086513 -0.1592 0.066195
+happened -0.31539 -0.17737 0.071333 -0.97106 0.22044 -0.94565 0.44359 -0.12155 -0.070321 0.088699
+rise -0.22078 0.016361 0.085381 -0.98863 -0.15084 -0.74209 0.47434 -0.081044 -0.16355 0.23253
+Sharon's -0.61083 0.081367 -0.020081 -0.89849 0.25259 -1.1607 0.51477 -0.4268 0.058208 -0.059512
+strategic -0.31828 -0.19848 0.17038 -0.9227 0.442 -0.9679 0.50203 -0.0076138 -0.17986 0.068369
+keep -0.10788 0.1237 -0.035003 -0.9761 0.023099 -0.89026 0.50539 0.036025 -0.34625 0.13666
+minister -0.81028 -0.045458 -0.015941 -0.78384 0.2495 -1.1529 0.58248 -0.26326 0.068149 0.055324
+sea -0.46396 -0.26388 0.2936 -0.98634 0.18721 -0.75769 0.46366 -0.25523 0.073609 0.27053
+Ray -0.074281 0.020983 0.096088 -1.0812 0.33056 -0.99169 0.58882 0.044375 -0.27237 -0.017101
+visit -0.33539 0.0099953 -0.054178 -0.83477 0.19101 -1.1189 0.42853 -0.007317 -0.099517 -0.107
+Road -0.084933 0.036377 0.27574 -1.0054 0.31223 -1.025 0.5488 0.036382 -0.2599 -0.061547
+peacekeepers -0.34258 -0.21414 0.063549 -0.93751 0.19598 -0.98197 0.48825 0.0060761 -0.1863 0.087055
+fleeing -0.37017 -0.16615 0.032975 -0.90687 0.22861 -1.0308 0.37704 0.0089835 -0.22146 -0.16206
+claim -0.26934 -0.15062 0.2185 -0.92438 0.093081 -0.92261 0.46575 0.047964 -0.29593 0.061419
+community. -0.21125 -0.31741 0.27287 -0.93479 -0.087283 -0.80433 0.36473 0.28058 -0.22082 0.25785
+Europe -0.15524 -0.028875 0.12736 -0.87264 -0.29675 -0.82058 0.43141 0.14404 -0.3574 0.22175
+avoid -0.3159 -0.13116 0.092537 -0.91962 -0.14937 -0.86592 0.46207 0.038993 -0.22333 0.14456
+twice -0.19078 -0.0097596 -0.043195 -0.95156 -0.10547 -0.86528 0.45012 0.16861 -0.29833 0.23977
+Space -0.26798 0.02642 -0.27477 -0.87406 0.37457 -0.97373 0.58072 -0.059426 -0.21291 0.014392
+heading -0.30503 -0.19067 0.11591 -0.93072 0.29625 -1.0378 0.44472 0.10656 -0.27961 -0.19525
+seeking -0.31141 -0.2143 0.011891 -0.88491 -0.19062 -0.82044 0.4387 -0.062761 -0.24948 0.24342
+research -0.32235 -0.12943 0.19902 -0.92469 -0.032494 -0.85794 0.36539 0.10344 -0.26879 0.15296
+expects -0.17921 -0.14698 0.018943 -0.98205 -0.01159 -0.88842 0.38572 0.051161 -0.20906 0.17928
+it," -0.096694 -0.12084 0.1939 -1.0227 0.013426 -0.71415 0.44316 0.05587 -0.36245 0.27634
+anyone -0.14831 -0.28917 0.18073 -0.96224 0.08969 -1.0285 0.30375 0.036478 -0.11385 -0.0055106
+central -0.26683 -0.14607 0.26665 -0.72907 0.043762 -0.99392 0.51015 0.39524 -0.17656 0.024895
+Ansett -0.40758 0.071663 -0.021865 -0.97622 0.14376 -1.0178 0.55423 0.025754 -0.23671 -0.11201
+resume -0.2187 -0.054911 0.15343 -0.9123 -0.1972 -0.87511 0.37848 0.14455 -0.24542 0.20312
+helped -0.51121 -0.19425 0.082131 -1.0081 0.43923 -1.1074 0.32046 -0.10208 -0.030773 -0.17206
+supporters -0.38632 -0.10143 0.1101 -1.0007 0.31006 -0.84494 0.48594 -0.042092 -0.17304 0.014432
+women 0.062876 -0.046723 0.040559 -1.0124 0.23266 -1.0332 0.48577 0.17471 -0.25969 0.121
+Nauru -0.30785 -0.11305 0.076707 -0.97418 0.019464 -0.79503 0.38329 -0.092909 -0.2986 0.085795
+nothing -0.10046 -0.26032 0.2425 -0.96312 -0.45507 -0.6761 0.31895 0.033381 -0.3226 0.35858
+school -0.34002 -0.14079 0.17584 -0.94491 -0.032758 -0.86983 0.4427 0.1536 -0.13169 0.20775
+started -0.10147 -0.15964 0.25274 -0.98902 -0.00099649 -0.82592 0.40647 0.064374 -0.25575 0.18136
+Force -0.5079 -0.25116 0.06707 -0.91445 0.017578 -0.89055 0.43581 0.033313 -0.10564 0.07492
+negotiating -0.22875 -0.10236 0.016135 -0.93902 0.1019 -0.97418 0.47083 0.13294 -0.3142 -0.034064
+terrorism -0.3095 -0.16914 0.23158 -0.8955 0.14668 -0.97299 0.43941 0.13505 -0.27607 -0.068449
+include -0.3025 -0.13224 0.062704 -0.87496 0.17456 -0.96419 0.46202 0.036182 -0.23544 -0.11814
+issued -0.16907 0.062066 0.13286 -0.93521 -0.03815 -0.85031 0.36243 0.24582 -0.17024 0.062843
+finished -0.35034 -0.14011 0.069695 -1.0225 0.30062 -1.0641 0.44014 0.024424 -0.13101 -0.032742
+Some -0.0099117 -0.061962 0.16397 -0.87882 -0.35958 -0.73887 0.56596 0.35597 -0.39751 0.26644
+operating -0.33804 -0.14838 -0.063496 -0.88383 0.38855 -1.0461 0.57688 0.090779 -0.27263 -0.19365
+whole -0.25506 -0.21451 0.22861 -0.94329 -0.2153 -0.81776 0.36984 0.018867 -0.24345 0.20418
+son -0.34367 -0.12143 -0.30906 -0.8543 0.24156 -1.0248 0.59752 -0.26618 -0.1898 0.14002
+crisis -0.28756 -0.073788 0.18835 -0.94887 -0.066948 -0.88405 0.40472 0.088737 -0.24188 0.017432
+bomber -0.19771 -0.11944 -0.1017 -0.94034 0.73826 -1.2021 0.55556 -0.29073 -0.034958 -0.1653
+saw -0.25176 0.00058522 0.12581 -0.95181 -0.56601 -0.74178 0.27863 0.078124 -0.32676 0.34685
+accompanied -0.23652 -0.11722 0.15679 -0.91396 0.24583 -1.1026 0.46984 0.14369 -0.20654 -0.088014
+bowling -0.23753 0.10104 -0.10521 -0.89953 0.093848 -1.0557 0.55039 0.049629 -0.286 -0.23985
+circumstances -0.24159 -0.13832 0.22577 -1.0123 -0.014924 -0.705 0.44815 0.094114 -0.27955 0.1786
+added -0.39582 -0.20179 0.18945 -1.0291 0.60074 -1.0893 0.4444 -0.14892 0.037658 -0.16329
+severe -0.4236 -0.24805 0.24307 -1.0071 -0.0098305 -0.86059 0.38742 0.055473 -0.097104 0.26985
+closed -0.1375 -0.094965 0.16604 -0.95943 0.46679 -1.093 0.47617 0.036413 -0.14127 -0.1315
+there, -0.23426 -0.23311 0.20568 -1.0534 -0.69502 -0.4636 0.26911 -0.031192 -0.30147 0.63743
+employees -0.053637 -0.15401 0.26868 -0.92355 -0.18449 -0.77002 0.42827 0.27962 -0.35416 0.27443
+Victorian -0.21411 -0.093511 0.1154 -0.93202 0.029805 -0.89468 0.40768 0.10296 -0.28345 0.1034
+condition -0.39908 -0.34224 0.27793 -0.94165 0.15307 -0.91617 0.39146 0.23894 -0.17391 0.1092
+almost -0.21181 -0.14618 0.14846 -0.90683 -0.283 -0.71038 0.36562 0.20319 -0.32717 0.21449
+ballot -0.2257 -0.12386 0.15275 -0.92709 -0.38533 -0.68577 0.35565 0.095352 -0.21546 0.40701
+pulled -0.13349 -0.16285 0.30139 -1.0546 0.34589 -0.96727 0.35756 -0.079435 -0.0053248 0.082715
+action, -0.61402 -0.28428 0.10996 -0.95448 -0.058881 -0.8188 0.33729 0.11333 -0.14163 0.15422
+sides -0.12322 0.033408 0.051573 -0.88149 -0.018843 -0.99042 0.42088 0.043824 -0.32997 -0.04907
+400 -0.41921 -0.17601 0.22295 -0.76943 -0.9355 -0.50706 0.30725 0.19276 -0.27032 0.49706
+reduce -0.30168 -0.076541 -0.036801 -0.86058 -0.19464 -0.90828 0.47634 0.19276 -0.17134 0.20792
+Earlier, -0.34794 0.023292 0.075406 -0.84766 0.15437 -0.99986 0.49732 -0.050574 -0.22073 -0.038666
+families -0.28825 -0.14532 0.16689 -0.92058 -0.13739 -0.78522 0.39078 -0.0039667 -0.14736 0.15144
+winning -0.06874 0.10324 -0.016348 -0.98934 -0.053567 -0.95126 0.46299 0.063867 -0.5229 -0.13015
+resolution -0.31964 -0.17339 0.17081 -0.8143 -0.12043 -0.96715 0.44535 0.41145 -0.26246 0.052698
+smoke -0.26105 -0.14285 0.11699 -0.98785 -0.27744 -0.8044 0.35207 0.056853 -0.23205 0.31568
+office -0.218 -0.14524 -0.037394 -0.85397 0.37119 -1.1472 0.56784 -0.041094 0.015932 0.028657
+receive -0.23989 -0.21716 0.34527 -0.91211 -0.23018 -0.80992 0.24342 0.29718 -0.22186 0.27324
+destroyed -0.046881 -0.092095 0.24425 -1.0475 0.45445 -1.0208 0.50193 0.10671 -0.19005 -0.011066
+continued -0.35375 -0.13996 0.16789 -1.0129 0.37804 -1.0076 0.43033 0.20117 -0.089802 -0.060949
+paid -0.44553 -0.24882 0.05324 -0.84873 0.10563 -1.0162 0.44625 -0.11117 0.0057727 0.037079
+virus -0.25906 -0.14378 0.026083 -0.96655 -0.25376 -0.8274 0.44257 -0.033073 -0.13939 0.28351
+rest -0.14087 -0.24237 0.08868 -0.86292 0.12032 -0.92578 0.42126 0.35075 -0.26013 0.14123
+flames -0.079384 -0.057751 0.22134 -0.99779 -0.12274 -0.77179 0.44596 0.15104 -0.36885 0.13729
+Government's -0.35662 -0.36318 0.17055 -0.91577 0.23494 -0.97414 0.53677 0.186 -0.10494 0.067981
+carry -0.36108 0.022253 0.025248 -0.95315 -0.020318 -0.8818 0.44329 -0.11946 -0.25438 0.028633
+lower -0.54397 -0.03934 0.066307 -0.89938 -0.020153 -0.9651 0.46286 -0.13729 -0.082547 0.28365
+knew -0.2977 0.02006 0.044883 -0.95161 -0.12807 -0.83868 0.43772 -0.015755 -0.39014 0.017092
+charge -0.044502 -0.19017 0.23235 -0.93397 0.17141 -1.0606 0.26509 0.14126 -0.18608 0.073823
+cars -0.20463 -0.10096 0.020315 -0.98449 0.22193 -0.92139 0.51828 -0.020477 -0.17681 0.033465
+themselves -0.27441 -0.19666 0.094191 -0.94752 0.011452 -0.82052 0.43824 -0.084641 -0.19891 0.2043
+built -0.05453 -0.20536 0.23449 -0.87066 0.0043947 -0.87834 0.4078 0.15113 -0.27461 0.18582
+traditional -0.31808 -0.14846 0.10253 -0.77127 0.21081 -1.0488 0.5409 0.2533 -0.21733 -0.030549
+reach -0.44067 -0.070178 0.19759 -0.81569 -0.47873 -0.84046 0.42358 0.2951 -0.2969 0.25419
+heart -0.090321 -0.17419 0.20768 -0.92797 0.18419 -0.91507 0.45489 0.14948 -0.29072 0.040668
+W 0.072293 -0.22586 0.2214 -0.95216 0.099508 -0.79726 0.35051 0.078391 -0.34478 0.17774
+bit -0.37841 -0.14545 0.16727 -1.1463 0.81219 -1.125 0.36784 -0.13697 0.10096 -0.38367
+I've -0.14223 0.086352 0.035407 -1.0594 0.028174 -0.87599 0.4268 0.071434 -0.23468 0.065687
+alongside -0.35098 -0.1316 0.11102 -0.99051 0.19609 -0.92738 0.4183 -0.061194 -0.21929 -0.036609
+24 0.031811 -0.038653 0.16645 -0.90522 0.06096 -0.7654 0.39738 0.035196 -0.34309 0.28498
+Karzai -0.31044 -0.17659 0.09338 -0.94382 0.16063 -0.955 0.48382 0.070387 -0.24624 0.10667
+determined -0.39606 -0.12691 0.11161 -0.90735 0.063893 -1.0105 0.41939 0.03563 -0.13198 0.068664
+served -0.31224 -0.1469 0.13778 -0.99746 0.56113 -1.0421 0.45573 -0.11786 -0.032157 -0.034298
+negotiations -0.24608 -0.22317 0.10986 -0.9195 0.14543 -0.93048 0.43894 0.26543 -0.34712 0.051059
+disappointed -0.36286 -0.17775 0.10179 -0.95963 0.29768 -1.024 0.45008 -0.078212 -0.10802 -0.015059
+million. -0.55679 -0.27167 0.15737 -0.88907 0.096537 -1.0085 0.39062 0.045772 -0.07645 0.030597
+5 -0.12427 0.14708 -0.01595 -0.81057 0.21726 -1.0829 0.6152 0.3897 -0.15517 0.0022669
+hold -0.37219 -0.10254 0.074666 -1.0612 -0.07405 -0.90405 0.45018 0.0064788 -0.11655 0.22733
+vote -0.64369 -0.17007 0.024417 -0.93574 -0.092902 -0.94459 0.54972 -0.12877 -0.11921 0.0079356
+nations -0.46773 -0.40285 0.086514 -0.84019 0.45642 -1.03 0.53014 0.32809 -0.30576 -0.03859
+voted -0.38662 -0.17358 0.070854 -0.95296 0.01016 -0.96932 0.41977 -0.067503 -0.032331 0.007658
+City -0.15933 -0.054625 -0.16483 -0.91163 0.3106 -1.0914 0.41468 -0.16155 -0.20879 0.021867
+attacked -0.18449 -0.040412 0.064541 -1.2025 1.1638 -1.3294 0.41003 -0.30483 0.020549 -0.56813
+approach -0.31461 -0.27648 0.10962 -0.91722 0.018954 -0.86706 0.39329 -0.02701 -0.202 0.22297
+resolve -0.3028 -0.13288 0.23066 -0.88434 -0.37935 -0.84542 0.42759 0.29187 -0.31587 0.16513
+region, -0.43459 -0.081776 0.20824 -0.97695 0.065396 -0.91439 0.40789 0.10106 -0.1185 0.03497
+stopped -0.45032 -0.19204 0.24023 -0.98554 0.14211 -0.917 0.3598 -0.08316 -0.10664 -0.0010918
+recorded -0.30823 -0.098121 0.14835 -0.89809 0.33321 -1.0245 0.4314 0.073016 -0.13257 -0.15369
+facility -0.3068 -0.10924 0.11019 -1.0301 0.048937 -0.88394 0.35113 -0.0053479 -0.17994 0.1186
+seekers. -0.42313 -0.39104 0.10196 -0.92719 0.033158 -0.72428 0.49647 -0.058764 -0.12636 0.32512
+Andy -0.4128 -0.086311 0.067352 -0.93239 0.0876 -1.046 0.39893 -0.0093731 -0.030056 -0.063049
+Team -0.13118 0.083289 0.27665 -0.98178 0.24685 -1.0792 0.53747 0.19225 -0.1943 -0.18648
+they're -0.26309 -0.20177 0.16846 -0.99154 -0.19031 -0.78186 0.40193 0.048799 -0.25378 0.31591
+Argentina's -0.38195 -0.069379 0.077963 -0.86022 0.37379 -1.0591 0.51619 0.073333 -0.11085 -0.10816
+operation -0.45542 -0.28483 0.031488 -0.85024 0.36917 -1.0292 0.56994 0.27726 -0.20864 -0.020713
+1 -0.061946 -0.036152 0.088015 -0.94501 -0.56587 -0.69479 0.33479 0.057671 -0.39652 0.54583
+company's -0.24646 -0.25499 0.12094 -0.8555 -0.065341 -0.87628 0.4523 0.11422 -0.23467 0.20347
+above -0.28101 -0.062013 0.3105 -0.96122 0.42124 -0.9899 0.41511 0.071726 -0.21365 -0.13909
+Zimbabwe -0.19476 -0.041701 0.14611 -0.90516 -0.14532 -0.86157 0.48187 0.11272 -0.32375 0.21594
+lost -0.39719 -0.26721 0.35998 -1.033 -0.022575 -0.68873 0.37287 0.052676 -0.30927 0.21901
+business -0.34458 -0.21672 0.054013 -0.89455 0.43415 -1.0089 0.56624 -0.071759 -0.13534 -0.0083832
+Four -0.18358 -0.19732 0.13511 -0.92191 -0.021036 -0.79206 0.3596 -0.030203 -0.32091 0.19374
+Airlines -0.2057 -0.18542 0.25906 -0.86197 -0.21638 -0.78212 0.42764 0.14729 -0.29109 0.19843
+potential -0.13066 -0.045827 0.19466 -0.88089 0.11807 -1.0111 0.46835 0.29623 -0.22057 0.011827
+treated -0.11018 -0.10551 0.28109 -0.95026 0.094927 -0.93671 0.37664 0.17521 -0.24142 0.098328
+Another -0.14594 -0.33391 0.35765 -1.0676 0.011197 -0.74568 0.34726 -0.013992 -0.19294 0.28499
+little -0.186 -0.083573 0.19209 -1.0366 -0.41438 -0.70943 0.33344 0.066882 -0.24142 0.41275
+tape -0.16302 0.10371 0.14223 -1.0517 -0.060557 -0.82127 0.36696 0.13335 -0.34453 0.074391
+lung -0.29184 0.0063357 0.070592 -0.87495 0.083939 -1.0114 0.55092 0.11732 -0.23754 -0.0058427
+fell -0.37211 0.012797 0.082664 -1.0298 0.13061 -0.93115 0.46598 -0.10459 -0.30063 -0.10094
+greater -0.21466 0.0079097 0.25273 -0.95012 -0.054123 -0.80416 0.44873 0.032628 -0.24437 0.34358
+done -0.014793 -0.0067683 0.086637 -0.97805 -0.033787 -0.92564 0.40541 0.02535 -0.19899 0.024775
+out. -0.50085 -0.27089 0.22356 -0.92793 -0.30325 -0.74575 0.29876 0.02653 -0.15032 0.28228
+organisation -0.34536 -0.10234 0.087125 -0.87965 0.15625 -0.92826 0.50642 0.15174 -0.2366 0.08671
+suspect -0.31396 -0.15012 0.17595 -1.0813 0.14394 -0.76811 0.37105 -0.17661 -0.23903 0.048445
+sentence -0.44284 -0.21888 0.052154 -0.90839 0.26553 -0.95631 0.56531 0.080551 -0.10793 -0.038337
+ask -0.34655 -0.11991 0.10353 -0.88798 0.2319 -1.0485 0.52059 0.19465 -0.28768 -0.14825
+incident -0.28375 -0.29921 0.1971 -0.86209 0.067924 -0.95959 0.4549 0.20993 -0.16057 0.085392
+Williams, -0.39511 -0.083276 0.081542 -0.97308 0.1662 -0.90865 0.4451 -0.083423 -0.24119 -0.028967
+3,000 -0.19204 -0.10646 -0.066139 -1.0132 -0.034052 -0.84198 0.47702 -0.044811 -0.21841 0.096795
+greatest -0.044005 -0.039616 0.16731 -0.97915 0.11921 -0.90514 0.52257 0.15667 -0.41196 0.20309
+Affairs -0.31136 -0.050722 0.026881 -0.87813 0.12223 -0.99836 0.53118 -0.032373 -0.19953 -0.037852
+freeze. -0.40264 -0.1233 0.077674 -0.86703 -0.018707 -0.86975 0.42649 0.14071 -0.21533 0.056504
+Doug -0.35976 -0.12714 0.11614 -0.90225 -0.14585 -0.85466 0.44812 -0.090822 -0.21548 0.21651
+Washington, -0.21142 0.11706 0.04237 -1.0057 0.17401 -0.93255 0.48629 0.046844 -0.30952 -0.08279
+spokeswoman -0.34143 -0.12734 0.20297 -0.95821 0.30567 -1.0166 0.45681 0.073869 -0.12169 -0.105
+appears -0.25347 -0.17913 0.09815 -0.98478 0.077997 -0.87975 0.39589 -0.024444 -0.1752 0.1295
+custody -0.38955 -0.10267 0.06916 -0.8303 0.18757 -1.0082 0.46587 -0.060263 -0.22609 -0.062007
+battling -0.11528 -0.076738 0.16785 -0.95093 -0.11965 -0.85803 0.47492 0.13973 -0.37859 0.062873
+giant -0.19474 -0.19235 0.12134 -0.95219 -0.040241 -0.88972 0.45739 0.019493 -0.1236 0.22679
+clearly -0.26136 -0.092334 0.22652 -0.97505 0.044356 -0.87222 0.45145 -0.10398 -0.31415 0.071187
+related -0.15942 -0.098811 0.056044 -0.88749 0.39262 -1.0702 0.53376 0.13411 -0.21892 -0.090192
+grant -0.2401 -0.14062 0.23954 -0.9333 0.071514 -0.91665 0.45179 0.081185 -0.11462 0.067239
+Perth -0.11122 0.03106 0.056859 -1.0016 0.31666 -0.97628 0.5172 -0.039563 -0.18637 -0.090776
+ceremony -0.14673 -0.22008 0.19464 -0.8457 -0.14645 -0.84613 0.456 0.33116 -0.29061 0.20251
+read -0.42176 -0.10929 0.18953 -0.92471 -0.1598 -0.78806 0.49239 -0.010597 -0.19399 0.16819
+nice -0.23009 -0.043847 -0.044621 -0.85689 -0.28957 -0.8679 0.40117 0.060147 -0.23787 0.36475
+charges -0.13571 -0.20754 0.25891 -0.91337 0.020319 -0.92752 0.29293 0.10693 -0.18216 0.11836
+singles -0.32386 0.072627 0.089566 -1.0061 0.0050874 -0.99319 0.54827 -0.032294 -0.22585 -0.050169
+tough -0.51517 0.01907 -0.059756 -0.91604 0.012925 -0.99575 0.56298 -0.19045 -0.12457 0.042528
+pilot -0.17787 -0.21168 0.19167 -1.0186 0.092057 -0.87213 0.42648 0.12392 -0.22186 0.18636
+Interlaken -0.31132 -0.028992 0.12936 -0.77558 -0.010251 -0.95471 0.45878 0.085206 -0.32529 -0.035028
+program -0.3165 -0.194 0.043699 -0.90067 -0.09108 -0.88954 0.41511 0.01183 -0.21771 0.11704
+possibility -0.17417 -0.22635 0.20271 -1.0031 0.16762 -0.94624 0.34064 0.076236 -0.21006 0.0031932
+finding -0.30603 -0.036248 0.20905 -0.89751 -0.20761 -0.84353 0.45065 0.054111 -0.33882 0.0029376
+now, -0.14095 -0.023827 0.24233 -0.97745 -0.30549 -0.70309 0.36732 -0.0015611 -0.35641 0.29118
+tomorrow -0.088968 -0.047691 0.21455 -0.88194 -0.08835 -0.9363 0.43395 0.30085 -0.30457 0.15748
+unity -0.3308 -0.27777 0.24292 -0.88044 0.088659 -0.96242 0.39934 0.30319 -0.17101 0.09274
+volunteers -0.26174 -0.057436 0.089196 -0.96116 0.074692 -0.85164 0.4566 -0.0054521 -0.20545 0.028282
+Assa -0.28009 -0.15646 0.12637 -0.92162 0.1677 -0.92001 0.53836 0.060919 -0.24258 -0.024064
+created -0.080767 0.047301 0.21443 -0.88478 0.14305 -0.98661 0.42311 0.14744 -0.27115 -0.017732
+wall -0.099802 -0.014132 0.060633 -0.85707 -0.038637 -0.96233 0.37083 0.19281 -0.28115 0.16652
+coach -0.16856 -0.29836 0.23797 -0.90876 -0.11726 -0.84583 0.42414 0.1564 -0.25516 0.15827
+recovery -0.20675 -0.18212 0.19319 -0.89779 -0.064241 -0.85309 0.38424 0.17494 -0.21933 0.17171
+Switzerland -0.079992 -0.13598 0.18184 -0.92639 0.054323 -0.93894 0.37569 0.18704 -0.28502 0.12325
+enter -0.45322 -0.01919 0.18559 -0.79178 0.14156 -1.0558 0.60923 0.11858 -0.19179 -0.02854
+doubt -0.32574 0.053422 0.0062525 -0.9487 -0.018581 -0.97107 0.45578 -0.15671 -0.24103 -0.0065333
+cause -0.50551 -0.12227 0.088099 -1.0827 0.016891 -0.88276 0.37197 -0.12661 -0.062636 0.15792
+crowd -0.40782 -0.23396 0.12535 -1.0146 0.051628 -0.88484 0.3862 -0.14947 -0.070023 0.21455
+students -0.19614 -0.093446 0.18796 -1.0112 0.32153 -0.915 0.4746 0.072986 -0.18092 0.036884
+yachts -0.10043 -0.13598 0.28857 -0.93148 0.16356 -0.94541 0.56432 0.17456 -0.27281 0.16088
+mountain -0.5485 -0.088163 0.27787 -1.0609 0.43525 -0.9536 0.4235 -0.0033296 -0.087574 -0.17432
+oil -0.49401 0.027284 0.086111 -0.77788 -0.26105 -0.89366 0.44204 0.070293 -0.21487 -0.035968
+names -0.12431 -0.10413 0.14273 -0.95384 0.0011781 -0.79293 0.37917 -0.00022532 -0.25695 0.13455
+Eve 0.026754 0.033638 0.13392 -0.94275 -0.146 -0.70248 0.46788 0.14457 -0.42444 0.19181
+boats -0.0297 -0.14933 0.3111 -1.04 0.14434 -0.76292 0.42072 0.15491 -0.32255 0.20952
+Philip -0.19464 -0.10752 0.22174 -0.94747 0.077592 -0.9701 0.41533 0.13309 -0.25159 -0.020048
+While -0.32228 -0.12627 0.1897 -0.89911 0.094805 -0.92193 0.48529 0.14728 -0.31592 0.074455
+property -0.24023 -0.26967 0.17315 -0.96327 -0.46607 -0.69738 0.31227 0.11607 -0.24229 0.4851
+River. -0.2681 -0.16975 0.18522 -0.90112 -0.08442 -0.99434 0.40489 0.13814 -0.1938 0.15909
+acting -0.53013 -0.14158 -0.054806 -0.86516 -0.18841 -0.89288 0.42395 0.0077935 -0.24085 -0.023856
+attacks, -0.26184 -0.064943 0.076111 -1.135 1.1445 -1.2878 0.43577 -0.25375 -0.021592 -0.66229
+80 0.19687 -0.0052728 0.11849 -0.99997 -0.26229 -0.74572 0.24241 0.16065 -0.50429 0.38195
+them," -0.12137 -0.21374 0.13169 -1.0482 -0.045658 -0.7064 0.35385 -0.059479 -0.23442 0.25225
+verdict -0.37523 -0.14589 0.21297 -0.90034 0.0082628 -0.88882 0.44354 -0.023509 -0.11883 0.14185
+together -0.41599 -0.11771 0.11297 -0.89298 -0.35122 -0.78593 0.44979 -0.018914 -0.2029 0.32439
+apparently -0.28669 -0.14803 0.16608 -0.90586 -0.11703 -0.78704 0.45045 0.14256 -0.27331 0.16938
+aboard -0.22315 -0.15286 0.22083 -0.9105 0.11552 -0.92815 0.47306 0.053682 -0.17567 0.17077
+area, 0.060098 -0.28676 0.48758 -1.1426 -0.19647 -0.58428 0.30434 0.084059 -0.22395 0.62962
+affected -0.31576 -0.14433 0.15533 -0.90465 0.35061 -1.0104 0.42994 0.02733 -0.076688 -0.10059
+reveal -0.29761 -0.14128 0.13282 -0.90104 -0.13577 -0.93424 0.41919 0.13418 -0.17131 0.14438
+Firefighters -0.14621 -0.1608 0.39446 -1.0887 0.32588 -0.87854 0.47296 0.21558 -0.23373 0.026986
+squad -0.11952 0.19318 0.11819 -1.0138 0.35206 -0.94827 0.57597 0.016621 -0.25446 -0.094914
+swept -0.254 -0.38474 0.3558 -0.89072 -0.2463 -0.79614 0.21236 0.2282 -0.14143 0.40372
+played -0.12248 -0.10612 0.044413 -0.99036 0.062518 -0.93714 0.40971 0.03221 -0.22713 0.076656
+agreed -0.47498 -0.17392 0.11952 -0.93832 0.12854 -1.0205 0.44601 0.026194 -0.083695 -0.075291
+hope -0.20079 -0.22468 0.37713 -1.0259 -0.34884 -0.56551 0.30759 0.068423 -0.3139 0.42521
+Hicks, -0.49856 -0.19744 0.00187 -0.99613 0.52396 -1.0283 0.50948 -0.19591 0.031717 -0.14309
+ready -0.30419 -0.20335 0.17166 -0.85772 -0.46007 -0.75412 0.38355 0.1726 -0.12917 0.40266
+department -0.29198 -0.26417 0.19732 -0.83206 0.12443 -1.0298 0.50087 0.37477 -0.10588 -0.0049605
+doubles -0.18303 0.085722 0.041611 -0.91097 -0.12315 -0.87427 0.58882 0.046346 -0.31335 0.081859
+Gillespie -0.21623 0.065488 0.036796 -0.91373 0.032026 -0.98446 0.523 0.035139 -0.25906 0.014605
+scored -0.17742 0.027689 0.062962 -0.92025 0.35127 -1.0697 0.48265 0.086444 -0.25782 -0.10568
+conflict -0.10585 -0.21113 0.17809 -0.99384 0.22581 -0.88548 0.41597 0.18941 -0.15521 0.13629
+dropped -0.32043 -0.087391 0.11451 -0.94564 0.29418 -1.0107 0.48245 0.031455 -0.16764 -0.093651
+years, -0.0011375 -0.20937 0.11103 -0.99005 0.27352 -0.91087 0.54879 0.21073 -0.28111 0.15536
+Fatah -0.42844 -0.21625 0.049941 -0.90511 0.30765 -1.0389 0.42033 -0.096833 -0.06178 -0.086817
+Friedli -0.31514 -0.2202 0.13265 -0.9082 0.12679 -0.93712 0.36831 0.074354 -0.084924 0.047795
+old -0.69719 -0.18566 0.070685 -1.0067 0.10258 -0.97605 0.44238 -0.1796 -0.052982 0.089902
+Transport -0.15508 -0.11403 0.15107 -0.92124 0.092459 -0.8699 0.4467 0.1271 -0.29248 0.15401
+agency -0.30065 -0.21441 0.035038 -0.91231 0.56437 -1.0848 0.57941 0.034436 -0.11448 -0.15499
+follows -0.017571 0.10862 0.0052477 -0.90609 0.073521 -1.0277 0.5345 0.17643 -0.28208 0.019561
+streets -0.16264 -0.015076 0.17619 -0.93528 0.30503 -0.97626 0.52447 0.13421 -0.26039 0.029433
+debt -0.29361 0.01649 0.11836 -0.9269 -0.1014 -0.8797 0.37439 -0.051927 -0.20218 0.14944
+factions -0.66215 -0.3437 0.0784 -0.91268 0.086813 -0.84447 0.43038 0.10023 -0.11111 0.12388
+dozens -0.020118 -0.041503 -0.0025768 -0.944 0.048652 -0.88489 0.45687 0.10902 -0.31275 0.12495
+Hundreds -0.18794 -0.071425 0.086088 -1.0112 0.47302 -1.0115 0.48967 0.04175 -0.17609 -0.1515
+capital, -0.12553 -0.055046 0.031502 -1.019 0.64319 -1.1797 0.51824 0.0011017 -0.14031 -0.23638
+fierce -0.32886 -0.061441 -0.0085193 -0.97711 0.18292 -0.86985 0.49664 -0.058466 -0.14711 0.11091
+Sunday -0.2073 -0.0074925 0.04898 -0.92262 0.16386 -1.0042 0.49381 -0.054376 -0.23898 -0.070552
+2001 -0.34211 -0.11376 0.19554 -0.89605 0.34288 -0.93222 0.43281 0.0060886 -0.18179 -0.055397
+attempting -0.20869 -0.03348 -0.12391 -0.94975 0.37949 -1.0764 0.48798 -0.10882 -0.1925 -0.18612
+races -0.012184 0.16111 0.060192 -0.99748 0.41683 -1.0134 0.55748 0.12327 -0.26316 -0.13532
+prior -0.39419 -0.24487 0.17659 -0.9468 0.046177 -0.91649 0.39508 -0.010464 -0.17617 0.29622
+Japanese -0.24729 -0.2236 0.2223 -0.88269 0.19642 -0.9013 0.48408 0.14182 -0.19541 -0.016586
+domestic -0.090836 -0.11496 0.22062 -0.94755 -0.021954 -0.86699 0.48926 0.26807 -0.34971 0.16311
+Internet -0.44494 -0.081498 0.22393 -0.86936 0.25624 -1.0817 0.53033 0.019088 -0.15582 -0.081715
+spread -0.34286 0.0085029 0.12235 -0.96069 -0.014924 -0.85794 0.43675 -0.0030413 -0.14867 0.16879
+create -0.16881 0.0015007 0.25886 -0.89012 -0.22962 -0.83982 0.39156 0.25736 -0.3609 0.21564
+playing -0.30897 -0.044987 -0.018034 -0.89053 -0.18541 -0.96471 0.48865 -0.052599 -0.31886 -0.044458
+growing 0.019896 -0.049953 0.18254 -0.98348 -0.16335 -0.84057 0.47503 0.18023 -0.3839 0.12714
+scheduled -0.3439 -0.11101 0.15367 -0.98378 0.19435 -1.0042 0.41828 0.024073 -0.067868 -0.007766
+factory -0.45105 -0.087521 0.030059 -0.97854 -0.027822 -1.0114 0.44714 -0.057401 -0.21847 0.092436
+knowledge -0.3498 -0.13386 0.19503 -0.9762 0.07868 -0.96534 0.3975 -0.048246 -0.17176 0.031962
+save -0.38017 -0.23925 0.33928 -0.94021 -0.35619 -0.73018 0.26854 -0.049871 -0.066799 0.41109
+holiday -0.17117 0.021268 0.12256 -0.95257 0.54454 -0.99889 0.51952 0.066868 -0.25515 -0.20265
+Timor -0.086932 -0.14251 0.27041 -0.80165 0.1293 -0.96345 0.48208 0.44571 -0.29487 0.001174
+Thursday -0.16804 0.032178 0.17198 -0.89441 0.064809 -0.94998 0.5231 0.14831 -0.32066 -0.046057
+recent -0.14141 -0.21349 0.34583 -0.80142 0.047077 -0.96236 0.44747 0.59265 -0.15062 0.12291
+revealed -0.311 -0.1451 0.11148 -0.9362 0.070507 -1.0092 0.43316 0.023024 -0.12374 0.015503
+rain -0.71506 0.070684 0.009715 -0.93109 0.32285 -0.98704 0.52257 -0.17777 -0.1588 -0.21132
+Professor -0.34146 -0.047432 0.047709 -0.85468 -0.34078 -0.80689 0.38297 0.011803 -0.29741 0.29715
+"But -0.23533 -0.072159 0.11926 -0.96619 -0.25722 -0.77987 0.46747 -0.052188 -0.22124 0.32704
+statement. -0.25781 -0.23333 0.21852 -1.0081 0.55942 -1.0465 0.4925 -0.026883 -0.06044 -0.095841
+Solomon -0.1112 -0.17747 0.30167 -0.94309 0.1185 -0.95132 0.39373 0.2722 -0.16205 0.048385
+organisations -0.31664 -0.15481 0.086478 -0.91277 0.24868 -0.91472 0.51023 0.1276 -0.26093 0.067923
+runs -0.081029 0.15482 0.10812 -0.95525 0.16914 -0.87168 0.50043 0.24514 -0.40289 -0.089365
+respond -0.12951 -0.13325 0.25617 -0.99682 -0.036371 -0.84081 0.34943 0.22771 -0.22782 0.15075
+Michael -0.27256 -0.1403 0.14789 -0.84897 0.11625 -0.89961 0.44581 -0.021928 -0.093597 0.08034
+When -0.3826 -0.067863 0.1181 -0.95835 -0.24689 -0.80123 0.4205 -0.12366 -0.28273 0.26885
+40 -0.080944 -0.030479 0.48167 -1.0393 -0.23531 -0.65996 0.23723 0.1509 -0.12914 0.17171
+Hayden -0.26217 0.13508 0.056591 -1.0181 0.060048 -0.92058 0.46848 -0.06749 -0.26086 -0.062866
+attack. -0.2187 -0.054543 0.15759 -1.1832 0.91744 -1.218 0.35545 -0.205 -0.083368 -0.48719
+Earlier -0.35822 0.034622 0.045342 -0.84545 0.2501 -1.0562 0.53407 -0.14539 -0.2124 -0.041862
+Indonesia -0.13118 0.068667 0.079238 -0.90011 -0.074519 -0.92243 0.52518 0.13945 -0.25327 0.099072
+Sarah -0.29148 -0.083626 0.10898 -0.96221 0.095324 -0.90043 0.48371 0.16895 -0.13041 0.13251
+detain -0.35919 -0.070197 0.25744 -0.8393 0.011666 -0.98708 0.45426 0.19846 -0.17789 0.032611
+Neil -0.4231 0.11533 0.060575 -0.94699 -0.31259 -0.88055 0.5079 0.012363 -0.18818 0.047914
+states 0.035746 -0.23303 0.46542 -1.061 0.50206 -0.87712 0.40336 0.011969 -0.23725 0.047316
+4,000 -0.062591 0.016686 -0.018896 -0.91001 -0.16483 -0.83083 0.41536 0.25611 -0.34508 0.053079
+things -0.051032 -0.15411 0.11416 -0.91539 -0.13999 -0.74606 0.36922 0.042876 -0.36282 0.21292
+toll -0.051031 -0.074063 -0.050378 -0.81443 -0.16458 -0.86624 0.50923 0.13427 -0.31809 0.16723
+you're -0.059447 -0.12139 0.1556 -1.0472 -0.35454 -0.73766 0.27145 0.065707 -0.33578 0.33058
+felt -0.43935 -0.029357 0.056699 -1.0074 -0.012995 -0.77477 0.40277 -0.15507 -0.20878 0.065392
+deployed 0.053162 -0.1647 0.22864 -0.97735 0.35141 -0.99622 0.42883 0.28513 -0.2113 0.045679
+Hamas, -0.33651 -0.27008 0.13846 -0.95793 0.30384 -0.96349 0.42221 0.066626 -0.14882 0.029652
+gun -0.19859 -0.12881 -0.085064 -0.77327 -0.15347 -1.0126 0.51969 -0.022194 -0.37624 -0.040505
+Senior -0.22561 -0.12378 0.17376 -0.97379 0.44761 -0.99742 0.52638 -0.025954 -0.082844 -0.089523
+plan -0.40868 -0.099606 0.13781 -0.87832 0.010708 -0.91702 0.48558 -0.034796 -0.17617 0.13689
+elected -0.13135 0.04798 0.14718 -0.88991 0.044746 -0.96795 0.40639 0.12036 -0.23581 -0.0068139
+government, -0.27946 -0.2585 0.1293 -0.85924 0.25008 -1.0282 0.60002 0.2802 -0.16703 0.092715
+north. 0.11999 0.082092 0.12268 -1.0197 0.096272 -0.83958 0.56722 0.2645 -0.31074 0.18826
+tailenders -0.37816 -0.044353 -0.0033328 -0.92389 0.26644 -1.0267 0.46643 -0.02207 -0.17795 -0.20222
+B-52 -0.33645 -0.14164 -0.034415 -1.0395 0.44756 -0.93329 0.52896 -0.1543 -0.19566 -0.048659
+advice -0.019011 -0.080755 0.13782 -1.0027 -0.14265 -0.75955 0.37166 0.25948 -0.27782 0.3537
+continues -0.31877 -0.08533 0.23952 -1.0301 0.1736 -0.92963 0.4279 0.22104 -0.16045 0.032999
+Lording -0.44379 -0.31877 -0.02095 -0.89717 0.27762 -1.0258 0.49945 -0.15816 -0.072751 -0.17291
+body -0.27807 -0.043922 -0.064788 -0.85849 0.4291 -1.0043 0.5301 -0.15222 -0.14431 -0.10526
+died. -0.28004 -0.15246 -0.050408 -0.89943 0.25872 -1.1047 0.51751 0.027965 -0.16932 0.011267
+Melbourne, -0.16467 -0.0016058 0.15283 -0.917 -0.25817 -0.83193 0.39381 0.033862 -0.38796 0.1885
+activity -0.4133 -0.23608 0.042298 -0.90558 0.024862 -0.93733 0.37843 0.10265 -0.13713 0.092931
+Krishna -0.37526 -0.19429 0.26769 -0.98535 0.13161 -0.93223 0.42722 -0.041666 -0.18585 0.028535
+crossed -0.070605 -0.052971 0.25836 -1.0456 0.26535 -1.0064 0.47807 0.18456 -0.31118 -0.08613
+described -0.21603 -0.1074 0.13553 -0.93613 0.040677 -0.93754 0.39861 0.10401 -0.22784 0.060417
+suffered -0.24294 -0.18708 0.019853 -0.95508 0.11403 -0.92028 0.46586 -0.0031084 -0.14647 0.12232
+500 -0.10623 0.18396 -0.090181 -1.01 0.1596 -0.86083 0.49228 0.10059 -0.22581 -0.014477
+militants. -0.45571 -0.19868 0.017953 -0.93778 0.71889 -1.1236 0.51809 -0.12618 -0.058003 -0.21578
+rescue -0.26812 -0.02935 0.10839 -0.92493 -0.17213 -0.96675 0.37002 0.15285 -0.25694 0.13041
+walk -0.22773 0.038052 -0.11351 -0.80286 0.32745 -1.1318 0.54419 0.0089137 -0.22752 -0.081451
+That -0.1364 -0.029955 0.15664 -0.88105 -0.49632 -0.69868 0.40827 0.12486 -0.43356 0.32152
+diplomatic -0.25385 -0.12728 0.056069 -0.94035 0.0083836 -0.90342 0.41262 -0.015823 -0.21035 0.12273
+directors -0.077749 -0.14422 0.21524 -0.95906 -0.036602 -0.91827 0.31253 0.2058 -0.25 0.12023
+concern -0.30573 -0.29248 0.31705 -0.99877 0.075426 -0.84557 0.39936 0.22679 -0.052918 0.24857
+Ricky -0.53879 -0.0035531 0.062384 -1.0496 0.017301 -0.8555 0.45923 -0.17582 -0.26331 -0.021441
+attacking -0.19124 -0.011663 0.046328 -1.0701 0.61407 -1.1884 0.46141 -0.13146 -0.16939 -0.36588
+handed -0.32916 -0.28368 0.13324 -1.0037 0.43082 -1.022 0.45323 -0.087054 -0.061207 -0.075076
+edge -0.030324 0.011877 0.20697 -0.91813 0.29694 -1.065 0.38935 0.097339 -0.26136 -0.037787
+weekend. -0.24846 -0.18026 0.12221 -0.98336 0.063706 -0.77877 0.3955 -0.036036 -0.26551 0.25798
+why -0.54003 -0.17741 0.15215 -0.98643 0.38637 -1.0131 0.40792 -0.3226 -0.1438 0.0090477
+country. -0.33879 -0.12475 0.19287 -0.88116 0.034972 -0.88351 0.47031 0.21101 -0.26327 0.064972
+promised -0.33058 -0.19621 0.14678 -0.87526 0.24515 -1.0454 0.45322 0.11116 -0.14254 -0.030859
+Radio -0.40828 -0.053057 0.12387 -0.9347 0.2561 -0.9069 0.5037 -0.12057 -0.10187 -0.042171
+According -0.40444 -0.16357 0.086887 -0.89811 0.32539 -1.0539 0.52773 -0.041895 -0.20015 -0.28409
+investigating -0.17936 -0.11615 0.037612 -0.88204 0.20279 -1.0224 0.50793 0.16582 -0.24511 -0.019877
+Sydney's 0.26561 0.12441 0.31024 -1.0951 0.18804 -0.78061 0.58081 0.22754 -0.37633 0.18482
+civil -0.27172 -0.091949 0.087172 -1.0009 0.018191 -0.81623 0.45942 0.026575 -0.21189 0.17785
+Ministry -0.67236 -0.23749 0.14073 -0.8914 0.29613 -1.0714 0.49386 -0.16486 0.15936 0.069926
+Pakistan. -0.862 -0.55687 0.208 -1.0142 0.66765 -1.1684 0.38819 -0.14924 0.07302 -0.32486
+blaze -0.45721 -0.094917 0.039373 -1.0435 0.53644 -1.008 0.48946 -0.11726 -0.058373 -0.1909
+form -0.34916 -0.017953 -0.015494 -0.90177 0.14814 -1.154 0.44586 0.098764 -0.18015 -0.20346
+showed -0.29118 -0.22855 0.27023 -1.0458 0.11953 -0.83314 0.3252 -0.025419 -0.054188 0.13709
+field -0.18158 -0.17807 0.31801 -0.99627 -0.10492 -0.7835 0.45081 0.068907 -0.17304 0.29566
+period -0.24461 -0.075453 -0.0059673 -0.87738 0.42241 -1.0123 0.52005 0.092256 -0.21545 -0.044755
+action. -0.65352 -0.39539 0.19935 -0.9616 -0.052078 -0.81066 0.31832 0.10863 -0.05101 0.15773
+threatened -0.28797 -0.095794 0.1904 -0.98768 0.20751 -0.9698 0.3816 -0.079589 -0.1922 0.073733
+game -0.19809 -0.0086769 -0.066625 -0.93597 -0.36786 -0.73464 0.42883 0.018447 -0.48203 0.24025
+open -0.30496 0.025563 -0.024002 -0.92346 0.24914 -1.0943 0.49335 -0.27707 -0.17528 -0.25764
+shows -0.24444 0.016777 0.12173 -0.95246 0.04824 -0.87266 0.541 0.10345 -0.3015 -0.0094383
+hospital. -0.0014781 -0.058618 0.13286 -0.97958 0.23553 -0.93121 0.53765 0.15109 -0.27042 0.060958
+largest -0.20056 -0.048746 0.099227 -0.95552 0.37308 -1.0641 0.49084 0.073491 -0.37554 -0.077533
+responsible -0.11128 -0.14981 0.22246 -0.95417 -0.051653 -0.87557 0.35739 0.17158 -0.29181 0.14
+completed -0.18283 -0.13835 0.19334 -0.96165 0.41236 -1.0265 0.48639 0.18093 -0.17365 -0.083775
+Authorities -0.28478 -0.16736 0.17012 -0.96326 0.24699 -0.84565 0.52337 0.086151 -0.21086 0.11229
+fall -0.18331 0.060063 0.11881 -0.83354 -0.49483 -0.83717 0.39998 0.16868 -0.24348 0.3259
+"I'm -0.26948 0.045758 0.030334 -0.99897 -0.078027 -0.95211 0.43937 -0.12327 -0.20389 0.049463
+planes -0.29143 -0.1056 0.22846 -0.94404 0.17902 -0.94397 0.40442 -0.061847 -0.11728 0.084152
+met -0.26377 0.069661 0.043273 -0.88494 0.002914 -0.90562 0.42216 0.063408 -0.097371 0.0045662
+2002 -0.45596 -0.17479 0.17879 -0.90017 0.19999 -0.89563 0.49938 -0.14118 -0.2134 -0.051498
+Crean -0.2852 -0.10927 0.11987 -0.80172 -0.63576 -0.77574 0.4467 0.17397 -0.37047 0.30685
+representing -0.24022 -0.0811 0.083087 -0.86165 -0.11595 -0.91291 0.43206 0.24796 -0.25011 -0.0014316
+review -0.18524 -0.067561 0.19797 -0.94368 -0.17154 -0.85699 0.47081 0.13944 -0.23968 0.2017
+Yallourn -0.47021 -0.021575 0.01116 -0.8892 0.058852 -0.92951 0.53884 -0.036631 -0.16029 0.057955
+quarter -0.44592 -0.039945 0.034074 -0.86233 -0.051805 -0.92575 0.52607 0.010688 -0.26031 0.076642
+speech -0.63462 -0.20998 0.072527 -0.98417 0.35921 -1.0013 0.41784 -0.19271 -0.071603 -0.13002
+secure -0.32391 -0.19069 0.12847 -1.0189 0.5232 -1.0481 0.49084 -0.11453 -0.058657 0.059392
+meeting. -0.46792 -0.037851 -0.09161 -0.91255 0.31235 -1.1162 0.48363 -0.11875 -0.094529 -0.10114
+Territory -0.26832 -0.19567 0.073029 -0.90753 -0.10559 -0.89834 0.38328 0.092238 -0.24663 0.17531
+light -0.12712 -0.16921 0.18333 -0.9921 0.54441 -1.1114 0.51773 0.15336 -0.12766 -0.21983
+Adelaide. -0.025989 0.085196 0.11826 -0.84865 -0.073398 -0.90715 0.44745 0.21695 -0.47422 -0.03469
+month, -0.12487 -0.077932 0.027586 -0.85013 0.3364 -1.0947 0.47631 0.14132 -0.23213 -0.13515
+it. -0.16097 -0.0027678 0.30021 -0.9826 -0.52734 -0.59736 0.39112 0.12545 -0.3951 0.3784
+well," -0.35334 -0.018732 -0.051846 -0.95604 -0.12878 -0.79389 0.45722 -0.23372 -0.32752 0.14005
+hoped -0.37201 -0.2701 0.36301 -1.0897 0.35876 -0.81422 0.26953 -0.10798 -0.030669 0.067099
+"That -0.16934 -0.0016635 0.11367 -0.94955 -0.065852 -0.852 0.42582 -0.0042309 -0.21283 0.10859
+voice -0.21974 -0.20248 0.1113 -0.92958 -0.18162 -0.78683 0.37163 0.098087 -0.13725 0.30602
+Strip, -0.17654 -0.14265 0.1576 -0.99836 0.57331 -1.0703 0.49526 0.014806 -0.078684 -0.062875
+rival -0.18643 -0.082184 0.053126 -0.83016 -0.29496 -0.8513 0.42921 0.22511 -0.28777 0.25562
+documents -0.037684 -0.091584 0.076233 -0.89734 0.43422 -0.98438 0.59961 0.22531 -0.33378 -0.066055
+conducted -0.1383 -0.037729 0.1417 -0.98767 0.069707 -0.88731 0.42623 0.12239 -0.22512 0.12653
+became -0.16751 -0.17281 0.14356 -0.95021 -0.21699 -0.76155 0.39371 0.10439 -0.30135 0.30855
+Three -0.11491 0.034153 0.1029 -0.96994 0.15153 -1.0152 0.51004 0.23708 -0.35258 0.01072
+drug -0.10335 -0.22204 0.27887 -0.78724 -0.11928 -0.83802 0.3648 0.28033 -0.3473 0.27315
+Channel -0.40403 -0.22723 0.099833 -0.91948 0.12351 -0.99368 0.40838 0.0019438 -0.04688 0.12416
+adequate -0.28001 -0.064033 0.2613 -0.96333 0.078272 -0.93512 0.45222 0.20864 -0.27414 0.020279
+winner -0.24263 0.052 0.17734 -1.0189 -0.040712 -0.94032 0.45878 -0.046781 -0.27556 0.16295
+Gary -0.22597 0.027422 0.087171 -0.88541 -0.061774 -0.90493 0.45046 0.10433 -0.25775 0.069412
+Costello -0.38752 -0.17864 0.023341 -0.99545 0.33056 -1.0319 0.4482 -0.083534 -0.10498 -0.01931
+Mohammad -0.39264 -0.03019 0.11398 -0.87596 0.088261 -0.86994 0.4628 -0.085696 -0.2002 0.055633
+month. -0.079094 -0.062628 0.086861 -0.85169 0.093903 -1.0001 0.42942 0.21574 -0.27447 -0.018415
+Hospital -0.069514 -0.17098 0.17142 -0.91389 0.21038 -0.94193 0.48858 0.10507 -0.16306 0.061756
+worked -0.3658 -0.18651 0.16302 -1.0202 0.20734 -0.93103 0.45036 -0.045388 0.011548 0.033307
+No -0.06644 0.047094 -0.0072464 -0.97361 0.35235 -1.0128 0.65638 0.1251 -0.27042 0.074347
+Home -0.19708 -0.16752 0.23055 -0.91908 -0.28299 -0.78355 0.37316 0.28967 -0.33267 0.1164
+finally -0.2225 0.023568 0.042913 -0.88631 -0.21756 -0.87086 0.41333 0.12565 -0.24964 0.24162
+system -0.32424 -0.11447 0.022804 -0.86424 0.41032 -1.087 0.59199 0.05113 -0.16408 -0.029677
+low -0.42441 0.058064 0.24926 -0.94843 -0.41338 -0.72884 0.31984 -0.049308 -0.14088 0.27766
+people. -0.12527 -0.067296 0.039527 -0.90466 0.085485 -0.90647 0.50767 0.094092 -0.33578 0.091639
+tell -0.32064 -0.16263 0.1469 -1.0216 -0.58306 -0.65198 0.35841 0.054218 -0.3 0.40143
+separate -0.27425 -0.12546 -0.021667 -0.87955 0.1923 -0.97197 0.5305 0.075712 -0.20981 0.095925
+Rumsfeld -0.20524 -0.15714 0.14062 -1.0314 0.0023828 -0.79159 0.43273 -0.032572 -0.2126 0.21579
+Timor's -0.14788 -0.19963 0.31471 -0.94354 0.028989 -0.85614 0.43924 0.35624 -0.2247 0.097835
+assisting -0.42728 -0.074091 -0.084522 -0.8508 0.32864 -1.0608 0.50128 -0.053758 -0.16812 -0.19792
+regional -0.38529 -0.035004 0.15997 -0.77454 0.25105 -1.0563 0.52642 0.19416 -0.086911 -0.093535
+real -0.36399 -0.25527 0.23231 -0.85246 -0.43477 -0.81053 0.37251 0.24543 -0.21747 0.35087
+travelled -0.30306 -0.11726 0.12499 -0.88953 0.034301 -0.99596 0.39319 0.059334 -0.14803 0.070926
+personnel -0.24849 -0.16882 0.1015 -1.0017 0.31558 -1.0015 0.45331 -0.048916 -0.13477 0.066244
+ability -0.27173 -0.19358 0.049492 -0.99239 0.61827 -1.1174 0.4664 -0.022641 -0.1291 -0.19477
+shopping -0.084733 0.028369 0.081703 -0.91519 0.18997 -0.90579 0.52277 0.094239 -0.38535 -0.065638
+offered -0.28105 -0.32388 0.079595 -0.95111 0.095603 -0.92738 0.43216 0.026027 -0.059018 0.13014
+well." -0.31512 -0.066211 0.095542 -0.90755 -0.52851 -0.67737 0.41563 0.076345 -0.40165 0.30207
+republic -0.29533 -0.10822 0.024253 -0.89019 -0.13072 -0.883 0.40501 0.12325 -0.22216 0.1724
+tragedy. -0.2544 -0.075438 0.20771 -0.87111 -0.17515 -0.9306 0.40912 0.14662 -0.34255 0.01546
+Sharon, -0.54722 0.14504 -0.09222 -0.86272 0.29718 -1.2241 0.55062 -0.51179 0.04589 -0.062425
+waiting -0.33496 -0.061463 -0.06793 -0.86166 -0.10127 -0.94691 0.42146 0.071077 -0.2626 -0.007498
+Health -0.12165 -0.15446 0.21313 -0.90986 -0.06678 -0.81807 0.35183 0.025407 -0.17704 0.19281
+track -0.33687 -0.28419 0.27461 -0.85502 0.094422 -0.93155 0.43375 0.019345 -0.14151 0.15344
+problems -0.23635 -0.057152 0.13733 -0.96691 -0.28434 -0.78862 0.46773 0.060729 -0.28674 0.3308
+seriously -0.29599 -0.20022 0.10944 -0.90622 0.39272 -1.011 0.52848 -0.049441 -0.11413 0.075811
+Illawarra -0.12312 -0.10931 0.231 -0.94276 -0.040194 -0.88484 0.44864 0.1819 -0.33259 0.13047
+Virgin -0.43737 -0.059672 0.022511 -0.87982 0.25952 -1.0294 0.55749 0.038893 -0.22717 -0.13892
+television -0.40775 -0.15439 0.0078305 -0.89733 0.12706 -1.0102 0.4374 -0.1198 -0.047093 0.11185
+hours, -0.16732 -0.082988 0.24497 -1.0274 -0.028222 -0.85568 0.27882 0.06291 -0.27767 0.13924
+south-west -0.032608 -0.049815 0.19882 -1.0478 0.52558 -0.92695 0.59419 0.12515 -0.38462 0.03899
+Mohammed -0.43229 -0.12045 0.13958 -0.96673 0.4586 -1.025 0.45631 -0.13927 -0.044081 -0.13244
+Washington. -0.28267 0.034559 0.095128 -1.0139 0.13886 -0.91053 0.44615 0.050118 -0.28358 -0.058168
+"His -0.40711 -0.089346 0.022946 -0.9222 -0.045735 -0.92028 0.47429 -0.021138 -0.25581 -0.011387
+landed -0.22248 -0.17765 0.11213 -0.9833 0.64399 -1.1873 0.47176 -0.053128 -0.032894 -0.17665
+individuals -0.30371 -0.097623 0.12036 -0.86899 -0.12237 -0.91775 0.39886 0.080975 -0.15119 0.13273
+resistance -0.61039 -0.31171 0.15754 -0.96852 0.24458 -0.94637 0.43058 0.0090633 -0.098713 -0.037902
+Mayor -0.27184 -0.093265 0.19896 -0.9807 -0.039304 -0.88642 0.3541 0.054288 -0.12868 0.012767
+criminal -0.2211 -0.12247 0.23261 -0.85552 0.067805 -0.98377 0.47484 0.19956 -0.25257 0.014181
+representation -0.37881 -0.21401 0.17627 -0.88162 0.080312 -0.96165 0.42385 0.2562 -0.16246 0.053188
+His -0.4522 -0.28315 0.15234 -0.87023 0.22684 -0.91788 0.45055 -0.13313 -0.10547 0.12085
+territories -0.32634 -0.23142 0.095182 -0.9543 0.14923 -0.91172 0.4212 -0.0087514 -0.13068 0.099214
+observers -0.28079 -0.11129 0.12121 -0.97759 0.33095 -0.95931 0.50448 -0.056571 -0.13655 0.021243
+Owen -0.40788 -0.0014133 -0.11052 -0.94474 0.53525 -1.2078 0.64991 -0.091348 -0.11122 -0.25833
+sending -0.51309 -0.1859 0.084034 -0.88158 0.019714 -0.9883 0.49863 -0.031452 -0.19263 -0.072645
+26 -0.0006202 0.10724 -0.022284 -0.82976 0.068064 -0.98822 0.51966 0.14629 -0.40722 -0.11155
+Sector -0.31445 -0.17617 0.15852 -0.88677 -0.069458 -0.83895 0.38908 0.031061 -0.23409 0.11124
+embassy -0.26549 -0.017364 0.21213 -0.90806 0.069404 -0.94696 0.49348 0.20868 -0.21777 -0.020424
+shuttle -0.20957 0.014762 0.13739 -1.0199 -0.025479 -0.85309 0.46138 0.04258 -0.29832 0.1862
+ban -0.53768 -0.02236 0.095289 -0.96129 -0.13797 -0.85195 0.39781 -0.14755 -0.08554 0.1538
+ANZ -0.19758 -0.16704 -0.05023 -0.91872 0.364 -0.98109 0.44476 0.053657 -0.14595 -0.0029469
+Ahmed -0.50308 -0.21174 0.097447 -1.0042 0.39655 -1.0429 0.30618 -0.12886 -0.10869 -0.094447
+request -0.1231 -0.036596 0.10909 -0.90715 0.19061 -0.95619 0.52876 0.28876 -0.30993 -0.099247
+unemployment -0.29502 -0.24977 0.1978 -0.94719 -0.065665 -0.86253 0.50078 0.13676 -0.16593 0.23636
+assistance -0.63903 -0.28618 0.075197 -0.9545 0.40815 -0.99153 0.49461 -0.078772 -0.10471 -0.10326
+Launceston -0.37547 -0.0064214 0.051219 -0.89427 -0.067292 -0.87666 0.49713 0.056742 -0.29787 0.077475
+Wayne -0.12187 0.068928 0.017605 -0.99255 0.57536 -1.0356 0.57311 0.14447 -0.252 -0.14248
+Boucher -0.52523 0.025364 -0.026015 -0.98984 0.13125 -0.97817 0.51024 -0.13463 -0.18826 -0.030091
+Indonesian -0.215 0.020276 0.034067 -0.87099 -0.005719 -0.92212 0.52643 0.056346 -0.1973 0.097429
+months, -0.10046 -0.069789 0.10003 -0.9277 0.24753 -1.0747 0.44745 0.18699 -0.26068 -0.08329
+murder -0.42637 -0.24334 0.12645 -0.78126 0.10648 -1.0982 0.47767 0.159 -0.11915 0.041442
+Whiting -0.25833 -0.023759 -0.047414 -0.88992 0.080393 -0.95249 0.46532 0.0084415 -0.28506 -0.07071
+convicted -0.087382 -0.14507 0.21741 -0.97476 0.12423 -0.92747 0.37899 0.18639 -0.23692 0.10655
+positions -0.45257 -0.27477 0.085941 -0.85921 0.18458 -0.953 0.46735 0.14453 -0.21068 0.086495
+ethnic -0.3314 -0.013393 0.139 -0.9376 0.002369 -0.81834 0.44175 -0.056331 -0.19796 0.11059
+About -0.1777 -0.16339 0.3381 -0.82766 0.019878 -0.88386 0.32885 0.3276 -0.32283 0.036568
+success -0.27618 -0.13046 0.098235 -0.9085 0.16715 -0.91378 0.51658 0.01549 -0.19144 0.0049447
+Matthew -0.40921 -0.082844 -0.0025165 -0.93614 0.19289 -0.94652 0.47355 -0.17839 -0.17524 -0.056866
+adding -0.23709 -0.1576 0.04681 -0.92208 0.30419 -1.0458 0.53208 0.030716 -0.21109 -0.13296
+afternoon, -0.54182 -0.15146 0.05249 -0.9633 0.31184 -0.9892 0.51719 -0.082694 -0.16372 -0.015537
+Several -0.13199 -0.30305 0.35307 -0.90982 -0.12317 -0.80691 0.29891 0.17346 -0.16832 0.24398
+doesn't -0.2277 0.012908 0.016402 -1.0144 -0.26756 -0.81014 0.45085 -0.052238 -0.38941 0.2301
+jets -0.1653 -0.18342 0.02247 -1.0515 0.78594 -1.0918 0.5612 -0.070135 -0.12446 -0.12714
+returning -0.22105 0.066884 0.058995 -0.93883 -0.047402 -0.98682 0.4423 0.021276 -0.28428 0.0085229
+Tasmania -0.36636 0.025534 -0.026354 -0.97525 0.6671 -1.1778 0.56041 -0.21786 -0.060114 -0.32723
+eventually -0.060651 -0.05693 0.20574 -0.99548 -0.093327 -0.84715 0.45356 0.16121 -0.27674 0.2399
+turn -0.2635 -0.051435 -0.014098 -0.92409 0.2041 -0.8606 0.59687 -0.1945 -0.073028 0.1483
+leaving -0.23264 -0.1132 0.032918 -0.9093 -0.21705 -0.873 0.42549 -0.048552 -0.30136 0.17416
+City, -0.067429 0.11399 -0.11627 -1.0337 -0.085067 -0.8824 0.47107 -0.10358 -0.38238 0.26292
+blasted -0.033591 -0.078305 0.26092 -0.99451 0.95927 -1.1888 0.50083 0.1436 -0.072922 -0.32647
+ambush. -0.47088 -0.12169 -0.068579 -1.014 0.35499 -1.134 0.47717 -0.22519 -0.063657 -0.10275
+walked -0.18161 -0.14404 0.088765 -0.92529 0.35004 -1.1199 0.35355 0.093609 -0.069034 -0.17966
+infected -0.19348 -0.038659 0.12921 -0.8858 0.38597 -1.0568 0.47456 0.073278 -0.12294 -0.08691
+connection -0.40445 -0.24466 0.095035 -0.90027 0.12359 -0.97314 0.44386 0.1951 -0.14262 0.12853
+throughout -0.31055 -0.063748 0.18935 -0.97882 0.030535 -0.94017 0.38571 0.063454 -0.20595 0.050733
+"We've -0.18621 -0.073269 0.12786 -1.0151 -0.29615 -0.82385 0.37146 0.077991 -0.22902 0.20631
+aware -0.093168 -0.26167 0.33907 -1.0078 -0.09483 -0.78338 0.28706 0.091563 -0.22648 0.2203
+initial -0.20161 -0.2792 0.020668 -0.88278 0.2253 -1.0335 0.48082 0.21186 -0.14592 0.14193
+batsmen -0.21912 -0.096826 0.10785 -1.0118 -0.1907 -0.75203 0.45697 0.12281 -0.31518 0.22863
+publicly -0.26759 -0.13199 0.13334 -0.93198 -0.064618 -0.82329 0.39054 0.032715 -0.24503 0.17005
+hijacked -0.27263 -0.11454 0.064381 -1.0713 0.32305 -1.0128 0.45111 -0.11007 -0.085915 0.031842
+hotel -0.13685 -0.15678 0.12426 -0.89428 0.094665 -0.9525 0.50199 0.049709 -0.19466 0.1286
+manager -0.36589 -0.28577 0.16006 -0.89964 -0.051954 -0.89808 0.35038 0.068212 -0.22981 0.23828
+News -0.13397 0.038487 0.11931 -0.95999 0.2688 -0.82699 0.51309 0.16196 -0.29672 -0.090084
+whereabouts -0.26045 -0.23654 0.29012 -0.94527 0.10056 -0.86472 0.39543 0.13834 -0.21111 0.14724
+SES -0.060015 -0.093493 0.14755 -0.89576 0.27132 -1.0017 0.37142 0.29515 -0.23319 -0.054476
+passed -0.23991 -0.14631 0.1053 -0.92571 0.079771 -1.0391 0.35249 0.041943 -0.10139 0.010671
+retired -0.10288 -0.21485 0.22882 -1.0209 0.22266 -0.86894 0.30943 0.031934 -0.069143 0.091702
+Cabinet -0.39858 0.091476 0.20836 -0.95545 0.50144 -1.0545 0.51298 0.020529 -0.18466 -0.28999
+Hopman -0.23384 0.056702 0.13752 -0.88843 0.11919 -1.0044 0.50717 0.089605 -0.27833 0.026196
+Colin -0.50858 -0.30501 0.20478 -0.90787 0.047238 -0.85429 0.46799 -0.025284 -0.1396 0.16909
+France -0.54875 -0.027401 -0.014226 -0.98142 0.30926 -0.9169 0.4647 -0.08488 -0.13867 -0.093333
+halt -0.37949 -0.19086 0.26888 -0.95092 0.20975 -0.81348 0.34532 -0.10359 -0.094048 0.11118
+Seles 0.021606 0.14334 0.18284 -1.0069 0.073838 -0.83509 0.57831 -0.015797 -0.31883 0.055868
+leadership -0.5245 -0.24842 -0.041373 -1.0035 0.40459 -1.0631 0.41643 -0.17426 0.05289 0.0039623
+presence -0.36084 -0.15133 -0.003308 -0.88257 -0.002605 -0.84002 0.43271 0.06422 -0.1509 0.1411
+bringing -0.16257 0.07094 -0.063496 -0.89058 -0.066668 -0.98277 0.55783 0.071073 -0.42444 -0.11064
+Ford -0.68731 -0.17513 -0.0084982 -0.83995 0.29547 -0.92423 0.58389 -0.28806 0.0021562 -0.033388
+ashes -0.035294 -0.048422 0.2007 -0.92284 -0.29905 -0.77588 0.41888 0.1914 -0.34667 0.23776
+temporary -0.42203 -0.19107 0.047354 -0.95904 0.21416 -0.96639 0.50933 -0.055362 -0.12741 0.052021
+HIV -0.24905 -0.21377 0.063751 -0.87832 -0.084386 -0.8413 0.44261 0.065612 -0.28955 0.21276
+male -0.42632 -0.037384 -0.011601 -0.80641 -0.23765 -0.79392 0.52739 -0.072474 -0.31588 0.17107
+delivered -0.27494 -0.27154 0.20049 -1.0283 0.34314 -1.0314 0.3781 0.068735 -0.10579 0.013449
+stay -0.40191 -0.46309 0.35015 -0.9483 0.43225 -0.89636 0.38019 -0.093341 -0.069494 -0.028059
+place, -0.42016 -0.094504 0.0081534 -0.91748 -0.071619 -0.95206 0.38292 -0.062778 -0.26259 0.074912
+authority -0.44484 -0.28295 0.072215 -0.97754 0.1083 -0.90135 0.47309 0.044972 -0.11922 0.18977
+whatever -0.35706 -0.091354 0.2386 -0.86837 -0.083266 -0.82038 0.40701 -0.12165 -0.25287 0.18153
+Premier -0.42991 -0.093934 0.14489 -0.9427 0.30017 -1.0132 0.45915 -0.14094 -0.052598 -0.05255
+Washington -0.1942 0.075839 0.079679 -1.0062 0.12136 -0.92512 0.45686 0.092941 -0.31464 -0.073134
+farmers -0.30328 -0.25586 0.25466 -0.96498 0.20236 -0.90681 0.33278 -0.020502 -0.032443 0.074924
+hearing -0.11652 -0.12713 0.13908 -0.89716 0.094548 -1.017 0.4162 0.2249 -0.3312 -0.083326
+disaster -0.41233 0.0090258 -0.012068 -0.89477 0.23141 -1.0535 0.51601 -0.090431 -0.11046 -0.053681
+Hare -0.31633 -0.23029 0.39142 -1.0579 -0.029476 -0.71293 0.28781 -0.037969 -0.14417 0.06339
+fair -0.2138 -0.1823 0.13421 -0.87633 -0.31357 -0.84075 0.35768 0.028203 -0.20797 0.24274
+28-year-old -0.26208 -0.20888 0.14721 -0.98162 0.19933 -0.90627 0.47913 0.070672 -0.13381 0.10318
+manslaughter -0.18954 -0.10245 0.15641 -0.90749 0.046472 -0.9511 0.47872 0.17989 -0.25487 0.052103
+Services 0.099523 -0.10298 0.32188 -1.0072 -0.14518 -0.6677 0.39707 0.38495 -0.33886 0.32082
+Emergency -0.18084 -0.069069 0.13063 -0.93422 0.3176 -1.0159 0.53012 0.11359 -0.19818 -0.063753
+relationship -0.4527 -0.31467 0.065602 -0.83727 0.16268 -0.9873 0.51063 0.17667 -0.17547 0.1002
+allegedly -0.15841 -0.11791 0.23173 -0.95427 -0.064483 -0.95716 0.24609 0.25144 -0.18054 0.16803
+happy -0.24261 -0.14874 0.16108 -0.9851 0.16835 -0.88154 0.46359 0.049752 -0.27116 0.092684
+tensions -0.27807 -0.2446 0.1275 -0.95882 0.08456 -0.87565 0.43105 0.16766 -0.21819 0.15439
+Arafat, -0.69495 0.00283 -0.11653 -0.87107 0.30845 -1.1002 0.55539 -0.46929 0.13194 -0.013451
+actor -0.5157 -0.28967 0.11812 -0.93227 -0.35857 -0.7746 0.2859 -0.082813 -0.23848 0.29371
+seemed -0.61388 -0.29496 0.10962 -1.0043 0.36095 -1.0873 0.38044 -0.22345 0.087789 -0.058102
+headed -0.50502 -0.2573 0.24772 -1.059 0.37391 -1.0235 0.31954 -0.065931 0.0087435 -0.0023838
+injuring -0.098241 -0.11688 0.064764 -0.8593 0.32638 -1.1317 0.5642 0.29006 -0.33966 -0.19568
+Neville -0.3259 -0.14089 0.040579 -0.91155 -0.02612 -0.84816 0.50193 0.010655 -0.14942 0.21091
+self-rule -0.40224 -0.15451 0.073701 -0.99873 0.14058 -0.97193 0.49833 -0.06536 -0.13114 0.10273
+we'll -0.411 -0.18358 -0.045442 -0.91371 -0.66867 -0.69162 0.34793 -0.038717 -0.17974 0.46947
+faces -0.17063 0.026559 0.13962 -0.97514 0.50471 -1.0292 0.54584 0.04527 -0.0085925 -0.078847
+aged -0.13331 -0.10156 0.20415 -0.92413 0.15444 -1.1066 0.30317 0.19216 -0.11349 -0.18242
+sign -0.38234 -0.12628 0.19185 -0.98366 0.16336 -0.84411 0.39789 -0.18097 -0.10779 -0.035669
+Jenin -0.27241 -0.039568 0.088355 -0.93481 0.50369 -1.0301 0.52204 -0.0096526 -0.18061 -0.17257
+Nablus -0.21391 -0.096137 0.018651 -0.98315 0.424 -1.0754 0.55246 -0.10657 -0.15748 -0.0084811
+concerns -0.35554 -0.28261 0.25285 -1.0106 -0.065398 -0.85027 0.4072 0.16369 -0.094971 0.29612
+service -0.044501 -0.19176 0.15741 -0.92203 0.041666 -0.79793 0.44268 0.23301 -0.1867 0.33057
+today's -0.34094 -0.15605 0.092894 -0.92911 0.1317 -0.9693 0.45755 0.017209 -0.14467 0.078745
+Mt 0.14151 -0.042268 0.20287 -0.93268 -0.25601 -0.64688 0.41099 0.23649 -0.32969 0.38915
+industry -0.534 -0.085994 0.025382 -0.84774 -0.11158 -0.92475 0.44758 0.0081253 -0.13622 0.046628
+terrorism. -0.31517 -0.12548 0.21477 -0.88978 0.24459 -0.98603 0.47557 0.087711 -0.26356 -0.10607
+often -0.52879 -0.14935 0.10029 -0.93974 0.1651 -0.9411 0.55918 -0.21536 -0.11227 0.10149
+night, 0.12298 -0.12941 0.36066 -0.93444 0.41968 -0.88449 0.4654 0.53798 -0.2872 -0.05315
+escalating -0.33829 -0.12703 0.015898 -0.83725 0.11901 -0.99878 0.52081 0.13393 -0.21464 -0.051598
+previous -0.282 -0.10094 -0.0079603 -0.88312 -0.060852 -0.93805 0.51915 0.10054 -0.25168 0.20141
+Island 0.013039 -0.059081 -0.038447 -0.94126 0.53201 -0.99614 0.5743 0.16496 -0.13518 0.12471
+levels -0.2053 -0.10492 0.20118 -0.9795 0.18489 -0.82919 0.42957 -0.077108 -0.13166 0.16859
+India's -0.51326 -0.10508 0.24936 -0.87206 0.38369 -1.0817 0.53512 -0.1711 -0.03881 -0.21276
+Antarctic -0.36612 -0.26796 0.16656 -0.99177 0.060273 -0.91185 0.41627 0.03005 -0.18043 0.18036
+"Every -0.33802 -0.1243 0.14369 -0.95371 -0.4448 -0.73827 0.37005 0.016855 -0.21363 0.35746
+extremists -0.24011 -0.086676 0.028766 -0.94564 0.35898 -1.0907 0.5522 0.07233 -0.22499 -0.05126
+locked -0.31102 -0.084622 0.083962 -0.94166 0.34729 -1.0238 0.37482 0.023288 -0.14446 -0.017709
+unable -0.17401 -0.066264 0.08375 -0.90282 -0.22468 -0.90443 0.47118 0.043548 -0.3112 0.19806
+treatment -0.27478 -0.30204 0.32846 -0.8659 -0.31595 -0.77731 0.37383 0.39064 -0.25039 0.26144
+increased -0.20034 -0.16535 0.21299 -0.95197 0.36574 -0.97734 0.40417 0.030496 -0.12069 -0.042252
+Qantas' -0.66562 -0.27424 0.20254 -0.93174 0.015123 -0.89357 0.37683 -0.083202 0.031141 -0.024249
+choosing -0.3108 -0.05691 0.059514 -0.92087 0.021155 -0.94624 0.46132 -0.060476 -0.22563 -0.024965
+Manufacturing -0.36459 -0.03665 0.12481 -0.80146 -0.04296 -0.95224 0.47252 0.065796 -0.23579 -0.080454
+Park -0.27228 -0.24721 0.18172 -1.0477 0.061452 -0.88541 0.34821 0.10405 -0.1182 0.15918
+pace -0.51173 -0.056871 -0.25776 -0.95248 0.57897 -1.1676 0.55508 -0.091836 -0.093863 -0.16639
+intelligence -0.48843 -0.18543 0.0017036 -0.99733 0.25789 -1.0857 0.47285 -0.1039 -0.082249 -0.045634
+Peres -0.064541 -0.088503 0.16119 -0.905 0.18264 -1.007 0.52766 0.23608 -0.25072 -0.0042925
+Saturday -0.20459 0.043622 0.021364 -0.91458 0.15444 -0.97015 0.59302 0.020509 -0.24214 0.02135
+allowed -0.14503 -0.055127 0.15819 -0.98083 0.27823 -1.0507 0.3977 0.12058 -0.069834 0.064531
+follow -0.020472 0.067402 0.083804 -0.92167 0.10125 -0.98843 0.51323 0.22062 -0.24816 0.065072
+food -0.16719 -0.21457 -0.032412 -0.91796 0.3043 -0.98733 0.44674 -0.0045141 -0.095009 0.0023948
+effort -0.33103 -0.19333 0.16564 -0.95268 -0.005989 -0.90712 0.40634 0.14172 -0.12277 0.14287
+contested -0.1816 -0.074223 0.16935 -1.0212 0.25551 -0.98821 0.47956 0.14203 -0.19689 0.063591
+course -0.35694 -0.093528 0.16327 -0.92286 -0.52557 -0.70208 0.25882 0.007853 -0.29627 0.31276
+focus -0.094077 -0.063998 0.084013 -0.9035 0.35784 -1.0862 0.42149 0.072761 -0.20467 -0.10303
+staying -0.32977 -0.26031 0.20705 -0.92262 -0.15255 -0.90498 0.39614 0.0032056 -0.31511 0.0019217
+questions -0.30184 -0.17847 0.037072 -0.9023 0.20693 -0.9822 0.4992 0.17968 -0.24761 0.016212
+Child 0.015704 -0.10886 0.20551 -0.90874 0.032916 -1.0135 0.40535 0.16044 -0.18068 0.1597
+Austar -0.36952 -0.13053 0.075797 -0.84449 0.016521 -0.84864 0.5294 0.071495 -0.28827 0.068427
+trade -0.15353 -0.076031 0.26592 -0.97467 -0.03202 -0.86541 0.34478 0.050255 -0.34897 0.12444
+lack -0.28125 -0.049111 0.12849 -0.858 0.024126 -0.87174 0.43113 0.075511 -0.28163 0.027479
+document -0.097176 -0.17444 0.14257 -0.85602 0.30242 -0.96306 0.56906 0.25605 -0.2711 -0.016344
+explanation -0.38645 -0.18002 0.055084 -0.86557 0.18408 -0.97789 0.48657 0.18924 -0.18177 0.083669
+Sultan -0.41645 -0.16765 0.21599 -1.0014 0.30501 -1.0955 0.46808 0.10096 -0.14567 -0.054145
+reduced -0.21167 -0.080213 0.11708 -0.94597 -0.17172 -0.89563 0.39573 0.26074 -0.2101 0.15443
+violent -0.11532 -0.13904 0.23495 -0.86285 0.3395 -1.0167 0.46774 0.32004 -0.18438 -0.10924
+understanding -0.36627 -0.18224 0.14645 -0.93409 0.068406 -0.91532 0.43653 0.039594 -0.22393 -0.033249
+farm -0.2685 -0.094387 0.36153 -1.0836 0.22668 -0.88753 0.28388 0.019861 -0.054735 -0.082909
+Lord -0.44769 -0.071266 -0.13184 -0.99477 0.64386 -1.1481 0.62058 -0.35432 0.088442 -0.19185
+nearby -0.21346 -0.21208 0.0129 -0.97925 0.22082 -0.93188 0.49707 0.01654 -0.27514 0.09273
+Toowoomba -0.11086 -0.016608 0.12698 -0.98588 0.18283 -0.93644 0.51906 0.27584 -0.1859 0.068254
+redundancy -0.37279 -0.2126 0.13548 -0.92321 0.20175 -0.91295 0.37839 0.091666 -0.15195 -0.016421
+credit -0.04897 0.00094891 0.18637 -0.93684 0.2433 -1.0365 0.50859 0.28308 -0.33012 -0.1834
+entitlements -0.22865 -0.17366 0.25398 -0.95994 0.25625 -0.97027 0.48133 0.29908 -0.17171 0.0098023
+paying -0.27379 -0.21393 0.14191 -0.81481 -0.31424 -0.86041 0.34354 0.12124 -0.28744 0.086008
+Stuart -0.32065 -0.045169 0.047934 -0.93749 -0.01232 -0.94264 0.55829 0.019187 -0.23201 0.012652
+administrators -0.38915 -0.10678 0.10779 -0.90749 0.15211 -0.9458 0.49626 -0.0076005 -0.15467 0.13405
+150 -0.10669 0.052089 -0.080921 -0.99111 0.28881 -0.88495 0.50056 0.040523 -0.24744 -0.046004
+technology -0.3845 -0.1054 0.095591 -0.89516 -0.023254 -0.88988 0.44832 -0.036531 -0.17773 0.062035
+holding -0.30153 -0.1088 0.12251 -0.9244 0.088088 -0.93542 0.44833 0.070584 -0.22506 -0.058827
+normal -0.33125 -0.08666 0.21988 -0.91425 -0.26755 -0.74247 0.3954 0.059246 -0.2519 0.29009
+Amin -0.67553 -0.21073 0.21461 -1.0165 -0.20907 -0.78149 0.34416 -0.081891 -0.18986 0.18107
+Adam -0.44946 -0.048925 0.12921 -0.91341 -0.258 -0.85795 0.404 0.10336 -0.19082 0.18
+crashed -0.28983 -0.19277 0.28008 -1.0251 0.36846 -1.0111 0.34961 0.023464 -0.10933 -0.062239
+natural -0.07196 -0.27232 0.38912 -0.98727 -0.1257 -0.81443 0.29644 0.32534 -0.29026 0.20611
+begin -0.67268 -0.064473 -0.036203 -1.0396 0.39318 -1.0634 0.52304 -0.39897 -0.10272 -0.20808
+Up -0.12987 -0.31596 0.37794 -0.92846 0.34058 -0.87118 0.55491 0.18954 -0.065122 0.20761
+celebrations -0.35697 -0.24729 0.14783 -0.91635 0.17408 -0.84252 0.47401 0.19342 -0.26351 0.14232
+reject -0.36215 -0.083687 0.019168 -0.88026 -0.34821 -0.80624 0.35637 0.060272 -0.22834 0.17106
+options -0.43006 -0.32979 0.099825 -0.8432 0.28397 -0.94099 0.45111 0.18693 -0.12492 0.077929
+single -0.36768 -0.0077289 0.12405 -0.89668 -0.13589 -0.91868 0.43771 0.023178 -0.19012 0.020062
+handling -0.19383 -0.086433 0.073078 -0.84088 -0.022429 -0.96951 0.52248 0.18913 -0.26988 -0.062818
+match. -0.10931 0.18295 -0.0038214 -0.83137 -0.24983 -0.95995 0.53487 0.20493 -0.49541 -0.1036
+summit -0.31419 0.0098797 0.035068 -0.96421 0.14451 -1.0258 0.50231 -0.018111 -0.23626 -0.029974
+talks. -0.35229 -0.15515 0.07993 -0.99309 0.11575 -0.89788 0.43005 0.018662 -0.17911 0.030351
+All -0.82992 -0.12558 0.23378 -0.8514 -0.078518 -0.93991 0.46519 -0.30953 0.013705 0.18509
+settlement -0.34912 -0.2379 0.10761 -0.96062 0.31773 -1.0578 0.52877 0.033297 -0.049265 -0.010945
+searching -0.24236 -0.17512 0.17781 -0.95078 -0.16358 -0.74868 0.38088 0.085915 -0.27398 0.19703
+dollars -0.35512 -0.096205 0.13233 -1.0636 0.25495 -0.91864 0.53955 -0.11415 -0.17314 -0.015355
+guess -0.27593 -0.11835 0.12093 -0.93565 -0.078513 -0.84341 0.43357 0.059761 -0.35287 0.10868
+Kieren -0.28648 -0.052006 0.019997 -0.93716 0.048119 -1.0201 0.5268 -0.082165 -0.20706 0.12905
+23 -0.21086 -0.057727 -0.088208 -0.96071 0.56566 -1.1161 0.58002 -0.23208 -0.13051 -0.046464
+Bonn -0.63015 -0.090793 -0.010465 -0.89356 0.37004 -1.1065 0.49491 -0.13038 -0.12322 -0.18684
+... -0.43566 -0.18061 0.06388 -0.86017 0.013587 -0.82546 0.47717 -0.017943 -0.095205 0.12177
+prepare -0.27096 -0.23845 0.17099 -0.88899 -0.17308 -0.79854 0.33358 0.18857 -0.27852 0.22166
+champion -0.37096 -0.075525 0.033513 -0.87721 0.032021 -1.0175 0.42515 0.086005 -0.22466 0.0095515
+Pollock -0.17072 0.075854 0.034762 -0.99117 0.025959 -0.84027 0.51192 0.054958 -0.34076 0.13271
+television. -0.44044 -0.21914 0.064641 -0.95829 0.15258 -0.9742 0.43971 -0.15748 -0.021531 0.11953
+begun -0.44643 -0.063631 0.062254 -0.89464 -0.26594 -0.77289 0.43425 -0.022602 -0.29919 0.059812
+coast -0.096154 -0.098287 0.25499 -0.86603 0.41534 -0.9861 0.60581 0.24712 -0.30546 -0.11746
+leave -0.48798 -0.14912 0.15468 -1.0082 0.28873 -0.94628 0.46997 -0.14209 0.015677 0.16177
+St -0.15052 -0.038151 0.074615 -0.94029 0.62285 -0.93937 0.64598 0.084345 -0.21029 -0.10022
+Sydney. 0.26468 0.080405 0.32812 -1.0438 0.026161 -0.72776 0.57149 0.22449 -0.45732 0.20119
+losing -0.30082 -0.14351 0.13768 -0.94164 -0.073193 -0.87297 0.40935 -0.035951 -0.20497 0.083264
+work. -0.33936 -0.20084 0.24815 -1.0307 0.14337 -0.84725 0.4851 0.038437 -0.18419 0.15475
+counts -0.18804 -0.080086 0.15436 -0.93251 0.17173 -0.92948 0.56095 0.42776 -0.34996 0.025217
+26-year-old -0.23247 -0.16833 0.10058 -0.95923 0.12781 -0.89816 0.45605 0.021855 -0.15746 0.094273
+suggested -0.22162 -0.0057453 0.067216 -1.0141 0.46976 -1.0677 0.51246 -0.14477 -0.10022 -0.052623
+projects -0.38763 -0.26072 0.012426 -1.01 0.17994 -0.91495 0.52402 -0.090687 -0.25331 0.078616
+understood -0.39868 -0.13931 0.061138 -0.91247 0.04974 -0.9366 0.44174 -0.038707 -0.21788 0.022325
+various -0.42015 -0.30838 0.073304 -0.85863 0.37029 -1.0839 0.46362 0.028696 -0.00035373 -0.010771
+debate -0.12791 -0.10166 0.26514 -0.92209 0.13826 -0.92997 0.45138 0.26024 -0.26033 0.064546
+Bill -0.39838 -0.033529 0.094462 -0.87625 -0.2477 -0.78666 0.481 0.13671 -0.29902 0.21293
+happens -0.21991 -0.11012 -0.0028922 -0.9438 0.12635 -0.90128 0.55503 0.0095414 -0.22928 0.17408
+Commissioner -0.49284 -0.16213 0.12342 -0.90232 0.031972 -0.97126 0.46812 -0.01738 -0.030934 0.15521
+Deputy -0.36846 -0.16084 0.078157 -0.82351 -0.050522 -0.92733 0.5193 0.07008 -0.23301 0.11732
+civilians -0.26415 -0.15822 0.068405 -0.98221 0.50329 -1.0065 0.52038 -0.038207 -0.18997 -0.052481
+threatening -0.25182 -0.045476 0.10861 -0.89748 0.2866 -1.0112 0.42588 -0.062959 -0.30542 -0.11057
+women's -0.19161 -0.071387 0.19565 -1.0621 0.22142 -1.0313 0.47957 0.15791 -0.22421 0.099062
+containment -0.24544 -0.31776 0.35774 -1.0603 0.27667 -0.94787 0.45011 0.25615 -0.13414 0.083895
+stand -0.32437 -0.29159 0.29872 -0.96611 0.10026 -0.85177 0.31083 0.053036 -0.15696 0.15546
+MacGill -0.31908 0.030595 0.093019 -0.94111 -0.093146 -0.86372 0.49992 0.057094 -0.24437 0.11818
+putting -0.38698 -0.14535 0.03712 -0.90819 0.081707 -0.9084 0.42326 -0.057029 -0.26089 -0.021234
+determine -0.4176 -0.097098 0.14469 -0.93155 0.11262 -1.0324 0.43527 0.012073 -0.099626 0.040556
+Israel. -0.47031 -0.063841 -0.37841 -0.97351 1.1357 -1.3919 0.65755 -0.52246 0.1681 -0.27245
+forecast -0.19474 -0.079622 0.15075 -1.103 0.64718 -1.1086 0.38859 0.13428 -0.16916 -0.21521
+During -0.34549 -0.037444 0.073162 -0.8123 -0.10379 -0.97766 0.4863 0.040554 -0.3512 -0.056979
+bureau -0.18654 -0.084556 0.22349 -0.94008 0.17144 -0.88225 0.50717 0.042983 -0.26211 0.16669
+findings -0.15385 0.024256 0.097106 -0.90701 -0.0062973 -0.87097 0.45966 0.092639 -0.31016 0.048742
+fear -0.13347 -0.033548 0.051886 -1.0621 0.69087 -1.067 0.49215 -0.082951 -0.19496 -0.24658
+data -0.34699 -0.17287 -0.01897 -0.93141 0.24327 -0.91246 0.46874 -0.18289 -0.18046 0.081533
+gone -0.26956 -0.29501 0.25143 -1.0867 0.19435 -0.93538 0.33428 0.0059832 -0.084104 0.060041
+record -0.3523 0.061825 0.089374 -0.8624 0.10975 -0.93357 0.47165 0.088856 -0.19873 -0.037258
+hoping -0.18615 -0.052057 0.080318 -0.91618 0.10148 -0.88347 0.48114 -0.0095034 -0.35875 -0.1065
+Israelis. -0.23908 -0.12511 -0.23259 -1.0042 0.8512 -1.1663 0.54631 -0.34526 -0.007403 -0.12883
+Hamid -0.30894 -0.25919 0.073896 -0.86696 -0.060983 -0.83277 0.46301 0.015398 -0.12849 0.15373
+present -0.28584 -0.21305 0.1917 -0.82763 -0.2293 -0.86695 0.41269 0.28361 -0.18485 0.14715
+live -0.36521 -0.27784 0.21715 -1.0707 0.52157 -1.1198 0.27499 -0.065779 0.10911 -0.14034
+ahead. -0.18178 -0.16656 0.22029 -0.91903 0.26257 -0.96658 0.42367 0.15003 -0.19482 0.13553
+warning -0.057134 -0.10892 0.21894 -0.93471 0.075207 -0.93845 0.32891 0.098712 -0.29838 -0.10296
+trapped -0.39018 -0.17152 0.16364 -0.90232 0.39176 -1.0995 0.41738 -0.031247 -0.14006 -0.14978
+markets -0.22304 0.049703 0.023357 -0.89652 0.028235 -0.93915 0.54958 0.10373 -0.31918 -0.015176
+Sergeant -0.22138 -0.073868 0.18847 -0.89862 -0.12118 -0.88672 0.44595 0.059898 -0.20127 0.20083
+Seven -0.15834 0.012167 0.075471 -0.9344 -0.0060505 -0.87636 0.57467 -0.091161 -0.18515 0.16282
+firm -0.20924 0.13692 0.229 -1.0004 0.087825 -0.74557 0.46068 0.063433 -0.19736 -0.013484
+welcomed -0.33084 -0.13075 -0.031394 -0.933 0.12591 -0.93544 0.43404 -0.0071708 -0.19188 0.02752
+responding -0.27598 -0.17165 0.25794 -0.96352 -0.021708 -0.90139 0.36233 0.13162 -0.20719 0.013575
+law -0.23204 0.098585 0.084543 -0.87951 0.045764 -1.0408 0.39644 0.083872 -0.19391 0.06397
+deputy -0.35117 -0.094578 0.069262 -0.8022 0.21323 -1.0385 0.49627 0.14174 -0.18405 -0.036922
+unidentified -0.21788 -0.19765 0.16739 -0.96515 0.26464 -1.0681 0.45954 0.19657 -0.10865 -0.040348
+clashes -0.18525 -0.090192 0.13899 -0.92914 0.19958 -0.99479 0.48018 0.0076089 -0.22087 0.057853
+ago, -0.12196 -0.25092 0.21986 -0.78537 -0.43743 -0.83485 0.35358 0.5775 -0.36967 0.27372
+replied: -0.53654 -0.30794 0.0668 -0.95327 -0.32244 -0.86974 0.32233 0.0035099 -0.12836 0.27396
+path -0.29637 -0.0050163 -0.09227 -0.91761 0.61522 -1.2084 0.51978 -0.070516 -0.022066 -0.26732
+search -0.33437 -0.14509 0.16727 -0.8863 0.019863 -0.77068 0.47079 0.019677 -0.24613 0.18844
+hundred -0.025627 -0.11448 0.18116 -0.96779 0.2532 -0.93224 0.3929 0.12679 -0.19685 -0.13179
+state. -0.18528 -0.23642 0.26504 -1.0479 0.57506 -1.0035 0.41344 -0.17807 -0.09178 -0.023322
+efforts -0.2879 -0.13298 0.14961 -0.93882 0.13162 -0.93926 0.49649 0.17908 -0.18039 0.022261
+tree -0.13421 0.049938 0.039293 -0.85099 -0.054489 -0.95255 0.48989 0.20728 -0.25372 0.081726
+telephone -0.31696 -0.22565 0.13317 -1.0219 0.2304 -1.0449 0.39416 -0.015374 -0.058222 0.064146
+problem -0.23808 -0.055263 0.21232 -0.94406 -0.52183 -0.69284 0.40925 0.16283 -0.35028 0.39899
+approached -0.3755 -0.24085 0.045111 -0.96186 0.31842 -0.96877 0.4262 -0.091481 -0.06434 0.076188
+chairman -0.24927 -0.10477 0.17401 -0.90386 0.013637 -0.93125 0.41858 0.049651 -0.20749 0.15118
+Afroz -0.3492 -0.11356 0.046444 -0.96179 0.49956 -1.1739 0.50381 -0.029897 -0.15488 -0.24651
+Monday, -0.18335 0.075194 0.19071 -0.85914 -0.074304 -0.8325 0.45894 0.23434 -0.32902 0.11567
+advance -0.35487 -0.13718 0.083065 -1.0344 0.076132 -0.86051 0.39686 0.031053 -0.1538 0.12614
diff --git a/gensim/test/test_data/pre_0_13_2_model b/gensim/test/test_data/pre_0_13_2_model
new file mode 100644
index 0000000000..25bf224c54
Binary files /dev/null and b/gensim/test/test_data/pre_0_13_2_model differ
diff --git a/gensim/test/test_data/pre_0_13_2_model.state b/gensim/test/test_data/pre_0_13_2_model.state
new file mode 100644
index 0000000000..03bc8c8a68
Binary files /dev/null and b/gensim/test/test_data/pre_0_13_2_model.state differ
diff --git a/gensim/test/test_fasttext_wrapper.py b/gensim/test/test_fasttext_wrapper.py
index e1fd2cd722..b0de495ad4 100644
--- a/gensim/test/test_fasttext_wrapper.py
+++ b/gensim/test/test_fasttext_wrapper.py
@@ -35,8 +35,10 @@ def setUp(self):
self.ft_path = os.path.join(ft_home, 'fasttext') if ft_home else None
self.corpus_file = datapath('lee_background.cor')
self.test_model_file = datapath('lee_fasttext')
+ self.test_new_model_file = datapath('lee_fasttext_new')
# Load pre-trained model to perform tests in case FastText binary isn't available in test environment
self.test_model = fasttext.FastText.load_fasttext_format(self.test_model_file)
+ self.test_new_model = fasttext.FastText.load_fasttext_format(self.test_new_model_file)
def model_sanity(self, model):
"""Even tiny models trained on any corpus should pass these sanity checks"""
@@ -54,7 +56,7 @@ def testTraining(self):
if self.ft_path is None:
logger.info("FT_HOME env variable not set, skipping test")
return # Use self.skipTest once python < 2.7 is no longer supported
- vocab_size, model_size = 1762, 10
+ vocab_size, model_size = 1763, 10
trained_model = fasttext.FastText.train(
self.ft_path, self.corpus_file, size=model_size, output_file=testfile())
@@ -139,6 +141,36 @@ def testLoadFastTextFormat(self):
self.assertEquals(self.test_model.wv.min_n, 3)
self.model_sanity(model)
+ def testLoadFastTextNewFormat(self):
+ """ Test model successfully loaded from fastText (new format) .vec and .bin files """
+ new_model = fasttext.FastText.load_fasttext_format(self.test_new_model_file)
+ vocab_size, model_size = 1763, 10
+ self.assertEqual(self.test_new_model.wv.syn0.shape, (vocab_size, model_size))
+ self.assertEqual(len(self.test_new_model.wv.vocab), vocab_size, model_size)
+ self.assertEqual(self.test_new_model.wv.syn0_all.shape, (self.test_new_model.num_ngram_vectors, model_size))
+
+ expected_vec_new = [-0.025627,
+ -0.11448,
+ 0.18116,
+ -0.96779,
+ 0.2532,
+ -0.93224,
+ 0.3929,
+ 0.12679,
+ -0.19685,
+ -0.13179] # obtained using ./fasttext print-word-vectors lee_fasttext_new.bin < queries.txt
+
+ self.assertTrue(numpy.allclose(self.test_new_model["hundred"], expected_vec_new, 0.001))
+ self.assertEquals(self.test_new_model.min_count, 5)
+ self.assertEquals(self.test_new_model.window, 5)
+ self.assertEquals(self.test_new_model.iter, 5)
+ self.assertEquals(self.test_new_model.negative, 5)
+ self.assertEquals(self.test_new_model.sample, 0.0001)
+ self.assertEquals(self.test_new_model.bucket, 1000)
+ self.assertEquals(self.test_new_model.wv.max_n, 6)
+ self.assertEquals(self.test_new_model.wv.min_n, 3)
+ self.model_sanity(new_model)
+
def testLoadModelWithNonAsciiVocab(self):
"""Test loading model with non-ascii words in vocab"""
model = fasttext.FastText.load_fasttext_format(datapath('non_ascii_fasttext'))
diff --git a/gensim/test/test_ldamallet_wrapper.py b/gensim/test/test_ldamallet_wrapper.py
index 5367236801..22d31d02e8 100644
--- a/gensim/test/test_ldamallet_wrapper.py
+++ b/gensim/test/test_ldamallet_wrapper.py
@@ -107,12 +107,18 @@ def testMallet2Model(self):
tm1 = ldamallet.LdaMallet(self.mallet_path, corpus=corpus, num_topics=2, id2word=dictionary)
tm2 = ldamallet.malletmodel2ldamodel(tm1)
for document in corpus:
- self.assertEqual(tm1[document][0], tm2[document][0])
- self.assertEqual(tm1[document][1], tm2[document][1])
- logging.debug('%d %d', tm1[document][0], tm2[document][0])
+ element1_1, element1_2 = tm1[document][0]
+ element2_1, element2_2 = tm2[document][0]
+ self.assertAlmostEqual(element1_1, element2_1)
+ self.assertAlmostEqual(element1_2, element2_2, 1)
+ element1_1, element1_2 = tm1[document][1]
+ element2_1, element2_2 = tm2[document][1]
+ self.assertAlmostEqual(element1_1, element2_1)
+ self.assertAlmostEqual(element1_2, element2_2, 1)
+ logging.debug('%d %d', element1_1, element2_1)
+ logging.debug('%d %d', element1_2, element2_2)
logging.debug('%d %d', tm1[document][1], tm2[document][1])
-
def testPersistence(self):
if not self.mallet_path:
return
diff --git a/gensim/test/test_ldamodel.py b/gensim/test/test_ldamodel.py
index c0d13a6ae5..81f29b8e42 100644
--- a/gensim/test/test_ldamodel.py
+++ b/gensim/test/test_ldamodel.py
@@ -46,7 +46,7 @@
def testfile(test_fname=''):
# temporary data will be stored to this file
- fname = 'gensim_models_' + test_fname + '.tst'
+ fname = 'gensim_models_' + test_fname + '.tst'
return os.path.join(tempfile.gettempdir(), fname)
@@ -247,9 +247,9 @@ def testGetDocumentTopics(self):
#Test case to use the get_document_topic function for the corpus
all_topics = model.get_document_topics(self.corpus, per_word_topics=True)
-
+
self.assertEqual(model.state.numdocs, len(corpus))
-
+
for topic in all_topics:
self.assertTrue(isinstance(topic, tuple))
for k, v in topic[0]: # list of doc_topics
@@ -269,9 +269,9 @@ def testGetDocumentTopics(self):
word_phi_count_na = 0
all_topics = model.get_document_topics(self.corpus, minimum_probability=0.8, minimum_phi_value=1.0, per_word_topics=True)
-
+
self.assertEqual(model.state.numdocs, len(corpus))
-
+
for topic in all_topics:
self.assertTrue(isinstance(topic, tuple))
for k, v in topic[0]: # list of doc_topics
@@ -470,6 +470,31 @@ def testLargeMmapCompressed(self):
# test loading the large model arrays with mmap
self.assertRaises(IOError, self.class_.load, fname, mmap='r')
+ def testRandomStateBackwardCompatibility(self):
+ # load a model saved using a pre-0.13.2 version of Gensim
+ pre_0_13_2_fname = datapath('pre_0_13_2_model')
+ model_pre_0_13_2 = self.class_.load(pre_0_13_2_fname)
+
+ # set `num_topics` less than `model_pre_0_13_2.num_topics` so that `model_pre_0_13_2.random_state` is used
+ model_topics = model_pre_0_13_2.print_topics(num_topics=2, num_words=3)
+
+ for i in model_topics:
+ self.assertTrue(isinstance(i[0], int))
+ self.assertTrue(isinstance(i[1], six.string_types))
+
+ # save back the loaded model using a post-0.13.2 version of Gensim
+ post_0_13_2_fname = datapath('post_0_13_2_model')
+ model_pre_0_13_2.save(post_0_13_2_fname)
+
+ # load a model saved using a post-0.13.2 version of Gensim
+ model_post_0_13_2 = self.class_.load(post_0_13_2_fname)
+ model_topics_new = model_post_0_13_2.print_topics(num_topics=2, num_words=3)
+
+ for i in model_topics_new:
+ self.assertTrue(isinstance(i[0], int))
+ self.assertTrue(isinstance(i[1], six.string_types))
+
+
#endclass TestLdaModel
diff --git a/gensim/test/test_ldavowpalwabbit_wrapper.py b/gensim/test/test_ldavowpalwabbit_wrapper.py
index bcf4f035b8..74e3591f4f 100644
--- a/gensim/test/test_ldavowpalwabbit_wrapper.py
+++ b/gensim/test/test_ldavowpalwabbit_wrapper.py
@@ -220,10 +220,12 @@ def testvwmodel2ldamodel(self):
tm1 = LdaVowpalWabbit(vw_path=self.vw_path, corpus=self.corpus, num_topics=2, id2word=self.dictionary)
tm2 = ldavowpalwabbit.vwmodel2ldamodel(tm1)
for document in self.corpus:
- self.assertEqual(tm1[document][0], tm2[document][0])
- self.assertEqual(tm1[document][1], tm2[document][1])
- logging.debug('%d %d', tm1[document][0], tm2[document][0])
- logging.debug('%d %d', tm1[document][1], tm2[document][1])
+ element1_1, element1_2 = tm1[document][0]
+ element2_1, element2_2 = tm2[document][0]
+ self.assertAlmostEqual(element1_1, element2_1)
+ self.assertAlmostEqual(element1_2, element2_2, 5)
+ logging.debug('%d %d', element1_1, element2_1)
+ logging.debug('%d %d', element1_2, element2_2)
if __name__ == '__main__':
diff --git a/gensim/test/test_phrases.py b/gensim/test/test_phrases.py
index ce0b73b65a..ba2cfc7192 100644
--- a/gensim/test/test_phrases.py
+++ b/gensim/test/test_phrases.py
@@ -127,20 +127,31 @@ def testExportPhrases(self):
"""Test Phrases bigram export_phrases functionality."""
bigram = Phrases(sentences, min_count=1, threshold=1)
- # with this setting we should get response_time and graph_minors
- bigram1_seen = False
- bigram2_seen = False
+ seen_bigrams = set()
for phrase, score in bigram.export_phrases(sentences):
- if not bigram1_seen and b'response time' == phrase:
- bigram1_seen = True
- elif not bigram2_seen and b'graph minors' == phrase:
- bigram2_seen = True
- if bigram1_seen and bigram2_seen:
- break
+ seen_bigrams.add(phrase)
+
+ assert seen_bigrams == set([
+ b'response time',
+ b'graph minors',
+ b'human interface'
+ ])
+
+ def test_multiple_bigrams_single_entry(self):
+ """ a single entry should produce multiple bigrams. """
+ bigram = Phrases(sentences, min_count=1, threshold=1)
+
+ seen_bigrams = set()
+
+ test_sentences = [['graph', 'minors', 'survey', 'human', 'interface']]
+ for phrase, score in bigram.export_phrases(test_sentences):
+ seen_bigrams.add(phrase)
- self.assertTrue(bigram1_seen)
- self.assertTrue(bigram2_seen)
+ assert seen_bigrams == set([
+ b'graph minors',
+ b'human interface'
+ ])
def testBadParameters(self):
"""Test the phrases module with bad parameters."""
diff --git a/gensim/test/test_sklearn_integration.py b/gensim/test/test_sklearn_integration.py
index a651a2b055..cb6c514612 100644
--- a/gensim/test/test_sklearn_integration.py
+++ b/gensim/test/test_sklearn_integration.py
@@ -6,27 +6,33 @@
import pickle
from scipy import sparse
-from sklearn.pipeline import Pipeline
-from sklearn.feature_extraction.text import CountVectorizer
-from sklearn.datasets import load_files
-from sklearn import linear_model
+try:
+ from sklearn.pipeline import Pipeline
+ from sklearn.feature_extraction.text import CountVectorizer
+ from sklearn.datasets import load_files
+ from sklearn import linear_model
+except ImportError:
+ raise unittest.SkipTest("Test requires scikit-learn to be installed, which is not available")
+
from gensim.sklearn_integration.sklearn_wrapper_gensim_ldamodel import SklearnWrapperLdaModel
from gensim.sklearn_integration.sklearn_wrapper_gensim_lsimodel import SklearnWrapperLsiModel
from gensim.corpora import Dictionary
from gensim import matutils
-module_path = os.path.dirname(__file__) # needed because sample data files are located in the same folder
+module_path = os.path.dirname(__file__) # needed because sample data files are located in the same folder
datapath = lambda fname: os.path.join(module_path, 'test_data', fname)
-texts = [['complier', 'system', 'computer'],
- ['eulerian', 'node', 'cycle', 'graph', 'tree', 'path'],
- ['graph', 'flow', 'network', 'graph'],
- ['loading', 'computer', 'system'],
- ['user', 'server', 'system'],
- ['tree', 'hamiltonian'],
- ['graph', 'trees'],
- ['computer', 'kernel', 'malfunction', 'computer'],
- ['server', 'system', 'computer']]
+texts = [
+ ['complier', 'system', 'computer'],
+ ['eulerian', 'node', 'cycle', 'graph', 'tree', 'path'],
+ ['graph', 'flow', 'network', 'graph'],
+ ['loading', 'computer', 'system'],
+ ['user', 'server', 'system'],
+ ['tree', 'hamiltonian'],
+ ['graph', 'trees'],
+ ['computer', 'kernel', 'malfunction', 'computer'],
+ ['server', 'system', 'computer'],
+]
dictionary = Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]
@@ -44,49 +50,49 @@ def testPrintTopic(self):
self.assertTrue(isinstance(k, int))
def testTransform(self):
- texts_new = ['graph','eulerian']
+ texts_new = ['graph', 'eulerian']
bow = self.model.id2word.doc2bow(texts_new)
- X = self.model.transform(bow)
- self.assertTrue(X.shape[0], 1)
- self.assertTrue(X.shape[1], self.model.num_topics)
- texts_new = [['graph','eulerian'],['server', 'flow'], ['path', 'system']]
+ matrix = self.model.transform(bow)
+ self.assertTrue(matrix.shape[0], 1)
+ self.assertTrue(matrix.shape[1], self.model.num_topics)
+ texts_new = [['graph', 'eulerian'], ['server', 'flow'], ['path', 'system']]
bow = []
for i in texts_new:
bow.append(self.model.id2word.doc2bow(i))
- X = self.model.transform(bow)
- self.assertTrue(X.shape[0], 3)
- self.assertTrue(X.shape[1], self.model.num_topics)
+ matrix = self.model.transform(bow)
+ self.assertTrue(matrix.shape[0], 3)
+ self.assertTrue(matrix.shape[1], self.model.num_topics)
def testGetTopicDist(self):
- texts_new = ['graph','eulerian']
+ texts_new = ['graph', 'eulerian']
bow = self.model.id2word.doc2bow(texts_new)
- doc_topics, word_topics, phi_values = self.model.get_topic_dist(bow,per_word_topics=True)
+ doc_topics, word_topics, phi_values = self.model.get_topic_dist(bow, per_word_topics=True)
- for k,v in word_topics:
+ for k, v in word_topics:
self.assertTrue(isinstance(v, list))
self.assertTrue(isinstance(k, int))
- for k,v in doc_topics:
+ for k, v in doc_topics:
self.assertTrue(isinstance(v, float))
self.assertTrue(isinstance(k, int))
- for k,v in phi_values:
+ for k, v in phi_values:
self.assertTrue(isinstance(v, list))
self.assertTrue(isinstance(k, int))
def testPartialFit(self):
for i in range(10):
self.model.partial_fit(X=corpus) # fit against the model again
- doc=list(corpus)[0] # transform only the first document
+ doc = list(corpus)[0] # transform only the first document
transformed = self.model[doc]
transformed_approx = matutils.sparse2full(transformed, 2) # better approximation
- expected=[0.13, 0.87]
+ expected = [0.13, 0.87]
passed = numpy.allclose(sorted(transformed_approx), sorted(expected), atol=1e-1)
self.assertTrue(passed)
def testCSRMatrixConversion(self):
- Arr = numpy.array([[1, 2, 0], [0, 0, 3], [1, 0, 0]])
- sArr = sparse.csr_matrix(Arr)
+ arr = numpy.array([[1, 2, 0], [0, 0, 3], [1, 0, 0]])
+ sarr = sparse.csr_matrix(arr)
newmodel = SklearnWrapperLdaModel(num_topics=2, passes=100)
- newmodel.fit(sArr)
+ newmodel.fit(sarr)
topic = newmodel.print_topics()
for k, v in topic:
self.assertTrue(isinstance(v, six.string_types))
@@ -94,20 +100,21 @@ def testCSRMatrixConversion(self):
def testPipeline(self):
model = SklearnWrapperLdaModel(num_topics=2, passes=10, minimum_probability=0, random_state=numpy.random.seed(0))
- with open(datapath('mini_newsgroup'),'rb') as f:
+ with open(datapath('mini_newsgroup'), 'rb') as f:
compressed_content = f.read()
uncompressed_content = codecs.decode(compressed_content, 'zlib_codec')
cache = pickle.loads(uncompressed_content)
data = cache
- id2word=Dictionary(map(lambda x : x.split(), data.data))
+ id2word = Dictionary(map(lambda x: x.split(), data.data))
corpus = [id2word.doc2bow(i.split()) for i in data.data]
- rand = numpy.random.mtrand.RandomState(1) # set seed for getting same result
- clf=linear_model.LogisticRegression(penalty='l2', C=0.1)
+ numpy.random.mtrand.RandomState(1) # set seed for getting same result
+ clf = linear_model.LogisticRegression(penalty='l2', C=0.1)
text_lda = Pipeline((('features', model,), ('classifier', clf)))
text_lda.fit(corpus, data.target)
score = text_lda.score(corpus, data.target)
self.assertGreater(score, 0.40)
+
class TestSklearnLSIWrapper(unittest.TestCase):
def setUp(self):
self.model = SklearnWrapperLsiModel(id2word=dictionary, num_topics=2)
@@ -120,39 +127,39 @@ def testModelSanity(self):
self.assertTrue(isinstance(k, int))
def testTransform(self):
- texts_new = ['graph','eulerian']
+ texts_new = ['graph', 'eulerian']
bow = self.model.id2word.doc2bow(texts_new)
- X = self.model.transform(bow)
- self.assertTrue(X.shape[0], 1)
- self.assertTrue(X.shape[1], self.model.num_topics)
- texts_new = [['graph','eulerian'],['server', 'flow'], ['path', 'system']]
+ matrix = self.model.transform(bow)
+ self.assertTrue(matrix.shape[0], 1)
+ self.assertTrue(matrix.shape[1], self.model.num_topics)
+ texts_new = [['graph', 'eulerian'], ['server', 'flow'], ['path', 'system']]
bow = []
for i in texts_new:
bow.append(self.model.id2word.doc2bow(i))
- X = self.model.transform(bow)
- self.assertTrue(X.shape[0], 3)
- self.assertTrue(X.shape[1], self.model.num_topics)
+ matrix = self.model.transform(bow)
+ self.assertTrue(matrix.shape[0], 3)
+ self.assertTrue(matrix.shape[1], self.model.num_topics)
def testPartialFit(self):
for i in range(10):
self.model.partial_fit(X=corpus) # fit against the model again
- doc=list(corpus)[0] # transform only the first document
+ doc = list(corpus)[0] # transform only the first document
transformed = self.model[doc]
transformed_approx = matutils.sparse2full(transformed, 2) # better approximation
- expected=[1.39, 0.0]
+ expected = [1.39, 0.0]
passed = numpy.allclose(sorted(transformed_approx), sorted(expected), atol=1e-1)
self.assertTrue(passed)
def testPipeline(self):
model = SklearnWrapperLsiModel(num_topics=2)
- with open(datapath('mini_newsgroup'),'rb') as f:
+ with open(datapath('mini_newsgroup'), 'rb') as f:
compressed_content = f.read()
uncompressed_content = codecs.decode(compressed_content, 'zlib_codec')
cache = pickle.loads(uncompressed_content)
data = cache
- id2word=Dictionary(map(lambda x : x.split(), data.data))
+ id2word = Dictionary(map(lambda x: x.split(), data.data))
corpus = [id2word.doc2bow(i.split()) for i in data.data]
- clf=linear_model.LogisticRegression(penalty='l2', C=0.1)
+ clf = linear_model.LogisticRegression(penalty='l2', C=0.1)
text_lda = Pipeline((('features', model,), ('classifier', clf)))
text_lda.fit(corpus, data.target)
score = text_lda.score(corpus, data.target)
diff --git a/gensim/test/test_tmdiff.py b/gensim/test/test_tmdiff.py
new file mode 100644
index 0000000000..03a639e454
--- /dev/null
+++ b/gensim/test/test_tmdiff.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2016 Radim Rehurek
+# Licensed under the GNU LGPL v2.1 - http://www.gnu.org/licenses/lgpl.html
+
+import unittest
+import numpy as np
+
+from gensim.corpora import Dictionary
+from gensim.models import LdaModel
+
+
+class TestLdaDiff(unittest.TestCase):
+ def setUp(self):
+ texts = [
+ ['human', 'interface', 'computer'],
+ ['survey', 'user', 'computer', 'system', 'response', 'time'],
+ ['eps', 'user', 'interface', 'system'],
+ ['system', 'human', 'system', 'eps'],
+ ['user', 'response', 'time'],
+ ['trees'],
+ ['graph', 'trees'],
+ ['graph', 'minors', 'trees'],
+ ['graph', 'minors', 'survey'],
+ ]
+ self.dictionary = Dictionary(texts)
+ self.corpus = [self.dictionary.doc2bow(text) for text in texts]
+ self.num_topics = 5
+ self.n_ann_terms = 10
+ self.model = LdaModel(corpus=self.corpus, id2word=self.dictionary, num_topics=self.num_topics, passes=10)
+
+ def testBasic(self):
+ mdiff, annotation = self.model.diff(self.model, n_ann_terms=self.n_ann_terms)
+
+ self.assertEqual(mdiff.shape, (self.num_topics, self.num_topics))
+ self.assertEquals(len(annotation), self.num_topics)
+ self.assertEquals(len(annotation[0]), self.num_topics)
+
+ def testIdentity(self):
+ for dist_name in ["hellinger", "kulback_leibler", "jaccard"]:
+ mdiff, annotation = self.model.diff(self.model, n_ann_terms=self.n_ann_terms, distance=dist_name)
+
+ for row in annotation:
+ for (int_tokens, diff_tokens) in row:
+ self.assertEquals(diff_tokens, [])
+ self.assertEquals(len(int_tokens), self.n_ann_terms)
+
+ self.assertTrue(np.allclose(np.diag(mdiff), np.zeros(mdiff.shape[0], dtype=mdiff.dtype)))
+
+ if dist_name == "jaccard":
+ self.assertTrue(np.allclose(mdiff, np.zeros(mdiff.shape, dtype=mdiff.dtype)))
+
+ def testInput(self):
+ self.assertRaises(ValueError, self.model.diff, self.model, n_ann_terms=self.n_ann_terms, distance='something')
+ self.assertRaises(ValueError, self.model.diff, [], n_ann_terms=self.n_ann_terms, distance='something')
diff --git a/gensim/test/test_varembed_wrapper.py b/gensim/test/test_varembed_wrapper.py
index df425fdfc6..ac11a04009 100644
--- a/gensim/test/test_varembed_wrapper.py
+++ b/gensim/test/test_varembed_wrapper.py
@@ -57,13 +57,6 @@ def testAddMorphemesToEmbeddings(self):
self.model_sanity(model_with_morphemes)
# Check syn0 is different for both models.
self.assertFalse(np.allclose(model.syn0, model_with_morphemes.syn0))
-
- @unittest.skipUnless(sys.version_info < (2, 7), 'Test to check throwing exception in Python 2.6 and earlier')
- def testAddMorphemesThrowsExceptionInPython26(self):
- self.assertRaises(
- Exception, varembed.VarEmbed.load_varembed_format, vectors=varembed_model_vector_file,
- morfessor_model=varembed_model_morfessor_file)
-
def testLookup(self):
"""Test lookup of vector for a particular word and list"""
model = varembed.VarEmbed.load_varembed_format(vectors=varembed_model_vector_file)
diff --git a/gensim/test/test_wikicorpus.py b/gensim/test/test_wikicorpus.py
index 9bbb441c17..36594b205e 100644
--- a/gensim/test/test_wikicorpus.py
+++ b/gensim/test/test_wikicorpus.py
@@ -21,6 +21,7 @@
module_path = os.path.dirname(__file__) # needed because sample data files are located in the same folder
datapath = lambda fname: os.path.join(module_path, 'test_data', fname)
FILENAME = 'enwiki-latest-pages-articles1.xml-p000000010p000030302-shortened.bz2'
+FILENAME_U = 'bgwiki-latest-pages-articles-shortened.xml.bz2'
logger = logging.getLogger(__name__)
@@ -45,14 +46,21 @@ def test_first_element(self):
1) anarchism
2) autism
"""
- if sys.version_info < (2, 7, 0):
- return
- wc = WikiCorpus(datapath(FILENAME))
+ wc = WikiCorpus(datapath(FILENAME), processes=1)
l = wc.get_texts()
- self.assertTrue(b"anarchism" in next(l))
- self.assertTrue(b"autism" in next(l))
+ self.assertTrue(u'anarchism' in next(l))
+ self.assertTrue(u'autism' in next(l))
+ def test_unicode_element(self):
+ """
+ First unicode article in this sample is
+ 1) папа
+ """
+ wc = WikiCorpus(datapath(FILENAME_U), processes=1)
+
+ l = wc.get_texts()
+ self.assertTrue(u'папа' in next(l))
if __name__ == '__main__':
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.DEBUG)
diff --git a/gensim/test/test_wordrank_wrapper.py b/gensim/test/test_wordrank_wrapper.py
index dbface5e34..2b185c4839 100644
--- a/gensim/test/test_wordrank_wrapper.py
+++ b/gensim/test/test_wordrank_wrapper.py
@@ -30,11 +30,11 @@ def setUp(self):
wr_home = os.environ.get('WR_HOME', None)
self.wr_path = wr_home if wr_home else None
self.corpus_file = datapath('lee.cor')
- self.out_path = 'testmodel'
+ self.out_name = 'testmodel'
self.wr_file = datapath('test_glove.txt')
if not self.wr_path:
return
- self.test_model = wordrank.Wordrank.train(self.wr_path, self.corpus_file, self.out_path, iter=6, dump_period=5,period=5)
+ self.test_model = wordrank.Wordrank.train(self.wr_path, self.corpus_file, self.out_name, iter=6, dump_period=5, period=5)
def testLoadWordrankFormat(self):
"""Test model successfully loaded from Wordrank format file"""
diff --git a/gensim/topic_coherence/probability_estimation.py b/gensim/topic_coherence/probability_estimation.py
index a76f40db4c..2d06d58d01 100644
--- a/gensim/topic_coherence/probability_estimation.py
+++ b/gensim/topic_coherence/probability_estimation.py
@@ -9,28 +9,28 @@
"""
import logging
+from itertools import chain, islice
import numpy as np
-from gensim.corpora import Dictionary
-
-from itertools import chain, islice
logger = logging.getLogger(__name__)
+
def _ret_top_ids(segmented_topics):
"""
Helper function to return a set of all the unique topic ids in segmented topics.
"""
top_ids = set() # is a set of all the unique ids contained in topics.
for s_i in segmented_topics:
- for id in chain.from_iterable(s_i):
- if isinstance(id, np.ndarray):
- for i in id:
+ for t_id in chain.from_iterable(s_i):
+ if isinstance(t_id, np.ndarray):
+ for i in t_id:
top_ids.add(i)
else:
- top_ids.add(id)
+ top_ids.add(t_id)
return top_ids
+
def p_boolean_document(corpus, segmented_topics):
"""
This function performs the boolean document probability estimation. Boolean document estimates the probability
@@ -47,16 +47,18 @@ def p_boolean_document(corpus, segmented_topics):
num_docs : Total number of documents in corpus.
"""
top_ids = _ret_top_ids(segmented_topics)
- # Perform boolean document now to create document word list.
+ # Instantiate the dictionary with empty sets for each top_id
per_topic_postings = {}
- for id in top_ids:
- id_list = set()
- for n, document in enumerate(corpus):
- if id in frozenset(x[0] for x in document):
- id_list.add(n)
- per_topic_postings[id] = id_list
+ for t_id in top_ids:
+ per_topic_postings[t_id] = set()
+ # Iterate through the documents, appending the document number to the set for each top_id it contains
+ for n, document in enumerate(corpus):
+ doc_words = frozenset(x[0] for x in document)
+ for word_id in top_ids.intersection(doc_words):
+ per_topic_postings[word_id].add(n)
num_docs = len(corpus)
- return (per_topic_postings, num_docs)
+ return per_topic_postings, num_docs
+
def p_boolean_sliding_window(texts, segmented_topics, dictionary, window_size):
"""
@@ -81,6 +83,7 @@ def p_boolean_sliding_window(texts, segmented_topics, dictionary, window_size):
window_id = 0 # Each window assigned a window id.
per_topic_postings = {}
token2id_dict = dictionary.token2id
+
def add_topic_posting(top_ids, window, per_topic_postings, window_id, token2id_dict):
for word in window:
word_id = token2id_dict[word]
@@ -88,9 +91,10 @@ def add_topic_posting(top_ids, window, per_topic_postings, window_id, token2id_d
if word_id in per_topic_postings:
per_topic_postings[word_id].add(window_id)
else:
- per_topic_postings[word_id] = set([window_id])
+ per_topic_postings[word_id] = {window_id}
window_id += 1
- return (window_id, per_topic_postings)
+ return window_id, per_topic_postings
+
# Apply boolean sliding window to each document in texts.
for document in texts:
it = iter(document)
diff --git a/gensim/utils.py b/gensim/utils.py
index 8d5fdb7d7f..5884dc9234 100644
--- a/gensim/utils.py
+++ b/gensim/utils.py
@@ -943,7 +943,7 @@ def revdict(d):
result (which one is kept is arbitrary).
"""
- return dict((v, k) for (k, v) in iteritems(d))
+ return dict((v, k) for (k, v) in iteritems(dict(d)))
def toptexts(query, texts, index, n=10):
@@ -1164,6 +1164,7 @@ def check_output(stdout=subprocess.PIPE, *popenargs, **kwargs):
Added extra KeyboardInterrupt handling
"""
try:
+ logger.debug("COMMAND: %s %s", popenargs, kwargs)
process = subprocess.Popen(stdout=stdout, *popenargs, **kwargs)
output, unused_err = process.communicate()
retcode = process.poll()
diff --git a/jupyter_execute_cell.png b/jupyter_execute_cell.png
new file mode 100644
index 0000000000..3005d277b3
Binary files /dev/null and b/jupyter_execute_cell.png differ
diff --git a/jupyter_home.png b/jupyter_home.png
new file mode 100644
index 0000000000..770b1aaee3
Binary files /dev/null and b/jupyter_home.png differ
diff --git a/setup.py b/setup.py
index 5bf1ceeea2..2c8be1f896 100644
--- a/setup.py
+++ b/setup.py
@@ -226,9 +226,18 @@ def finalize_options(self):
"""
+test_env = [
+ 'testfixtures',
+ 'unittest2',
+ 'Morfessor==2.0.2a4',
+ 'scikit-learn',
+ 'pyemd',
+ 'annoy',
+]
+
setup(
name='gensim',
- version='2.0.0',
+ version='2.1.0',
description='Python framework for fast Vector Space Modelling',
long_description=LONG_DESCRIPTION,
@@ -282,13 +291,11 @@ def finalize_options(self):
'six >= 1.5.0',
'smart_open >= 1.2.1',
],
+ tests_require=test_env,
extras_require={
'distributed': ['Pyro4 >= 4.27'],
'wmd': ['pyemd >= 0.2.0'],
- 'test': [
- 'testfixtures',
- 'unittest2'
- ],
+ 'test': test_env,
},
include_package_data=True,