Как это будет выглядеть, если мы будем использовать машинное обучение для создания целенаправленных сообществ?

Это более подробное пошаговое руководство по проекту. Чтобы понять общий тезис, перейдите к первому посту: https://medium.com/@kellykerrychowchow/machine-learning-for-making-human-recommendations-part1-8fcf51a96cab

Цель:

Чтобы помочь Super Connectors познакомиться.

Решение:

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

Рабочий процесс Data Science

Представление о продукте:

Я начал с рисования идей на бумаге. Я предполагал, что этот информационный продукт будет визуально привлекательным, чтобы пользователи могли в игровой форме исследовать свои сети. С точки зрения функциональности, он должен сообщать вам (1) лидеров мнений по каждой теме, (2) друзей, которым нравится говорить на несколько тем, и (3) новые темы, которые вашим друзьям может понравиться изучать.

Сбор данных:

Решить, где брать данные, было одной из многих проблем. Традиционно машинное обучение выполнялось с использованием наборов данных, созданных на основе большого количества пользователей, таких как Yelp или Reddit. После многочисленных обсуждений с другими специалистами по обработке данных я решил использовать 161 МБ данных Facebook Messenger, переданных через SuperConnector. Он уроженец Кремниевой долины, у него более 4700 друзей в Facebook, и он вписывается в демографические характеристики трех типов суперконнекторов, описанных в предыдущем разделе.

Вот моя логика, лежащая в основе этого решения:

Проблема с использованием массивных данных от разных пользователей заключается в том, что результаты могут быть слишком общими. Например, использование общих общедоступных сообщений в Facebook или твитов в Twitter позволяет фиксировать только то, о чем люди говорят публично, но не их личные отношения с друзьями. люди чаще говорят о чем-то забавном или праздничном, чем о глубоких разговорах, таких как искусственный интеллект, проблемы в отношениях или личные истории. С другой стороны, проблема настраиваемого алгоритма, обученного для одного конкретного пользователя, заключается в том, что результат может быть недостаточно обобщаемым, чтобы другие пользователи могли загрузить свои собственные данные и сразу же использовать их. Хорошо то, что мы не измеряем успех, глядя на то, сколько людей будут его использовать. Скорее, речь идет о том, будут ли его использовать несколько суперконнекторов, потому что один принимающий пользователь принесет пользу своим 4000 друзьям, которые могут получить от него косвенную выгоду.

Горное дело:

Основная цель здесь - перенаправить данные истории чата таким образом, чтобы их можно было использовать для обучения алгоритма.

(1) из уродливого формата в красивый:

Когда мы впервые загрузили данные из Facebook, они были в уродливом формате HTML. После нескольких часов очистки и очистки набор данных превратился в красиво отформатированный DataFrame.

В промежутках я также удалил «знакомых» и друзей, чьи отношения похолодели, глядя на медианы.

(2) от спорадических сообщений до псевдодокументов:

Традиционно в алгоритмах моделирования тем, таких как LDA, мы извлекаем темы из хорошо отформатированных длинных документов, таких как новостные статьи или книги. Однако в текстовых сообщениях они варьируются от 1 до более 3000 слов. Чтобы создать из текстовых сообщений документальный формат, я перепрофилировал набор данных чата, объединив все сообщения от одного пользователя в большой псевдодокумент.

Очистка:

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

  1. Удалите все смайлы, знаки препинания, стоп-слова и нерелевантную информацию, например номера телефонов или ссылки.
  2. Преобразование букв в нижний регистр
  3. Удаление слов с частотой документа менее 5
  4. Использование PorterStemmer из NLTK для сокращения слов до их исходных форм

После чистки я превратил слова в векторы как метод мешка слов. Мы собираемся использовать этот формат для обучения нашей модели в следующий раз.

Моделирование:

Вместо LDA я выбрал факторизацию неотрицательной матрицы, чтобы извлечь темы из матрицы документов с оценками TFidF для каждого слова. TFidf означает частоту термина, обратную частоте документа. По сути, он говорит вам, какое слово важнее другого. Хотя традиционно людям нравится использовать LDA, потому что он более универсален, я выбрал NNMF, потому что:

  • это быстрее (для запуска модели требуется несколько минут, тогда как LDA занимает не менее 1 часа)
  • он дает лучшие результаты, чем LDA. Возможно, это связано с тем, что данные не имеют распределения «дирихле».

Инструменты:

  • Scrapy + Pandas + Facebook Graph API для очистки
  • Scikit-learn для машинного моделирования
  • Matplotlib + Seaborn для визуализации исследовательского анализа
  • NLTK + Tweetokenize + Regex + CLiPS - библиотека шаблонов для обработки естественного языка
  • NetWorkX + Gephi для визуализации сети

Оставьте комментарий ниже, если у вас есть вопросы!

Напишите мне, если вы узнали что-то новое :)