• 任务一 相关节目识别


    任务一 相关节目识别

    标签(空格分隔): 一找


    任务描述

    一、同一系列电影识别
    1、根据数据表t_movie_douban,参考电影名、别名、导演、演员等各个字段的相似性来判断电影之间是否是同一系列。
    2、识别出系列序号、系列名,比如:“速度与激情3:东京漂移”。
    二、重名电影识别
    根据数据表t_movie_douban,识别出名称相同的电影。
    三、结果输出
    结果分别输出到mysql以下两张表;
    t_movie_cluster_test:相关节目簇信息,属于同一相关节目的簇,存放该簇的信息。cluster_id:簇ID,自增;type:簇类型,1为同系列,2为重名;title:簇名,同系列时为系列名,重名节目时为节目名。
    t_movie_related_test:相关节目信息,存放簇与节目的映射关系。
    四、数据库信息
    host: summba-dev3:3306
    dbname: db_yeezhao_dolphin
    user: dolphin
    password: dolphinadmin
    五、指标
    准确率目标:90%。随机抽样100个簇,如果该簇的节目都是同系列或重名的,则为正确,由此算出准确率。
    召回率目标:90%。随机抽样100个节目,查看它是否正确地被(或没被)归到簇里,则为正确,由此算出准确率。
    六、参考
    代码:yz-dolphin-serv-crawler
    com.yeezhao.dolphin.crawler.related
    https://tower.im/s/a7GNv
    https://tower.im/s/89C6M
    https://tower.im/s/8cC6N

    方案

    技术方案:

    该任务可以建模为一个二元分类问题(同系列1、不同系列-1)。选择分类器的原因是仅凭title判断会造成误判,而分类器可以结合其他辅助信息自己学习出一套规则。

    1.用正则表达式对标题进行预处理

    去掉了代表系列的词:
    xxx之xxx,第x季,最终章,序章,第x章,后章,前章,续章, 剧场版,(美版),冒号(冒号前的首字符串末尾的系列号),第x集,OVA,OAD,第x部分,序曲,I,II,III,特别篇,Season,数字 ,第xx话,第x夜,第x部,第x卷,第x幕,第x期,外传 ,别传,新版, 高清版,特别篇等

    2.对预处理后的标题进行排序

    对title按照字典顺序进行排序,这样做的好处是能够把相似的title排列在一起,比较时只需要比较前后两条记录即可。这种比较方式优点是效率高,只需要O(n)次比较;如果穷举所有的pair,则要O(n^2)

    3.如何建立关系

    先直接比较两条记录的title,如果相同,则标注为重名;如果不同,则调用分类器对两条记录组成的特征向量进行分类,判断是否是同一系列,如果是,则合并到同一系列中;如果不是则新建一个簇。

    4.分类器的设计

    主要有以下几点要考虑:

    1)标号的产生。这个问题没有给我们标号,因此需要人工进行标定,这一部分采用了基于主动学习的方法来完成标定。

    2)特征的设计。目前想到的特征有标题相似度、子标题相似度、导演、作家、演员匹配数,类型相似度,出品地,语言,描述相似度,出品国家等。
    最后用到的特征如下:

    • 标题相似度:最长公共子序列

    • 子标题相似度: 同上

    • 导演、作家、演员特征定义为两个movie共同导演/演员数,若没有或者其中一个为NULL,则为0。

    • 类型相似度: 两部影片类型是否相同,比如均为喜剧片, 若相同则为1,不同(或其中一者为NULL)为0

    • 出品地、语言: 相同为1,不同为0

    • 年份差:两部电影出品年份的差除以20.0

    描述相似度特征 与标题相似度特征 定义相同

    3)正负样本比例的确定。暂定正负样本比为1:1。

    4)训练样本的选择。既要选择容易分的,也要选择在边界附近的。

    代码

    代码位于包com.yeezhao.dolphin.crawler.entertainment.related,结构体系如下:

    related>
    Cluster:簇类,存放同系列或同名电影
    FeatureExtractor:特征提取器,用了单例模式实现
    FeatureVector:特征向量类
    Movie:电影类,存放电影的信息
    RelatedMovieCrawler:相关电影爬虫类,为程序的入口
    Relation:电影和簇之间的关系类
    RelationExtractor:关系提取器,单例实现
    svm_predict:svm预测接口
    svm_train:svm训练接口

    注释都已经齐全,所以不详细介绍了

    遇到的问题

    1. 正则表达式将一些标题处理为空,比如第27章,爱情第二章
      这种情况没有太好的解决办法,通过加入规则来解决

    2. SVM分类器准确率不高,只有93%
      经过调试发现,问题出自年份中的噪声,比如19961997,199503这样的时间,解决办法为用正则表达式取前面的4位作为年份,同时对年份特征进行放缩,消除数量级对特征的影响,去噪后准确率达到97%

  • 相关阅读:
    【源码剖析】HashMap1.7 详解
    友链
    P4747 [CERC2017]Intrinsic Interval
    Educational Codeforces Round 97 简要题解
    CF908D New Year and Arbitrary Arrangement(期望 dp)
    一个方便的自定义注解,管理实体类
    Leetcode 657 机器人能否回到原点
    Leetcode 695 岛屿的最大面积 二维平面DFS
    WebSocket 的简单用例
    俄罗斯方块JAVA
  • 原文地址:https://www.cnblogs.com/wacc/p/5038450.html
Copyright © 2020-2023  润新知