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

Запустите рабочие процессы трубопровода

Эта статья является частью серии учебных пособий по Txtai, платформе семантического поиска с AI. txtai … Tagged с ShowDev, MachineLearning, NLP, Python.

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

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

Txtai имеет растущий список моделей, доступных через его трубопровод. Трубопроводы обертывают модель машинного обучения и преобразуют данные. В настоящее время трубопроводы могут обернуть модели обнимающихся лиц, обнимающие конвейеры для лица или модели Pytorch (поддержка Tensorflow находится в отставании).

Ниже приведен список реализованных в настоящее время трубопроводов.

  • Вопросы – Ответьте на вопросы, используя текстовый контекст
  • Ярлыки – Примените этикетки к тексту, используя модель классификации с нулевым выстрелом. Также поддерживает сравнения сходства.
  • Резюме – Абстрактное текстовое обобщение
  • Textractor – Извлечь текст из документов
  • Транскрипция – транскрибировать звук в текст
  • Перевод – Машинный перевод

Трубопроводы великолепны и облегчают использование различных моделей машинного обучения. Но что, если мы хотим вместе приклеить результаты различных трубопроводов? Например, извлечь текст, суммируйте его, переведите его на английский язык и загрузите в индекс встраивания. Это потребовало бы кода для эффективного объединения этих операций.

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

Установить txtai и все зависимости. Поскольку эта статья использует дополнительные трубопроводы/рабочие процессы, нам необходимо установить пакет дополнительных трубопроводов и рабочего процесса.

pip install txtai[pipeline,workflow]

# Get test data
wget -N https://github.com/neuml/txtai/releases/download/v2.0.0/tests.tar.gz
tar -xvzf tests.tar.gz
from txtai.pipeline import Summary, Textractor, Transcription, Translation

# Summary instance
summary = Summary()

# Text extraction
textractor = Textractor()

# Transcription instance
transcribe = Transcription("facebook/wav2vec2-large-960h")

# Create a translation instance
translate = Translation()

Следующее показывает базовый рабочий процесс в действии!

from txtai.workflow import Workflow, Task

# Workflow that translate text to French
workflow = Workflow([Task(lambda x: translate(x, "fr"))])

# Data to run through the pipeline
data = ["The sky is blue", "Forest through the trees"]

# Workflows are generators for efficiency, read results to list for display
list(workflow(data))
['Le ciel est bleu', 'Forêt à travers les arbres']

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

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

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

from txtai.workflow import FileTask

tasks = [
    FileTask(transcribe, r"\.wav$"),
    Task(lambda x: translate(x, "fr"))
]

# file:// prefixes are required to signal to the workflow this is a file and not a text string
data = [
  "file://txtai/US_tops_5_million.wav",
  "file://txtai/Canadas_last_fully.wav",
  "file://txtai/Beijing_mobilises.wav",
  "file://txtai/The_National_Park.wav",
  "file://txtai/Maine_man_wins_1_mil.wav",
  "file://txtai/Make_huge_profits.wav"
]

# Workflow that translate text to French
workflow = Workflow(tasks)

# Run workflow
list(workflow(data))
["Les cas de virus U sont en tête d'un million",
 "La dernière plate-forme de glace entièrement intacte du Canada s'est soudainement effondrée en formant un berge de glace de taille manhatten",
 "Bagage mobilise les embarcations d'invasion le long des côtes à mesure que les tensions tiwaniennes s'intensifient",
 "Le service des parcs nationaux met en garde contre le sacrifice d'amis plus lents dans une attaque nue",
 "L'homme principal gagne du billet de loterie",
 "Faire d'énormes profits sans travailler faire jusqu'à cent mille dollars par jour"]

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

from txtai.embeddings import Embeddings, Documents
from txtai.workflow import FileTask, WorkflowTask

# Embeddings index
embeddings = Embeddings({"path": "sentence-transformers/paraphrase-multilingual-mpnet-base-v2"})
documents = Documents()

def index(x):
    documents.add(x)
    return x

# file:// prefixes are required to signal to the workflow this is a file and not a text string
files = [
  "file://txtai/article.pdf",
  "file://txtai/US_tops_5_million.wav",
  "file://txtai/Canadas_last_fully.wav",
  "file://txtai/Beijing_mobilises.wav",
  "file://txtai/The_National_Park.wav",
  "file://txtai/Maine_man_wins_1_mil.wav",
  "file://txtai/Make_huge_profits.wav"
]

data = [(x, element, None) for x, element in enumerate(files)]

# Workflow that extracts text and builds a summary
articles = Workflow([
    FileTask(textractor),
    Task(lambda x: summary([y[:1024] for y in x]))
])

# Define workflow tasks. Workflows can also be tasks!
tasks = [
    WorkflowTask(articles, r".\.pdf$"),
    FileTask(transcribe, r"\.wav$"),
    Task(lambda x: translate(x, "fr")),
    Task(index, unpack=False)
]

# Workflow that translate text to French
workflow = Workflow(tasks)

# Run workflow and show results to be indexed
for x in workflow(data):
  print(x)

# Build the embeddings index
embeddings.index(documents)

# Cleanup temporary storage
documents.close()
(0, "Introduction de txtai, un moteur de recherche à moteur d'IA construit sur Transformers Ajouter une compréhension du langage naturel à n'importe quelle application. Construit sur Transformers, le moteur de recherche permet aux utilisateurs de rechercher du contenu dans n'importe quelle forme de langue.", None)
(1, "Les cas de virus U sont en tête d'un million", None)
(2, "La dernière plate-forme de glace entièrement intacte du Canada s'est soudainement effondrée en formant un berge de glace de taille manhatten", None)
(3, "Bagage mobilise les embarcations d'invasion le long des côtes à mesure que les tensions tiwaniennes s'intensifient", None)
(4, "Le service des parcs nationaux met en garde contre le sacrifice d'amis plus lents dans une attaque nue", None)
(5, "L'homme principal gagne du billet de loterie", None)
(6, "Faire d'énormes profits sans travailler faire jusqu'à cent mille dollars par jour", None)
# Run a search query and show the result.
index, score = embeddings.search("changement climatique", 1)[0]
files[index]
file://txtai/Canadas_last_fully.wav
# Run a search query and show the result.
index, score = embeddings.search("traitement du langage naturel", 1)[0]
files[index]
file://txtai/article.pdf

Результаты хороши! Мы можем увидеть силу рабочих процессов и то, как они могут эффективно объединить серию трубопроводов. Рабочие процессы могут работать с любыми вызываемыми, а не только с трубопроводами, рабочими процессами преобразуют данные из одного формата в другой. Рабочие процессы – это захватывающая и многообещающая разработка для TXTAI.

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

Оригинал: “https://dev.to/neuml/run-pipeline-workflows-3b99”