Использование поиска по сходству — как не потерять контент митапа в интернете
Случалось ли вам испытывать разочарование, вспоминая блестящую идею, которой поделились на Meetup, только чтобы обнаружить, что она затерялась в лабиринте прошедших событий? Как организатор и участник, я ощущал досаду от того, что ценный контент проваливается сквозь щели, как только мероприятие завершается. Слишком часто инсайты, которыми поделились в одном уголке мира, остаются изолированными и недоступными для тех, кто мог бы извлечь из них пользу в другом месте.
Чтобы решить эту проблему, я обратился к методам поиска по сходству, чтобы просеять обширный массив неструктурированных данных. Неструктурированные данные составляют 80% мировых данных и могут быть преобразованы в векторы с помощью различных моделей машинного обучения. Моим выбранным инструментом для этой задачи стал Milvus, популярная векторная база данных с открытым исходным кодом, которая отлично справляется с управлением и поиском в сложных ландшафтах данных. Milvus позволяет обнаруживать скрытые связи и сходства.
Для вычисления Embeddings я использую SentenceTransformers. Это Python-фреймворк для передовых эмбеддингов предложений, текста и изображений. Вы можете использовать его для вычисления эмбеддингов предложений/текста более чем для 100 языков. Затем эти эмбеддинги можно сравнивать, например, с помощью косинусного сходства, чтобы находить предложения с похожим смыслом.
Загрузка данных
У Meetup.com нет бесплатного публичного API. Вам понадобится Pro-аккаунт, чтобы получить к нему доступ, и вы можете проверить это самостоятельно здесь.
Поскольку API не является публичным, я сгенерировал некоторые данные из Meetup-группы, которой управляю. Вы можете найти простые данные на GitHub и загрузить их с помощью Pandas.
import pandas as pd
df = pd.read_csv(‘data/data_meetup.csv’)
Технологический стек: Milvus и SentenceTransformers
Мы будем использовать Milvus как векторную базу данных, SentenceTransformers для генерации текстовых эмбеддингов и OpenAI GPT 3.5-turbo для краткого изложения сути Meetup. В описании мероприятия обычно много шума, поэтому их суммаризация может с этим помочь.
Milvus Lite
Milvus предлагает различные варианты развертывания для разных потребностей. Для легкой и простой настройки идеально подходит Milvus Lite. Его можно легко установить через PyPi pip install Milvus и запускать непосредственно внутри Jupyter notebook, что обеспечивает удобный способ добавить возможности векторной базы данных в наш проект.
Milvus с Docker/ Docker Compose
Для более серьезных потребностей Milvus можно развернуть с помощью Docker Compose, поскольку это распределенная система.
Файл docker compose доступен на странице Install Milvus Standalone page и в Milvus GitHub. Когда вы запускаете Milvus с Docker Compose, вы увидите три контейнера и по умолчанию будете подключаться к Milvus через порт 19530.
SentenceTransformers
SentenceTransfomers используется для создания наших Embeddings, он доступен на PyPi с помощью pip install sentence-transformers. Мы будем использовать модель all-MiniLM-L6-v2, поскольку она в 5 раз меньше, чем в 5 раз быстрее, и при этом предлагает хорошее качество по сравнению с лучшей моделью, которую они предлагают.
Выполнение запросов поиска по сходству
Запуск Milvus
Чтобы выполнить поиск по сходству, нам нужна векторная база данных. Чтобы запустить ее, просто импортируйте default_server и вызовите функцию start().
from milvus import default_server
default_server.start()
Загрузка данных в Milvus
Прежде чем добавлять данные в Milvus, нам нужно создать Collection и подготовить Schema. Сначала подготовьте необходимые параметры, включая схему полей, схему коллекции и имя коллекции.
from pymilvus import FieldSchema, CollectionSchema, DataType, Collection
# We insert the object in the format of title, date, content, content embedding
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="title", dtype=DataType.VARCHAR, max_length=500),
FieldSchema(name="date", dtype=DataType.VARCHAR, max_length=100),
FieldSchema(name="content", dtype=DataType.VARCHAR, max_length=10000),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=384)
]
schema = CollectionSchema(fields=fields)
collection = Collection(name=”mlops_meetups”, schema=schema)
Теперь, когда Collection и схема созданы, мы можем создать индекс для поля embedding и загрузить данные в память с помощью функции load().
collection.create_index(field_name="embedding")
collection.load()
Создание Embeddings с помощью SentenceTransformer
Как уже говорилось ранее, мы будем использовать SentenceTransformer и модель 'all-MiniLM-L6-v2' для создания наших embeddings. Давайте импортируем то, что для этого необходимо.
from sentence_transformers import SentenceTransformer
transformer = SentenceTransformer('all-MiniLM-L6-v2')
content_detail = df[‘content’]
content_detail = content_detail.tolist()
embeddings = [transformer.encode(c) for c in content_detail]
# Create an embedding column in our Dataframe
df['embedding'] = embeddings
# Insert the data in the collection
collection.insert(data=df)
Суммирование содержания Meetups
Описания Meetups, хотя и информативны, также могут быть довольно зашумленными: обычно они содержат информацию о расписании, о том, кто спонсирует мероприятие, различные правила площадки/мероприятия и т. д. Хотя всё это очень важно, когда вы посещаете Meetup, для нашего сценария использования это не имеет значения. Я использую OpenAI GPT-3.5-turbo для суммирования содержания.
def summarise_meetup_content(content: str) -> str:
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{
"role": "system",
"content": "Summarize content you are provided with."
},
{
"role": "user",
"content": f"{content}"
}
],
temperature=0,
max_tokens=1024,
top_p=1,
frequency_penalty=0,
presence_penalty=0
)
summary = response.choices[0].message.content
return summary
Возврат похожего содержимого
Чтобы наш Similarity Search работал, мы должны убедиться, что наша Vector Database может понимать наши поисковые запросы; давайте создадим embeddings для наших поисковых запросов.
search_terms = "The speaker speaks about Open Source and ML Platform"
search_data = [transformer.encode(search_terms)] # Must be a list.
Поиск похожего содержимого в Milvus Collection
res = collection.search(
data=search_data, # Embedded search value
anns_field="embedding", # Search across embeddings
param={"metric_type": "IP"},
limit = 3, # Limit to top_k results per search
output_fields=["title", "content"] # Include title field in result
)
for hits_i, hits in enumerate(res):
print("Search Terms:", search_terms)
print("Results:")
for hit in hits:
content_test = hit.entity.get("content")
print(hit.entity.get("title"), "----", hit.distance)
print(f'{summarise_meetup_content(hit.entity.get("content"))} \n')
Результаты
Milvus вернул три meetups об Open-Source и ML Platform, организованные MLOps.community и Neptune.ai.
Ниже приведены подробности:
Search terms: The speaker speaks about Open Source and ML Platform
Results:
Первый митап MLOps.community в Берлине ---- 0.5537542700767517
На митапе MLOps.community в Берлине 30 июня состоится основной доклад Stephen Batifol из Wolt о масштабировании open-source машинного обучения. Мероприятие также будет включать lightning talks, нетворкинг, еду и напитки. В программе: открытие дверей в 18:00, доклад Stephen в 19:00, lightning talks в 19:50 и общение в 20:15. Участники могут записаться на lightning talks на Meetup.com. Мероприятие проводится в сотрудничестве с <a href="https://neptune.ai/>neptune.ai</a>
MLOps.community Berlin 04: Предварительное мероприятие Women+ In Data and AI Festival ---- 0.4623506963253021
MLOps.community Berlin проводит специальное мероприятие 29 и 30 июня в Thoughtworks. Мероприятие является разминкой перед фестивалем Women+ In Data and AI. На митапе выступят Fiona Coath с обсуждением surveillance capitalism и Magdalena Stenius с рассказом об углеродном следе машинного обучения. Программа включает доклады, lightning talks и возможности для нетворкинга. Участникам рекомендуется ознакомиться с Code of Conduct мероприятия и соблюдать его для создания инклюзивной и уважительной среды.
MLOps.community Berlin Meetup 02 ---- 0.41342616081237793
На митапе MLOps.community в Берлине 6 октября состоится основной доклад Lina Weichbrodt о ML Monitoring, lightning talks и возможности для нетворкинга. Мероприятие пройдет в офисе Wolt с ограничением вместимости в 150 человек. Lina имеет обширный опыт в разработке масштабируемых моделей машинного обучения и работала в таких компаниях, как Zalando и DKB. Программа включает еду, активность для знакомства, основной доклад, lightning talks и общение. Участники также могут записаться, чтобы выступить с lightning talks на различные темы, связанные с MLOps. Мероприятие проводится в сотрудничестве с neptune.ai.
Не стесняйтесь ознакомиться с кодом на Github.
Читать далее

Zilliz Cloud Audit Logs Goes GA: Security, Compliance, and Transparency at Scale
Zilliz Cloud Audit Logs are now GA, giving enterprises real-time visibility, compliance-ready trails, and stronger security across AWS, GCP, and Azure.

What Exactly Are AI Agents? Why OpenAI and LangChain Are Fighting Over Their Definition?
AI agents are software programs powered by AI that can perceive their environment, make decisions, and take actions to achieve a goal—often autonomously.

Cosmos World Foundation Model Platform for Physical AI
NVIDIA's Cosmos platform enables safe, digital twin training of GenAI models for physical applications, overcoming data scarcity and safety challenges.



