Spaces:
Running
Running
Commit
·
a2a66cd
1
Parent(s):
972cd21
modify elo caculate
Browse files
models.py
CHANGED
|
@@ -130,11 +130,18 @@ def record_vote(user_id, text, chosen_model_id, rejected_model_id, model_type):
|
|
| 130 |
db.session.rollback()
|
| 131 |
return None, "One or both models not found for the specified model type"
|
| 132 |
|
|
|
|
|
|
|
|
|
|
| 133 |
# Calculate new Elo ratings
|
| 134 |
-
new_chosen_elo, new_rejected_elo =
|
| 135 |
-
chosen_model.current_elo, rejected_model.current_elo
|
| 136 |
)
|
| 137 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 138 |
# Update model stats
|
| 139 |
chosen_model.current_elo = new_chosen_elo
|
| 140 |
chosen_model.win_count += 1
|
|
@@ -416,8 +423,8 @@ def insert_initial_models():
|
|
| 416 |
id="maskgct",
|
| 417 |
name="maskgct",
|
| 418 |
model_type=ModelType.TTS,
|
| 419 |
-
is_open=
|
| 420 |
-
is_active=
|
| 421 |
model_url="https://github.com/open-mmlab/Amphion/tree/main/models/tts/maskgct",
|
| 422 |
),
|
| 423 |
Model(
|
|
@@ -526,3 +533,34 @@ def toggle_user_leaderboard_visibility(user_id):
|
|
| 526 |
db.session.commit()
|
| 527 |
|
| 528 |
return user.show_in_leaderboard
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
db.session.rollback()
|
| 131 |
return None, "One or both models not found for the specified model type"
|
| 132 |
|
| 133 |
+
k_factor_winner = get_dynamic_k_factor(chosen_model.match_count)
|
| 134 |
+
k_factor_loser = get_dynamic_k_factor(rejected_model.match_count)
|
| 135 |
+
|
| 136 |
# Calculate new Elo ratings
|
| 137 |
+
new_chosen_elo, new_rejected_elo = calculate_elo_change_dynamic_k(
|
| 138 |
+
chosen_model.current_elo, rejected_model.current_elo, k_factor_winner, k_factor_loser
|
| 139 |
)
|
| 140 |
|
| 141 |
+
# new_chosen_elo, new_rejected_elo = calculate_elo_change(
|
| 142 |
+
# chosen_model.current_elo, rejected_model.current_elo
|
| 143 |
+
# )
|
| 144 |
+
|
| 145 |
# Update model stats
|
| 146 |
chosen_model.current_elo = new_chosen_elo
|
| 147 |
chosen_model.win_count += 1
|
|
|
|
| 423 |
id="maskgct",
|
| 424 |
name="maskgct",
|
| 425 |
model_type=ModelType.TTS,
|
| 426 |
+
is_open=True,
|
| 427 |
+
is_active=True,
|
| 428 |
model_url="https://github.com/open-mmlab/Amphion/tree/main/models/tts/maskgct",
|
| 429 |
),
|
| 430 |
Model(
|
|
|
|
| 533 |
db.session.commit()
|
| 534 |
|
| 535 |
return user.show_in_leaderboard
|
| 536 |
+
|
| 537 |
+
|
| 538 |
+
def get_dynamic_k_factor(match_count):
|
| 539 |
+
"""
|
| 540 |
+
使用连续衰减函数动态计算K因子。
|
| 541 |
+
K因子会从一个最大值平滑地衰减到一个最小值。
|
| 542 |
+
|
| 543 |
+
Args:
|
| 544 |
+
match_count (int): 模型的总比赛次数。
|
| 545 |
+
|
| 546 |
+
Returns:
|
| 547 |
+
float: 计算出的K因子。
|
| 548 |
+
"""
|
| 549 |
+
k_max = 40 # 新模型的最大K因子
|
| 550 |
+
k_min = 10 # 成熟模型的最小K因子
|
| 551 |
+
decay_speed = 50.0 # 衰减速度,数值越大,K因子下降越慢
|
| 552 |
+
|
| 553 |
+
# 指数衰减公式: K = K_min + (K_max - K_min) * e^(-match_count / decay_speed)
|
| 554 |
+
k_factor = k_min + (k_max - k_min) * math.exp(-match_count / decay_speed)
|
| 555 |
+
|
| 556 |
+
return k_factor
|
| 557 |
+
|
| 558 |
+
def calculate_elo_change_dynamic_k(winner_elo, loser_elo, k_factor_winner, k_factor_loser):
|
| 559 |
+
"""根据双方不同的K因子计算Elo等级分变化。"""
|
| 560 |
+
expected_winner = 1 / (1 + math.pow(10, (loser_elo - winner_elo) / 400))
|
| 561 |
+
expected_loser = 1 / (1 + math.pow(10, (winner_elo - loser_elo) / 400))
|
| 562 |
+
|
| 563 |
+
winner_new_elo = winner_elo + k_factor_winner * (1 - expected_winner)
|
| 564 |
+
loser_new_elo = loser_elo + k_factor_loser * (0 - expected_loser)
|
| 565 |
+
|
| 566 |
+
return winner_new_elo, loser_new_elo
|