ludwig 服务示例不起作用(空特征名称?)

nzkunb0c  于 5个月前  发布在  其他
关注(0)|答案(5)|浏览(74)

描述问题

我无法成功运行serve示例。我认为问题可能来自数据集?第一列是空的。它应该是movie_id,但似乎丢失了(我认为这个特征根本没有任何帮助?我们是否应该从数据集中删除它)。然后推理服务器认为它缺少一个特征。棘手的问题是我不知道serve如何处理空的特征名称?
https://github.com/ludwig-ai/ludwig-docs/blob/master/docs/data/rotten_tomatoes_test.csv

重现

重现此行为所需的步骤:

  1. 训练rotten_tomato.csv
  2. 运行ludwig serve --model_path=/automl/model
  3. 运行预测请求
curl http://0.0.0.0:8000/predict -X POST -F "movie_title=Friends With Money" -F "content_rating=R" -F "genres=Art House & International, Comedy, Drama" -F "runtime=88.0" -F "top_critic=TRUE" -F "review_content=The cast is terrific, the movie isn't."
{"error":"entry must contain all input features"}%

文档:https://ludwig.ai/0.6/getting_started/serve/

预期行为

它应该返回200个带有正确预测结果的请求。

截图

如果适用,请添加截图以帮助解释您的问题。

环境(请完成以下信息):

  • Python版本3.8.13
  • Ludwig版本0.6
    其他上下文

在此问题中添加任何其他有关问题的上下文。

1zmg4dgp

1zmg4dgp1#

我尝试在数据集中添加 movie_id 字段名并重新训练模型。有趣的是,无论是否指定 movie_id,预测都成功了。
顺便说一下,预测结果与文档中的不同。https://ludwig.ai/latest/getting_started/serve/ 是文档过时了吗?

gev0vcfq

gev0vcfq2#

我们来看看@Jeffwan。

ifmq2ha2

ifmq2ha23#

Jeffwan,你训练的配置中包含id吗?在文档中没有,所以在预测时不需要。你能再检查一下吗?

rjjhvcjd

rjjhvcjd4#

我使用ludwig网站上的原始数据集训练了这个模式,但它没有field_id。

kjthegm6

kjthegm65#

你好,Jeffwan。

在这里继续讨论。
首先,我能够完成Getting Started指南中的服务部分。
然而,我们可以澄清这个教程,我还发现了一个小的不相关的错误(我怀疑这是否影响到了你)。无论如何,我会跟进这两个AI。
这里有一些可能对你有帮助的提示,帮助你更好地理解你可能观察到的现象:

  1. 烂番茄数据集的第一列是ID,可能不是一个好的模型特征。
    这可能是为什么在Getting Started指南中,我们提示您使用排除第一列的配置进行训练:
  2. 具有空列名的特征会被赋予一个默认的列名Unnamed: 0。在Ludwig配置中,可以使用这个名称引用具有空列名的特征。
  3. 当使用ludwig serve部署模型时,可以通过POST调用添加额外的特征值。然而,如果这些特征没有在用于训练模型的原始配置中列出,那么额外的字段将被忽略,对推理没有任何影响,例如:
    这两个curl应该产生完全相同的结果:
curl http://0.0.0.0:8000/predict -X POST \
  -F "movie_title=Friends With Money" \
  -F "content_rating=R" \
  -F "genres=Art House & International, Comedy, Drama" \
  -F "runtime=88.0" \
  -F "top_critic=TRUE" \
  -F "review_content=The cast is terrific, the movie isn't."
curl http://0.0.0.0:8000/predict -X POST \
  -F "movie_title=Friends With Money" \
  -F "content_rating=R" \
  -F "genres=Art House & International, Comedy, Drama" \
  -F "runtime=88.0" \
  -F "top_critic=TRUE" \
  -F "review_content=The cast is terrific, the movie isn't." \
  -F "extra_feature__1=123"
  • 如果从这个数据集中调用create_auto_config,返回的配置将包含空的类似“id”的特征,输入特征列表将是:
  • Unnamed: 0
  • movie_title
  • content_rating
  • genres
  • runtime
  • top_critic

(顺便说一下,Ludwig automl应该默认省略所有唯一的单令牌id-like特征)

  • 调用ludwig serve端点需要指定原始配置中列出的所有输入特征。如果模型是用具有空列名的特征训练的,那么您的curl中应该有一个Unnamed: 0字段,例如:
curl http://0.0.0.0:8000/predict -X POST \
  -F "movie_title=Friends With Money" \
  -F "content_rating=R" \
  -F "genres=Art House & International, Comedy, Drama" \
  -F "runtime=88.0" \
  -F "top_critic=TRUE" \
  -F "review_content=The cast is terrific, the movie isn't." \
  -F "Unnamed: 0=123"

否则,您将得到{"error":"entry must contain all input features"}%错误。

  • 用和不用类似ID的特征训练的模型似乎在质量上有很大的不同,因此将返回不同的预测和概率。
  • 另一个需要注意的是,在重新训练模型时,除非每次运行后都清除results目录,否则新模型将保存到results/api_experiment_run_{n},其中“n”在每次后续运行后递增,以免覆盖先前训练运行的产物。ludwig serve也应该用新的模型路径初始化。

相关问题