ISI-transformers/similarity search.ipynb

5.8 KiB

import pandas as pd
import pickle
import numpy as np
import faiss
from sklearn.metrics import ndcg_score, dcg_score, average_precision_score

sprawy organizacyjne- zaliczenie

dodatkowy mini projekt/zadanie domowe?

true_relevance = np.asarray([[10, 2, 0, 1, 5]])
scores = np.asarray([[9, 5, 2, 1, 1]])

idealny- 9,2,5

nasz- 10,2,0

dla p = 3

CG =  10 + 2 + 0 
CG
12
np.log2(2)
1.0
DCG = 10 / np.log2(2) + 2 / np.log2(3) +  0 / np.log2(4)
DCG
11.261859507142916
dcg_score(true_relevance, scores, k=3)
11.261859507142916
IDCG = 10 / np.log2(2) + 5 / np.log2(3) +  2 / np.log2(4)
IDCG
14.154648767857287
DCG / IDCG
0.7956297391650307
ndcg_score(true_relevance, scores, k=3)
0.7956297391650307

Pytanie:

jak to się odnosi do praktyki?

ZADANIE

policz ręcznie CG, DCG, nDCG i sprawdź czy zgadza się to z scikit-learn: dla k = 10

TRUE =     np.asarray([[1,0,1,0,0,0,0,1,0,1,0,0,0,0,1]])
PREDICTED = np.asarray([[15,14,13,12,11,10,9,8,7,6,5,4,3,2,1]])

Wyszukiwarka TFIDF - jakie są plusy i minusy?

W jaki sposób można zrobić lepszą wyszukiwarkę (wykorzystując transformery lub inne modele neuronowe)? Jakie są potencjalne zalety i wady takiego podejścia?

from sentence_transformers import SentenceTransformer
sentences = ["Hello World", "Hallo Welt"]

model = SentenceTransformer('LaBSE')
embeddings = model.encode(sentences)
print(embeddings)

Zadanie

  1. zainstaluj faiss i zrób tutorial: https://github.com/facebookresearch
  2. wczytaj treści artykułów z BBC News Train.csv
  3. Użyj któregoś z transformerów (możesz użyć biblioteki sentence-transformers) do stworzenia embeddingów dokumentów
  4. wczytaj embeddingi do bazy danych faiss
  5. wyszukaj query 'consumer electronics market'