Рубрики
Без рубрики

Учебная серия на txtai

Эта серия учебных пособий будет охватывать основные варианты использования для TXTAI, семантического поиска с AI, … Tagged MachineLearning, NLP, Python, Showdev.

Учебная серия на TXTAI (21 серия деталей)

Эта учебная серия будет охватывать основные варианты использования для txtai , Семантический поисковый платформ с AI с AI. Каждая часть в серии имеет соответствующую записную книжку, которая может полностью воспроизводить каждую статью.

Представление txtai

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

Традиционные системы поиска используют ключевые слова для поиска данных. Семантические поисковые приложения имеют понимание естественного языка и определяют результаты, которые имеют одинаковое значение, не обязательно одинаковые ключевые слова.

Подкрепленные современными моделями машинного обучения, данные преобразуются в векторные представления для поиска (также известные как Entgdings). Инновации происходят в быстром темпе, модели могут понимать концепции в документах, аудио, изображениях и многое другое.

Ниже приводится сводка ключевых функций:

  • 🔎 крупномасштабный поиск сходства с несколькими индексными бэкэнами ( faiss , Раздражать В Hnswlib )
  • 📄 Создайте встраивания для фрагментов текста, документов, аудио, изображений и видео. Поддерживает трансформаторы и векторы слов.
  • 💡 Машино-обучающие трубопроводы для запуска экстрактивного вопроса-ответа, метки с нулевым выстрелом, транскрипции, перевода, суммирования и извлечения текста
  • ↪ Рабочие процессы, которые объединяют трубопроводы вместе, чтобы объединить бизнес -логику. Процессы TXTAI могут быть микросервисами или полноценными рабочими процессами индексации.
  • 🔗 Привязки API для JavaScript , Java , Ржавчина и Идти
  • ☁ Облачная архитектура, которая масштабируется с помощью систем оркестровки контейнеров (например, Kubernetes)

Приложения варьируются от поиска сходства до сложных извлечения данных, управляемых NLP, до генерации структурированных баз данных. Следующие приложения оснащены txtai.

  • Paperai – Двигатель литературы по AI Discovery and Review Engine для медицинских/научных работ
  • Tldrstory – Понимание ВАИ ВЛЕСТОЧНОГО НАВЛЕЕ УСТАНОВКА И ТЕКСТА ИСТОРИИ
  • Neuspo -Факты, спортивное мероприятие в реальном времени и новостной сайт
  • CodeQuestion – Задайте вопросы кодирования непосредственно из терминала

txtai построен с Python 3.6+, Обнимание трансформаторов лица , Трансформеры предложения и FASTAPI

В этой статье дается обзор txtai и того, как выполнять поиск сходства.

Установить зависимости

Установить txtai и все зависимости.

pip install txtai

Создайте экземпляр Entagedings

Экземпляр Enterdings является основной точкой входа для txtai. Экземпляр Entgeddings определяет метод, используемый для токенизации и преобразования текстового раздела в вектор Entgeddings.

from txtai.embeddings import Embeddings

# Create embeddings model, backed by sentence-transformers & transformers
embeddings = Embeddings({"path": "sentence-transformers/nli-mpnet-base-v2"})

Запросы сходства

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

data = ["US tops 5 million confirmed virus cases",
        "Canada's last fully intact ice shelf has suddenly collapsed, forming a Manhattan-sized iceberg",
        "Beijing mobilises invasion craft along coast as Taiwan tensions escalate",
        "The National Park Service warns against sacrificing slower friends in a bear attack",
        "Maine man wins $1M from $25 lottery ticket",
        "Make huge profits without work, earn up to $100,000 a day"]

print("%-20s %s" % ("Query", "Best Match"))
print("-" * 50)

for query in ("feel good story", "climate change", "public health story", "war", "wildlife", "asia", "lucky", "dishonest junk"):
    # Get index of best section that best matches query
    uid = embeddings.similarity(query, data)[0][0]

    print("%-20s %s" % (query, data[uid]))
Query                Best Match
--------------------------------------------------
feel good story      Maine man wins $1M from $25 lottery ticket
climate change       Canada's last fully intact ice shelf has suddenly collapsed, forming a Manhattan-sized iceberg
health               US tops 5 million confirmed virus cases
war                  Beijing mobilises invasion craft along coast as Taiwan tensions escalate
wildlife             The National Park Service warns against sacrificing slower friends in a bear attack
asia                 Beijing mobilises invasion craft along coast as Taiwan tensions escalate
lucky                Maine man wins $1M from $25 lottery ticket
dishonest junk       Make huge profits without work, earn up to $100,000 a day

Приведенный выше пример показан почти для всех запросов, фактический текст не хранится в списке текстовых разделов. Это истинная сила моделей трансформаторов над поиском на основе токков. То, что вы получаете из коробки, это 🔥🔥🔥!

Создание индекса вторжений

Для небольших списков текстов приведенный выше метод работает. Но для более крупных репозиториев документов не имеет смысла токенизировать и конвертировать в встраивание по каждому запросу. TXTAI поддерживает создание предварительно вычисленных индексов, которые значительно улучшают производительность.

Опираясь на предыдущий пример, в следующем примере запускается метод индекса для создания и хранения текстовых встроений. В этом случае только запрос преобразуется в вектор вторжений каждый поиск.

# Create an index for the list of text
embeddings.index([(uid, text, None) for uid, text in enumerate(data)])

print("%-20s %s" % ("Query", "Best Match"))
print("-" * 50)

# Run an embeddings search for each query
for query in ("feel good story", "climate change", "public health story", "war", "wildlife", "asia", "lucky", "dishonest junk"):
    # Extract uid of first result
    # search result format: (uid, score)
    uid = embeddings.search(query, 1)[0][0]

    # Print text
    print("%-20s %s" % (query, data[uid]))
Query                Best Match
--------------------------------------------------
feel good story      Maine man wins $1M from $25 lottery ticket
climate change       Canada's last fully intact ice shelf has suddenly collapsed, forming a Manhattan-sized iceberg
health               US tops 5 million confirmed virus cases
war                  Beijing mobilises invasion craft along coast as Taiwan tensions escalate
wildlife             The National Park Service warns against sacrificing slower friends in a bear attack
asia                 Beijing mobilises invasion craft along coast as Taiwan tensions escalate
lucky                Maine man wins $1M from $25 lottery ticket
dishonest junk       Make huge profits without work, earn up to $100,000 a day

Встраивание загрузки/сохранение

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

embeddings.save("index")

embeddings = Embeddings()
embeddings.load("index")

uid = embeddings.search("climate change", 1)[0][0]
print(data[uid])
Canada's last fully intact ice shelf has suddenly collapsed, forming a Manhattan-sized iceberg
ls index
config  embeddings

Обновление/удаление встроенных

Обновления и удаления поддерживаются для индексов встраивания. Операция Upsert будет вставлять новые данные и обновлять существующие данные

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

# Run initial query
uid = embeddings.search("feel good story", 1)[0][0]
print("Initial: ", data[uid])

# Update data
data[0] = "See it: baby panda born"
embeddings.upsert([(0, data[0], None)])

uid = embeddings.search("feel good story", 1)[0][0]
print("After update: ", data[uid])

# Remove record just added from index
embeddings.delete([0])

# Ensure value matches previous value
uid = embeddings.search("feel good story", 1)[0][0]
print("After delete: ", data[uid])
Initial:  Maine man wins $1M from $25 lottery ticket
After update:  See it: baby panda born
After delete:  Maine man wins $1M from $25 lottery ticket

Методы встраивания

Enterdings поддерживает два метода создания текстовых векторов, библиотеки библиотеки предложений и векторов Word Enterdings. Оба метода имеют свои достоинства, как показано ниже:

  • ПРЕДЛОЖЕНИЯ Трансформаторы
    • Создает один вектор встроенных вторжений посредством среднего объединения векторов, генерируемых библиотекой трансформаторов.
    • Поддерживает модели, хранящиеся в модельном концентраторе обнимающего лица или хранится на местном уровне.
    • См. Предложения-трансформаторы для получения подробной информации о том, как создавать пользовательские модели, которые можно сохранить локально или загружать в модель Hugging Face.
    • Базовые модели требуют значительной вычислительной способности (предпочтительный графический процессор). Возможно создать модели меньшего/более легкого веса, которые точность компромисса для скорости.
  • Слово встраивание
    • Создает один вектор встроенных вторжений посредством оценки BM25 каждого компонента слова. Смотрите это Средняя статья для логики этого метода.
    • При поддержке Pymagnity библиотека. Предварительно обученные векторы Word могут быть установлены из ссылки на ссылку.
    • Смотрите words.py Для кода, который может создавать векторы слов для пользовательских наборов данных.
    • Значительно лучшая производительность с моделями по умолчанию. Для более крупных наборов данных он предлагает хороший компромисс скорости и точности.

Учебная серия на TXTAI (21 серия деталей)

Оригинал: “https://dev.to/neuml/tutorial-series-on-txtai-ibg”