Семантическое сходство и эмбеддинги предложений
Sentence-BERT, косинусное сходство для семантического поиска, кластеризация эмбеддингов
«Семантическое сходство и эмбеддинги предложений» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.
Предложения, а не только слова
Эмбеддинги слов представляют слова, но часто нам нужно сравнивать целые предложения или документы. Усреднение векторов слов теряет смысловые нюансы; нам нужен один вектор, который передаёт полный смысл.
Что такое эмбеддинги предложений
Эмбеддинги предложений сопоставляют целое предложение с одним плотным вектором, поэтому предложения с похожим смыслом имеют близкие векторы, что позволяет выполнять семантический поиск и кластеризацию.
Библиотека sentence-transformers
Библиотека sentence-transformers упрощает эту задачу. Она предоставляет дообученные трансформерные модели, которые напрямую создают высококачественные векторы предложений.
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("all-MiniLM-L6-v2")Почему all-MiniLM-L6-v2
all-MiniLM-L6-v2 — популярный вариант по умолчанию: небольшая, быстрая и точная модель, создающая векторы размерностью 384. Для большинства приложений она хорошо сочетает скорость и качество.
Кодирование предложений
model.encode преобразует список предложений в матрицу эмбеддингов: каждому предложению соответствует одна строка.
sentences = [
"The cat sits on the mat.",
"A feline rests on the rug.",
"I am learning machine learning.",
]
embeddings = model.encode(sentences)
print(embeddings.shape) # (3, 384)Измерение сходства
Косинусное сходство измеряет угол между двумя векторами, не учитывая их длину. Значения, близкие к 1, означают очень похожий смысл, а значения, близкие к 0, — отсутствие связи.
from sentence_transformers import util
sim = util.cos_sim(embeddings[0], embeddings[1])
print(sim.item()) # high, both about a cat restingИспользование cosine_similarity из sklearn
Можно также напрямую применить scikit-learn к матрице эмбеддингов и получить полную матрицу попарного сходства.
from sklearn.metrics.pairwise import cosine_similarity
matrix = cosine_similarity(embeddings)
print(matrix) # (3, 3) pairwise similaritiesИдея семантического поиска
Семантический поиск находит документы по смыслу, а не по ключевым словам. Закодируйте запрос и все документы, затем отсортируйте документы по косинусному сходству с вектором запроса.
Пример семантического поиска
Закодируйте корпус один раз, а затем для каждого запроса вычисляйте сходство и возвращайте наиболее подходящие результаты.
from sentence_transformers import util
corpus = ["How to reset my password", "Refund policy details", "Track my order"]
corpus_emb = model.encode(corpus)
query_emb = model.encode("I forgot my login")
hits = util.semantic_search(query_emb, corpus_emb, top_k=2)
print(hits)Применение в реальных задачах
Эмбеддинги предложений используются для сопоставления FAQ, обнаружения дубликатов, кластеризации, рекомендаций и этапа извлечения данных в системах RAG, которые передают релевантный контекст большим языковым моделям.
Советы для хороших результатов
Выбирайте модель, обученную для вашей задачи (семантического поиска или поиска перефразировок). Нормализуйте эмбеддинги, если этого требует используемая метрика сходства, а для больших корпусов применяйте векторную базу данных для быстрого поиска ближайших соседей.
Быстрая проверка
Проверьте свои знания об эмбеддингах предложений.
Повторение
Повторение: Эмбеддинги предложений кодируют целые предложения в векторы. Используйте SentenceTransformer("all-MiniLM-L6-v2") и model.encode(sentences), а затем сравнивайте результаты с помощью косинусного сходства. Это лежит в основе семантического поиска: закодируйте запрос и корпус, затем отсортируйте результаты по сходству. Такой подход важен для сопоставления FAQ, кластеризации и извлечения данных в RAG.
Изучай Python с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 53
- Уроки
- 225
Часто задаваемые вопросы
Урок «Семантическое сходство и эмбеддинги предложений» бесплатный?
Да — полный текст урока «Семантическое сходство и эмбеддинги предложений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «Семантическое сходство и эмбеддинги предложений»?
Sentence-BERT, косинусное сходство для семантического поиска, кластеризация эмбеддингов Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Семантическое сходство и эмбеддинги предложений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Word2Vec: Skip-gram и CBOW
- Эмбеддинги GloVe и FastText
- Классификация текста с BERT
- Семантическое сходство и эмбеддинги предложений