espa_model / iterative_selection.py
kanslor821's picture
Upload 10 files
0f34acb verified
"""
Модуль итеративного отбора предложений с подавлением семантической избыточности
"""
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)