Similarity Search with Gensim

Gensim – Topic modelling for humans

  @inproceedings{rehurek_lrec,
      title = {{Software Framework for Topic Modelling with Large Corpora}},
      author = {Radim {\v R}eh{\r u}{\v r}ek and Petr Sojka},
      booktitle = {{Proceedings of the LREC 2010 Workshop on New
           Challenges for NLP Frameworks}},
      pages = {45--50},
      year = 2010,
      month = May,
      day = 22,
      publisher = {ELRA},
      address = {Valletta, Malta},
      note={\url{http://is.muni.cz/publication/884893/en}},
      language={English}
}

Gensim pro podobnostní vyhledávání

Použití virtuálního stroje

Gensim

V adresáři ~/similarity-search-with-gensim jsou připravena data a prostředí pro snadné vyzkoušení nástroje Gensim pro podobnostní vyhledávání.

Jako testovací data použijme 250 náhodně vybraných předzpracovaných stránek z anglické Wikipedie:

Dokumentované programování s Jupyter Notebook

Skvělým nástrojem pro dokumentované experimentování (nejen) v Pythonu je Jupyter Notebook.

Gesim prakticky

Příprava Python prostředí

Python má dobrou podporu pro používání tzv. virtuálních prostředí, které umožňují vytvořit „kontejner“ s instalací konkrétní verze Pythonu a různých modulů. Daných „kontejnerů“ je pak možné mít připraveno více a dle potřeby mezi nimi snadno přepínat.

$ cd ~/similarity-search-with-gensim/
$ mkvirtualenv gensim-jupyter-notebook
$ pip install -U pip  # instalace nejnovější verze správce Python balíčků
$ pip install numpy  # Instalace modulu NumPy
$ pip install gensim jupyter pattern # Instalace modulů Gensim, Jupyter Notebook a Pattern
$ pip freeze > requirements.txt  # Uložení seznamu všech modulů a jejich přesných verzí
# Pokud budeme chtít později někde vytvořit stejné běhové prostředí, můžeme identický seznam modulů v identických verzí instalovat jednoduše příkazem:
#  pip install -r requirements.txt
# Soubor `requirements.txt` je tedy velmi dobrý kandidát na umístění do Git/Subversion/... repositáře vedle zdrojových kódu vašeho Python projektu.

Spuštění Jupyter Notebook

$ jupyter notebook

Práce s Gensim v Jupyter Notebook

Ve webovém rozhraní otevřete soubor similarity-search-with-gensim.ipynb.

Vyzkoušejte si

  1. Krok po kroku projděte předpřipravený obsah notebooku similarity-search-with-gensim.ipynb.
    • Přečtěte si a pochopte logiku kódu.
  2. Zkopírujte notebook do nového souboru similarity-search-with-gensim-lda.ipynb a tam upravte kód tak, aby místo algoritmu LSI používal algoritmus LDA.
    • Zkopírování souboru:
      • Z unixové konzole:
        • cp -via similarity-search-with-gensim.ipynb similarity-search-with-gensim-lda.ipynb
      • Z webového rozhraní Jupyter Notebooku:
        1. Vybrat similarity-search-with-gensim.ipynb.
        2. Kliknout na Duplicate.
        3. Vybrat similarity-search-with-gensim-Copy1.ipynb
        4. Kliknout na Rename.
          • Zadat similarity-search-with-gensim-lda.ipynb.
    • Použití LDA místo LSI viz dokumentace API LSI a LDA (respektive multicore LDA).
  3. Do notebooku similarity-search-with-gensim.ipynb přidejte kód, který se bude dotazovat obsahem souboru ~/similarity-search-with-gensim/dwarf-rabbit-wikipedia.html, tj. hledat dokumenty podobné tomuto dokumentu staženému z Wikipedie.
    • Ze souboru je třeba extrahovat jen obsahový text, tj. ignorovat navigační menu, záhlaví, zápatí apod.
      • Soubor dwarf-rabbit-wikipedia.html je well-formed XML. Můžete proto využít nástroje pro práci s XML:
        • Python nabízí např. moduly xml.etree.ElementTree nebo LXML.
        • Pro jednoduchost můžete filtrování provést např. ignorováním všeho krom textového obsahu elementů <p> (odstavce).
    • Extrahovaný text je třeba vyčistit a tokenizovat. Můžete využít obdobný postup, který byl ukázán v původním notebooku similarity-search-with-gensim.ipynb.