Я хочу создать модель подобия текста, которую я обычно использую для поиска часто задаваемых вопросов и других методов, чтобы получить наиболее связанный текст. Я хочу использовать высокооптимизированную модель BERT
для этой задачи НЛП. Я обычно использую кодировки всех предложений, чтобы получить матрицу сходства с использованием cosine_similarity
и вернуть результаты.
В гипотетических условиях, если у меня есть два предложения как hello world
и hello hello world
, тогда я предполагаю, что BRT даст мне что-то вроде [0.2,0.3,0]
, (0 для заполнения) и [0.2,0.2,0.3]
, и я могу передать эти два внутри sklearn's
cosine_similarity
.
Как я должен извлекать вложения из предложений, чтобы использовать их в модели? Я где-то нашел, что его можно извлечь, например:
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
input_ids = torch.tensor(tokenizer.encode("Hello, my dog is cute")).unsqueeze(0) # Batch size 1
outputs = model(input_ids)
last_hidden_states = outputs[0] # The last hidden-state is the first element of the output tuple
Using Tensorflow:
import tensorflow as tf
from transformers import BertTokenizer, TFBertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = TFBertModel.from_pretrained('bert-base-uncased')
input_ids = tf.constant(tokenizer.encode("Hello, my dog is cute"))[None, :] # Batch size 1
outputs = model(input_ids)
last_hidden_states = outputs[0] # The last hidden-state is the first element of the output tuple
Это правильный путь? Потому что я где-то читал, что BERT предлагает разные типы вложений.
ТАКЖЕ предложите любой другой метод определения сходства текста