一个简单的网络小说推荐系统 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
nladuo
V2EX    分享创造

一个简单的网络小说推荐系统

  •  
  •   nladuo
    nladuo 2017-04-24 13:55:16 +08:00 6457 次点击
    这是一个创建于 3173 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大概去年的时候 10 月份的时候,看到了 v 友的这篇帖子:一个简单的网文推荐系统,解决书荒

    这位 v 友当时没有给出源码地址,于是我就打算自己也实现一个。不过,由于算法复杂度太高以及自己学习的很浅(现在学习的也不深),也没有想到好的办法就暂时搁在了一边。拖到了最近,使用了局部敏感哈希(LSH)的方法降低了最近邻搜索的时间复杂度,也算简单的把它实现了,推荐结果算是勉强可以看了,效果如下图: screenshot

    算法流程如下:

    • 1 、爬取小说
    • 2 、小说分词
    • 3 、 TF-IDF 向量化
    • 4 、最近邻搜索

    由于小说爬取的比较杂乱,什么女频的男频的都有,所以有些推荐结果可能有些诡异,另外使用局部敏感哈希来搜索也会影响推荐的准确度,下面贴出链接希望 v 友能给出些改善建议。
    推荐测试地址:http://tx.kalen.site:38438/
    github 链接: https://github.com/nladuo/novelRS

    25 条回复    2017-04-25 16:32:55 +08:00
    coderluan
        1
    coderluan  
       2017-04-24 14:03:49 +08:00
    试了一下,楼主你其实是在骗我们吧,你这个就是彻头彻尾随机推荐吧...
    chengfu
        2
    chengfu  
       2017-04-24 14:05:30 +08:00
    好像很厉害的样子,既然是纯搜索功能,能不能做成一个 wp 可以使用的插件呢,集成到 wp 还是不错的说;另外,相似度的准确性怎么算的,有多高(不是说百分比数据,而是“相似度”这个参数本身)
    coderluan
        3
    coderluan  
       2017-04-24 14:10:08 +08:00
    说正经的,我建议楼主可以爬优书网(龙空)的数据,然后按分类和评分高低推荐。
    nladuo
        4
    nladuo  
    OP
       2017-04-24 14:13:59 +08:00
    @chengfu 相似度就是余弦相似度,把两本小说分词,转换成 Bag-of-Words 模型,通过两个向量的点乘再除以两个向量的模来计算相似度。
    enenaaa
        5
    enenaaa  
       2017-04-24 14:14:47 +08:00
    不如爬优书网的书单, 以用户和书单收藏来推荐。
    v2pro
        6
    v2pro  
       2017-04-24 14:15:13 +08:00   1
    LDA 或者 LSA 效果应该比 hash 好。。。
    如果是爬的小说,带有原来的类别或者标签就更好了,带标签的 LDA 效果更好些。。。
    wolfan
        7
    wolfan  
       2017-04-24 14:16:56 +08:00 via Android
    看书不如写书,写书不如神精网络生成,以后编剧什么的就不存在了。
    nladuo
        8
    nladuo  
    OP
       2017-04-24 14:21:25 +08:00
    @coderluan 谢谢建议,可能是由于书的质量原因吧,感觉 YY 小说的推荐结果稍微靠谱一些,不知道是不是我爬的数据的原因。像盘龙、星辰变这样的图书结果确实是不太好。
    nladuo
        9
    nladuo  
    OP
       2017-04-24 14:21:57 +08:00
    @v2pro 非常感谢,我去研究一下。
    v2pro
        10
    v2pro  
       2017-04-24 14:24:15 +08:00
    @nladuo 工具推荐 gensim ,简易好用,效果也不赖。
    nladuo
        11
    nladuo  
    OP
       2017-04-24 14:28:06 +08:00
    @v2pro 这个我知道,不过还没有试过,自己机器太渣跑什么都要跑好久。
    nladuo
        12
    nladuo  
    OP
       2017-04-24 14:28:40 +08:00
    @wolfan hh
    lcatt
        13
    lcatt  
       2017-04-24 15:07:23 +08:00
    很多小说都没有。。。。
    nladuo
        14
    nladuo  
    OP
       2017-04-24 15:10:14 +08:00
    @lcatt 只是一个 demo ,还不是很完善。
    lcatt
        15
    lcatt  
       2017-04-24 15:12:15 +08:00
    我搜《王牌进化》,结果出来的都是一些乱七八糟的推荐。。。理想中应该是同一作者的《最终进化》,然后是同一类别的其他作者热门书籍比如《死亡名单》《无限进化》等等。。。
    whale
        16
    whale  
       2017-04-24 15:44:05 +08:00
    目前在看的十几本小说都显示未找到!只能查全本?
    wzha2008
        17
    wzha2008  
       2017-04-24 17:03:11 +08:00
    小说推荐还是用协同过滤更好一些
    Sn0wM4n
        18
    Sn0wM4n  
       2017-04-24 17:50:58 +08:00
    搜了几部都未找到,看来我口味独特
    xiaome
        19
    xiaome  
       2017-04-24 18:05:35 +08:00
    ![QQ 图片 20170424180135.png]( https://ooo.0o0.ooo/2017/04/24/58fdcd374d49d.png)
    可能,也许,大概,应该是数据不够?
    smdx
        20
    smdx  
       2017-04-24 18:23:37 +08:00 via iPhone
    程序员会看小说吗
    smdx
        21
    smdx  
       2017-04-24 18:27:03 +08:00 via iPhone
    我总觉得程序员没有人文素养,说话和天涯得人,简直一个是油,一个是水,区别太大了
    TKKONE
        22
    TKKONE  
    PRO
       2017-04-24 19:25:17 +08:00
    图中的搜索完全和结果没有关联吧?
    FYK
        23
    FYK  
       2017-04-24 22:03:08 +08:00
    @smdx #21 啥意思啊 没太看懂
    MyFaith
        24
    MyFaith  
       2017-04-25 09:55:52 +08:00
    楼主头像和代码不太匹配呀
    nicoljiang
        25
    nicoljiang  
    PRO
       2017-04-25 16:32:55 +08:00
    这个推荐思路本身我觉得就有问题。
    小说的相关度是靠题材、背景、设定、情节等来判断的,其中最复杂的是设定。
    用关键词的方式来做,可预见的就不会很准。
    最近向量分析工具被玩坏了~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     779 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 21:10 PVG 05:10 LAX 13:10 JFK 16:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86