Spaces:
Sleeping
Sleeping
| import numpy as np | |
| import xgboost as xgb | |
| from typing import List | |
| def remove_duplicates(input_list: List) -> List: | |
| result = list(dict.fromkeys(input_list)) | |
| return result | |
| class Ranker: | |
| def __init__(self, model_path: str = None): | |
| self.model = xgb.Booster() | |
| if model_path is not None: | |
| self.model.load_model(model_path) | |
| def rank(self, | |
| titles: List[str], | |
| scores: List[float], | |
| indexes: List[int], | |
| embeddings: List[List[float]]) -> tuple: | |
| """ | |
| :param titles: названия документов, которым принадлежат чанки или сами названия документов, если документ целый | |
| :param embeddings: эмбединги чанков или цельных документов | |
| Индексы соответствуют друг другу, то есть эмбединг в embeddings[0] относится к названию документа в titles[0] | |
| :return: список названий документов, отранжированный и без дубликатов от чанкинга | |
| """ | |
| dmatrix_of_features = xgb.DMatrix(np.array(embeddings)) | |
| dmatrix_of_features.set_group([len(embeddings)]) | |
| predictions = self.model.predict(dmatrix_of_features) | |
| indexes_ranked_documents = sorted(range(len(predictions)), key=lambda k: predictions[k], reverse=True) | |
| titles_reranked_documents = [titles[item] for item in indexes_ranked_documents] | |
| scores_reranked_documents = sorted([scores[item] for item in indexes_ranked_documents], reverse=True) | |
| indexes_reranked_documents = [indexes[item] for item in indexes_ranked_documents] | |
| return titles_reranked_documents, scores_reranked_documents, indexes_reranked_documents | |