HARRIXJANG / ASIN-master

12 stars 2 forks source link

我认为有predict.py(202~235)是否有不充分之处?期望回复. #4

Open ealwen opened 1 year ago

ealwen commented 1 year ago
  1. MaxScores 列表与 MaxScoreFaceProposal列表同时生成,索引对齐,但是DiffentGroups列表是MaxScoreFaceProposal 去重后的列表,如果MaxScoreFaceProposal列表中确实有重复元素,那么在后续: IntersectScores.append(MaxScores[kk]) 这里将有问题
          # 上次循环
            maxscore = max(scoreinonepropose)
            MaxScores.append(maxscore)
            indexofMaxScore = scoreinonepropose.index(maxscore)
            MaxScoreFaceProposal.append(myindexofallindexsim[indexofMaxScore])
            allscoreofproposal.append(scoreinonepropose)
          # 循环结束

        DiffentGroups = []
        for j in range(len(MaxScoreFaceProposal)):
            if j == 0:
                DiffentGroups.append(MaxScoreFaceProposal[j])
            else:
                if MaxScoreFaceProposal[j] not in DiffentGroups:
                    DiffentGroups.append(MaxScoreFaceProposal[j])
            for diffentgroup in DiffentGroups:
            num = 0
            for element in diffentgroup:
                for otherdiffentgroup in DiffentGroups:
                    if diffentgroup != otherdiffentgroup:
                        if element in otherdiffentgroup:
                            num += 1
                            break
            if num == 0:
                IsolatedProposals.append(diffentgroup)
            else:
                IntersectProposals.append(diffentgroup)
                IntersectScores.append(MaxScores[kk])   # 这里有问题
  1. 还有一处,万一下面代码中的score值有相同的,但是list.index()只会返回第一个索引:

        IntersectScoresCopy = IntersectScores.copy()
        IntersectScoresCopy.sort(reverse=True)
        indexesofIntersectScores = []
        for IntersectScore in IntersectScoresCopy:
            index = IntersectScores.index(IntersectScore) #万一有相同的score
            indexesofIntersectScores.append(index)

    3.我的修正如下:

    DiffentGroups = []
    New_MaxScores=[] #-----------------> 增加
    for j in range(len(MaxScoreFaceProposal)):
        if j == 0:
            DiffentGroups.append(MaxScoreFaceProposal[j])
            New_MaxScores.append(MaxScores[j])
    
        else:
            if MaxScoreFaceProposal[j] not in DiffentGroups:
                DiffentGroups.append(MaxScoreFaceProposal[j])
                New_MaxScores.append(MaxScores[j]) #-----------------> 增加
    
    IsolatedProposals = []
    IntersectProposals = []
    IntersectScores = []
    kk = 0 #记录DiffentGroups的索引
    for diffentgroup in DiffentGroups: #对于每一个group 计算与其他group的交叉情况,如果没有交叉,正好,他就是一个实例
        num = 0
        for element in diffentgroup:
            for otherdiffentgroup in DiffentGroups:
                if diffentgroup != otherdiffentgroup:
                    if element in otherdiffentgroup:
                        num += 1
                        break
        if num == 0:
            IsolatedProposals.append(diffentgroup)
        else:
            IntersectProposals.append(diffentgroup)
            #IntersectScores.append(MaxScores[kk]) #感觉有问题,因为diffentgroup那一步真的可能过滤调一些东西,造成索引错误
            IntersectScores.append(New_MaxScores[kk])
        kk += 1
    
    # 对于存在交叉的组,按照分去重比如【0,1,2】与【1,2】
    # 首先先整理一下得分---------------------------------
    # IntersectScoresCopy = IntersectScores.copy()
    # IntersectScoresCopy.sort(reverse=True)# 降序拍,第一个最大
    # indexesofIntersectScores = []
    # 找降序排后的索引,因为index只返回以一个索引,有问题!!!
    # for IntersectScore in IntersectScoresCopy:
    #     index = IntersectScores.index(IntersectScore)
    #     indexesofIntersectScores.append(index) # 万一有得分一样的?
    
    # 上方注释,只用下面的一行即可
    indexesofIntersectScores = sorted(range(len(IntersectScores)), key=lambda k: IntersectScores[k], reverse=True)
    # 得分整理完毕------------------------------------

`

HARRIXJANG commented 1 year ago

十分感谢将发现的问题反馈与我,我按照该意见对代码进行了检查。 针对第一个问题,我发现在上传至github的代码中确实存在。因此,这部分代码将被进行修正。 针对第二个问题,实际上,根据前面的结果已经可以过滤掉很多结果了,得分一样的情况在本文的实验中很少。在本研究中目前并没有相对合适的规则选择一个更好的结果。因此,此处在得分最高的结果中随机选择一个分数相同的结果作为最终结果。 这部分内容仍需改进。 再次感谢!!!