2

我的想法是提取CLS数据库中所有文本的令牌并将其保存在 CSV 或其他地方。所以当一个新的文本出现时Cosine Similarity/JAccard/MAnhattan/Euclidean,我必须使用一些近似值,而不是使用或其他距离,比如LSH, ANN (ANNOY, sklearn.neighbor)或这里给出的一个faiss。怎么可能呢?我的代码如下:

火炬

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
input_ids = torch.tensor(tokenizer.encode("Hello, I am a text")).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

使用张量流:

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

我认为可以将CLS令牌获取为:(如果错误请更正

last_hidden_states = outputs[0]
cls_embedding = last_hidden_states[0][0]

请告诉我这是否是正确的使用方式,我该如何使用其中的任何一种LSH, ANNOT, faiss或类似的东西?

因此,对于每个文本,都会有一个768长度向量,我们可以创建一个N(No of texts 10M)x768矩阵,我怎样才能找到与给定图像/嵌入/数据最相似 的数据点(文本)的索引top-5

4

0 回答 0