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
|