SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
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

Contenu connexe

Plus de it-people

«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
it-people
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
it-people
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
it-people
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
it-people
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
it-people
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
it-people
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
it-people
 
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
it-people
 
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ..."Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
it-people
 
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже..."Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
it-people
 
"Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З...
"Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З..."Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З...
"Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З...
it-people
 

Plus de it-people (20)

«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
 
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
ЗАВИСИМОСТИ В КОМПОНЕНТНОМ ВЕБЕ, ПРИГОТОВЛЕННЫЕ ПРАВИЛЬНО, Гриненко Владимир,...
 
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
ПРАКТИЧЕСКИЙ ОПЫТ ИСПОЛЬЗОВАНИЯ REACT NATIVE + REDUX, Краснояров Станислав, R...
 
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ..."Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
"Как повысить мотивацию удаленных разработчиков и повысить значимость каждой ...
 
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже..."Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
"Профессиональное выгорание менеджера проекта" Орлов Александр, Школа менедже...
 
"Как поднять цену в разы и не потерять в продажах?" Калаев Дмитрий, ФРИИ
"Как поднять цену в разы и не потерять в продажах?" Калаев Дмитрий, ФРИИ"Как поднять цену в разы и не потерять в продажах?" Калаев Дмитрий, ФРИИ
"Как поднять цену в разы и не потерять в продажах?" Калаев Дмитрий, ФРИИ
 
"Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З...
"Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З..."Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З...
"Как работать из 20 разных городов с ощущением, что находитесь в 1 комнате" З...
 
"Коммуникация в распределенной команде" Жаринов Андрей, Яндекс
"Коммуникация в распределенной команде" Жаринов Андрей, Яндекс"Коммуникация в распределенной команде" Жаринов Андрей, Яндекс
"Коммуникация в распределенной команде" Жаринов Андрей, Яндекс
 
"Не верь, не бойся, не проси" Гольдберг Игорь, СКБ Контур
"Не верь, не бойся, не проси" Гольдберг Игорь, СКБ Контур"Не верь, не бойся, не проси" Гольдберг Игорь, СКБ Контур
"Не верь, не бойся, не проси" Гольдберг Игорь, СКБ Контур
 
"How to Build an Innovation pipeline in Large Organizations" Atzmon Tal, Inno...
"How to Build an Innovation pipeline in Large Organizations" Atzmon Tal, Inno..."How to Build an Innovation pipeline in Large Organizations" Atzmon Tal, Inno...
"How to Build an Innovation pipeline in Large Organizations" Atzmon Tal, Inno...
 

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

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