【问题标题】:How do I get the raw predictions (-r) from Vowpal Wabbit when running in daemon mode?在守护进程模式下运行时,如何从 Vowpal Wabbit 获取原始预测 (-r)?
【发布时间】:2015-08-26 04:55:39
【问题描述】:

使用以下内容,我可以将原始预测和最终预测作为文件获取:

cat train.vw.txt | vw -c -k --passes 30 --ngram 5 -b 28 --l1 0.00000001 --l2 0.0000001 --loss_function=logistic -f model.vw --compressed --oaa 3

cat test.vw.txt | vw -t -i model.vw --link=logistic -r raw.txt -p predictions.txt

但是,当我将 VW 作为守护程序运行时,我无法获得原始预测:

vw -t -i model.vw --daemon --port 26542 --link=logistic

我是否有传递特定参数或参数来获取原始预测?我更喜欢原始预测,而不是最终预测。谢谢

【问题讨论】:

    标签: machine-learning vowpalwabbit


    【解决方案1】:

    --raw_predictions 是一种 hack(语义取决于使用的缩减),在--daemon 模式下不支持。 (--output_probabilities 之类的东西很有用,实现起来也不难,它可以在守护程序模式下工作,但到目前为止还没有时间实现它。)

    作为一种解决方法,您可以在管道中运行 VW,因此它会读取标准输入并将概率写入标准输出:

    cat test.data | vw -t -i model.vw --link=logistic -r /dev/stdout | script.sh

    【讨论】:

    • 这在生产中不起作用,因为输入数据是流,所以模型必须作为守护进程运行
    【解决方案2】:

    在支持/dev/stdout(和/dev/stderr)的系统上,您可以试试这个:

    vw -t -i model.vw --daemon --port 26542 --link=logistic -r /dev/stdout
    

    守护进程会将原始预测写入标准输出,在这种情况下,该输出与 localhost 端口 26542 位于同一位置。

    保证行的相对顺序,因为在每个示例中处理不同打印的代码(例如非原始与原始)始终是串行的。

    【讨论】:

    • 感谢您的解决方案。不幸的是,守护进程将原始预测写入它自己进程的标准输出中,而请求输出的函数存在于一个单独的进程中。所以在实践中,调用函数必须将数据发送到守护进程,获取响应,然后发出第二个请求以获取原始预测。不得不发出两个请求会在延迟方面杀死我们(这是阻塞)。有没有办法将输出中的原始预测直接发送到调用进程,而不仅仅是发送类(实际上我们不想要)?
    • 顺便说一句,我们从 VW 模型中提取哈希表,匹配 sigmoid 函数的输出,并尝试用直接字典查找替换守护进程。在实践中,当你有 10M 键时,查找成本很高......
    • 取决于实现。 vw 是非常高效的 C++。它的预测速度与 IO 一样快(学习线程几乎总是比解析/散列/atof 线程慢),因此当涉及像 python 或 java 这样的解释语言时,其他进程而不是 vw 将成为您的瓶颈。至于双进程交互:您可能正在运行单行缓冲。为了获得最佳性能,您应该使缓冲区尽可能大,并延迟交互。每行双上下文切换无疑是性能杀手。通过避免上下文切换,我已经看到了 20 倍的加速。
    • 同意双上下文切换,但我需要对每一行进行评分,因为有一个基于评分的后续操作,因此将它们批处理在缓冲区中是行不通的......
    • 不幸的是,不在当前的vw 代码中;但总是欢迎补丁!
    【解决方案3】:

    由于November 2015,获得概率的最简单方法是使用--oaa=N --loss_function=logistic --probabilities -p probs.txt。 (或者如果您需要依赖标签的功能:--csoaa_ldf=mc --loss_function=logistic --probabilities -p probs.txt。)

    --probabilities 也可以与--daemon 一起使用。应该不再需要使用--raw_predictions

    【讨论】:

      【解决方案4】:

      根据https://github.com/VowpalWabbit/vowpal_wabbit/issues/1118,您可以尝试在命令行中添加--scores 选项: vw --scores -t -i model.vw --daemon --port 26542

      它对我的 oaa 模型有所帮助。

      【讨论】:

        猜你喜欢
        • 2014-10-06
        • 2015-10-18
        • 2014-04-26
        • 2015-09-02
        • 2023-03-27
        • 2015-09-16
        • 1970-01-01
        • 2016-01-18
        • 1970-01-01
        相关资源
        最近更新 更多