import chromadb
from chromadb.utils import embedding_functions
import numpy as np
# Инициализация ChromaDB
client = chromadb.Client()
# Создание коллекции
collection = client.create_collection(name="text_collection")
# Добавление текстов и их векторных представлений
texts = ["текст 1", "текст 2", "текст 3", "текст 4", "текст 5"]
embeddings = embedding_functions.DefaultEmbeddingFunction()(texts)
for idx, (text, embedding) in enumerate(zip(texts, embeddings)):
collection.add(ids=[str(idx)], embeddings=[embedding], documents=[text])
# Получение всех векторов из коллекции
all_embeddings = collection.get(include=["embeddings"])["embeddings"]
# Вычисление среднего расстояния для каждого вектора
def cosine_distance(vec1, vec2):
return 1 - np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))
average_distances = []
for i, vec1 in enumerate(all_embeddings):
distances = []
for j, vec2 in enumerate(all_embeddings):
if i != j:
distances.append(cosine_distance(vec1, vec2))
average_distances.append(np.mean(distances))
# Сортировка по убыванию среднего расстояния
sorted_indices = np.argsort(average_distances)[::-1]
# Вывод топ n самых не похожих результатов
n = 5
top_n_indices = sorted_indices[:n]
top_n_texts = [texts[i] for i in top_n_indices]
print("Топ", n, "самых не похожих текстов:")
for text in top_n_texts:
print(text)