print(f’\n=== Consulta: “{query}” ===’) para rango, i en enumerate(idx, 1): fila = work.iloc[i]
imprimir(f”\n[{rank}] sim={sims[i]:.3f} | {fila[‘taxonomy_level_1’]} “f”| estado={fila[‘open_status’]}”) imprimir(” “, fila[TEXT_COL][:260].replace(“\n”, ” “), “…”) search(“puntos racionales en curvas hiperelípticas”) search(“multiplicatividad de la norma p de salida máxima de un canal cuántico”) de sklearn.linear_model importar LogisticRegression de sklearn.model_selection importar train_test_split de sklearn.metrics importar ranking_report, ConfusionMatrixDisplay y = trabajo[“open_status”].values Xtr, Xte, ytr, yte = train_test_split( emb, y, test_size=0.25, random_state=RANDOM_STATE, stratify=y) clf = LogisticRegression(max_iter=2000, class_weight=”balanceed”, C=2.0) clf.fit(Xtr, ytr) pred = clf.predict(Xte) print(“\n=== clasificador open_status (incrustaciones + regresión logística) ===”) print(classification_report(yte, pred)) fig, ax = plt.subplots(figsize=(7, 6)) ConfusionMatrixDisplay.from_predictions( yte, pred, ax=ax, cmap=”Blues”, xticks_rotation=45, normalize=”true”, value_format=”.2f”) ax.set_title(“matriz de confusión open_status (normalizada por filas)”) plt.tight_layout(); plt.show() sims = util.cos_sim(emb, emb).cpu().numpy() np.fill_diagonal(sims, 0) i, j = np.unravel_index(sims.argmax(), sims.shape) print(f”\nEl par más similar (cos={sims[i, j]:.3f}):”) para n en (i, j): print(f”\n paper_id={work.iloc[n][‘paper_id’]} | “f”{trabajo.iloc[n][‘taxonomy_level_1’]}”) print(” “, trabajo.iloc[n][TEXT_COL][:240].replace(“\n”, ” “), “…”) print(“\nListo. Establezca SAMPLE_SIZE=Ninguno en la parte superior para ejecutar en las 14,1k filas completas.”)
de sentencia_transformers importar utilidad def búsqueda (consulta, k = 5): q = model.encode ([query]normalize_embeddings=True) sims = util.cos_sim(q, emb)[0].cpu().numpy() idx = sims.argsort()[::-1][:k]