私の考えは、DB 内のすべてのテキストのトークンを抽出しCLS
、CSV または別の場所に保存することです。Cosine Similarity/JAccard/MAnhattan/Euclidean
したがって、新しいテキストが入ってくると、または他の距離を使用する代わりに、またはLSH, ANN (ANNOY, sklearn.neighbor)
ここで与えられたもの のような近似を使用する必要がありますfaiss
。どうすればそれができますか?私のコードは次のとおりです。
PyTorch :
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
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
そして、トークンを次のように取得できると思います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