Spaces:
Sleeping
Sleeping
File size: 1,459 Bytes
0f34acb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | """
Модуль итеративного отбора предложений с подавлением семантической избыточности
"""
import numpy as np
def iterative_selection(scores: np.ndarray, similarity_matrix: np.ndarray,
k: int, theta: float = 0.6) -> list:
"""
Итеративный жадный отбор с подавлением семантически близких предложений.
Args:
scores: начальные оценки Score(S_i)
similarity_matrix: матрица попарного семантического сходства
k: целевое количество предложений
theta: коэффициент подавления (0-1)
Returns:
индексы отобранных предложений в хронологическом порядке
"""
N = len(scores)
selected = []
remaining = list(range(N))
current_scores = scores.copy()
for _ in range(min(k, N)):
best_idx = max(remaining, key=lambda i: current_scores[i])
selected.append(best_idx)
remaining.remove(best_idx)
for i in remaining:
sim = similarity_matrix[best_idx, i]
current_scores[i] = current_scores[i] * (1 - theta * sim)
current_scores[i] = max(current_scores[i], 0.0)
return sorted(selected) |