Погружение в embeddings и семантический поиск
Языковые модели позволяют компьютерам выходить за рамки стандартного поиска по ключевым словам и находить нужные фрагменты по смыслу текста. Это называется семантическим поиском, и сегодня мы реализуем его на практике.
Применение семантического поиска выходит за рамки построения веб-поиска. С ним вы можете создать собственную поисковую систему по внуренним документам компании или помочь пользователям лучше ориентироваться в вашем FAQ. Еще один пример практического внедрения семантического по иска - рекомендации релевантных статей в блоге после прочтения одной из них.
Вот как это выглядит в формате схемы:
Итак, в рамках текущего гайда мы пройдем следующие шаги:
- Получим csv файл 1000 вопросов на русском
- Превратим текст в числовые embeddings
- Используем поиск по индексу и ближайшим соседям
- Визуализируем файл вопросов на основе embeddings
Весь представленный ниже код можно получить в виде .ipynb ноутбука здесь.
# Установите Compressa для создания embeddings, Umap – для уменьшения их размерности до 2 измерений;
# Altair – для визуализации, Annoy – для приблизительного поиска ближайших соседей;
#!pip install langchain
#!pip install langchain-compressa
#!pip install umap-learn
#!pip install altair
#!pip install annoy
# Возможно, у вас также не установлены какие-то из популярных пакетов
#!pip install pandas
#!pip install numpy
#!pip install tqdm
#!pip install scikit-learn
#!pip install gdown
1. Настраиваем окружение
# Импортируем библиотеки
from langchain_compressa import CompressaEmbeddings
import os
import gdown
import numpy as np
import re
import pandas as pd
from tqdm import tqdm
import altair as alt
from sklearn.metrics.pairwise import cosine_similarity
from annoy import AnnoyIndex
import umap.umap_ as umap
import warnings
warnings.filterwarnings('ignore')
pd.set_option('display.max_colwidth', None)
Для ячейки ниже вам понадобится API ключ Compressa. Вы можете получить его после регистрации.
os.environ["COMPRESSA_API_KEY"] = "ваш_ключ"
2. Загрузите датасет с вопросами
Мы специально подготовили 1000 вопросов на русском языке для работы с ними в рамках этого гайда.
#Скачиваем датасет c google диска Сompressa
file_id = '1wRC8bKBY5W8lrXU9cTKCgAdoL0g72ANI'
url = f'https://drive.google.com/uc?id={file_id}'
gdown.download(url, '1000_ru_questions.csv', quiet=False)
# Импортируем в pandas dataframe
df = pd.read_csv(file_path)
# Проверяем, что все загрузилось корректно
df.head(10)