【发布时间】:2020-12-03 17:03:13
【问题描述】:
我正在开发一个从命令行调用 fasttext 的 R 项目,但我不确定如何加载 fasttext 给我的输出作为数据框
> data.train<-data.frame(index=c(rep("__label__1",3),rep("__label__2",3)),country=c("ENGLAND","BRITAIN","UNITED KINDOM","USA","AMERICA","UNITED STATES"))
> data.train
index country
1 __label__1 ENGLAND
2 __label__1 BRITAIN
3 __label__1 UNITED KINDOM
4 __label__2 USA
5 __label__2 AMERICA
6 __label__2 UNITED STATES
> data.test<-c("EGLND","MURICA")
> data.test
[1] "EGLND" "MURICA"
> write.table(data.train,"data.train.txt",sep="\t",quote=FALSE,row.names=FALSE,col.names=FALSE)
>
> write.table(data.test,"data.test.txt",sep="\t",quote=FALSE,row.names=FALSE,col.names=FALSE)
>
> system("fasttext supervised -input data.train.txt -output model_data")
Read 0M words
Number of words: 8
Number of labels: 2
Progress: 0.0% words/sec/thread: 103000 lr: 0.100000 loss: 0.672343 eta: -596523h-14m Progress: 100.0% words/sec/thread: 103000 lr: 0.000000 loss: 0.672343 eta: 0h0m
Saving model file.
> system("fasttext predict-prob model_data.bin data.test.txt 2")
__label__1 0.5 __label__2 0.498047
__label__1 0.5 __label__2 0.498047
> res<-system("fasttext predict-prob model_data.bin data.test.txt 2", intern=TRUE)
> res
[1] "__label__1 0.5 __label__2 0.498047" "__label__1 0.5 __label__2 0.498047"
原始系统调用只是将 fasttext 输出打印到控制台,这是问题所在,但是根据 cmets intern=TRUE 允许我将其保存到变量 res 中,但现在问题是变量只是一个向量我实际需要的是每个标签的概率数据框,如下所示:
> want
__label__1 __label__2
1 0.5 0.49807
2 0.5 0.49807
这个问题Fasttext how to load a .csv column into model.predict 回答了类似的问题,但对于 python,我需要在 R 中执行此操作。
【问题讨论】:
-
也许使用
intern = TRUE。您是否尝试过使用“data.table”中的fread? -
看起来 intern=TRUE 主要完成了我想要的工作,因为它允许我将输出作为列表存储在 R 中,但是每一行都存储为一个字符串,稍后我必须将其解析为列我想我或许可以做到。我没有尝试过 fread,但不确定我会在什么时候这样做,你能解释一下吗?
-
fread(来自 data.table)应该能够从系统命令中读取。如果您使用system设法读取的数据中的dputhead并显示您想要的输出,那么提供帮助会更容易。 -
好的,我编辑了问题以包含一个可重现的示例并显示我想要的最终结果是什么
-
我对@987654330@ 的想法类似于:
library(data.table); fread(cmd = "fasttext predict-prob model_data.bin data.test.txt 2")。查看示例数据中的结果字符串,您最终会得到一个 4 列data.table。我对 fasttext 格式的了解还不够,无法说出这是否是一个好的答案。例如,res的每个元素是否总是有相同数量的标签?标签总是一样的吗?
标签: r command-line fasttext