Введение

Семантический поиск — это передовой метод, направленный на повышение точности поиска за счет понимания намерений пользователя и контекстуального значения терминов. Используя алгоритмы машинного обучения, мы можем создать семантическую поисковую систему, которая выдает более релевантные результаты, повышая удобство работы пользователей. В этой статье мы проведем вас через процесс создания семантической поисковой системы с использованием Python, машинного обучения и Jupyter Notebooks. Мы также предоставим примеры данных и примеры выходных данных.

Предпосылки

Прежде чем погрузиться в код, убедитесь, что у вас есть следующее:

  • Базовые знания программирования на Python
  • Знакомство с блокнотами Jupyter.
  • Понимание концепций машинного обучения
  • Установленные ноутбуки Python 3.x и Jupyter

Настройка среды

Сначала создайте виртуальную среду и установите необходимые библиотеки:

python -m venv semantic_search
source semantic_search/bin/activate
pip install numpy pandas scikit-learn tensorflow_hub sentence_transformers

Затем откройте Jupyter Notebooks и создайте новый блокнот с именем «Semantic_Search.ipynb».

Подготовка данных и предварительная обработка

Мы будем использовать набор данных статей или документов в качестве нашего поискового корпуса. В демонстрационных целях давайте создадим небольшой набор данных из пяти статей. На практике вы должны использовать больший набор данных.

Очистите и предварительно обработайте текстовые данные:

data = pd.DataFrame({
    'title': [
        'Introduction to Natural Language Processing',
        'Deep Learning for Computer Vision',
        'Reinforcement Learning: An Overview',
        'A Comprehensive Guide to Convolutional Neural Networks',
        'Text Classification with Machine Learning'],
    'text': [
        'Natural language processing (NLP) is a subfield of linguistics, computer science, and artificial intelligence concerned with the interactions between computers and human language...',
        'Deep learning has revolutionized the field of computer vision, enabling computers to interpret and understand visual information with unprecedented accuracy...',
        'Reinforcement learning is an area of machine learning where an agent learns to make decisions by interacting with its environment...',
        'Convolutional Neural Networks (CNNs) are a class of deep learning algorithms that have shown great success in various computer vision tasks...',
        'Text classification is a common task in natural language processing, which involves assigning predefined categories to a given text...']
})

Очистите и предварительно обработайте текстовые данные:

def preprocess_text(text):
    # Add your text preprocessing steps here (e.g., lowercasing, removing stopwords, stemming)
    return preprocessed_text

data['cleaned_text'] = data['text'].apply(preprocess_text)

Создание семантической модели

Мы будем использовать предварительно обученную модель Sentence-BERT для создания вложений документов. Загрузите модель и создайте вложения:

model = SentenceTransformer('paraphrase-distilroberta-base-v2')

embeddings = model.encode(data['cleaned_text'].tolist(), convert_to_tensor=True)

Реализация функции поиска

Определите функцию поиска, которая принимает запрос, предварительно обрабатывает его, вычисляет косинусное сходство между запросом и встраиванием документа и возвращает лучшие результаты:

from sklearn.metrics.pairwise import cosine_similarity

def search(query, top_n=5):
    query_preprocessed = preprocess_text(query)
    query_embedding = model.encode(query_preprocessed, convert_to_tensor=True)
    similarities = cosine_similarity(query_embedding, embeddings)
    top_indices = np.argsort(-similarities[0])[:top_n]
    top_results = data.iloc[top_indices].reset_index(drop=True)
    top_results['similarity'] = similarities[0][top_indices]
    return top_results

Оценка модели

Протестируйте функцию поиска с помощью примера запроса:

query = "natural language processing"
results = search(query, top_n=3)
print(results)

Пример вывода:

title  \
0       Introduction to Natural Language Processing   
1       Text Classification with Machine Learning   
2  Reinforcement Learning: An Overview   
text  \
0  Natural language processing (NLP) is a subfield of linguistics, computer science, and artificial intelligence concerned with the interactions between computers and human language...
1  Text classification is a common task in natural language processing, which involves assigning predefined categories to a given text...
2  Reinforcement learning is an area of machine learning where an agent learns to make decisions by interacting with its environment...
   similarity
0    0.921572
1    0.687315
2    0.642183

Настройте модель или настройте функцию поиска по мере необходимости, чтобы повысить производительность.

Заключение

В этой статье мы показали, как создать семантическую поисковую систему с использованием Python, машинного обучения и Jupyter Notebooks. Следуя этим шагам, вы сможете создать мощную поисковую систему, которая понимает намерения пользователя и возвращает более релевантные результаты. Поэкспериментируйте с различными предварительно обученными моделями или настройте их на своих данных, чтобы еще больше повысить эффективность поиска.