zoukankan      html  css  js  c++  java
  • 算法bug修复

    问题一:

    16
    0
    length:4
    length:4
    length:4
    length:4
    29
    0
    length:2
    length:2
    16
    0
    length:5
    length:5
    length:5
    length:5
    length:5
    38
    本来非零元素应该为5*8为40个,可是因为一句话中的相似词,会出现重复,所以可能出现前一个词的相似度和相似词,被后一个词所覆盖

    会导致出来的准确率不够准,

    也会导致

    为此,我们可能要引入word2vec里词的判断,只加入相似度大于某一个阈值的词。然而,这样的话,对于长短句子,怎么进行公平的比较?

    【可能我们topn 要测试一下取大一点了】

    topn设大有助于让我们更倾向于出现相同词,而不是相似词

    可能要做一个相同词的匹配,如果出现相同词,这个相同词要加在最后再进行word2vec词相似度的写入,这样才不会被其他词所覆盖

    又或者,我们在相似度赋值的时候,使用相加的方式?

    比如  但是 有一个相似词 但,相似度是0.8,

    然后  可是 有一个相似词 但,相似度是0.7,我们对于对于这个词的赋值,使用叠加1.5?好像也怪怪的。

    我觉得应该对于重复的词,我们取完全一样的相似度分布

    比如两个句子都出现但是,那么我们对 但是,取一模一样的词分布(可以把重复的词放在末尾进行赋值)

    对于两个不同的词,他们有相同的相似词呢?取相似度大的吧?这样的话,如果出现了这个词,则也对近义词理解有帮助

    对了,对于basesimilarity,我们应该取vec的非零值的个数,而不是用词数相乘,而且这样的话不用传topn,只要传入vec或者leng(vec nonzero)就好,

    这样会更准确,

    对了,我把所有相似度的分布,画成图,然后问一下大家怎么做归一化

    改进的话,是不是可以把设置的权重调低?

    考虑一下只是图谱如何弄

    ====================

    今天出现了一个算法bug

    微信提示收到多少钱
    ['微信', '收到', '提示', '多少钱']
    0.31954264640808105
    {'confidence': 0.3207103750440659, 'answer': "(匹配):微信提示收到多少钱('微信', '收到', '提示', '多少钱') (标准):微信提示收到多少钱"}
    {'confidence': 0.1334743309275807, 'answer': "(匹配):终身版的多少钱('多少钱', '终身版') (标准):这个收银系统怎么收费?"}
    {'confidence': 0.13280269790244556, 'answer': "(匹配):可以通过微信个人收款码?('微信', '收款码') (标准):可以通过微信个人收款码?"}
    {'confidence': 0.13262952072991352, 'answer': "(匹配):银豹有微信拉粉吗?('微信', '拉粉') (标准):银豹有微信拉粉吗?"}
    {'confidence': 0.1312973178102419, 'answer': "(匹配):有没有微信商户版的?('微信', '商户') (标准):有没有微信商户版的?"}
    {'confidence': 0.13003625241844238, 'answer': "(匹配):微信怎么绑?('微信', '绑') (标准):微信怎么绑?"}
    {'confidence': 0.13003625241844238, 'answer': "(匹配):微信里怎么看到银豹后台?('微信', '后台') (标准):微信里怎么看到银豹后台?"}
    {'confidence': 0.13003625241844238, 'answer': "(匹配):你们只支持微信吗?('微信', '支持') (标准):你们支持微信和支付宝吗?"}
    {'confidence': 0.1296702929762439, 'answer': "(匹配):漏单没有提示的吗?('漏单', '提示') (标准):系统能查看漏单或提示漏单吗?"}
    {'confidence': 0.12954782946680146, 'answer': "(匹配):刷卡器多少钱?('刷卡器', '多少钱') (标准):刷卡器多少钱?"}

    微信提示收到多少钱
    ['微信', '收到', '提示', '多少钱']
    0.3296504020690918
    {'confidence': 1.0, 'answer': "(匹配):微信提示收到多少钱('微信', '收到', '提示', '多少钱') (标准):微信提示收到多少钱"}
    {'confidence': 0.13507810593582123, 'answer': "(匹配):终身版的多少钱('多少钱', '终身版') (标准):这个收银系统怎么收费?"}
    {'confidence': 0.13367660240019172, 'answer': "(匹配):可以通过微信个人收款码?('微信', '收款码') (标准):可以通过微信个人收款码?"}
    {'confidence': 0.13367660240019172, 'answer': "(匹配):银豹有微信拉粉吗?('微信', '拉粉') (标准):银豹有微信拉粉吗?"}
    {'confidence': 0.13231996486433337, 'answer': "(匹配):有没有微信商户版的?('微信', '商户') (标准):有没有微信商户版的?"}
    {'confidence': 0.13100580420257674, 'answer': "(匹配):微信怎么绑?('微信', '绑') (标准):微信怎么绑?"}
    {'confidence': 0.13100580420257674, 'answer': "(匹配):收银机是多少钱('多少钱', '收银机') (标准):收银机是多少钱"}
    {'confidence': 0.13100580420257674, 'answer': "(匹配):微信里怎么看到银豹后台?('微信', '后台') (标准):微信里怎么看到银豹后台?"}
    {'confidence': 0.13100580420257674, 'answer': "(匹配):漏单没有提示的吗?('漏单', '提示') (标准):系统能查看漏单或提示漏单吗?"}
    {'confidence': 0.13100580420257674, 'answer': "(匹配):你们只支持微信吗?('微信', '支持') (标准):你们支持微信和支付宝吗?"}

    同样的一句话,可是两次提问,回答的却不一样。我中间有加一些别的。

    经测试,应该是我直接赋值vec1,vec2出了问题,以后碰到函数里面更改了vec1vec2的,最好还是用vec1_temp=vec1.copy()比较安全

    vec1_temp = vec1.copy()
    vec2_temp = vec2.copy()
    vec_index1 = vec1_nonzero_nonkeyword&vec2_zero
    vec_index2 = vec2_nonzero_nonkeyword&vec1_zero

    vec1_temp[vec_index1] = 1
    vec2_temp[vec_index2] = 1


    ==========
    经检验,一个词的句子与一个词的句子,他们之间完全相同,相似度最低是0.82,所以如果要去掉分词之后完全相同的,就去掉0.80以上的就行

    微信店铺
    ['微信店铺']
    0.4010460376739502
    {'confidence': 0.8242659161988843, 'answer': "(匹配):有没有微信店铺?('微信店铺',) (标准):有没有微信店铺?"}
    {'confidence': 0.11767885635119946, 'answer': "(匹配):微信店铺和网上商城是一回事吗?('网上商城', '微信店铺') (标准):微信店铺和网上商城是一回事吗?"}
    {'confidence': 0.0833948963312266, 'answer': "(匹配):微信店铺有什么用处?('微信店铺', '用处') (标准):微信店铺有什么用处?"}

    =============================

    今天遇到一个问题,当我要加入不重要词的时候,对于个TRUE FALSE的np array操作,然后使用这个向量作为nonkeywords

    发现巨慢! 查找一次竟然要用2秒

    我后来把这个向量改为0101的形式,然后使用vec_not_special = (vec_not_special==1),速度才回到正常值

    为什么会这样??

    vec1,vec_not_special = sent2vec(q1_cut,model,topn=10,sent_raw=question)
    vec_not_special = (vec_not_special==1)
    vec1_count_nonzero = np.sum(vec1!=0)
    vec1_nonzero_nonkeyword = (vec1>0)&vec_not_special
  • 相关阅读:
    数学人眼中的湖北(五)
    数学人眼中的湖北
    范德蒙德恒等式
    日本高中数学的学习范围
    怎样搞数学竞赛
    单色三角形问题
    shell wait 和sleep 对比
    上传本地文件到github仓库
    windows2008服务器设置系统启动时程序自动运行
    小程序运行报错:errMsg: "request:fail url not in domain list"
  • 原文地址:https://www.cnblogs.com/yjybupt/p/10007733.html
Copyright © 2011-2022 走看看