1.5.1 Векторизация текстов с использованием Word2Vec
Пример: Генерация векторов для отдельных слов
Если ваша база знаний включает много специализированных терминов, используйте Word2Vec для создания векторов слов, которые отражают их контекстное значение.
```python
from gensim.models import Word2Vec
# Пример текстов
sentences = [
["когнитивное", "программирование", "оптимизация"],
["командное", "взаимодействие", "модель"],
]
# Обучение Word2Vec модели
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)
# Получение вектора для слова "когнитивное"
vector = model.wv["когнитивное"]
print(vector)
```
Этот метод подходит для задач, где требуется анализ отдельных слов или построение простой семантической карты.
1.5.2 Sentence Embeddings для предложений и абзацев
Пример: Создание векторов для поисковой системы
Если пользователь задает запрос в свободной форме, используйте Sentence Transformers для создания векторов предложений.
```python
from sentence_transformers import SentenceTransformer
import numpy as np
# Загрузка модели
model = SentenceTransformer("all-MiniLM-L6-v2")
# Пример текстов
texts = [
"Когнитивное программирование помогает улучшить корпоративное мышление.",
"Модели взаимодействия команд основаны на когнитивных процессах."
]
# Создание векторов
vectors = model.encode(texts)
print("Размер векторов:", np.array(vectors).shape)
```
Эти векторы можно использовать для сравнения текстов по косинусному сходству.
1.5.3 Использование BERT для учета контекста
Пример: Векторизация с учетом контекста слов в предложении
BERT позволяет учитывать контекст слова, что особенно важно для терминов с несколькими значениями.
```python
from transformers import BertTokenizer, BertModel
import torch
# Загрузка модели и токенизатора
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertModel.from_pretrained("bert-base-uncased")
# Пример текста
text = "Cognitive programming improves team performance."
tokens = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
# Получение эмбеддингов
with torch.no_grad():
embeddings = model(**tokens).last_hidden_state
sentence_embedding = torch.mean(embeddings, dim=1)
print(sentence_embedding.shape)
```
Этот подход особенно полезен для сложных текстов, где значение слова зависит от контекста.
1.5.4 Построение индекса для быстрого поиска
Пример: Интеграция с Faiss для поиска релевантных данных
Создайте индекс векторов и настройте алгоритм поиска ближайших соседей.
```python
import faiss
# Создание индекса
dimension = vectors.shape[1] # Размерность векторов
index = faiss.IndexFlatL2(dimension) # L2-норма
index.add(vectors) # Добавление векторов в индекс
# Пример запроса
query_vector = model.encode(["Какие преимущества дает когнитивное программирование?"])
distances, indices = index.search(query_vector, k=2) # Поиск 2 ближайших соседей
print("Результаты поиска:", indices)
```
Этот метод значительно ускоряет обработку запросов в базе знаний.
1.5.5 Векторизация с использованием Pinecone для облачных решений
Пример: Развертывание векторного индекса в Pinecone
Если объем данных велик и требуется облачное решение, используйте Pinecone для управления индексами.
```python
import pinecone
# Инициализация Pinecone
pinecone.init(api_key="your-api-key", environment="us-west1-gcp")
# Создание индекса
index = pinecone.Index("cognitive-programming")
# Добавление векторов
for i, vector in enumerate(vectors):
index.upsert([(str(i), vector)])
# Поиск
query_vector = model.encode(["Как оптимизировать командное мышление?"])
results = index.query(query_vector, top_k=2, include_metadata=True)
print(results)
```
Этот инструмент подходит для масштабируемых приложений, где требуется быстрая обработка запросов.
1.5.6 Применение векторных операций
Пример: Группировка данных по смыслу
Используйте кластеризацию для группировки схожих векторов.
```python
from sklearn.cluster import KMeans
# Кластеризация
num_clusters = 3
kmeans = KMeans(n_clusters=num_clusters, random_state=42)
kmeans.fit(vectors)
# Назначение кластеров текстам
labels = kmeans.labels_
for text, label in zip(texts, labels):
print(f"Текст: {text} → Кластер: {label}")
```
Эта техника помогает структурировать базу знаний для более точного поиска.
Эти примеры демонстрируют различные подходы к векторизации данных, их оптимизации и интеграции, обеспечивая основу для эффективной работы когнитивного тренажера.
Заключение
На этапе подготовки данных ключевым является:
1. Сбор только релевантной информации.
2. Очистка и структурирование для дальнейшего поиска.
3. Преобразование текстов в векторные представления, оптимизированные для быстрого поиска в системе RAG.