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

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

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

Joint talk with Ivan Menshikh

Avatar for Lev Konstantinovskiy

Lev Konstantinovskiy

July 16, 2017
Tweet

More Decks by Lev Konstantinovskiy

Other Decks in Programming

Transcript

  1. 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
  2. GENSIM: academia and industry • Numerous Industry Adopters • 200+

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

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

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

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

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

    и мяукал. №3: Пушистый котенок мяукал. №4: Громкий пушистый пудель бегал и лаял. №1 №2 №3 №4 котенок 1 0 1 0 пушистый 1 1 1 1 мяукал 0 1 1 0 X =
  8. 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)]]
  9. WHAT DO WE WANT TO KNOW? • Topics in the

    text • Find similar documents • Cluster similar documents TEXTS, TEXTS, TEXTS, … TEXTS EVERYWHERE
  10. 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 =
  11. 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*"котенок"
  12. 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: Громкий пудель кот пудель мурлыкал
  13. 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*" громкий"
  14. LDA: COLORED TEXT Автор: М. Игнатова, 8 лет http://vsookoshkax.ru/istorii/korotkie_rasskazi.htm У

    меня живут кот и пудель: старшему коту Афину 2 года 3 месяца, а пуделю Мисти 8 месяцев. Первым в наш дом попал Мисти тогда ему было не больше 2 месяцев. Потом попал кот когда ему было 6 месяцев. Он много мурлыкал, был пушистый и добрый. В это время у нас уже жил пудель Мисти и он много на кота лаял и кусался. Topic 0: Про собак 0.64 Topic 1: Про кошек 0.36
  15. 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: Громкий пушистый пудель бегал и лаял.
  16. котенок 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
  17. 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))
  18. 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
  19. 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
  20. 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
  21. RaRe Technologies • Professional trainings: ML, NLP, sklearn, gensim, tensorflow,

    etc ... • Consulting services: design & development ML systems https://rare-technologies.com/ [email protected] [email protected]