Ранжирование списка приоритетов электронных писем

Я пытаюсь создать простую программу ранжирования электронной почты (что-то вроде приоритетного почтового ящика) в Python. Основываясь на частоте электронных писем, полученных от отправителей, например, у вас есть тренировочный набор, скажем, 50%, где подсчитывается частота отправителей, а затем тестовый набор 50%, который ранжируется в порядке, основанном на обучении (таким образом, электронное письмо от отправителя, который отправляет много сообщений, имеет высокий рейтинг).

Я написал некоторый код Python, чтобы принимать электронные письма и извлекать адрес «От» из каждого. Я поместил эту информацию в список, который показывает наиболее распространенных отправителей электронной почты (пример фрагмента из этого списка ниже).

 //(Email address, frequency of emails received from this sender)//Not Code
 ('[email protected]', 244)
 ('[email protected]', 162)
 ('[email protected]', 154)
 ('[email protected]', 75)
 ('[email protected]', 50)

Я знаю, что ряд алгоритмов машинного обучения можно эффективно использовать для обучения и проверки моих данных, чтобы делать то, что мне нужно. Однако я не уверен, какой из них я могу использовать, чтобы получить наилучшие результаты?


person ZeeeeeV    schedule 31.01.2013    source источник
comment
При чем здесь машинное обучение, если вы просто хотите ранжировать электронные письма на основе частоты отправителей? Вы не можете решить это напрямую? Кроме того, вы уверены, что это хороший способ ранжирования? Если отправитель регулярно отправляет электронные письма, одно из них, вероятно, все равно будет в верхней части списка, и существуют очевидные проблемы со спамерами и тот факт, что вы игнорируете электронные письма, которые предпочитает читать пользователь.   -  person YXD    schedule 31.01.2013
comment
Что ж, я хотел бы использовать алгоритм обучения, чтобы классифицировать ТЕСТОВЫЕ электронные письма как важные или неважные, используя электронные письма ОБУЧЕНИЯ в качестве учебного контента. Возможно, использование отправителей — не лучший способ сделать это.   -  person ZeeeeeV    schedule 31.01.2013
comment
Возможно, это больше текстовая классификация?   -  person ZeeeeeV    schedule 31.01.2013
comment
Для алгоритма обучения с учителем ваши обучающие данные должны быть репрезентативными для тестового набора. Поэтому, если вы говорите, что хотите выбрать тестовый набор на основе частоты отправителя, это также приведет к проблемам. Что касается ранжирования (то есть регрессии) и классификации, это зависит от того, хотите ли вы классифицировать электронные письма как важные или неважные или найти способ упорядочить их (регрессия). . Это документ, описывающий папку «Приоритетные входящие» Google.   -  person YXD    schedule 31.01.2013
comment
Спасибо за ваш вклад, мистер Э. Теперь у меня в голове стало намного яснее. Я пытаюсь классифицировать электронные письма как важные и не важные. Бумага Google информативна, но слишком сложна для моего ограниченного понимания python. Есть ли более простой способ добиться того, что у них есть?   -  person ZeeeeeV    schedule 31.01.2013
comment
Эй, похоже, другие люди дали хорошие ответы. Похоже, вам нужно немного почитать, чтобы лучше узнать стандартные методы машинного обучения (например, логистическую регрессию, SVM) и как настроить свои данные. Вам не обязательно знать математику, стоящую за всем, но важно знать, какие алгоритмы подходят в каких случаях. Вы найдете хорошие реализации в Scipy и Scikit Learn. Извините, это немного расплывчато, но я уверен, что вы получите что-то хорошее.   -  person YXD    schedule 01.02.2013


Ответы (2)


Ранжирование только по отправителю никогда не было хорошей идеей. Что касается меня, я подписываюсь на уведомления по электронной почте от коммита github. Каждый день я получаю сотни писем из-за коммитов кода моего коллеги.

Это никогда не бывает легкой проблемой, по моему опыту, даже приоритетная папка Gmail не справляется. Хорошая система ранжирования или оценки приоритета электронной почты нуждается в хороших функциях. Я предлагаю следующие функции для начала. См. Изучение Gmail Priority Inbox:

  • Социальные особенности. Отправитель или домен отправителя;
  • Особенность резьбы. Это письмо находится в активной ветке? Каков порядковый номер этого письма в ветке? Кто является скопированными пользователями, если они есть?
  • Функция времени. Когда было получено это письмо? Если у вас есть доступ к ответу владельца, вы можете отслеживать, сколько времени требуется владельцу для ответа.
  • Особенность контента. Это модель мешка слов, используемая в фильтрации спама.
  • Поведение. Вот как владелец учетной записи электронной почты отвечает на электронное письмо. Это ответил? или никогда не читал? или сразу удалил? или заархивировано в разные папки? помечен? Если на него ответят, возможно, вы также захотите провести некоторый контент-анализ. Длина ответа также может быть хорошей характеристикой.

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

Наконец, что делает Gmail, вы можете попросить пользователей помочь вам улучшить систему, предоставив им возможность отмечать важные электронные письма.

Дальнейшие чтения:

person greeness    schedule 31.01.2013

Насколько я понимаю, вы хотите классифицировать электронное письмо как важное или не важное. Итак, сначала вам нужно вручную пометить каждое электронное письмо как важное или неважное. Затем вам нужно определить особенности каждого электронного письма и извлечь их. В вашем случае единственной функцией, которую вы хотите рассмотреть, является отправитель. Таким образом, вы получите такие данные, как:

('[email protected]', important)
('[email protected]', normal)
('[email protected]', important)
('[email protected]', normal)
('[email protected]', normal)
('[email protected]', normal)
('[email protected]', important)
('[email protected]', important)
('[email protected]', normal)
...

Затем вы можете применить алгоритм обучения, такой как (линейная регрессия, логистическая регрессия и т. д.), и вы сможете проверить результаты на своем тестовом наборе. Проблема в том, что любой алгоритм в конечном итоге классифицирует электронное письмо от отправителя X как важное или обычное (вероятно, на основе соотношения важных и обычных сообщений от этого отправителя в обучающей выборке). Чтобы получить более значимые результаты, вам нужно будет извлечь больше функций из ваших данных, таких как конкретные слова в сообщениях, время их отправки и т. д.

person Bogdan    schedule 31.01.2013
comment
Спасибо вам большое за это!. Хорошо, я думаю, возможно, включая 2 функции данных, например. конкретные слова в теле сообщения и важность отправителя. Я полагаю, я мог бы случайным образом назначить обычные и важные вручную на starT? - person ZeeeeeV; 01.02.2013