Как сгруппировать похожие предложения, используя BERT - PullRequest
0 голосов
/ 10 апреля 2019

Для ElMo, FastText и Word2Vec я усредняю ​​вложения слов в предложение и использую кластеризацию HDBSCAN / KMeans для группировки похожих предложений.

Хороший пример реализации можно увидеть в этой короткой статье: http://ai.intelligentonlinetools.com/ml/text-clustering-word-embedding-machine-learning/

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

Любая информация будет полезна

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Берт добавляет специальный токен [CLS] в начале каждого сэмпла / предложения.После тонкой настройки последующей задачи встраивание этого токена [CLS] или pooled_output, как они его называют, в реализации обнимающего лица представляет вложение предложения.

Но я думаю, что у вас нет меток, поэтому вы не сможете подстроиться, поэтому вы не можете использовать pooled_output как вложение предложения.Вместо этого вы должны использовать слово embeddings в encoded_layers, который является тензором с размерами (12, seq_len, 768).В этом тензоре у вас есть вложения (размерность 768) из каждого из 12 слоев Берта.Чтобы получить вложения слов, вы можете использовать выходные данные последнего слоя, вы можете объединить или суммировать выходные данные последних 4 слоев и так далее.

Вот скрипт для извлечения функций https://github.com/huggingface/pytorch-pretrained-BERT/blob/master/examples/extract_features.py

0 голосов
/ 26 июня 2019

Сначала вам нужно будет сгенерировать bert embeddidngs для предложений. Служба bert-as-service предоставляет очень простой способ создания вложений для предложений.

Вот как вы можете привязать векторы Берта к списку предложений, которые вам нужно объединить. Это очень хорошо объясняется в репозитории bert-as-service: https://github.com/hanxiao/bert-as-service

Установка:

pip install bert-serving-server  # server
pip install bert-serving-client  # client, independent of `bert-serving-server`

Скачать одну из предварительно обученных моделей можно по адресу https://github.com/google-research/bert

Запустить сервис:

bert-serving-start -model_dir /your_model_directory/ -num_worker=4 

Генерация векторов для списка предложений:

from bert_serving.client import BertClient
bc = BertClient()
vectors=bc.encode(your_list_of_sentences)

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

...