9 个版本
使用旧的 Rust 2015
0.1.9 | 2018 年 10 月 26 日 |
---|---|
0.1.8 | 2018 年 10 月 20 日 |
0.1.6 | 2018 年 9 月 30 日 |
#373 在 机器学习 中
28 每月下载量
49KB
650 行
recoreco
命令行上快速的商品对推荐。
安装
目前,安装 recoreco 的唯一便捷方式是通过 Rust 的包管理器 cargo
$ cargo install recoreco
快速入门
Recoreco 从用户与商品之间的交互中计算出高度相关的商品对(在“对 X 感兴趣的人也对 Y 感兴趣”的意义上)。
它是一个命令行工具,期望一个 CSV 文件 作为输入,其中每行表示用户与商品之间的交互,包含一个 用户标识符 和一个 商品标识符,它们由一个 制表符 分隔。默认情况下,Recoreco 以 JSON 格式输出每个商品的前 10 个相关商品(没有特定的排名)。
如果您想更多地了解 recoreco 所基于的方法背后的数学原理,请查看关于 实用机器学习:推荐系统创新 的书籍和我朋友 Ted Dunning 关于 实时小狗和小马 的演讲。
示例:使用 recoreco 查找相关的音乐艺术家
作为示例,我们将从 last.fm 爬取的 音乐数据集 中计算相关艺术家。数据包含 358,868 个用户与 292,365 个乐队之间的 17,535,655 次交互。
第一步,我们下载数据,解压缩并查看格式
$wget http://mtg.upf.edu/static/datasets/last.fm/lastfm-dataset-360K.tar.gz
$tar xvfz lastfm-dataset-360K.tar.gz
$ head lastfm-dataset-360K/usersha1-artmbid-artname-plays.tsv
00000c289a1829a808ac09c00daf10bc3c4e223b 3bd73256-3905-4f3a-97e2-8b341527f805 betty blowtorch 2137
00000c289a1829a808ac09c00daf10bc3c4e223b f2fb0ff0-5679-42ec-a55c-15109ce6e320 die Ärzte 1099
00000c289a1829a808ac09c00daf10bc3c4e223b b3ae82c2-e60b-4551-a76d-6620f1b456aa melissa etheridge 897
00000c289a1829a808ac09c00daf10bc3c4e223b 3d6bbeb7-f90e-4d10-b440-e153c0d10b53 elvenking 717
00000c289a1829a808ac09c00daf10bc3c4e223b bbd2ffd7-17f4-4506-8572-c1ea58c3f9a8 juliette & the licks 706
我们需要我们的输入只包含用户和商品的交互,因此我们创建一个新的 CSV 文件,其中只包含原始数据的前一列(散列的 userid)和第三列(艺术家名称)
$cat lastfm-dataset-360K/usersha1-artmbid-artname-plays.tsv|cut -f1,3 >plays.csv
现在 CSV 文件格式正确
$ head plays.csv
00000c289a1829a808ac09c00daf10bc3c4e223b betty blowtorch
00000c289a1829a808ac09c00daf10bc3c4e223b die Ärzte
00000c289a1829a808ac09c00daf10bc3c4e223b melissa etheridge
00000c289a1829a808ac09c00daf10bc3c4e223b elvenking
00000c289a1829a808ac09c00daf10bc3c4e223b juliette & the licks
接下来,我们调用 recoreco,将其指向CSV文件作为输入,并要求它将输出写入名为 artists.json
的文件中。它将读取CSV文件两次,一次用于计算数据的一些统计信息,第二次用于计算实际的项到项推荐。请注意,recoreco 非常快,在我的机器上计算时间不到一分钟。
$ recoreco --inputfile=plays.csv --outputfile=artists.json
Reading plays.csv to compute data statistics (pass 1/2)
Found 17535655 interactions between 358868 users and 292365 items.
Reading plays.csv to compute 10 item indicators per item (pass 2/2)
194996130 cooccurrences observed, 34015ms training time, 292365 items rescored
Writing indicators...
artists.json
文件现在包含了计算结果。让我们使用JSON处理器 jq 看一下一些艺术家的推荐。
谁与 迈克尔·杰克逊 有强烈的关联?
$jq'select(.for_item=="michael jackson")'artists.json
{
"for_item": "michael jackson",
"indicated_items": [
"justin timberlake",
"queen",
"kanye west",
"amy winehouse",
"britney spears",
"madonna",
"rihanna",
"beyoncé",
"daft punk",
"u2"
]
}
我最喜欢的乐队是 Hot Water Music,让我们看看人们与他们关联的乐队
$jq'select(.for_item=="hot water music")'artists.json
{
"for_item": "hot water music",
"indicated_items": [
"lifetime",
"the get up kids",
"the lawrence arms",
"the gaslight anthem",
"dillinger four",
"propagandhi",
"the bouncing souls",
"strike anywhere",
"jawbreaker",
"chuck ragan"
]
}
最后,我们寻找与 Paco de Lucia 类似的艺术家,以纪念Ted为Veoh构建搜索引擎的日子:)
$jq'select(.for_item=="paco de lucia")'artists.json
{
"for_item": "paco de lucia",
"indicated_items": [
"miguel poveda",
"cserhati zsuzsa",
"ramón veloz",
"szarka tamás",
"camaron de la isla",
"cseh tamás - másik jános",
"duquende",
"amr diab",
"chuck brown & eva cassidy",
"keympa"
]
}
程序化使用
recoreco 也可以作为库包含在你的Rust程序中。我们提供了一个 基本示例 来说明如何这样做。请务必查阅 文档 以获取更多详细信息。
依赖项
~3.5–5MB
~80K SLoC