专栏首页小鹏的专栏[TextMatch框架] 基于召回和排序的文本搜索

[TextMatch框架] 基于召回和排序的文本搜索

git clone https://github.com/MachineLP/TextMatch
cd TextMatch
export PYTHONPATH=${PYTHONPATH}:../TextMatch
python tests/core_test/text_search_test.py

tests/core_test/text_search_test.py

import sys
from textmatch.core.text_match import TextMatch
from textmatch.core.qa_match import QMatch, AMatch, SemanticMatch
from textmatch.models.text_search.model_factory_search import ModelFactorySearch



def text_match_recall(testword, doc_dict):
    # QMatch
    q_match = QMatch( q_dict=doc_dict, match_models=['bow', 'tfidf', 'ngram_tfidf', 'albert']) 
    q_match_pre = q_match.predict(testword, match_strategy='score', vote_threshold=0.5, key_weight = {'bow': 1, 'tfidf': 1, 'ngram_tfidf': 1, 'albert': 1})
    # print ('q_match_pre>>>>>', q_match_pre )
    return q_match_pre 

def text_match_sort(testword, candidate_doc_dict):
    text_match = TextMatch( q_dict=candidate_doc_dict, match_models=['bm25', 'edit_sim', 'jaccard_sim'] )
    text_match_res = text_match.predict( query, match_strategy='score', vote_threshold=-100.0, key_weight = {'bm25': 0, 'edit_sim': 1, 'jaccard_sim': 1} )
    return text_match_res 


if __name__ == '__main__':
    doc_dict = {"0":"我去玉龙雪山并且喜欢玉龙雪山玉龙雪山", "1":"我在玉龙雪山并且喜欢玉龙雪山", "2":"我在九寨沟", "3":"我在九寨沟,很喜欢", "4":"很喜欢"}   
    query = "我在九寨沟,很喜欢"
    
    # 直接搜索
    mf = ModelFactorySearch( match_models=['bm25', 'edit_sim', 'jaccard_sim'] )
    mf.init(words_dict=doc_dict)
    pre = mf.predict(query)
    print ('pre>>>>>', pre) 

    
    # 先召回
    match_pre = text_match_recall( query, doc_dict )
    print( '召回的结果:', match_pre )

    candidate_doc_dict = dict( zip( match_pre.keys(), [doc_dict[key] for key in match_pre.keys()] ) )
    print ("candidate_doc_dict:", candidate_doc_dict)

    # 再排序
    # ['bm25', 'edit_sim', 'jaccard_sim']
    text_match_res = text_match_sort( query, candidate_doc_dict )
    print ('排序的score>>>>>', text_match_res) 



    '''
    # 排序
    mf = ModelFactorySearch( match_models=['bm25', 'edit_sim', 'jaccard_sim'] )
    mf.init(words_dict=candidate_doc_dict) 
    pre = mf.predict(query)
    print ('排序的结果>>>>>', pre) 
    '''
    
    '''
    召回的结果: {'2': 0.5995837299668828, '3': 0.9999999210000139, '4': 0.5460526286735667}
    candidate_doc_dict: {'2': '我在九寨沟', '3': '我在九寨沟,很喜欢', '4': '很喜欢'}
排序的score>>>>> {'2': 0.55, '3': 1.0, '4': 0.34285714285714286}
    '''

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [TextMatch框架] 简介

    TextMatch is a semantic matching model library for QA & text search … It’s easy ...

    MachineLP
  • 新一代海量数据搜索引擎 TurboSearch 来了!

    ? 本文作者:sololzluo,腾讯 AI Lab 开发工程师 一. TurboSearch 简介 AI Lab 多年一直在搜索领域进行深耕和积累,继搜搜网...

    腾讯技术工程官方号
  • WSDM Cup 2020检索排序评测任务第一名经验总结

    美团搜索与NLP部与国内两所高校组队,提出了一种基于BERT和LightGBM的多模融合检索排序解决方案,拿下了WSDM Cup 2020 Task 1榜单的第...

    美团技术团队
  • 「回顾」爱奇艺搜索排序模型迭代之路

    本次分享内容为爱奇艺在做视频搜索时,遇到的真实案例和具体问题;以及面对这些问题的时候,我们的解决方案。这次分享的ppt针对一线的开发人员,希望可以给一线的开发人...

    石晓文
  • lucence

    信息超负荷问题解决方案: 新的用户接口/智能代理 Lucene是一个高性能,可伸缩的信息搜索库,可以为应用程序添加索引和搜索能力. 版本: java/Perl/...

    radaren
  • 孙玄:转转如何打造AI工程架构体系

    孙玄@奈学教育
  • KDD Cup 2020多模态召回比赛亚军方案与搜索业务应用

    ACM SIGKDD(ACM SIGKDD Conference on Knowledge Discovery and Data Mining)是世界数据挖掘领...

    美团技术团队
  • KDD 2020 | 融合多视图行为信息的多任务查询补全推荐方法

    本文解读的是 KDD 2020 论文《Learning to Generate Personalized Query Auto-Completions via ...

    AI科技评论
  • KDD 2020 | 详解语义Embedding检索技术在Facebook搜索中的应用实战

    导读:今天分享一下Facebook发表在KDD 2020的一篇关于社交网络搜索中的embedding检索问题的工作,干货很多,推荐一读。

    石晓文

扫码关注云+社区

领取腾讯云代金券