devqp
Специалист
В современной обработке естественного языка (NLP) для сравнения текстовых данных широко применяются нейросетевые модели. Рассмотрим практическую реализацию семантического поиска с использованием русскоязычной модели sberbank-ai/sbert_large_nlu_ru.
Принцип работы:
1. Модель преобразует текст в эмбеддинги — числовые представления в многомерном пространстве (матрица 128 векторов по 768 значений каждый).
2. Семантическое сходство определяется через косинус угла между векторами эмбеддингов. Значение близкое к 1 указывает на высокую смысловую близость предложений.
Реализация на Python:
Установите зависимости и загрузите модель:
Функция для ранжирования предложений по сходству с запросом:
Пример использования:
Функция возвращает список предложений, отсортированных по степени семантического сходства с исходным запросом. Данный подход эффективен для задач кластеризации текста, поиска дубликатов и анализа релевантности контента.
Принцип работы:
1. Модель преобразует текст в эмбеддинги — числовые представления в многомерном пространстве (матрица 128 векторов по 768 значений каждый).
2. Семантическое сходство определяется через косинус угла между векторами эмбеддингов. Значение близкое к 1 указывает на высокую смысловую близость предложений.
Реализация на Python:
Установите зависимости и загрузите модель:
Код:
pip install sentence_transformers
from sentence_transformers import SentenceTransformer, util
ce_rerank = SentenceTransformer('sberbank-ai/sbert_large_nlu_ru')
Функция для ранжирования предложений по сходству с запросом:
Код:
def rerank(question, passages, include_rank: int = 10):
d = {}
return_list = []
# Генерация эмбеддингов
query_embedding = ce_rerank.encode(question)
passage_embedding = ce_rerank.encode(passages)
# Расчет косинусной схожести
a_list = util.cos_sim(query_embedding, passage_embedding).tolist()[0]
# Сопоставление предложений с оценкой сходства
for n in range(len(passages)):
d[passages[n]] = a_list[n]
# Сортировка по убыванию
sorted_tuple = sorted(d.items(), reverse=True, key=lambda x: x[1])
# Формирование топ-N результатов
counter = 0
for n in sorted_tuple:
if counter < include_rank:
counter += 1
return_list.append(n[0])
return return_list
Пример использования:
Код:
question = "почему птицы не летают?"
passages = ["Нелетающие птицы — птицы, утратившие способность к полёту...",
"Способность к полёту теряли многие группы птиц..."]
result = rerank(question, passages)
Функция возвращает список предложений, отсортированных по степени семантического сходства с исходным запросом. Данный подход эффективен для задач кластеризации текста, поиска дубликатов и анализа релевантности контента.