txtai 主要支持Hugging Face Transformers和ONNX模型。这使 txtai 能够连接到 Python 中可用的丰富模型框架,通过 API 将此功能导出到其他语言(JavaScript、Java、Go、Rust),甚至使用 ONNX 导出和本地加载模型。
其他机器学习框架呢?假设我们有一个经过良好调整的现有 TF-IDF + Logistic 回归模型。这个模型能不能导出到ONNX,用在txtai中做标注和相似度查询?或者简单的 PyTorch 文本分类器怎么样?是的,这两个都可以做到!
使用onnxmltools库,可以将来自scikit-learn、XGBoost和其他模型的传统模型导出到 ONNX 并加载 txtai。此外,Hugging Face 的训练器模块可以训练通用 PyTorch 模块。本笔记本将介绍所有这些示例。
安装依赖
安装txtai和所有依赖项。由于本文使用 ONNX 导出,我们需要安装 pipeline extras 包。
pip install txtai[pipeline,similarity] datasets
训练 TF-IDF + 逻辑回归模型
对于这个例子,我们将从 Hugging Face 数据集中加载情绪数据集,并使用 scikit-learn 构建一个 TF-IDF + Logistic 回归模型。
情感数据集具有以下标签:
悲伤 (0)
欢乐 (1)
爱 (2)
愤怒 (3)
恐惧 (4)
惊喜 (5)
from datasets import load_dataset
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
ds = load_dataset(“emotion”)
Train the model
pipeline = Pipeline([
(‘tfidf’, TfidfVectorizer()),
(‘lr’, LogisticRegression(max_iter=250))
])
pipeline.fit(ds[“train”][“text”], ds[“train”][“label”])
Determine accuracy on validation set
results = pipeline.predict(ds[“validation”][“text”])
labels = ds[“validation”][“label”]
results = [results[x] == label for x, label in enumerate(labels)]
print(“Accuracy =”, sum(results) / len(ds[“validation”]))
Accuracy = 0.8595
86% 的准确率——还不错!虽然我们都沉浸在深度学习和高级方法中,好的 ole TF-IDF + Logistic 回归仍然是一个可靠的表现者并且运行速度更快。如果该级别的准确性有效,则没有理由使事情过于复杂。
使用 txtai 导出和加载
下一节将此模型导出到 ONNX 并展示该模型如何用于相似性查询。
from txtai.pipeline import Labels, MLOnnx, Similarity
def tokenize(inputs, **kwargs):
if isinstance(inputs, str):
inputs = [inputs]
return {"input_ids": [[x] fo