GENSIM
TOPIC MODELLING FOR HUMANS
Ivan Menshikh, Lev Konstantinovskiy
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
GENSIM: academia and industry
● Numerous Industry Adopters
● 200+ code contributors
● 4K+ Github stars,1.8k+ forks
● 580+ academic citations
SOLVES THESE PROBLEMS
● Content classification
● Recommendation systems
● Search engine
● …ANYTHING…
IPython Notebook:
goo.gl/n8xWqM
TEXTS, TEXTS, TEXTS, … TEXTS EVERYWHERE
WHAT IS THE INPUT?
● Mails
● Messages
● Logs
● Images (why not?)
WHAT IS TEXT (DOCUMENT)?
● Words AKA “tokens”
● Word order
WHAT IS CORPUS?
● Several documents
AKA “Dataset”
TEXTS, TEXTS, TEXTS, … TEXTS EVERYWHERE
Тренируемся на кошках
№1: Пушистый котенок мурлыкал.
№2: Пушистый кот мурлыкал и мяукал.
№3: Пушистый котенок мяукал.
№4: Громкий пушистый пудель бегал и лаял.
TERM-DOCUMENT MATRIX
№1: Пушистый котенок мурлыкал.
№2: Пушистый кот мурлыкал и мяукал.
№3: Пушистый котенок мяукал.
№4: Громкий пушистый пудель бегал и лаял.
№1 №2 №3 №4
котенок 1 0 1 0
пушистый 1 1 1 1
мяукал 0 1 1 0
X =
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)]]
WHAT DO WE WANT TO KNOW?
● Topics in the text
● Find similar documents
● Cluster similar documents
TEXTS, TEXTS, TEXTS, … TEXTS EVERYWHERE
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
=
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*"котенок"
SVD/LSA/LSI
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: Громкий пудель кот пудель мурлыкал
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*"
громкий"
LDA: COLORED TEXT
Автор: М. Игнатова, 8 лет http://vsookoshkax.ru/istorii/korotkie_rasskazi.htm
У меня живут кот и пудель: старшему коту Афину 2
года 3 месяца, а пуделю Мисти 8 месяцев.
Первым в наш дом попал Мисти тогда ему было не
больше 2 месяцев.
Потом попал кот когда ему было 6 месяцев.
Он много мурлыкал, был пушистый и добрый.
В это время у нас уже жил пудель Мисти и он много
на кота лаял и кусался.
Topic 0: Про собак 0.64
Topic 1: Про кошек 0.36
LDA AFTER T-SNE
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: Громкий пушистый пудель бегал и лаял.
котенок 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
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))
DOC2VEC VISUALIZED
link
SUMMARY
Interpretable
topics
Speed
Output
vectors
LSI No Fast Dense
LDA Yes Slow Sparse
D2V No Medium Dense
WHAT IS THE USE?
● Content classification
● Recommendation systems
ARCHITECTURE
Cassandra
Hadoop FS
PostgreSQL
Annoy
Gensim
Keras
Web
CONTENT CLASSIFICATION
Input: Web pages
Output: Categories
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
RECOMMENDATION SYSTEM
Input: DNS logs
Output: Profiles/Clusters/...
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
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
STUDENT INCUBATOR
https://rare-technologies.com/incubator/
student-projects@rare-technologies.com
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
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

«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константиновский, RaRe Technologies, WorldSense

  • 1.
    GENSIM TOPIC MODELLING FORHUMANS Ivan Menshikh, Lev Konstantinovskiy
  • 2.
    ABOUT Ivan Menshikh ● Currentcommunity 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 andindustry ● 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.corporaimport 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 WEWANT TO KNOW? ● Topics in the text ● Find similar documents ● Cluster similar documents TEXTS, TEXTS, TEXTS, … TEXTS EVERYWHERE
  • 11.
    SVD/LSA/LSI WITH 2TOPICS 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 importLsiModel 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.
  • 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 GIVESINTERPRETABLE 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.
  • 18.
    CO-OCCURRENCE MATRIX FORDOC2VEC котенок 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.
  • 22.
    SUMMARY Interpretable topics Speed Output vectors LSI No FastDense LDA Yes Slow Sparse D2V No Medium Dense
  • 23.
    WHAT IS THEUSE? ● Content classification ● Recommendation systems
  • 24.
  • 25.
    CONTENT CLASSIFICATION Input: Webpages Output: Categories
  • 26.
    L D AL 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: DNSlogs Output: Profiles/Clusters/...
  • 28.
    user1 facebook.com google.comnarkotiki.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.
  • 31.
    RaRe Technologies ● Professionaltrainings: 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.