从Vowpal Wabbit的内存中读取数据?

 瓶子2502854683 发布于 2023-01-02 09:35

有没有办法发送数据来训练Vowpal Wabbit中的模型而无需将其写入磁盘?

这就是我想要做的.我在csv中有一个相对较大的数据集(大约2gb),它在内存中没有问题.我将它加载到R中的数据框中,我有一个函数将该数据帧中的数据转换为VW格式.

现在,为了训练模型,我必须首先将转换后的数据写入文件,然后将该文件提供给VW.写入磁盘部分的时间太长,特别是因为我想尝试使用不同功能转换的不同各种模型,因此我必须多次将数据写入磁盘.

因此,假设我能够在R中创建一个字符向量,其中每个元素都是VW格式的一行数据,如何在不将其写入磁盘的情况下将其提供给大众?

我考虑使用守护进程模式并将字符向量写入localhost连接,但我无法让VW以守护进程模式进行训练 - 我不确定这是否可行.

如果有必要,我愿意使用c ++(通过Rcpp包)来完成这项工作.

非常感谢你提前.

更新:

感谢大家的帮助.如果有人感兴趣,我只是按照答案中的建议将输出传输到大众,如下所示:

# Two sample rows of data
datarows <- c("1 |name 1:1 2:4 4:1", "-1 |name 1:1 4:1")
# Open connection to VW
con <- pipe("vw -f my_model.vw")
# Write to connection and close
writeLines(datarows, con)
close(con)

arielf.. 5

您可能正在寻找的是以vw守护进程模式运行.

执行此操作的标准方法是vw作为守护程序运行:

vw -i some.model --daemon --quiet --port 26542 -p /dev/stdout

您可以使用26542您选择的端口进行替换.

现在,您可以通过TCP连接到服务器(可以localhost在端口上26542),并且您写入TCP套接字的每个请求都将在同一个套接字上响应.

您既可以学习(发送带标签的示例,也可以实时更改模型),也可以编写查询并回读回复.

您可以一次执行一个查询+预测,也可以一次执行多个查询.您只需要在每个查询结束时使用换行符,就像从文件中测试一样.保证订单得以保留.

您还可以混合请求以学习仅用于预测的请求,并且不应更新内存模型.实现这一目标的诀窍是使用零重量作为您不想学习的示例.

此示例将更新模型,因为它的权重为1:

label 1 'tag1| input_features...

并且这个不会更新模型,因为它的权重为0:

label 0 'tag2| input_features...

官方参考中的更多内容是在vowpal wabbit wiki中: 如何将vowpal wabbit作为守护进程运行, 但请注意,在该主要示例中,模型已预先学习并加载到内存中.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有