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

    View Slide

  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

    View Slide

  3. GENSIM: academia and industry
    ● Numerous Industry Adopters
    ● 200+ code contributors
    ● 4K+ Github stars,1.8k+ forks
    ● 580+ academic citations

    View Slide

  4. SOLVES THESE PROBLEMS
    ● Content classification
    ● Recommendation systems
    ● Search engine
    ● …ANYTHING…
    IPython Notebook:
    goo.gl/n8xWqM

    View Slide

  5. TEXTS, TEXTS, TEXTS, … TEXTS EVERYWHERE
    WHAT IS THE INPUT?
    ● Mails
    ● Messages
    ● Logs
    ● Images (why not?)

    View Slide

  6. WHAT IS TEXT (DOCUMENT)?
    ● Words AKA “tokens”
    ● Word order
    WHAT IS CORPUS?
    ● Several documents
    AKA “Dataset”
    TEXTS, TEXTS, TEXTS, … TEXTS EVERYWHERE

    View Slide

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

    View Slide

  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 =

    View Slide

  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)]]

    View Slide

  10. WHAT DO WE WANT TO KNOW?
    ● Topics in the text
    ● Find similar documents
    ● Cluster similar documents
    TEXTS, TEXTS, TEXTS, … TEXTS EVERYWHERE

    View Slide

  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
    =

    View Slide

  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*"котенок"

    View Slide

  13. SVD/LSA/LSI

    View Slide

  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: Громкий пудель кот пудель мурлыкал

    View Slide

  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*"
    громкий"

    View Slide

  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

    View Slide

  17. LDA AFTER T-SNE

    View Slide

  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: Громкий пушистый пудель бегал и лаял.

    View Slide

  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

    View Slide

  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))

    View Slide

  21. DOC2VEC VISUALIZED
    link

    View Slide

  22. SUMMARY
    Interpretable
    topics
    Speed
    Output
    vectors
    LSI No Fast Dense
    LDA Yes Slow Sparse
    D2V No Medium Dense

    View Slide

  23. WHAT IS THE USE?
    ● Content classification
    ● Recommendation systems

    View Slide

  24. ARCHITECTURE
    Cassandra
    Hadoop FS
    PostgreSQL
    Annoy
    Gensim
    Keras
    Web

    View Slide

  25. CONTENT CLASSIFICATION
    Input: Web pages
    Output: Categories

    View Slide

  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

    View Slide

  27. RECOMMENDATION SYSTEM
    Input: DNS logs
    Output: Profiles/Clusters/...

    View Slide

  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

    View Slide

  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

    View Slide

  30. STUDENT INCUBATOR
    https://rare-technologies.com/incubator/
    [email protected]

    View Slide

  31. RaRe Technologies
    ● Professional trainings:
    ML, NLP, sklearn, gensim, tensorflow, etc ...
    ● Consulting services:
    design & development ML systems
    https://rare-technologies.com/
    [email protected]
    [email protected]

    View Slide

  32. RaRe-Technologies/gensim
    gensim_py
    [email protected]
    [email protected]
    [email protected]
    THANK YOU
    FOR YOUR ATTENTION!
    RaRe-Technologies/gensim
    #!forum/gensim

    View Slide