我的想法是提取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