Добавьте понимание естественного языка в любое приложение

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

Область обработки естественного языка (NLP) быстро развивается с рядом новых разработок. Крупномасштабные общеязыковые модели - это захватывающая новая возможность, позволяющая нам быстро добавлять потрясающие функции с ограниченными вычислительными ресурсами и людьми. Инновации продолжаются с появлением новых моделей и усовершенствований, которые кажутся еженедельными.

В этой статье представлена ​​txtai, платформа семантического поиска на базе искусственного интеллекта, которая обеспечивает поиск на основе Natural Language Understanding (NLU) в любом приложении.

Представляем txtai

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

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

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

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

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

txtai имеет открытый исходный код (под лицензией Apache 2.0) и доступен на GitHub.



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

  • Paperai - механизм поиска и обзора литературы для медицинских / научных статей на базе искусственного интеллекта.
  • Tldrstory - понимание заголовков и текста рассказа с помощью искусственного интеллекта.
  • Neuspo - сайт спортивных событий и новостей в режиме реального времени, основанный на фактах.
  • Codequestion - Задавайте вопросы по кодированию прямо из терминала

txtai построен на Python 3.6+, Hugging Face Transformers, Sentence Transformers и FastAPI

Установите и запустите txtai

В следующем фрагменте кода показано, как установить txtai и создать модель встраивания.

pip install txtai

Затем мы можем создать простую модель в памяти с парой образцов записей, чтобы опробовать txtai.

Выполнение приведенного выше кода напечатает следующее:

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

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

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

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

И снова будут возвращены те же результаты, с той лишь разницей, что вложения предварительно вычислены.

Сохраните и загрузите индекс Embeddings

Индексы вложений можно сохранить на диск и перезагрузить.

Результаты приведенного выше кода:

Canada's last fully intact ice shelf has suddenly collapsed, forming a Manhattan-sized iceberg

Обновление и удаление из индекса вложений

Для встраиваемых индексов поддерживаются обновления и удаления. Операция upsert вставит новые данные и обновит существующие.

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

Результаты приведенного выше кода:

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

Имея ограниченный объем кода, мы можем создать систему с глубоким пониманием естественного языка. Объем знаний, который мы получаем от моделей Transformer, феноменален.

Вложения предложений

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

txtai поддерживает два метода для создания вложений текста, преобразователей предложений и векторов встраивания слов. Оба метода имеют свои достоинства, как показано ниже.

Трансформаторы предложений



  • Создает один вектор встраивания посредством среднего пула векторов, сгенерированных библиотекой Transformers.
  • Поддерживает модели, хранящиеся в Центре моделей Hugging Face или локально.
  • См. Преобразователи предложений для получения подробной информации о том, как создавать собственные модели, которые можно хранить локально или загружать в центр моделей Hugging Face.
  • Базовые модели требуют значительных вычислительных возможностей (предпочтительно GPU). Возможно создание моделей меньшего размера / меньшего веса, в которых точность зависит от скорости.

Вложения слов



  • Создает один вектор встраивания посредством оценки BM25 каждого компонента слова. Ссылка выше подробно описывает этот метод.
  • При поддержке библиотеки pymagnitude. Предварительно обученные векторы слов можно установить по указанной ссылке.
  • См. Words.py для получения информации о коде, который может создавать векторы слов для пользовательских наборов данных.
  • Значительно лучшая скорость с моделями по умолчанию. Для больших наборов данных он предлагает хороший компромисс между скоростью и точностью.

Масштабный поиск сходства

Как обсуждалось выше, txtai использует поиск по сходству для сравнения вложенных предложений со всеми встраиваемыми предложениями в репозитории. Первый вопрос, который может прийти в голову, - как это масштабировать до миллионов или миллиардов записей? Ответ - поиск приблизительного ближайшего соседа (ИНС). ИНС обеспечивает эффективное выполнение запросов на подобие для большого массива данных.

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







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

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

Тесты для каждой из поддерживаемых систем (и другие) могут помочь определить, какая ИНС лучше всего подходит для данного набора данных.

Экстрактивный вопрос-ответ

В дополнение к поиску по сходству txtai поддерживает извлечение ответов на вопросы по возвращаемым результатам. Эта мощная функция позволяет задать еще одну серию вопросов для списка результатов поиска.

Пример использования этого - вызов CORD-19 на Kaggle. Это потребовало создания сводных таблиц для серии медицинских запросов с извлечением дополнительных столбцов для каждого результата.

Ниже показано, как создать компонент Extractive QA в txtai.

Следующий шаг - загрузить набор результатов, по которым можно задать вопросы. В следующем примере представлены фрагменты текста со спортивными результатами, охватывающими серию игр.

Результаты для раздела выше.

Мы видим, что экстрактор смог понять контекст приведенных выше разделов и может ответить на связанные вопросы. Компонент Extractor может работать с индексом txtai Embeddings, а также с внешними хранилищами данных. Эта модульность позволяет нам выбирать, какие функции txtai использовать для создания поисковых систем с поддержкой естественного языка.

дальнейшее чтение

Более подробные примеры и варианты использования txtai можно найти в следующих блокнотах.











































Подведение итогов

НЛП развивается быстрыми темпами, и теперь стало возможным то, что было невозможно даже год назад. В этой статье представлена ​​txtai, платформа семантического поиска на базе искусственного интеллекта, которая обеспечивает быструю интеграцию надежных моделей с глубоким пониманием естественного языка. Центр моделей Hugging Face содержит ряд базовых моделей и моделей, предоставленных сообществом, которые можно использовать для настройки поиска практически для любого набора данных. Возможности безграничны, и мы рады видеть, что можно построить на основе txtai!