Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PyCon Russia 2017 - Тематическое моделирование для людей

PyCon Russia 2017 - Тематическое моделирование для людей

Joint talk with Ivan Menshikh

Lev Konstantinovskiy

July 16, 2017
Tweet

More Decks by Lev Konstantinovskiy

Other Decks in Programming

Transcript

  1. GENSIM TOPIC MODELLING FOR HUMANS Ivan Menshikh, Lev Konstantinovskiy

  2. ABOUT Ivan Menshikh • Current community manager of gensim •

    Analyst at SkyDNS (2015-2017) menshikh_iv menshikh-iv Lev Konstantinovskiy • Past community manager of gensim (2015-2017) • ML Researcher at WorldSense teagermylk tmylk
  3. GENSIM: academia and industry • Numerous Industry Adopters • 200+

    code contributors • 4K+ Github stars,1.8k+ forks • 580+ academic citations
  4. SOLVES THESE PROBLEMS • Content classification • Recommendation systems •

    Search engine • …ANYTHING… IPython Notebook: goo.gl/n8xWqM
  5. TEXTS, TEXTS, TEXTS, … TEXTS EVERYWHERE WHAT IS THE INPUT?

    • Mails • Messages • Logs • Images (why not?)
  6. WHAT IS TEXT (DOCUMENT)? • Words AKA “tokens” • Word

    order WHAT IS CORPUS? • Several documents AKA “Dataset” TEXTS, TEXTS, TEXTS, … TEXTS EVERYWHERE
  7. Тренируемся на кошках №1: Пушистый котенок мурлыкал. №2: Пушистый кот

    мурлыкал и мяукал. №3: Пушистый котенок мяукал. №4: Громкий пушистый пудель бегал и лаял.
  8. TERM-DOCUMENT MATRIX №1: Пушистый котенок мурлыкал. №2: Пушистый кот мурлыкал

    и мяукал. №3: Пушистый котенок мяукал. №4: Громкий пушистый пудель бегал и лаял. №1 №2 №3 №4 котенок 1 0 1 0 пушистый 1 1 1 1 мяукал 0 1 1 0 X =
  9. TEXT REPRESENTATION from gensim.corpora import Dictionary from gensim.utils import tokenize

    texts = [u"Пушистый котенок мурлыкал." , u"Пушистый кот мурлыкал и мяукал.", u"Пушистый котенок мяукал.", u"Громкий пушистый пудель бегал и лаял."] tokenized_texts = [list(tokenize(text.lower())) for text in texts] dictionary = Dictionary(tokenized_texts) corpus = [dictionary.doc2bow(text) for text in tokenized_texts] corpus(doc-term matrix): [[(0, 1), (1, 1), (2, 1)], [(1, 1), (2, 1), (3, 1), (4, 1), (5, 1)], [(0, 1), (1, 1), (5, 1)], [(1, 1), (4, 1), (6, 1), (7, 1), (8, 1), (9, 1)]]
  10. WHAT DO WE WANT TO KNOW? • Topics in the

    text • Find similar documents • Cluster similar documents TEXTS, TEXTS, TEXTS, … TEXTS EVERYWHERE
  11. SVD/LSA/LSI WITH 2 TOPICS 1 1 0 0 1 1

    1 0 1 0 1 0 0 1 0 1 0 1 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0.45 0.694 0.45 0.33 0.25 0.11 0.25 -0.92 0.402 0.151 0.561 0.257 0.317 0.211 0.361 -0.335 0.402 0.151 0.244 0.0463 0.117 -0.381 0.117 -0.381 0.117 -0.381 0.117 -0.381 0.117 -0.381 DOCUMENTS words DOCUMENTS dimensions DIMENSIONS words =
  12. SVD/LSA/LSI from gensim.models import LsiModel model = LsiModel(corpus=corpus, num_topics=2, id2word=dictionary)

    Topics are usually NOT interpretable but here we are lucky: 0: 0.637*"пушистый" + 0.381*"и" + 0.324*"мяукал" + 0.324*"мурлыкал" + 0.256*"котенок" 1: 0.387*"пудель" + 0.387*"бегал" + 0.387*"громкий" + 0.387*"лаял" + -0.343*"котенок"
  13. SVD/LSA/LSI

  14. FIT LDA = FIND THE DICE THAT FIT MY TEXT

    Which topic will I talk about? Throw big dice to decide (Topics in a document are modeled as a Dirichlet probability distribution) Про собак Which word will I say from the topic “Собаки”? Throw small dice to decide. (Words in a topic are modeled as another Dirichlet probability distribution) “Громкий” For example: Громкий пудель кот пудель мурлыкал
  15. LDA ALWAYS GIVES INTERPRETABLE TOPICS import gensim texts = [u"Пушистый

    котенок мурлыкал." , u"Пушистый кот мурлыкал и мяукал.", u"Пушистый котенок мяукал.", u"Громкий пушистый пудель бегал и лаял." u"Большой пудель лаял и кусался.", u"Громкий большой пудель бегал."] model = gensim.models.LdaMulticore(corpus=corpus, id2word=dictionary, num_topics=2) Topics: 0: 0.185*"пушистый" + 0.134*"мяукал" + 0.134*"котенок" + 0.116*" мурлыкал" + 0.075*"кот" 1: 0.136*"пудель" + 0.125*"и" + 0.102*"лаял" + 0.099*"пушистый" + 0.099*" громкий"
  16. LDA: COLORED TEXT Автор: М. Игнатова, 8 лет http://vsookoshkax.ru/istorii/korotkie_rasskazi.htm У

    меня живут кот и пудель: старшему коту Афину 2 года 3 месяца, а пуделю Мисти 8 месяцев. Первым в наш дом попал Мисти тогда ему было не больше 2 месяцев. Потом попал кот когда ему было 6 месяцев. Он много мурлыкал, был пушистый и добрый. В это время у нас уже жил пудель Мисти и он много на кота лаял и кусался. Topic 0: Про собак 0.64 Topic 1: Про кошек 0.36
  17. LDA AFTER T-SNE

  18. CO-OCCURRENCE MATRIX FOR DOC2VEC котенок context words: [пушистый, мурлыкал, мяукал].

    кот context words: [пушистый, мурлыкал, мяукал]. пудель context words: [пушистый, бегал]. Credit: Ed Grefenstette https://github.com/oxford-cs-deepnlp-2017/ №1: Пушистый котенок мурлыкал. №2: Пушистый кот мурлыкал и мяукал. №3: Пушистый котенок мяукал. №4: Громкий пушистый пудель бегал и лаял.
  19. котенок context words: [пушистый, мурлыкал, мяукал]. кот context words: [пушистый,

    мурлыкал, мяукал]. пудель context words: [ пушистый, бегал]. пушистый мурлыкал лаял мяукал громкий бегал котенок 2 1 0 1 0 0 кот 1 1 0 1 0 0 пудель 1 0 0 0 0 1 X = CO-OCCURRENCE MATRIX FOR DOC2VEC
  20. DOC2VEC: NEURAL NETWORK, NOT INTERPRETABLE from gensim.models import Doc2Vec from

    gensim.models.doc2vec import LabeledSentence corpus = [LabeledSentence(sent, [idx]) for (idx, sent) in enumerate(texts)] model = Doc2Vec(size=5, window=2, min_count=1) model.build_vocab(corpus) model.train(corpus, epochs=5, total_examples=len(corpus))
  21. DOC2VEC VISUALIZED link

  22. SUMMARY Interpretable topics Speed Output vectors LSI No Fast Dense

    LDA Yes Slow Sparse D2V No Medium Dense
  23. WHAT IS THE USE? • Content classification • Recommendation systems

  24. ARCHITECTURE Cassandra Hadoop FS PostgreSQL Annoy Gensim Keras Web

  25. CONTENT CLASSIFICATION Input: Web pages Output: Categories

  26. L D A L S I D 2 V Domain

    Category Probability pikabu.ru 30 0.95 rutracker.or g 20 0.83 rutracker.or g 21 0.77 CONTENT CLASSIFICATION
  27. RECOMMENDATION SYSTEM Input: DNS logs Output: Profiles/Clusters/...

  28. user1 facebook.com google.com narkotiki.biz twitter.com cdn.tw.com user2 google.com qrwcbtwb.com qrwcbtwc.com

    qrwcbtwd.com google.com user3 instagram.co m cdninstagram.co m statix.facebook. com graph.instagra m.com facebook.com LDA / LSI Clustering DNS logs RECOMMENDATION SYSTEM
  29. RESULTS, WHY “GENSIM” RATHER THAN... • Big community (gitter, mailing

    list, github) • Streaming support • Stable API (default + sklearn) • Fixed memory • Multi-core • Multi-machine • pip install -U gensim
  30. STUDENT INCUBATOR https://rare-technologies.com/incubator/ student-projects@rare-technologies.com

  31. RaRe Technologies • Professional trainings: ML, NLP, sklearn, gensim, tensorflow,

    etc ... • Consulting services: design & development ML systems https://rare-technologies.com/ radim@rare-technologies.com info@rare-technologies.com
  32. RaRe-Technologies/gensim gensim_py menshikh.iv@gmail.com lev.konst@gmail.com info@rare-technologies.com THANK YOU FOR YOUR ATTENTION!

    RaRe-Technologies/gensim #!forum/gensim