Вы можете точно настроить BERT и использовать BERT для прогнозирования ретвитов, но вам нужно больше архитектуры для прогнозирования, будет ли пользователь i ретвитить твит j .
Вот архитектура с макушки головы.
На высоком уровне:
- Создайте плотное векторное представление (вложение) пользователя i (возможно, содержащее что-то об интересах пользователя, например, о спорте).
- Создание вложения твита j .
- Создать вложение комбинации первых двух вложений, например, с помощью конкатенации или продукта hadamard.
- Передать это вложение через NN, который выполняет двоичную классификацию, чтобы предсказать ретвит или не retweet.
Давайте разберем эту архитектуру по элементам.
Чтобы создать встраивание пользователя i , вам потребуется создать некую нейронную сеть, которая принимает все функции, которые у вас есть о пользователь и производит плотный вектор. Эта часть является самым сложным компонентом архитектуры. Эта область не находится в моей рулевой рубке, но быстрый поиск в Google по запросу «встраивание интересов пользователя» приводит к исследованию этого алгоритма под названием StarSpace . Он предполагает, что он может «получать высокоинформативные вложения пользователя в соответствии с поведением пользователя», что вам и нужно.
Чтобы создать вложение твита j , вы можете использовать любой тип нейронных сеть, которая принимает токены и производит вектор. Исследования до 2018 года предложили бы использовать LSTM или CNN для получения вектора. Тем не менее, BERT (как вы упомянули в своем посте) является современным состоянием. Он принимает текст (или текстовые индексы) и создает вектор для каждого токена; одним из этих токенов должен был быть предварительно добавленный токен [CLS]
, который обычно считается представлением всего предложения. В этой статье представлен концептуальный обзор процесса. Именно в этой части архитектуры вы можете точно настроить BERT. Эта веб-страница предоставляет конкретный код, использующий PyTorch и реализацию BERT Huggingface для выполнения этого шага (я прошел через шаги и могу ручаться за это). В будущем вам понадобится Google для «классификации одного предложения BERT».
Чтобы создать вложение, представляющее комбинацию пользователя i и твита j , Вы можете сделать одну из многих вещей. Вы можете просто объединить их в один вектор; таким образом, если пользователь i является M-мерным вектором, а твит j является N-мерным вектором, то конкатенация создает (M + N) -мерный вектор. Альтернативный подход состоит в том, чтобы вычислить произведение хадамара (поэлементное умножение); в этом случае оба вектора должны иметь одинаковое измерение.
Чтобы сделать окончательную классификацию ретвитов или не-ретвитов, создайте простое NN, которое принимает вектор комбинации и выдает одно значение. Здесь, поскольку вы выполняете двоичную классификацию, NN с функцией logisti c (sigmoid) будет уместным. Вы можете интерпретировать выходные данные как вероятность ретвита, поэтому значение выше 0,5 будет ретвитнуть. См. эту веб-страницу для ознакомления с основами c подробностей о построении NN для двоичной классификации.
Для того, чтобы заставить всю эту систему работать, вам нужно обучить все это вместе end -в-конец . То есть сначала нужно подключить все части и обучить их, а не обучать компоненты по отдельности.
Ваш входной набор данных будет выглядеть примерно так:
user tweet retweet?
---- ----- --------
20 years old, likes sports Great game Y
30 years old, photographer Teen movie was good N
Если вы хотите более простой маршрут, где нет персонализации пользователя, тогда просто не используйте компоненты, которые создают встраивание пользователя i . Вы можете использовать BERT, чтобы построить модель, чтобы определить, был ли твит ретвитирован без учета пользователя. Вы можете снова перейти по ссылкам, которые я упомянул выше.