本教程系列将涵盖txtai的主要用例,这是一个 AI 驱动的语义搜索平台。该系列的每章都有相关代码,可也可以在colab 中使用。
colab 地址
txtai 通过其管道框架提供了越来越多的模型列表。管道包装机器学习模型并转换数据。目前,管道可以包装 Hugging Face 模型、Hugging Face 管道或 PyTorch 模型(对 TensorFlow 的支持在 backlog 中)。
以下是当前实现的管道列表。
管道很棒,可以更轻松地使用各种机器学习模型。但是如果我们想将不同管道的结果粘合在一起呢?例如,提取文本,对其进行总结,将其翻译成英文并将其加载到嵌入索引中。这将需要代码以有效的方式将这些操作连接在一起。
输入工作流。工作流是一个简单但功能强大的构造,它接受一个可调用并返回元素。工作流不知道它们正在使用管道,但可以有效处理管道数据。工作流本质上是流式处理的,可以批量处理数据,从而可以有效地处理大量数据。
安装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 令人兴奋和有前途的发展。
https://dev.to/neuml/tutorial-series-on-txtai-ibg