Можно ли точно настроить BERT, чтобы сделать ретвит-прогноз? - PullRequest
1 голос
/ 21 апреля 2020

Я хочу создать классификатор, который предсказывает, будет ли пользователь i ретвитнуть твит j.

Набор данных огромен, он содержит 160 миллионов твитов. Каждый твит сопровождается некоторыми метаданными (например, следует ли ретвитеру за пользователем твита).

текстовые токены для одного твита - это упорядоченный список идентификаторов BERT. Чтобы получить вложение твита, вы просто используете идентификаторы (так что это не текст)

Можно ли точно настроить BERT, чтобы сделать прогноз? если да, то какие курсы / источники вы рекомендуете отточить? (Я новичок)

Я должен добавить, что предсказание должно быть вероятностью.

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

Ответы [ 2 ]

2 голосов
/ 25 апреля 2020

Вы можете точно настроить BERT и использовать BERT для прогнозирования ретвитов, но вам нужно больше архитектуры для прогнозирования, будет ли пользователь i ретвитить твит j .

Вот архитектура с макушки головы.

enter image description here

На высоком уровне:

  1. Создайте плотное векторное представление (вложение) пользователя i (возможно, содержащее что-то об интересах пользователя, например, о спорте).
  2. Создание вложения твита j .
  3. Создать вложение комбинации первых двух вложений, например, с помощью конкатенации или продукта hadamard.
  4. Передать это вложение через 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, чтобы построить модель, чтобы определить, был ли твит ретвитирован без учета пользователя. Вы можете снова перейти по ссылкам, которые я упомянул выше.

0 голосов
/ 23 апреля 2020

На этот вопрос уже есть ответ в Data Science SE , который объясняет, почему BERT нельзя использовать для прогнозирования. Вот суть:

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

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

Но как я понимаю из вашего случая, что вы хотите провести «классификацию», BERT полностью готов для этого. Пожалуйста, обратитесь к ссылке , которую я разместил ниже. Это поможет вам классифицировать твиты по топикам c, чтобы вы могли просматривать их в свободное время.

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