【AnyQ】如何添加插件

2023-11-12

一、已有插件

  • 字典插件

此类插件继承DictInterface接口

    • 哈希词典:HashAdapter<TYPE1, TYPE2>
    • 干预词典:String2RetrievalItemAdapter
    • 切词词典: WordsegAdapter
    • Paddle匹配模型词典: PaddleSimAdapter
    • Tensorflow模型词典: TFModelAdapter
  • Analysis插件

此类插件继承AnalysisMethodInterface接口

    • 切词:AnalysisWordseg
    • query语义向量表示:AnalysisSimNetEmb
    • query替换: AnalysisQueryIntervene
  • Retrieval插件

此类插件继承RetrievalPluginInterface接口

    • Term检索:TermRetrievalPlugin
    • 语义检索:SemanticRetrievalPlugin
    • 人工干预:ManualRetrievalPlugin
  • Solr查询插件

此类插件继承SolrQInterface接口

    • EqualSolrQBuilder:字段等于
    • BoostSolrQBuilder:字段term加权
    • ContainSolrQBuilder:字段包含关键词
    • SynonymSolrQBuilder:字段term同义词
    • DateCompareSolrQBuilder:日期字段比较
  • Matching插件

此类插件继承MatchingInterface接口

    • 编辑距离相似度:EditDistanceSimilarity
    • Cosine相似度:CosineSimilarity
    • Jaccard相似度: JaccardSimilarity
    • BM25相似度: BM25Similarity
    • Paddle匹配模型相似度: PaddleSimilarity
    • Tensorflow匹配模型相似度:TFSimilarity
    • 对候选切词:WordsegProcessor
  • Rank插件

此类插件继承RankPredictInterface接口

    • 线性预测模型: PredictLinearModel
    • XGBoost预测模型: PredictXGBoostModel
    • 特征选择预测模型:PredictSelectModel
  • 请求处理插件
    • 请求解包插件(继承ReqPreprocInterface接口):AnyqPreprocessor
    • 请求包装插件(继承ReqPostprocInterface接口):AnyqPostprocessor

二、添加插件

以BM25Similarity插件为实例,说明如何添加用户自定义插件。

1、头文件定义

  • BM25Similarity是Matching插件,需继承MatchingInterface接口,并重写相关的虚函数.

include/matching/lexical/bm25_sim.h

 ...
 
 class BM25Similarity : public MatchingInterface {
 public:
 	BM25Similarity();
 	virtual ~BM25Similarity() override;
 	virtual int init(DualDictWrapper* dict, const MatchingConfig& matching_config) override;
 	virtual int destroy() override;
 	virtual int compute_similarity(const AnalysisResult& analysis_res,
 		 RankResult& candidates) override;
 ...
 };
  • 注册BM25Similarity插件.

include/common/plugin_header.h

 ...

 #include "matching/lexical/bm25_sim.h"
 ...

 REGISTER_PLUGIN(BM25Similarity);
 ...

2、功能实现

  • 实现构造、析构、init、destroy、compute_similarity等函数。

src/matching/lexical/bm25_sim.cpp

 ...
 BM25Similarity::BM25Similarity(){
 ...
 }
 ...
 BM25Similarity::~BM25Similarity(){
 ...
 }
 ...
 int BM25Similarity::init(DualDictWrapper* dict, const MatchingConfig& matching_config) {
 ...
 }
 ...
 int BM25Similarity::destroy() {
 ...
 }
 ...

3、如何编译

mkdir build && cd build && cmake .. && make

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【AnyQ】如何添加插件 的相关文章

随机推荐

  • 五十款阿里开源软件说明介绍

    阿里巴巴的Github代码托管地址 https github com alibaba 通过写这篇文章从开源中国站上面看了很多 也从那里将开源软件的基本的介绍和下载地址拷贝到了文章当中 总体给我的一个感受就是阿里的开源实在太强大了 多到需要花
  • jenkins自动部署分布式项目(七)——Jenkins配置企业微信通知

    一 配置企业微信 1 打开企业微信手机端 打开群设置 找到群机器人 2 点击进入 然后点击添加 3 名字自己随意取 添加成功后 复制好Webhook地址 在配置Jenkins时使用 二 配置jenkins 1 安装插件 1 打开jenkin
  • linux-快捷键

    linux快捷键 ctrl a 移动到行首 ctrl e 移动到行尾 ctrl u 删除光标之前的字符 ctrl k 删除光标之后的字符 ctrl l 清空屏幕终端内容 同于clear
  • 使用cocotools对yolov5 6.1的检测结果进行评估(其他模型类似,只需要调整数据格式为coco的就行)

    介绍 本博客是讲如何使用yolov5对测试集进行检测 然后使用cocotools进行评估 增加COCOeval的每个类别ap显示 5 0版本模型看这个博客 代码 5 0版链接 6 1版链接 环境 pytorch只需要保证能跑起来yolov5
  • 基于FPGA的简易频率计(Verilog HDL)

    文章目录 1 设计要求 2 方案 3 单元电路设计 3 1 FPGA部分模块电路代码 3 1 1分频电路 3 1 2主控电路 3 1 3计数电路 3 1 4译码显示电路 3 1 5超量程指示电路 3 2外部电路设计 3 3顶层电路设计图 4
  • Python关于import的实验(6) 在子包中的模块的import语句作为子程序被调用并且也可以作为主程序独立执行,则必须要使用绝对导入

    Note that relative imports are based on the name of the current module Since the name of the main module is always main
  • Iceberg 学习笔记

    本博客对应于 B 站尚硅谷教学视频 尚硅谷数据湖Iceberg实战教程 尚硅谷 Apache Iceberg官方联合推出 为视频对应笔记的相关整理 1 Iceberg简介 1 1 概述 为了解决数据存储和计算引擎之间的适配的问题 Netfl
  • stm32:error: #268: declaration may not appear after executable statement in block

    今天写中断函数时报错 error 268 declaration may not appear after executable statement in block 谷歌翻译直译过来就是 声明可能不会出现在块中的可执行语句之后 其实语句没
  • 内存、ram、sram、dram、rom、eprom、epprom、flash、norflash、nandflash 的比较

    1 内存 什么是内存呢 在计算机的组成结构中 有一个很重要的部分 就是存储器 存储器是用来存储程序和数据的部件 对于计算机来说 有了存储器 才有记忆功能 才能保证正常工作 存储器的种类很多 按其用途可分为主存储器和辅助存储器 主存储器又称内
  • 黄金票据制作-新手入门

    0x01 前言 相信准备学习内网渗透的人 都会知道有黄金票据这个事情 而黄金票据的原理是和攻击方式 网站说的都一大堆概念 很难懂 这里我说声明一下 黄金票据的作用在于做权限维持 原理在于域服务器上有一个krbtgt用户 0x02 黄金票据和
  • 2023Go面试问答_Go Runtime

    Goroutine 定义 Goroutine 是一个与其他 goroutines 并行运行在同一地址空间的 Go 函数或方法 一个运行的程序由一个或更多个 goroutine 组成 它与线程 协程 进程等不同 它是一个 goroutine
  • 惯量比多少合适_惯量比

    电机的负载惯量估计方法 提供了一种电机的负载惯量估计方法 即便在电机的齿槽转矩较大或在负载机械系统中出现共振的时候 这种方法也能够 估计负载惯量 在加速反馈信号中检测振动 当检测到的振动等于或高于预定水平的时候 用系数 乘以估计惯量增益 其
  • 机器学习复习模拟题

    Q1 在回归模型中 下列哪一项在权衡欠拟合 under fitting 和过拟合 over fitting 中影响最大 A 多项式阶数 B 更新权重 w 时 使用的是矩阵求逆还是梯度下降 C 使用常数项 答案 A 解析 选择合适的多项式阶数
  • <刷题笔记>408计算机学科专业基础综合_操作系统_第一章_计算机系统概述_第一篇

    操作系统是一种系统软件 通用软件 普通大众都会使用的 如office 迅雷 专用软件 某些领域的专业人士使用的 如AutoCAD logic Pro 系统软件 计算机中负责管理 运行 控制和维护计算机系统资源的软件 如 操作系统 数据库管理
  • ORACLE updata是提示违反唯一约束条件

    如图所示 使用updata语句时提示违反唯一约束条件 语句如下 update table name set param1 xxx param2 xxx where param4 xxx 解决办法 一 能用Navicat for Oracle
  • wow.js

    一 页面在向下滚动的时候 有些元素会产生细小的动画效果 虽然动画比较小 但却能吸引你的注意 刚知道wow js这个插件 之前写的类似滚动时页面效果都是自己用jQuery写的 现在有了插件 开发更加快捷有效了 演示及下载地址 http www
  • PermissionX开源框架的使用

    背景 动态申请权限是一件特别繁琐的事情 涉及的权限一多 就让人头疼 Android提供给我们的运行时权限申请的API并不是很友好 比如我们需要动态申请打电话的功能 除了在roidManifest xml中声明权限之外 还要在执行拨打电话操作
  • 报错:Avoided redundant navigation to current location: “/login“.完美解决

    需求 登陆之后才能查看主页面 否则跳转至登录页 遇到的问题 一开始是打算直接在拦截器跳转路由的 发现会报错Avoided redundant navigation to current location login 后来灵机一动 用了全局路
  • vue报错:regeneratorRuntime is not defined

    报错原因是使用了 async await 没有配置 babel 导致语法不支持 所以才会报错 首先安装以下依赖 npm install babel plugin transform runtime save dev 或 npm i save
  • 【AnyQ】如何添加插件

    一 已有插件 字典插件 此类插件继承DictInterface接口 哈希词典 HashAdapter