Sorry about that, here's the complete code from where you left off:
```scss
        X_train_tfidf = tfidf.fit_transform(X_train)
        X_val_tfidf = tfidf.transform(X_val)

        svm = SVC(class_weight={i: w for i, w in enumerate(class_weights)}, kernel='linear', random_state=42)
        svm.fit(X_train_tfidf, y_train)

        y_val_pred = svm.predict(X_val_tfidf)
        f1 = f1_score(y_val, y_val_pred, average='weighted')
        f1_scores.append(f1)

        X_test_tfidf = tfidf.transform(test_df['text'])
        y_test_pred = svm.predict(X_test_tfidf)
        test_df[f'fold{fold+1}'] = y_test_pred

        pbar.update()  # increment progress bar for train

        X_train_tfidf = None  # free memory
        X_val_tfidf = None  # free memory

        # repeat for test
        X_test_tfidf = tfidf.transform(test_df['text'])
        y_test_pred = svm.predict(X_test_tfidf)
        test_df[f'fold{fold+1}'] = y_test_pred

        pbar.update()  # increment progress bar for test
        pbar.set_postfix({'fold': fold+1, 'F1 score': f1})

    pbar.set_description(f'Average F1 score: {np.mean(f1_scores):.4f}')

test_df['label'] = test_df[[f'fold{fold+1}' for fold in range(5)]].mode(axis=1)[0]
test_df[['id', 'label']].to_csv('./0316_test.csv', index=False)
print("Ensemble predictions completed.")
```
To update the progress bars in real-time, you can use the `dynamic_ncols` parameter of the `tqdm` function. Setting this parameter to `True` will adjust the width of the progress bar dynamically to fit the current terminal window size. Here's how you can modify the code to update the progress bars in real-time:
```python
# Preprocess train and test text data with progress bar
with tqdm(total=len(train_df), desc='Preprocessing train text', dynamic_ncols=True) as pbar:
    train_df['text'] = train_df['text'].apply(lambda x: preprocess_text(x))
    pbar.update(len(train_df))

with tqdm(total=len(test_df), desc='Preprocessing test text', dynamic_ncols=True) as pbar:
    test_df['text'] = test_df['text'].apply(lambda x: preprocess_text(x))
    pbar.update(len(test_df))

# Define KFold cross-validation with progress bar
kf = KFold(n_splits=5, shuffle=True, random_state=42)
total_iterations = kf.get_n_splits(train_df) * 2  # 2 iterations per fold (train and test)
with tqdm(total=total_iterations, desc='KFold cross-validation', dynamic_ncols=True) as pbar:
    f1_scores = []
    for fold, (train_index, val_index) in enumerate(kf.split(train_df)):
        X_train, y_train = train_df.iloc[train_index]['text'], train_df.iloc[train_index]['label']
        X_val, y_val = train_df.iloc[val_index]['text'], train_df.iloc[val_index]['label']

        tfidf = TfidfVectorizer()
        X_train_tfidf = tfidf.fit_transform(X_train)
        X_val_tfidf = tfidf.transform(X_val)

        svm = SVC(class_weight={i: w for i, w in enumerate(class_weights)}, kernel='linear', random_state=42)
        svm.fit(X_train_tfidf, y_train
```
죄송합니다. 중단한 부분의 전체 코드는 다음과 같습니다:
```scss
        X_train_tfidf = tfidf.fit_transform(X_train)
        X_val_tfidf = tfidf.transform(X_val)

        svm = SVC(class_weight={i: w for i, w in enumerate(class_weights)}, kernel='linear', random_state=42)
        svm.fit(X_train_tfidf, y_train)

        y_val_pred = svm.predict(X_val_tfidf)
        f1 = f1_score(y_val, y_val_pred, average='weighted')
        f1_scores.append(f1)

        X_test_tfidf = tfidf.transform(test_df['text'])
        y_test_pred = svm.predict(X_test_tfidf)
        test_df[f'fold{fold+1}'] = y_test_pred

        pbar.update() # 열차의 진행률 표시줄 증가

        X_train_tfidf = None # 메모리 확보
        X_val_tfidf = None # 메모리 사용 가능

        # 테스트 반복
        X_test_tfidf = tfidf.transform(test_df['text'])
        y_test_pred = svm.predict(X_test_tfidf)
        test_df[f'fold{fold+1}'] = y_test_pred

        pbar.update() # 테스트 진행률 표시줄 증가
        pbar.set_postfix({'fold': fold+1, 'F1 score': f1})

    pbar.set_description(f'평균 F1 점수: {np.mean(f1_scores):.4f}')

test_df['label'] = test_df[[f'fold{fold+1}' for fold in range(5)]].mode(axis=1)[0]
test_df[[['id', 'label']].to_csv('./0316_test.csv', index=False)
print("앙상블 예측 완료.")
```
진행률 표시줄을 실시간으로 업데이트하려면 `tqdm` 함수의 `dynamic_ncols` 매개 변수를 사용할 수 있습니다. 이 매개 변수를 `True`로 설정하면 진행률 표시줄의 너비가 현재 터미널 창 크기에 맞게 동적으로 조정됩니다. 진행률 표시줄을 실시간으로 업데이트하도록 코드를 수정하는 방법은 다음과 같습니다:
```python
# 진행률 표시줄로 훈련 및 테스트 텍스트 데이터 전처리하기
tqdm(total=len(train_df), desc='전처리 열차 텍스트', dynamic_ncols=True)를 pbar로 사용합니다:
    train_df['text'] = train_df['text'].apply(lambda x: preprocess_text(x))
    pbar.update(len(train_df))

tqdm(total=len(test_df), desc='사전 처리 테스트 텍스트', dynamic_ncols=True)를 pbar로 사용합니다:
    test_df['text'] = test_df['text'].apply(lambda x: preprocess_text(x))
    pbar.update(len(test_df))

# 진행률 표시줄로 KFold 교차 검증 정의하기
kf = KFold(n_splits=5, shuffle=True, random_state=42)
총_이터레이션 = kf.get_n_splits(train_df) * 2 # 폴드당 2회 반복(훈련 및 테스트)
tqdm(total=total_iterations, desc='KFold 교차 검증', dynamic_ncols=True)을 pbar로 사용합니다:
    F1_SCORES = []
    for fold, (train_index, val_index) in enumerate(kf.split(train_df)):
        X_train, y_train = train_df.iloc[train_index]['text'], train_df.iloc[train_index]['label']
        X_val, y_val = train_df.iloc[val_index]['text'], train_df.iloc[val_index]['label']

        tfidf = Tfidf벡터라이저()
        X_train_tfidf = tfidf.fit_transform(X_train)
        X_val_tfidf = tfidf.transform(X_val)

        svm = SVC(class_weight={i: w for i, w in enumerate(class_weights)}, kernel='linear', random_state=42)
        svm.fit(X_train_tfidf, y_train
```