Модели последовательностей word2vec

Вопрос или проблема

Я работаю с набором данных, который содержит более 100 000 записей. Вот как выглядят данные:

email_id    cust_id campaign_name
123         4567     World of Zoro
123         4567     Boho XYz
123         4567     Guess ABC
234         5678     Anniversary X
234         5678     World of Zoro
234         5678     Fathers day
234         5678     Mothers day
345         7890     Clearance event
345         7890     Fathers day
345         7890     Mothers day
345         7890     Boho XYZ
345         7890     Guess ABC
345         7890     Sale

Я пытаюсь понять последовательность кампаний и ищу следующую возможную кампанию для клиентов.

Предположим, я обработал свои данные и сохранил их в ‘camp’.

С использованием Word2Vec –

from gensim.models import Word2Vec

model = Word2Vec(sentences=camp, size=100, window=4, min_count=5, workers=4, sg=0)

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

Word2Vec принимает этот формат ввода –

['World','of','Zoro','Boho','XYZ','Guess','ABC','Anniversary','X'...]

И выдает этот формат вывода –

model.wv.most_similar('Zoro')
[Guess,0.98],[XYZ,0.97]

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

Мой ввод будет следующим –

[['World of Zoro','Boho XYZ','Guess ABC'],['Anniversary X','World of 
Zoro','Fathers day','Mothers day'],['Clearance event','Fathers day','Mothers 
day','Boho XYZ','Guess ABC','Sale']]

Вывод –

model.wv.most_similar('World of Zoro')
[Sale,0.98],[Mothers day,0.97]

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

  1. Word2Vec работает со словами, а вы хотите сравнить ‘тексты’ (серии слов разной длины). Для этого doc2vec может быть более подходящим.

  2. У вас очень короткие ‘тексты’ (названия кампаний), поэтому генерирование эмбеддинга только из них не даст больших эффектов. Вы могли бы начать с некоторых предобученных векторов, но в любом случае, вероятно, вы хотите достичь гораздо большего. Но вопрос в следующем:

  3. Неясно из ваших примеров и объяснений, какова природа текстов, с которыми вы хотите найти наиболее похожее название кампании. С одной стороны, вы пишете о том, чтобы найти наиболее частое с данным словом – тогда вы могли бы просто создать статистику слов и кампаний. С другой стороны, в вашем примере вы передаете весь текст – тогда вышеупомянутое применимо, находя наиболее похожий текст, используя текстовые векторы.

Ответ или решение

Вопрос о использовании моделей последовательности, таких как Word2Vec, для анализа данных кампаний требует детального рассмотрения, так как стандартные методы могут не полностью удовлетворять вашим потребностям. Давайте подробно разберем этот процесс и предложим возможные решения.

Понимание вашей задачи

Вы работаете с набором данных, содержащим множество записей, в котором представлена информация о кампаниях и клиентах. Ваша цель – предсказать следующую кампанию для конкретных клиентов на основе предыдущих взаимодействий.

Проблема с Word2Vec

Модель Word2Vec, как вы верно заметили, работает на уровне токенов (слов), а не на уровне целых текстовых единиц (таких как названия кампаний). Исходя из вашей структуры данных, вы пытаетесь использовать модель для обработки последовательностей, что приводит к проблемам с входными данными и выходными результатами.

Предложенные подходы

  1. Использование Doc2Vec:
    Ваша текущая задача напоминает задачу представления текстовых документов. Вместо Word2Vec, который обучает вектора для отдельных слов, рассмотрите возможность использования Doc2Vec, который предназначен для работы с целыми документами. Doc2Vec сможет создать вектора для названий кампаний, учитывая контекст их использования в последовательностях.

    Пример использования:

    from gensim.models import Doc2Vec
    from gensim.models.doc2vec import TaggedDocument
    
    # Подготовка данных в формате TaggedDocument
    documents = [TaggedDocument(doc, [i]) for i, doc in enumerate(camp)]
    model = Doc2Vec(documents, vector_size=100, window=4, min_count=5, workers=4)
    
    # Получение похожих кампаний
    similar_campaigns = model.dv.most_similar('World of Zoro')
  2. Анализ частотности:
    Если ваша основная цель – найти следующую наиболее частую кампанию после заданной, можно рассмотреть методы, основанные на статистическом анализе. Вы можете подсчитать количество повторений кампаний после каждой кампании для каждого клиента и затем использовать эти статистические данные для предсказаний.

    Пример:

    import pandas as pd
    
    # Создание датафрейма из ваших данных
    df = pd.DataFrame(camp, columns=['campaign'])
    
    # Подсчет частоты
    next_campaigns = df.groupby('campaign')['next_campaign'].value_counts().unstack().fillna(0)
    
    # Выбор кампании с наибольшей частотой
    recommendations = next_campaigns.idxmax(axis=1)
  3. Комбинирование методов:
    Для более точного предсказания вы также можете комбинировать методы, используя как Doc2Vec для создания векторов кампаний, так и частотный анализ для нахождения наиболее вероятных "следующих шагов".

Заключение

Word2Vec может оказаться неподходящим инструментом для вашей задачи, так как вы работаете с последовательностями кампаний, а не с отдельными словами. Рекомендуется использовать Doc2Vec или методы, основанные на анализе данных, чтобы выявить закономерности в поведении клиентов. Оба подхода предоставляют мощные инструменты для анализа текстовых данных, и использование их в комбинации может значительно повысить эффективность предсказания будущих кампаний.

Если у вас есть дополнительные вопросы, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...