Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactored CrossEncoder into our own wrapper class to support head training #88

Open
wants to merge 8 commits into
base: dev
Choose a base branch
from

Conversation

Dmitryv-2024
Copy link
Collaborator

Сейчас в качестве классификатора используем LogisticRegressionCV из sklearn (как раньше). Можно сделать несколько улучшений:

  • LogisticRegressionCV поддерживает class_weight="balanced". Может стоит убрать balance_factor из construct_samples и положится на реализацию sklearn для сильно разбалансированных меток?
  • Можно реализовать тренировку своего классификатора. Например: сделать два полносвязных слоя и использовать label smoothing + kl_div loss function (идея из кода к статье DNCC, но у них в классификаторе был один слой, поэтому предлагаю попробовать два слоя, т.к. не уверен что имеет смысл что-то делать с одним слоем, вряд-ли будет лучше логистической регрессии)

В классе Dataset добавил ключ - не разбивать train (по умолчанию делим на два как и раньше), т.к. для тестов нужно чуть больше данных.

@Dmitryv-2024 Dmitryv-2024 requested a review from voorhs December 29, 2024 08:29
@Samoed
Copy link
Collaborator

Samoed commented Dec 29, 2024

А почему у нас тут используется предсказания из CrossEncoder, а не промто эмбеды? Кажется что делать классификацию на предсказаниях кросс энкодера так себе

@Dmitryv-2024
Copy link
Collaborator Author

А почему у нас тут используется предсказания из CrossEncoder, а не промто эмбеды? Кажется что делать классификацию на предсказаниях кросс энкодера так себе

Реализованы два режима:

  • простая обертка над CrossEncoder - используем предсказания кросс энкодера
  • С тренировкой классификатора - используем эмбединги из кроссэнкодера (hook установлен на слой классификатора в метод _classifier_hook) и тренируем логистическую регрессию.

@Samoed
Copy link
Collaborator

Samoed commented Dec 29, 2024

Я говорю про то чтобы не использовать _classifier_hook можно просто сделать SentenceTranformer, а не CrossEncoder

@Dmitryv-2024
Copy link
Collaborator Author

Я говорю про то чтобы не использовать _classifier_hook можно просто сделать SentenceTranformer, а не CrossEncoder

Нам нужно проверять сходство двух предложений. CrossEncoder как раз на это и натренирован, т.е. ожидаем, что его эмбединги хороши для нашей задачи. Есть гипотеза, что спомощью тренировки только головы, мы можем получить дешевый finetuning.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants