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

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

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

Joint talk with Ivan Menshikh

39368910dbd6371b507e0b2113dcf4fe?s=128

Lev Konstantinovskiy

July 16, 2017
Tweet

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