1 / 1 / 0
Регистрация: 06.10.2014
Сообщений: 101
1

Комбинация обучения с учителем и обучения без учителя для извлечения знаний

03.06.2020, 07:35. Показов 524. Ответов 4

Здравствуйте!
Хотелось бы обратиться к знающим людям в области применения машинного обучения для решения прикладных задач в надежде получить ценный совет или какой-нибудь содержательный комментарий Заранее всем спасибо!!

Итак, коротко опишу задачу, которую я пытаюсь решить: мне нужно извлечь знания (в данном случае под знанием я подразумеваю интерес, некий общий профиль интересов) из контента, генерируемого пользователями в социальной сети. Рассматриваю социальную сеть Twitter, а контентом в моем случае являются твиты пользователей на их страницах в Twitter.

Для решения такой задачи я решил попробовать совместить два подхода - обучение без учителя (модель латентного размещения Дирихле, также известен как LDA) и обучение с учителем (а именно - SVM классификатор).

Глобально я делаю следующее: выгружаю данные с помощью стандартной библиотеки tweepy, делаю предобработку данных, после применяю алгоритм LDA (таким образом получаю список ключевых, наиболее значимых слов в этой тематике). И уже такие данные, полученные с помощью LDA, использую для обучения SVM-классификатора. По прошествии всех этих этапов запрашиваю username пользователя, выгружаю его твиты, обрабатываю и ожидаю получить распределение его интересов по представленным тематикам в процентах, например:
Интересы пользователя @yurydud: {'Искусство': '15.5%', 'Спорт': '20.4%', 'Музыка': '20.6%', 'Политика': '43.5%'}

А локально моя идея и ход работы такого комбинированного алгоритма состоит в следующем:

1) На первом этапе у меня есть заранее поименованный словарь тематик (интересов) и username's пользователей twitter, посты которых я заведомо отношу к той или иной тематике.
Пример(в синтаксисе Python): dic['Наука и технологии'] = ['naukaiprogress','naukatass','CryptographyRU']
В данном случае ключом является название темы, а значением будут профили пользователей (или сообществ) в твиттере, твиты которых выгружаются и формируются в единый корпус текстов, который заведомо отнесен к теме 'Наука и технологии'.
2) Далее производится предобработка текста - нормализация, лемматизация, стемминг, очистка от смайлов и т.д. и т.п.
3) Применяется алгоритм LDA, который, как я описал выше, выдает из больших наборов текстов наиболее релевантное той или иной теме распределение слов (другими словами - наиболее важные слова, характеризующие ту или иную тему)
4) Данные, полученные после выполнения 3 пункта используются для обучения SVM-классификатора
5) Ну и, собственно, после того как классификатор обучен, можно вводить пользователя и извлекать его интересы, предполагая получить процентное распределение его интересов по заданным тематикам (как на примере жирным шрифтом выше)

Собственно, мой вопрос заключается в том, насколько такой подход вообще применим? Смогу ли я получить более-менее качественный результат (который более или менее соответствует действительности)? И если нет, то почему и как можно лучше решить подобную прикладную задачу извлечения интересов?

Буду очень признателен за любую обратную связь!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2020, 07:35
Ответы с готовыми решениями:

Ищу учителя, для обучения C#/C++
Здравствуйте. Есть большой интерес изучать языки программирования С#/C++ за договоренную оплату. ...

Ищу людей для совместного обучения в области машинного обучения
Пишу на питоне посредством библиотеки keras. Было бы неплохо, например, работать над одним...

Нужен план обучения по машинному обучению (знаний в математике нет, но хочу получить)
Не знаю с чего начать. Посоветуйте книги по машинному обучению и математике.

1С для обучения
Приветствую, ребят подскажите пожалуйста, я вот хочу начать изучения этой замечательной программы!...

4
370 / 332 / 60
Регистрация: 09.01.2018
Сообщений: 1,119
03.06.2020, 11:03 2
Отвечаю в меру своего понимания.
1. Задача интересная, полезная и теоретически решаемая.
2. Подход имеет право на существование. Правда, я его бы назвал - по аналогии с известным классификатором - "наивным".
Т.е. задачу он как-то решит, точность полученных результатов оставит желать лучшего.
3. Причина такого - на мой взгляд - заключается в том, что вы по сути исследуете отдельные слова и их вероятности встречи в текстах. В анализа натуральных текстов есть более тонкие подходы, начиная с n-грамм и далее, на сколько хватит фантазии у исследователей. В текстах имеются контекстные зависимости, которые выпадут при наивном подходе, есть аллюзии и пр.
По этой теме появилось в последнее время достаточно много информации, как в виде интернет статей, так и в книгах, причем появились книги не просто использования методов ML для анализа текстов, но и целенаправленно по NLP-анализу. Погууглите, найдете много чего полезного.

Кстати, у меня вне контекста появился вопрос - а почему именно SVM из всего множества методов классификации? Может стоит начать с того, что на уже имеющемся препарированном наборе попытаться применить другие методы? Посмотреть, какой лучше, а может - попытаться сделать ансамбль методов?

Но в любом случае - удачи в проекте.
1
1149 / 1074 / 172
Регистрация: 19.02.2010
Сообщений: 3,226
03.06.2020, 12:09 3
Цитата Сообщение от metoo Посмотреть сообщение
Применяется алгоритм LDA, который, как я описал выше, выдает из больших наборов текстов наиболее релевантное той или иной теме распределение слов (другими словами - наиболее важные слова, характеризующие ту или иную тему)
Вместо выделения наиболее важных слов - можно иным способом снизить размерность пространства независимых признаков у всего (т.е. неразбитого на отдельные темы) корпуса текстов (вернее, уже у набора векторов tf или tf-idf, представляющих тексты).
А конкретно - можно использовать линейный или нелинейный анализ главных компонент. Нелинейный - это, например, тот, с которого началось современное глубокое обучение (т.е. глубокий автоенкодер, как в статье Хинтона и Салахутдинова в Science в 2006г).
Соответственно, классификация (хоть при обучении классификатора, хоть при последующей боевой работе) берёт на вход данные после их проецирования в пространство главных компонент.
В качестве независимых признаков могут выступать не только отдельные слова (после их нормализации и т.д.) - но и упомянутые выше n-граммы.


Цитата Сообщение от passant Посмотреть сообщение
вы по сути исследуете отдельные слова и их вероятности встречи в текстах.
Для кластеризации/классификации новостей это нормально работало.
2-3 тысячи наиболее употребительных слов во всём исследуемом/обучающем корпусе новостей - и tf-idf (или даже просто частотный словарь, т.е. tf) как способ оцифровки=перевода каждого текста (новости) в вектор чисел независимых признаков. По крайней мере, как некоторый baseline это можно/нужно использовать, чтобы затем появилась возможность проанализировать выигрыш в точности от использования какого-то более продвинутого алгоритма
1
38 / 30 / 8
Регистрация: 28.11.2013
Сообщений: 159
04.06.2020, 21:27 4
Ссылка на обнаружение текста на картинках кодом на python. Может пригодится https://www.pyimagesearch.com/... detection/
0
1 / 1 / 0
Регистрация: 06.10.2014
Сообщений: 101
05.06.2020, 13:08  [ТС] 5
Цитата Сообщение от passant Посмотреть сообщение
Отвечаю в меру своего понимания.
1. Задача интересная, полезная и теоретически решаемая.
2. Подход имеет право на существование. Правда, я его бы назвал - по аналогии с известным классификатором - "наивным".
Т.е. задачу он как-то решит, точность полученных результатов оставит желать лучшего.
3. Причина такого - на мой взгляд - заключается в том, что вы по сути исследуете отдельные слова и их вероятности встречи в текстах. В анализа натуральных текстов есть более тонкие подходы, начиная с n-грамм и далее, на сколько хватит фантазии у исследователей. В текстах имеются контекстные зависимости, которые выпадут при наивном подходе, есть аллюзии и пр.
По этой теме появилось в последнее время достаточно много информации, как в виде интернет статей, так и в книгах, причем появились книги не просто использования методов ML для анализа текстов, но и целенаправленно по NLP-анализу. Погууглите, найдете много чего полезного.
Кстати, у меня вне контекста появился вопрос - а почему именно SVM из всего множества методов классификации? Может стоит начать с того, что на уже имеющемся препарированном наборе попытаться применить другие методы? Посмотреть, какой лучше, а может - попытаться сделать ансамбль методов?
Но в любом случае - удачи в проекте.
Спасибо вам за ответ!

По поводу вашего вопроса - да, на самом деле спустя некоторое время после своего сообщения я понял, что SVM не очень хорошо подходит, потому что SVM плохо масштабируется в случае, если выборка большая. Поэтому буду просто перебирать параметры, благо в sklearn это уже реализовано методом SGDClassifier, где можно задавать определенные параметры и получать тот или иной классификатор.

Добавлено через 8 минут
Цитата Сообщение от VTsaregorodtsev Посмотреть сообщение
Вместо выделения наиболее важных слов - можно иным способом снизить размерность пространства независимых признаков у всего (т.е. неразбитого на отдельные темы) корпуса текстов (вернее, уже у набора векторов tf или tf-idf, представляющих тексты).
А конкретно - можно использовать линейный или нелинейный анализ главных компонент. Нелинейный - это, например, тот, с которого началось современное глубокое обучение (т.е. глубокий автоенкодер, как в статье Хинтона и Салахутдинова в Science в 2006г).
Соответственно, классификация (хоть при обучении классификатора, хоть при последующей боевой работе) берёт на вход данные после их проецирования в пространство главных компонент.
В качестве независимых признаков могут выступать не только отдельные слова (после их нормализации и т.д.) - но и упомянутые выше n-граммы.
Спасибо за ваш комментарий!!

Если вы имеете в виду SVD-разложение матрицы по сингулярным числам и последующее отрезание нулевых векторов, то да, я тоже об этом думал, но почему-то еще не пробовал. Фактически после tf-idf (получение весовой матрицы) и применении LDA я хотел взять то, что получилось и оставить в матрице первые n слов (потому что они там как раз ранжируются по значимости) и уже для этих данных применять классификатор. Но в целом можно попробовать еще и SVD разложение использовать. N-граммы я, кстати, тоже использую, по факту просто перебираю различные варианты в надежде получить более менее приемлемый результат)

P.S. Если я все-таки неправильно связал этот ваш абзац с SVD-разложением, то поясните, пожалуйста, буду благодарен.

Добавлено через 4 минуты
На самом деле я сейчас столкнулся с новой проблемой - переобучение. Несколько классификаторов показывают большую точность, но при этом при вводе нового пользователя результат мягко говоря оставляет желать лучшего...
Я полагаю, что это связано с изначально не очень хорошей обучающей выборкой, либо опять таки с размерностью, от которой надо бы избавиться
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2020, 13:08

БД для обучения
Доброго времени суток, уважаемые форумчане. Мне нужна Ваша помощь. Дело в том, что для обучения...

Ноутбук для обучения
Хочу купить ноутбук для таких целей. Изучать программирование, сети. Хочу в будущем поставить на...

Книги для обучения
Всем привет. Можете предложить книги, по которым Вы сами изучали WPF.

IDE для обучения
Пользуюсь netBeans для обучения программированию на джаве. Эта IDE очень сложна для меня, слишком...

Материал для обучения
Приветствую. Совсем недавно стал изучать Python (мой первый язык). Выучил пока только базу (в...

Ассемблер для обучения
Здравствуйте! В общем, решил я выучить язык ассемблера для того, чтобы понимать вообще, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.