当前位置: 代码迷 >> 综合 >> MDDR:Multimodal Dialogue Dense Retriever模型
  详细解决方案

MDDR:Multimodal Dialogue Dense Retriever模型

热度:76   发布时间:2023-12-14 00:08:19.0

MDDR:能够实现文本或图片两种模态多轮对话的检索,通过对海量多模态历史交互信息的检索召回与排序,实现对当前问题的应答。模型结构见下图。
在这里插入图片描述
模型子模块

  1. 闲聊分类模块
    针对多轮对话场景,判断当前用户问题是否含有充足的业务信息。在对话过程中,系统会使用该模块对用户问题进行判断,如果当前信息不足以进行有意义的应答,则系统会加上上一轮的用户问题,进行检索召回。该模块示例使用fasttext模型实现,并随机挑选了2200条此次比赛训练集中出现的数据进行标注,其中标签**"1"表示该问题是缺乏业务知识的闲聊**,标签**"0"表示该问题含有业务知识**。
  2. 问答挖掘模型
    该模块处理大赛发布的文本训练集数据,按照原始数据中的自然顺序将用户的消息当做问题将客服的消息当做当前问题的应答,并根据人为制定的规则和闲聊分类模型的结果,将含有充足业务信息的问题和应答作为文档知识库保存下来。通过训练多轮对话数据集构建QA文本知识库(注:当前示例业务逻辑依赖于闲聊分类模型,请先训练闲聊模型)。疑问点:构建QA文本知识库,并没有说如果当前Q的意图是chat, 而将上一次的Q作为当前A的Q, 而是直接将当前的QA对丢弃,不对此条数据构建知识库(这样势必会造成数据的损失), 而inference过程如果Q意图是chat, 会使用上轮Q的索引做当前轮的检索召回。
  3. 问答索引模块
    该模块将句子或图片转换成为稠密向量后,再建立相关索引,可以通过向量之间的的相似性,得到请求向量的相似向量,并可以得到索引前的原始对象。
    1. 文本问答对知识库
      该模块将句子或图片转换成为稠密向量后,再建立相关索引,可以通过向量之间的的相似性,得到请求向量的相似向量,并可以得到索引前的原始对象。
    2. 图片问答对知识库
      会通过预训练Resent18模型提取问题图片特征,需要从Pytorch官网下载预训练esent18模型https://download.pytorch.org/models/resnet18-5c106cde.pth,并在程序运行前export相关路径。本示例将图片问答知识库中的图片问题提取特征建立了索引,在后面的处理中通过问图片问题的相似性进行候选应答的召回。
  4. 应答文本分类模块
    该模型以预训练的bert-base-chinese为基础,在大赛数据上自动构建Q-A对训练数据,使用bert中Next Sentence Prediction (NSP)(原理:简单的做分类任务,就是判断两个句子序列是不是前后关系,True->label_1, False->label_0)的任务对模型进行fine-tune。该模型可以对检索模型的召回结果进行排序, 从而得到最终的用户问题应答。 该模块以问答挖掘模块产生的文本问答知识库为数据资源,其中以知识库中存在的QA对,Q_n与A_n问答对作为正例,以Q_n与A_random问答对作为负例,构建用于该模型训练的数据。在生成了模型所需的训练数据后,即可进行该模型的训练。
  5. 召回与排序模块
    1. 召回
      召回模块读取用户问题,并用闲聊模型进行判断,如果认为当前信息不充足,则会使用上轮用户问题进行检索。用户请求的句子会转换成平均词向量检索先前建立好的知识库,找出相似的候选QA对,并保存至临时文件test_text_recall.json;用户图片类问题请求通过预训练Resnet18提取特征后,检索图文问答知识库找出候选回答,并保存至临时文件test_safe_answer.json。代码详情如下:1. 获取有效Q,使用chat模型判断当前Q是否含有业务知识,不包含就获取上一轮的Q(但并没有判断上一轮的Q是否含有业务知识);2. 使用gensim.models.KeyedVectors模块计算Q的每个词向量的平均值作为句子的稠密向量;3. 与已建立的文本QA向量索引库进行匹配, 获取索引(即Q向量库对应向量的ID号,一般向量库的shape为(n, 200),n代表向量库一共有多少条向量,200代表每个向量长度,匹配获取就是最相似的是 0到n 中哪几条向量,并将其ID号返回,每个ID号在QA文本库中都对应一个A(答案),因为构建Q向量库就是根据QA文本知识库Q构建的,Q与A是一一对应的。向量索引检索召回,相似匹配距离是从大到小排序的,就是最相似的Q句子置于最后,一般不应该距离最近放最前面吗?);4. 根据索引在QA文档库中查找候选集。(image Q获取召回候选集的原理一样)
    2. 排序
      排序模块会读取临时文件存储的召回结果,并通过应答文本分类模型判断召回的结果是否与用户问题相匹配,从而找到最优的文本召回答案,并结合先前图文检索的答案,得到最终答案并转换成线上评测所需要的文本格式。代码详情如下:1. 首先将召回候选文档集(一系列的QA对, sentence1(Q) 与sentence2(A)一一对应), 送入NSP模型分类, 判断QA对是否为上下文关系, 分类label为1代表有上下文关系,分类label为0代表没有上下文关系;2. 获取第一次NSP分类label为1的QA对, 以此时A作为当前文本问题的最佳回复;3. 图像问题的最佳回复, 就是最佳召回文本的第一条回复(sentence2)。

Reference

  1. https://github.com/jd-aig/nlp_baai/blob/master/jddc2020_baseline/mddr/README.md
  相关解决方案