V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
anywalker707
V2EX  ›  Python

关于“直播答题发钱”辅助工具搜索推荐算法的讨论

  •  
  •   anywalker707 · 2018-01-18 09:13:07 +08:00 · 5425 次点击
    这是一个创建于 2488 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近直播火热,网上也看到很多通过“抓图 - 文字识别 - 百度搜题推荐”的程序介绍,自己也整理了一份
    ###########举例######################
    问题:9.中国历史上,在位时间最长的皇帝是?
    备选答案: ['康熙', '乾隆', '刘彻']

    Answer: ['刘彻(9.091%)', '康熙(63.636%)', '乾隆(27.273%)']
    #######################################
    想问问大家,对搜索答案这块的算法,怎么设计,有什么高见?

    先抛砖引玉,目前想到的算法:
    1. 通过百度网页,请求问题,以答案选项作为关键字,数数判断(主流)
    2. 对答案采用“中文分词”,针对答案可能是 xxx-yyy-zzz 无法全字匹配的情况
    3. 对问题进行“中文分词“,逆向搜索,针对 “下面那些不是美国的品牌”这类问题

    对于 1 已经实现,之前也有人发过存在“不”的情况处理;目前想通过 jieba 实现 2 和 3,但是总感觉这块的思考不是“很专业”,请大家吐槽
    41 条回复    2018-01-23 14:13:26 +08:00
    wisonic
        1
    wisonic  
       2018-01-18 09:17:34 +08:00 via iPhone   ❤️ 1
    hi
    zarte
        2
    zarte  
       2018-01-18 09:18:41 +08:00
    xxx 是?直接把题目拿去搜。
    其他带上答案搜。
    binjoo
        3
    binjoo  
       2018-01-18 09:26:32 +08:00
    昨天有一题,大提琴有几根弦。

    简单搜索(百度):我在百度页面中搜索,第一个结果就是百度知道的结果,4 根。但是给出的答案是 6 根。
    搜狗搜索(搜狗):我在搜狗页面中搜索,第一个结果就是搜狗立知的结果,4 根。但是给出的答案也是 6 根。

    不明白他们是怎么给出的答案。。
    victor97
        4
    victor97  
       2018-01-18 09:30:15 +08:00 via Android   ❤️ 1
    把问题带上选项搜,比较搜索结果数量
    mmrx
        5
    mmrx  
       2018-01-18 09:31:56 +08:00
    感觉第一种完全是看搜索引擎靠不靠普...目前来看,百度还是算了吧,换个 google 估计是不是好点?
    CaptainWho
        6
    CaptainWho  
       2018-01-18 10:17:58 +08:00 via iPhone
    @binjoo 我就在这题凉凉了
    logOo
        7
    logOo  
       2018-01-18 10:25:50 +08:00
    @CaptainWho 去年有部超火的日剧叫四重奏,就是四个四流音乐家追求音乐梦想的故事。我也拿这部剧当神剧,可真没注意过大提琴几根弦。
    yao978318542
        8
    yao978318542  
       2018-01-18 10:35:04 +08:00
    已经开始耍猴了 放弃吧 都是 5 圆场 adb 截图加分析加百度 我一共用了 5 秒 主持人念题然后显示出完整题目 2 秒 留给我的只有 3 秒 然后我还需要判断 答案的准确性,顺便浏览一下百度出的内容 再然后按下选择按钮 忙碌了半个小时最后得到 5 块钱 感觉好累啊
    cossak1991
        9
    cossak1991  
       2018-01-18 10:50:50 +08:00
    估计就是买了一部分题库,不然解释不了为什么百度、搜狗连大提琴有几根弦这种没有悬念的问题都能答错。
    vipper
        10
    vipper  
       2018-01-18 11:03:52 +08:00
    上深度学习系统吧
    vincentjie
        12
    vincentjie  
       2018-01-18 12:43:00 +08:00
    @binjoo
    好像没有听说过 6 根弦的大提琴啊,是我太孤陋寡闻了吗。
    azh7138m
        13
    azh7138m  
       2018-01-18 13:21:03 +08:00
    @vincentjie 看维基百科的话是巴洛克大提琴 4 根,还有一种 7 根的,6 根的是啥就不知道了
    piaochen0
        14
    piaochen0  
       2018-01-18 13:28:00 +08:00
    @yao978318542 有没有这种可能性。我怀疑是简单搜索,搜狗跟这些平台有合作....直接把题库都给他们了.....我写的跟你差不多,截图,ocr 分析,到网上搜结果,都要 5,6 秒左右才能出答案。而且 ocr 还不一定全能识别全。他们这个速度有点快了...
    zsdroid
        15
    zsdroid  
       2018-01-18 13:35:21 +08:00
    @azh7138m 阿贝鸠尼琴
    Gord3n
        16
    Gord3n  
       2018-01-18 13:38:36 +08:00 via Android
    🌝其实是人工答的,做一个前端页面,然后把答案发给用户
    yuriko
        17
    yuriko  
       2018-01-18 13:43:59 +08:00
    @Gord3n 我也觉得是人工答题 23333333
    TimePPT
        18
    TimePPT  
       2018-01-18 13:49:49 +08:00
    @piaochen0 并没有可能。快是因为搜狗用的是自家搜索引擎技术,基于深度学习的开放域问答系统,并且针对答题产品做了专项优化,并不是单纯从排序好的网页里简单 pattern 匹配。百度也一样。
    这也是为啥答的快,但不准。
    sola97
        19
    sola97  
       2018-01-18 13:55:14 +08:00 via Android
    @piaochen0 目前目前冲顶和西瓜的题目接口都是可以抓包调用的
    littleW2B
        20
    littleW2B  
       2018-01-18 13:57:20 +08:00
    @zsdroid 抓包直接拿到题目字符串,省去 ocr 时间
    yao978318542
        21
    yao978318542  
       2018-01-18 13:58:29 +08:00
    @piaochen0 #14 现在最重要的原因是 答案不一定准确 这就郁闷了 还需要自己去识别 而且现在都变聪明了 大部分都是 “一下”,“下列” 这种需要分词然后结合问题关键字去搜索的 我觉得这才是重点
    ss63551234ss
        22
    ss63551234ss  
       2018-01-18 14:22:48 +08:00
    @sola97 西瓜问题接口如何抓取。
    sola97
        23
    sola97  
       2018-01-18 14:47:25 +08:00   ❤️ 2
    @ss63551234ss #22 https://api-spe-ttl.ixigua.com/cdn/h/1/heartbeat/13241407?_rticket=1516257924160
    heartbeat(场次)和_rticket(时间)是变量,返回 protobuf 流,用 protoc --decode_raw 可解
    zts1993
        24
    zts1993  
       2018-01-18 15:02:33 +08:00
    @Gord3n #16 我觉得 UC 就是人工。
    piaochen0
        25
    piaochen0  
       2018-01-18 18:30:12 +08:00
    @sola97 玩了最新的一场,我有点感觉简单搜索是 OCR,这次有两题,选项没显示出来....
    vincentjie
        26
    vincentjie  
       2018-01-18 18:53:07 +08:00
    @piaochen0 OCR 太慢,还有识别错误的风险。Android 可以通过辅助应用相关的接口来获取题目,Xpose 应该也能实现类似效果。iOS 不知道有没有开放相关接口。
    sola97
        27
    sola97  
       2018-01-18 19:55:04 +08:00
    @Gord3n #16 百度简单搜索应该是人工,AI 会第一时间给出答案,然后过了四五秒会有人工纠正
    anywalker707
        28
    anywalker707  
    OP
       2018-01-18 21:37:56 +08:00
    @sola97 牛,不过不怎么会分析接口
    bayker
        29
    bayker  
       2018-01-19 08:49:04 +08:00
    问:“ xxx ”这句歌词的原唱没有唱下面的哪首歌?
    A:xxx
    B:xxx
    c:xxx

    这种要拐几个弯的问题,还不如自己答。
    pheyer
        30
    pheyer  
       2018-01-19 09:09:17 +08:00
    @piaochen0 有合作是不可能的
    pheyer
        31
    pheyer  
       2018-01-19 10:39:30 +08:00
    @vincentjie iOS 的话也可以入侵 app 内部 hook 相关函数得到的,非越狱就可以实现
    RoyLaw
        32
    RoyLaw  
       2018-01-19 14:16:40 +08:00
    @sola97 西瓜不是用 spe-frontier-b.snssdk.com 的 WS 接口取题目了么?我看 WS 里面出题的时候会又加扰的题目出现
    sola97
        33
    sola97  
       2018-01-19 14:57:36 +08:00
    @RoyLaw #33 应该不止一个接口,我这个目前能用,调用外部 protoc 解出完整数据包,整个流程比手机上慢 1 秒
    RoyLaw
        34
    RoyLaw  
       2018-01-19 15:14:46 +08:00
    @sola97 好哒~我也来试试看~~
    sola97
        35
    sola97  
       2018-01-19 18:16:49 +08:00
    @RoyLaw #35 我现在试了,这个接口延迟很高
    sola97
        36
    sola97  
       2018-01-19 18:21:06 +08:00
    @sola97 #36 答题都结束了才拿到题目
    v1nce0t
        37
    v1nce0t  
       2018-01-21 15:23:58 +08:00
    @sola97 您好,西瓜我用 jython 对下载下来的 protobuf 可以解包,但 protoc --decode_raw 如何做到实时自动解包出来转换为字符呢 ,能分享下代码嘛
    sola97
        38
    sola97  
       2018-01-21 15:27:08 +08:00
    @v1nce0t #38
    def decode_protobuf(content):
    p = subprocess.Popen('protoc --decode_raw', stdin=subprocess.PIPE,stdout=subprocess.PIPE)
    text=p.communicate(content)[0]
    return eval("b'''%s'''"%text.decode('utf8')).decode('utf8')
    forestyuan
        39
    forestyuan  
       2018-01-21 17:15:59 +08:00
    大提琴那题我也碰到了,正确答案是 4 根,平台没出错啊
    我用了两个手机答题,一个猜 5 根,一个猜 6 根,结果都凉了,所以印象特别深
    accacc
        40
    accacc  
       2018-01-23 14:12:33 +08:00
    @mmrx 就中文来说 还是百度靠谱 就知识点 各大搜索公司都有知识图谱
    accacc
        41
    accacc  
       2018-01-23 14:13:26 +08:00
    @vipper 深度学习如何快速出答案?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1458 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 17:11 · PVG 01:11 · LAX 09:11 · JFK 12:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.