如何在 Vespa.ai 中使用 ML 模型?

How to use ML models in Vespa.ai?

我们正在尝试在 Vespa 中使用 ML 模型,我们在 Vespa 中存储了文本数据,有人可以帮助我们解决以下问题-

  1. 使用 Vespa 中使用的 scikit-learn 训练的 onnx 模型的一个示例。
  2. 在使用 Vespa 中的 onnx 模型进行模型训练和预测之前,在何处添加预处理步骤以及示例。

这是一个非常广泛的问题,答案在很大程度上取决于您的目标是什么。一般来说,在 Vespa 中使用 ONNX 模型的文档可以在这里找到:

https://docs.vespa.ai/documentation/onnx.html

可以在 Transformers 示例应用程序中找到使用 ONNX BERT 模型进行排名的示例:

https://github.com/vespa-engine/sample-apps/tree/master/transformers

请注意,这两个链接都假定您有一个现有模型。一般来说,Vespa 是一个服务平台,通常不会用在模型训练过程中。因此,Vespa 并不真正关心你的模型来自哪里,是 scikit-learn、pytorch 还是任何其他系统。 ONNX 是各种系统之间 ML 模型交换的通用格式。

但是,我认为我应该了解一些基本的想法,也许可以澄清一下。 Vespa 目前认为所有 ML 模型都有数字(以张量的形式)输入和输出。这意味着您不能直接将文本放入模型并让文本从另一侧出来。如今,大多数文本数据都被编码为某种形式的数字表示,例如嵌入向量,或者如上面的 BERT 示例所示,文本被标记化,以便每个标记都有自己的向量表示。模型计算后,嵌入向量或 token-set 表示可以解码回文本。

Vespa 目前处理计算部分,encoding/decoding 文本到嵌入或其他表示的(预)处理目前由用户决定。 Vespa 确实提供了一组丰富的功能,以文档和查询处理器的形式在这方面提供帮助。因此,您可以创建一个 document processor that encodes the text of each incoming document to some representation before storing it. Likewise, a searcher(查询处理器),它可以在对文档进行评分之前将传入的文本查询编码为兼容的表示形式。

因此,一般来说,您会使用模型所需的任何嵌入或标记化策略在 Vespa 之外训练您的模型。部署 Vespa 应用程序时,您可以添加具有任何所需自定义处理代码的模型,这些代码在提供或查询 Vespa 时使用。

如果你有一个更具体的例子来说明你想要实现的目标,我可以更具体一些。