{
  "id": 27892,
  "title": "Introducing light-ffm and stack-nn",
  "url": "/competitions/outbrain-click-prediction/discussion/27892",
  "author_name": "",
  "post_date": "2017-01-19T00:52:50.657Z",
  "votes": 59,
  "comment_count": 15,
  "views": 905,
  "content": "<p>Congratulations to winners: Bowen-Yuan, Eureka, Daniel_NTU, nomo, hugepanda) and\nbrain-afk (Μαριος Μιχαηλιδης KazAnova, Faron, Darragh, Alexey Noskov). Also I want to thank my teammates for their great effort! Especially @Takuya, really brilliant work!</p>\n\n<p><strong>This is not a summary of solution</strong> of our team, Three Data Points. The honor will be <strong>Takuya's. (CuteChibiko).</strong> </p>\n\n<p>In this post, I'll just introduce two tools I developed in the contest. light-ffm for my best single model, 0.693x lb and stack-nn, 0.695x lb. Both of them use less then 5 GB CPU memory and are faster than some popular alternatives, like ffm and xgb for the same feature set. </p>\n\n<p>light-ffm is based on libffm with the goal to accelerate out-of-core performance without sacrificing much performance. A submission can be generated in 2.5 hours.</p>\n\n<p>code:  <a href=\"https://github.com/daxiongshu/light-ffm\">https://github.com/daxiongshu/light-ffm</a></p>\n\n<p>doc:    <a href=\"https://github.com/daxiongshu/light-ffm/blob/master/light-ffm.pdf\">https://github.com/daxiongshu/light-ffm/blob/master/light-ffm.pdf</a></p>\n\n<p>Major update of light-ffm is expected in near future: support both old and new format, support regression, multi-classification, ranking and so on. Codes also need to be cleaned in a great deal.</p>\n\n<p>stack-nn is coded with tensorflow-gpu for 2nd level stacking (numerical features only) which can generate a reasonably good submission 0.695x in 20 mins with GPU. It scales to 200+ numerical features within 16 GB CPU memory but we didn't have that many useful features in the end :P</p>\n\n<p>code: <a href=\"https://github.com/daxiongshu/stack-nn-tensorflow\">https://github.com/daxiongshu/stack-nn-tensorflow</a></p>\n\n<p>I don't have a doc yet but the basic idea is to 1) use 2 level batching to make sure data fit in CPU memory and load fast and 2) per-group softmax to optimize apk.</p>\n\n<p>Any feedback are highly appreciated!</p>",
  "messages": [
    {
      "id": "157042",
      "postDate": "01/19/2017 00:52:50",
      "content": "<p>Congratulations to winners: Bowen-Yuan, Eureka, Daniel_NTU, nomo, hugepanda) and\nbrain-afk (Μαριος Μιχαηλιδης KazAnova, Faron, Darragh, Alexey Noskov). Also I want to thank my teammates for their great effort! Especially @Takuya, really brilliant work!</p>\n\n<p><strong>This is not a summary of solution</strong> of our team, Three Data Points. The honor will be <strong>Takuya's. (CuteChibiko).</strong> </p>\n\n<p>In this post, I'll just introduce two tools I developed in the contest. light-ffm for my best single model, 0.693x lb and stack-nn, 0.695x lb. Both of them use less then 5 GB CPU memory and are faster than some popular alternatives, like ffm and xgb for the same feature set. </p>\n\n<p>light-ffm is based on libffm with the goal to accelerate out-of-core performance without sacrificing much performance. A submission can be generated in 2.5 hours.</p>\n\n<p>code:  <a href=\"https://github.com/daxiongshu/light-ffm\">https://github.com/daxiongshu/light-ffm</a></p>\n\n<p>doc:    <a href=\"https://github.com/daxiongshu/light-ffm/blob/master/light-ffm.pdf\">https://github.com/daxiongshu/light-ffm/blob/master/light-ffm.pdf</a></p>\n\n<p>Major update of light-ffm is expected in near future: support both old and new format, support regression, multi-classification, ranking and so on. Codes also need to be cleaned in a great deal.</p>\n\n<p>stack-nn is coded with tensorflow-gpu for 2nd level stacking (numerical features only) which can generate a reasonably good submission 0.695x in 20 mins with GPU. It scales to 200+ numerical features within 16 GB CPU memory but we didn't have that many useful features in the end :P</p>\n\n<p>code: <a href=\"https://github.com/daxiongshu/stack-nn-tensorflow\">https://github.com/daxiongshu/stack-nn-tensorflow</a></p>\n\n<p>I don't have a doc yet but the basic idea is to 1) use 2 level batching to make sure data fit in CPU memory and load fast and 2) per-group softmax to optimize apk.</p>\n\n<p>Any feedback are highly appreciated!</p>",
      "rawMarkdown": "Congratulations to winners: Bowen-Yuan, Eureka, Daniel_NTU, nomo, hugepanda) and\r\nbrain-afk (Μαριος Μιχαηλιδης KazAnova, Faron, Darragh, Alexey Noskov). Also I want to thank my teammates for their great effort! Especially @Takuya, really brilliant work!\r\n\r\n\r\n**This is not a summary of solution** of our team, Three Data Points. The honor will be **Takuya's. (CuteChibiko).** \r\n\r\nIn this post, I'll just introduce two tools I developed in the contest. light-ffm for my best single model, 0.693x lb and stack-nn, 0.695x lb. Both of them use less then 5 GB CPU memory and are faster than some popular alternatives, like ffm and xgb for the same feature set. \r\n\r\nlight-ffm is based on libffm with the goal to accelerate out-of-core performance without sacrificing much performance. A submission can be generated in 2.5 hours.\r\n\r\ncode:  https://github.com/daxiongshu/light-ffm\r\n\r\ndoc:    https://github.com/daxiongshu/light-ffm/blob/master/light-ffm.pdf\r\n\r\nMajor update of light-ffm is expected in near future: support both old and new format, support regression, multi-classification, ranking and so on. Codes also need to be cleaned in a great deal.\r\n\r\nstack-nn is coded with tensorflow-gpu for 2nd level stacking (numerical features only) which can generate a reasonably good submission 0.695x in 20 mins with GPU. It scales to 200+ numerical features within 16 GB CPU memory but we didn't have that many useful features in the end :P\r\n\r\ncode: https://github.com/daxiongshu/stack-nn-tensorflow\r\n\r\nI don't have a doc yet but the basic idea is to 1) use 2 level batching to make sure data fit in CPU memory and load fast and 2) per-group softmax to optimize apk.\r\n\r\nAny feedback are highly appreciated!",
      "votes": null
    },
    {
      "id": "157048",
      "postDate": "01/19/2017 01:12:15",
      "content": "<p>@rcarson - thank you for releasing this! This was my first time using FFMs. My computer wouldn't let me handle anything above 40 features total without automatically killing my job and training time was between 5-6 hours with the --on-disk option. I will certainly be using this code! Thanks again!</p>",
      "rawMarkdown": "rcarson - thank you for releasing this! This was my first time using FFMs. My computer wouldn't let me handle anything above 40 features total without automatically killing my job and training time was between 5-6 hours with the --on-disk option. I will certainly be using this code! Thanks again!",
      "votes": null
    },
    {
      "id": "157049",
      "postDate": "01/19/2017 01:15:43",
      "content": "<p>@RDizzl3, thank you! </p>\n\n<p>I would suggest you wait a little while since the code for now requires a different data format and additional field map matrix which could be confusing at the moment. </p>\n\n<p>I am gonna modify it so one can run this tool with original ffm data and parameters, without any changes</p>",
      "rawMarkdown": "RDizzl3, thank you! \r\n\r\nI would suggest you wait a little while since the code for now requires a different data format and additional field map matrix which could be confusing at the moment. \r\n\r\nI am gonna modify it so one can run this tool with original ffm data and parameters, without any changes",
      "votes": null
    },
    {
      "id": "157056",
      "postDate": "01/19/2017 01:58:43",
      "content": "<p>Thank you @rcarson for open sourcing this excellent code. </p>\n\n<p>Will use this in the upcoming competitions :) </p>",
      "rawMarkdown": "Thank you @rcarson for open sourcing this excellent code. \r\n\r\nWill use this in the upcoming competitions :)",
      "votes": null
    },
    {
      "id": "157057",
      "postDate": "01/19/2017 02:02:57",
      "content": "<p>@SRK， thank you! actually we used earlier version of light-ffm in our 3rd finish of Grupo Bimbo but it was very rough at that time. :P</p>",
      "rawMarkdown": "SRK， thank you! actually we used earlier version of light-ffm in our 3rd finish of Grupo Bimbo but it was very rough at that time. :P",
      "votes": null
    },
    {
      "id": "157059",
      "postDate": "01/19/2017 02:11:23",
      "content": "<p>That is great. So this code has already given you two third place solutions ;) </p>",
      "rawMarkdown": "That is great. So this code has already given you two third place solutions ;)",
      "votes": null
    },
    {
      "id": "157060",
      "postDate": "01/19/2017 02:13:37",
      "content": "<p>As the first user (besides the author), I can confirm that the light-ffm is amazingly done. It saves lots of memory compared to libffm and is much faster. Highly recommended! :)</p>",
      "rawMarkdown": "As the first user (besides the author), I can confirm that the light-ffm is amazingly done. It saves lots of memory compared to libffm and is much faster. Highly recommended! :)",
      "votes": null
    },
    {
      "id": "157063",
      "postDate": "01/19/2017 03:01:58",
      "content": "<p>[quote=SRK;157059]</p>\n\n<p>That is great. So this code has already given you two third place solutions ;) </p>\n\n<p>[/quote]</p>\n\n<p>Not really. Winning kaggle is always about better features and massive ensemble. Thanks to Xiaozhou @bimbo and Takuya this time,  and don't be mistaken, we do have gigantic machines with 200 GB memory. So in the end, it is still XGB and ffm that get the best score. Looking forward to top teams' solution sharing!</p>",
      "rawMarkdown": "[quote=SRK;157059]\r\n\r\nThat is great. So this code has already given you two third place solutions ;) \r\n\r\n[/quote]\r\n\r\nNot really. Winning kaggle is always about better features and massive ensemble. Thanks to Xiaozhou @bimbo and Takuya this time,  and don't be mistaken, we do have gigantic machines with 200 GB memory. So in the end, it is still XGB and ffm that get the best score. Looking forward to top teams' solution sharing!",
      "votes": null
    },
    {
      "id": "157088",
      "postDate": "01/19/2017 06:45:08",
      "content": "<p>@rcarson: thanks for sharing and congrats. have you checked if lightffm generated better score than the standard libffm? or is the advantage only in resource usage and speed?</p>",
      "rawMarkdown": "rcarson: thanks for sharing and congrats. have you checked if lightffm generated better score than the standard libffm? or is the advantage only in resource usage and speed?",
      "votes": null
    },
    {
      "id": "157096",
      "postDate": "01/19/2017 07:31:18",
      "content": "<p>Can you push your feature engineering on this competition? I'm so interested in your features</p>",
      "rawMarkdown": "Can you push your feature engineering on this competition? I'm so interested in your features",
      "votes": null
    },
    {
      "id": "157100",
      "postDate": "01/19/2017 07:43:03",
      "content": "<p>@Sameh, our test shows something like apk: </p>\n\n<p>libffm with customized objective &gt; light-ffm with customized objective &gt;&gt; original libffm with logloss objective.</p>\n\n<p>So yeah,  you can expect light-ffm has some performance loss but it scale to more features with a limited machine.</p>",
      "rawMarkdown": "Sameh, our test shows something like apk: \r\n\r\nlibffm with customized objective > light-ffm with customized objective >> original libffm with logloss objective.\r\n\r\nSo yeah,  you can expect light-ffm has some performance loss but it scale to more features with a limited machine.",
      "votes": null
    },
    {
      "id": "157108",
      "postDate": "01/19/2017 08:31:47",
      "content": "<p>Hi rcarson\nCongrats for the third finish.\nI got inspired by one of your forum comments that you are modifying libffm and I have done some simple changes in libffm code to cache the binary data. Another one was i thinking of ignoring some fields by giving options on command line. But as I started late I didn't get time to implement it. You other ideas of reducing memory footprint are simply great.</p>",
      "rawMarkdown": "Hi rcarson\r\nCongrats for the third finish.\r\nI got inspired by one of your forum comments that you are modifying libffm and I have done some simple changes in libffm code to cache the binary data. Another one was i thinking of ignoring some fields by giving options on command line. But as I started late I didn't get time to implement it. You other ideas of reducing memory footprint are simply great.",
      "votes": null
    },
    {
      "id": "157112",
      "postDate": "01/19/2017 08:52:24",
      "content": "<p>Congrats on third rcarson. Impressive refinement of libffm. :-)</p>",
      "rawMarkdown": "Congrats on third rcarson. Impressive refinement of libffm. :-)",
      "votes": null
    },
    {
      "id": "157120",
      "postDate": "01/19/2017 09:43:59",
      "content": "<p>Congratulations rcarson and team, and thanks for publishing light-ffm and the pypy code. </p>",
      "rawMarkdown": "Congratulations rcarson and team, and thanks for publishing light-ffm and the pypy code.",
      "votes": null
    },
    {
      "id": "157126",
      "postDate": "01/19/2017 10:24:05",
      "content": "<p>Thanks a lot for publishing code, rcarson! </p>\n\n<p>And also for sharing idea of reimplementing FFM in forums early - it's really what inspired me in participating here. I also went this road, but took somewhat different implementation decisions, so hope will submit a one or two PRs based on my findings to help improve your tool ever further.</p>",
      "rawMarkdown": "Thanks a lot for publishing code, rcarson! \r\n\r\nAnd also for sharing idea of reimplementing FFM in forums early - it's really what inspired me in participating here. I also went this road, but took somewhat different implementation decisions, so hope will submit a one or two PRs based on my findings to help improve your tool ever further.",
      "votes": null
    },
    {
      "id": "157208",
      "postDate": "01/19/2017 17:29:39",
      "content": "<p>Thank you all for the reply. After merging with Takuya, I realized numerical feature could also be super useful and I should not throw them away. As long as the value is around 1, like the categorical feature, ffm should also pick it up. So I will make \"drop feature value\" as an option in case that there are no numerical features.\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F100236%2F64cc45bbe25144503bc93cf4b9e102f1%2Fmte.gif?generation=1594620515929361&amp;alt=media\" alt=\"\"></p>",
      "rawMarkdown": "Thank you all for the reply. After merging with Takuya, I realized numerical feature could also be super useful and I should not throw them away. As long as the value is around 1, like the categorical feature, ffm should also pick it up. So I will make \"drop feature value\" as an option in case that there are no numerical features.\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F100236%2F64cc45bbe25144503bc93cf4b9e102f1%2Fmte.gif?generation=1594620515929361&amp;alt=media)",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 157048,
      "author_name": "rdizzl3",
      "author_url": "",
      "post_date": "01/19/2017 01:12:15",
      "content": "<p>@rcarson - thank you for releasing this! This was my first time using FFMs. My computer wouldn't let me handle anything above 40 features total without automatically killing my job and training time was between 5-6 hours with the --on-disk option. I will certainly be using this code! Thanks again!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 157049,
      "author_name": "jiweiliu",
      "author_url": "",
      "post_date": "01/19/2017 01:15:43",
      "content": "<p>@RDizzl3, thank you! </p>\n\n<p>I would suggest you wait a little while since the code for now requires a different data format and additional field map matrix which could be confusing at the moment. </p>\n\n<p>I am gonna modify it so one can run this tool with original ffm data and parameters, without any changes</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 157056,
      "author_name": "sudalairajkumar",
      "author_url": "",
      "post_date": "01/19/2017 01:58:43",
      "content": "<p>Thank you @rcarson for open sourcing this excellent code. </p>\n\n<p>Will use this in the upcoming competitions :) </p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 157057,
      "author_name": "jiweiliu",
      "author_url": "",
      "post_date": "01/19/2017 02:02:57",
      "content": "<p>@SRK， thank you! actually we used earlier version of light-ffm in our 3rd finish of Grupo Bimbo but it was very rough at that time. :P</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 157059,
      "author_name": "sudalairajkumar",
      "author_url": "",
      "post_date": "01/19/2017 02:11:23",
      "content": "<p>That is great. So this code has already given you two third place solutions ;) </p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 157060,
      "author_name": "xiaozhouwang",
      "author_url": "",
      "post_date": "01/19/2017 02:13:37",
      "content": "<p>As the first user (besides the author), I can confirm that the light-ffm is amazingly done. It saves lots of memory compared to libffm and is much faster. Highly recommended! :)</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 157063,
      "author_name": "jiweiliu",
      "author_url": "",
      "post_date": "01/19/2017 03:01:58",
      "content": "<p>[quote=SRK;157059]</p>\n\n<p>That is great. So this code has already given you two third place solutions ;) </p>\n\n<p>[/quote]</p>\n\n<p>Not really. Winning kaggle is always about better features and massive ensemble. Thanks to Xiaozhou @bimbo and Takuya this time,  and don't be mistaken, we do have gigantic machines with 200 GB memory. So in the end, it is still XGB and ffm that get the best score. Looking forward to top teams' solution sharing!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 157088,
      "author_name": "samehif",
      "author_url": "",
      "post_date": "01/19/2017 06:45:08",
      "content": "<p>@rcarson: thanks for sharing and congrats. have you checked if lightffm generated better score than the standard libffm? or is the advantage only in resource usage and speed?</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 157096,
      "author_name": "nhuantd",
      "author_url": "",
      "post_date": "01/19/2017 07:31:18",
      "content": "<p>Can you push your feature engineering on this competition? I'm so interested in your features</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 157100,
      "author_name": "jiweiliu",
      "author_url": "",
      "post_date": "01/19/2017 07:43:03",
      "content": "<p>@Sameh, our test shows something like apk: </p>\n\n<p>libffm with customized objective &gt; light-ffm with customized objective &gt;&gt; original libffm with logloss objective.</p>\n\n<p>So yeah,  you can expect light-ffm has some performance loss but it scale to more features with a limited machine.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 157108,
      "author_name": "adityakumarsinha",
      "author_url": "",
      "post_date": "01/19/2017 08:31:47",
      "content": "<p>Hi rcarson\nCongrats for the third finish.\nI got inspired by one of your forum comments that you are modifying libffm and I have done some simple changes in libffm code to cache the binary data. Another one was i thinking of ignoring some fields by giving options on command line. But as I started late I didn't get time to implement it. You other ideas of reducing memory footprint are simply great.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 157112,
      "author_name": "frederik",
      "author_url": "",
      "post_date": "01/19/2017 08:52:24",
      "content": "<p>Congrats on third rcarson. Impressive refinement of libffm. :-)</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 157120,
      "author_name": "darraghdog",
      "author_url": "",
      "post_date": "01/19/2017 09:43:59",
      "content": "<p>Congratulations rcarson and team, and thanks for publishing light-ffm and the pypy code. </p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 157126,
      "author_name": "alexeynoskov",
      "author_url": "",
      "post_date": "01/19/2017 10:24:05",
      "content": "<p>Thanks a lot for publishing code, rcarson! </p>\n\n<p>And also for sharing idea of reimplementing FFM in forums early - it's really what inspired me in participating here. I also went this road, but took somewhat different implementation decisions, so hope will submit a one or two PRs based on my findings to help improve your tool ever further.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 157208,
      "author_name": "jiweiliu",
      "author_url": "",
      "post_date": "01/19/2017 17:29:39",
      "content": "<p>Thank you all for the reply. After merging with Takuya, I realized numerical feature could also be super useful and I should not throw them away. As long as the value is around 1, like the categorical feature, ffm should also pick it up. So I will make \"drop feature value\" as an option in case that there are no numerical features.\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F100236%2F64cc45bbe25144503bc93cf4b9e102f1%2Fmte.gif?generation=1594620515929361&amp;alt=media\" alt=\"\"></p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "157042": "Congratulations to winners: Bowen-Yuan, Eureka, Daniel_NTU, nomo, hugepanda) and\r\nbrain-afk (Μαριος Μιχαηλιδης KazAnova, Faron, Darragh, Alexey Noskov). Also I want to thank my teammates for their great effort! Especially @Takuya, really brilliant work!\r\n\r\n\r\n**This is not a summary of solution** of our team, Three Data Points. The honor will be **Takuya's. (CuteChibiko).** \r\n\r\nIn this post, I'll just introduce two tools I developed in the contest. light-ffm for my best single model, 0.693x lb and stack-nn, 0.695x lb. Both of them use less then 5 GB CPU memory and are faster than some popular alternatives, like ffm and xgb for the same feature set. \r\n\r\nlight-ffm is based on libffm with the goal to accelerate out-of-core performance without sacrificing much performance. A submission can be generated in 2.5 hours.\r\n\r\ncode:  https://github.com/daxiongshu/light-ffm\r\n\r\ndoc:    https://github.com/daxiongshu/light-ffm/blob/master/light-ffm.pdf\r\n\r\nMajor update of light-ffm is expected in near future: support both old and new format, support regression, multi-classification, ranking and so on. Codes also need to be cleaned in a great deal.\r\n\r\nstack-nn is coded with tensorflow-gpu for 2nd level stacking (numerical features only) which can generate a reasonably good submission 0.695x in 20 mins with GPU. It scales to 200+ numerical features within 16 GB CPU memory but we didn't have that many useful features in the end :P\r\n\r\ncode: https://github.com/daxiongshu/stack-nn-tensorflow\r\n\r\nI don't have a doc yet but the basic idea is to 1) use 2 level batching to make sure data fit in CPU memory and load fast and 2) per-group softmax to optimize apk.\r\n\r\nAny feedback are highly appreciated!",
    "157048": "rcarson - thank you for releasing this! This was my first time using FFMs. My computer wouldn't let me handle anything above 40 features total without automatically killing my job and training time was between 5-6 hours with the --on-disk option. I will certainly be using this code! Thanks again!",
    "157049": "RDizzl3, thank you! \r\n\r\nI would suggest you wait a little while since the code for now requires a different data format and additional field map matrix which could be confusing at the moment. \r\n\r\nI am gonna modify it so one can run this tool with original ffm data and parameters, without any changes",
    "157056": "Thank you @rcarson for open sourcing this excellent code. \r\n\r\nWill use this in the upcoming competitions :)",
    "157057": "SRK， thank you! actually we used earlier version of light-ffm in our 3rd finish of Grupo Bimbo but it was very rough at that time. :P",
    "157059": "That is great. So this code has already given you two third place solutions ;)",
    "157060": "As the first user (besides the author), I can confirm that the light-ffm is amazingly done. It saves lots of memory compared to libffm and is much faster. Highly recommended! :)",
    "157063": "[quote=SRK;157059]\r\n\r\nThat is great. So this code has already given you two third place solutions ;) \r\n\r\n[/quote]\r\n\r\nNot really. Winning kaggle is always about better features and massive ensemble. Thanks to Xiaozhou @bimbo and Takuya this time,  and don't be mistaken, we do have gigantic machines with 200 GB memory. So in the end, it is still XGB and ffm that get the best score. Looking forward to top teams' solution sharing!",
    "157088": "rcarson: thanks for sharing and congrats. have you checked if lightffm generated better score than the standard libffm? or is the advantage only in resource usage and speed?",
    "157096": "Can you push your feature engineering on this competition? I'm so interested in your features",
    "157100": "Sameh, our test shows something like apk: \r\n\r\nlibffm with customized objective > light-ffm with customized objective >> original libffm with logloss objective.\r\n\r\nSo yeah,  you can expect light-ffm has some performance loss but it scale to more features with a limited machine.",
    "157108": "Hi rcarson\r\nCongrats for the third finish.\r\nI got inspired by one of your forum comments that you are modifying libffm and I have done some simple changes in libffm code to cache the binary data. Another one was i thinking of ignoring some fields by giving options on command line. But as I started late I didn't get time to implement it. You other ideas of reducing memory footprint are simply great.",
    "157112": "Congrats on third rcarson. Impressive refinement of libffm. :-)",
    "157120": "Congratulations rcarson and team, and thanks for publishing light-ffm and the pypy code.",
    "157126": "Thanks a lot for publishing code, rcarson! \r\n\r\nAnd also for sharing idea of reimplementing FFM in forums early - it's really what inspired me in participating here. I also went this road, but took somewhat different implementation decisions, so hope will submit a one or two PRs based on my findings to help improve your tool ever further.",
    "157208": "Thank you all for the reply. After merging with Takuya, I realized numerical feature could also be super useful and I should not throw them away. As long as the value is around 1, like the categorical feature, ffm should also pick it up. So I will make \"drop feature value\" as an option in case that there are no numerical features.\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F100236%2F64cc45bbe25144503bc93cf4b9e102f1%2Fmte.gif?generation=1594620515929361&amp;alt=media)"
  },
  "source": "meta"
}