🌟 Model2Vec: создание компактных и быстрых моделей на основе Sentence Transformer.
Model2Vec - библиотека для создания компактных и быстрых моделей на основе предобученных Sentence Transformer моделей.
Model2Vec позволяет создавать эмбединг-модели слов и предложений, которые значительно меньше по размеру, но при этом сопоставимы по производительности с исходными Sentence Transformer моделями.
Отличительные особенности:
🟢быстрая дистилляция, процесс создания модели занимает несколько минут;
🟢быстрый инференс, в 500 раз быстрее на CPU относительно родительской модели;
🟢BYOM и BYOV, можно использовать на любой Sentence Transformer модели с любым словарем;
🟢мультиязычность, все что нужно - только мультиязычная модель в качестве источника;
🟢интеграция с Huggingface, загрузка\выгрузка моделей привычными
from_pretrained
и
push_to_hub
.
Пайплайн Model2Vec трехэтапный. На первом этапе словарь пропускается через модель Sentence Transformer для получения векторов эмбедингов для каждого слова.
Далее, размерность полученных эмбеддингов сокращается с помощью метода главных компонент (PCA). Наконец, применяется zipf-взвешивание для учета частотности слов в словаре.
Model2Vec работает в двух режимах:
🟠Output, в котором модель работает подобно Sentence Transformer, используя subword токенизацию;
🟠Vocab, в котором создается набор статических эмбедингов слов, аналогично GloVe или Word2Vec.
Оценку производительности Model2Vec делали на наборе данных MTEB на задачах PEARL (оценка качества представления фраз) и WordSim (оценка семантической близости слов).
Результаты показывают, что Model2Vec превосходит по производительности GloVe и модели, основанные на WordLlama по всем задачам оценки.
▶️Пример дистилляции:
from model2vec.distill import distill
# Choose a Sentence Transformer model
model_name = "BAAI/bge-base-en-v1.5"
# Distill the model
m2v_model = distill(model_name=model_name, pca_dims=256)
# Save the model
m2v_model.save_pretrained("m2v_model")
▶️Пример инференса:
from model2vec import StaticModel
# Load a model from the HuggingFace hub, or a local one.
model_name = "minishlab/M2V_base_output"
# You can optionally pass a token if you're loading a private model
model = StaticModel.from_pretrained(model_name, token=None)
# Make embeddings
embeddings = model.encode(["It's dangerous to go alone!", "It's a secret to everybody."])
📌Лицензирование : MIT License.
▪Набор моделей
▪GitHub
@pythonl
#AI #ML #LLM #Embedding #Model2Vec #python