kemuriririn commited on
Commit
a2a66cd
·
1 Parent(s): 972cd21

modify elo caculate

Browse files
Files changed (1) hide show
  1. models.py +42 -4
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 = calculate_elo_change(
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=False,
420
- is_active=False,
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