狭义上讲给定一组文本,判断其是否语义相似比如今天天气不错 match 今儿个天不错呀 √今天天气不错 match 你的代码有bug ×又或者以分值形式给出相似度今天天气不错 match 今儿个天气不错呀 0.9今天天气不错 match 这几天天气不错 0.7今天天气不错 match 你的代码有bug 0.1广义上讲给定一组文本,计算某种自定义的关联度Natural Language inference两句话判断是否有关联,矛盾,中立明天要下雨vs 明天大晴天Text Entailment给出一段文本,和一个假设,判断文本是否能支持或反驳这个假设主题判断文章标题匹配内容等文本匹配的应用问答对话车载导航,聊天机器人,手机助手智能音箱,智能客服信息检索在浏览器能搜到与自己输入的文本相关的内容短文本vs短文本 知识库问答,聊天机器人等短文本vs长文本 文章检索,广告推荐等长文本vs长文本 新闻,文章的关联推荐等以智能问答中的智能客服为例说一下文本匹配在其中的应用基础资源:包括faq库,书籍文档,网页,知识图谱等问答系统:对基础资源进行了加工处理,形成问答所需要索引和模型等用户输入问题问答系统给出答案依照基础资源划分:1. 基于faq知识库的问答2. 基于文档/网页的书籍的问答3. 基于图像/视频的问答4. 基于知识图谱的问答5. 基于表格的问答6. 基于特定领域知识的问答7. 基于人工规则的问答依照答案产出方式划分1.检索式的问答答案原文或答案的多个片段存在于基础资源中2.生成式的问答答案文本不存在于基础资源,由问答系统来生成答案3.二者结合依照nlp相关技术划分1. 单轮问答 每次用户提一个问题都当作一个新的问题2. 多轮问答 这个就是允许用户进行追问3. 多语种问答4. 事实性问答 比如 问姚明身高多少 就是一个定论5. 开放性问答 比如 问姚明的地位 这个就是各有各的分析6. 多模态问答 比如在问答场景用户问你一张照片7. 选择性问答 多个选一个的问答方式8. 抽取式问答9. 生成式问答智能客服的价值相比于人工客服的优势毫秒级响应全年24小时在线精通所有业务知识只需培养管理员保存所有业务回答数据回复内容标准Faq知识库问答比如我的货还没到 那么我是找售后服务还是配送查询还是订单查询都有道理那么用户的体验感极差。列表展示所有常见问题,用户需要自己找到对应的问题,对用户不友好算法检索就可以避免这样让用户查找而是根据用户提出query直接给出答案那么就让用户以自然语言描述自己的问题,算法进行fap库的检索,给出对应的答案然后接下来先介绍一下相关名词问答对 :一个(或多个相似的)问题与它对应的答案faq库/知识库很多问答对组成的集合标准问每组问答对中的问题,有多个时为其中代表相似问/扩展问问答对中,标准问之外的其他问题用户问用户输入的问题知识加工人工编辑faq库的过程相似问生成,标准问聚类,意图层级构建等Faq库示例运行逻辑:1. 对用户问进行预处理2. 使用处理后的问题,与faq库中问题计算相似度3. 按照相似度分值排序4. 返回最相似问题对应的答案算法核心:语义相似度计算是faq问答的核心一般简称文本匹配 f(x,y) - score相似度分值合理,才可以找到正确的对应问题计算分值的同时,也要考虑速度那么有个问题就是我们可不可以不和Faq库中问题Q匹配而是直接和答案A匹配呢理论上是可以的,但是答案不一定是文本而是视频又或者图片所以一般不会与答案匹配文本匹配算法-编辑距离两个字符串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符示例如下插入 估计两个字 2次操作把 今替换明真换更不换好 3次操作把错给删了 1此操作一共6次操作similarity 1 - EDab/(max(La,Lb))在上面中EDab 就是操作次数 所以是 EDab 6max(La,Lb) 则是两个句子最长的那一个 所以 max(La,Lb) 7所以经过计算 similarity 1- 6/max(7,8) 0.25两个字符串完全一致,编辑距离 0相似度 1两个字符串完全不一致,编辑距离 较长者长度, 相似度 0文本编辑距离的代码怎么实现文本匹配算法-编辑距离-优缺分析优点:1. 可解释性强 公式较为简单也比较符合直觉因为对于非专业人士,相似度比较就是看有多少个字不一样2. 跨语种(甚至对于非语言序列)有效 比如 DNA相似度3. 不需要训练模型缺点:1. 字符之间没有语义相似度我没钱 俺没钱 0.662. 受无关词/停用词影响大我要办卡 你好我需要办卡 者两句话就是表明一个意思但是根据计算才0.53. 受语序影响大今天天气不错 天气不错今天 0.334. 文本长度对速度影响很大文本匹配算法- Jaccard相似度通用表述: 根据两个集合,不同元素所占的比例,来衡量两个样本之间的相似度用于文本匹配根据两个文本中,不同的字或词所占的比例,来衡量两个文本之间的相似度Jaccard相似度: J(A,B) |A∩B| / |A∪B| 文本元素交集/文本元素的并集今天天气真不错 公共字: 天,气估计明天天气更好 总字数: (7-1)(8-1)-2 11jaccard相似度: 2/11 0.18也可以以词为单位计算代码展示如果输入字符串,则得到基于字的jaccard相似度如果输入词的列表,则得到基于词的jaccard相似度该用词还是该用字看场景比如 我去 农行 取钱我去 农业银行 取钱这个情况就是应该用字了文本匹配算法 - Jaccard距离 - 优缺分析优点:1. 语序不影响分数(词袋模型)今天天气不错 天气今天不错 12. 实现简单,速度很快3. 可跨语种,无序训练缺点:1.语序不影响分数他打了我 我打了他 1 这个也是1,但是很明显这俩不是一个意思2.字词之间没有相似度衡量3.受无关此影响4. 非一致文本可能出现满分他是不知道 他不是不知道 这个也是1但是表达的意思不同文本匹配算法 -BM25算法(加强版TFIDF)常用在搜索引擎框架中,用来做文档和搜索问题的匹配,同样也可以用在问答中作文本匹配核心思想假如一个词在某类文本(假设为A类)中出现次数很多,而在其他类别文本(非A类)出现很少,那么这个词是A类文本的重要词(高权重词)恒星黑洞 --- 天文反之,如果一个词在出现在很多领域,则其对于任意类别的重要性都很差BM25是对TFIDF的一种改进,优化其表示效果BM25公式: Score(Q,d) 求和WiR(qi,d)qi 为问题中某词fi为词频k1,k2 ,b为可调节常数dl为文档长度avgdl 为所以文档平均长度这些参数和改动的意义在于控制文本长度对分值的影响BM25记住思想即可文本匹配算法-BM25算法-优缺分析优点:1.通过使用TF-IDF弱化了无关词的影响,强化了重要词的影响,使得效果大幅提升2.统计模型计算块,不需要迭代3.词袋模型跨语种等缺点:1.依然没有考虑词与词之间的相似性2. 需要一定的训练样本(faq库本身)3.对于新增类别,需要重新计算统计模型4.分值未归一化文本匹配算法 -word2vec如何用于文本匹配将文本中的所有词的词向量相加取平均这里可以用TFIDF结合,可以体现出句子中重要词特征文本-句向量句向量维度 词向量维度,不论文本长度文本相似度 向量相似度 向量夹角余弦值向量夹角为0余弦值为1文本匹配算法 - word2vec - 优缺分析优点:1.两个文本包含语义相似的词会提高相似度2.训练需要的数据简单(纯文本语料即可)3.计算速度快,可以对知识库内问题预先计算向量我们可以先把知识库问题转换为向量然后对于用户提出的问题转化为向量后计算相似度4.将文本转化为数字,使后续复杂模型称为可能缺点:1.词向量的效果决定句向量效果2.一词多意的情况难以处理 梨-苹果-华为3.受停用词和文本长度影响很大 像你好这种词4.更换语种,甚至更换领域,都需要重新训练文本匹配-深度学习文本匹配任务上有两种主要方式1.表示型这里可以理解为同样的Encode对两句话进行向量转化然后送入匹配层计算相似度表示型文本的训练方式对于两个匹配的样本预期输出分值为1对于两个匹配的样本预期输出分值为0本质上相当于2分类任务另外还有其他表示型第二种训练方式称为Triplet loss训练目标:使具有相同标签的样本在embedding空间尽量接近使具有不同标签的样本的embedding空间尽量远离保证在输入的3个样本中有两个是相似的一个不相似的Triplet loss(还用于人脸识别模型的训练)a: anchor 原点p: positive 与a同一类别的样本n: negative 与a不同类别的样本L max(d(a,p)-d(a,n)margin,0)margin的作用, 假如 d(a,p) d(a,n) 那么loss0,那么模型不会训练,那么当d(a,p)较大的时候Loss等于0模型不训练那显然不合理margin会调节的作用在人脸识别中的应用2.交互型这个交互性就是把S1和S2一起送到模型产生交互这俩是必须的而上面表示型则是可以S1,S2,可以单独计算。对比- 交互性vs表示型表示型优点: 训练好的模型可以对知识库内的问题计算向量,在实际查找过程中,只对输入文本做一次向量化缺点: 在向量化的过程中不知道文本重点交互性:优点: 通过对比把握句子重点缺点: 每次计算需要两个输入对比学习找到一种自监督方法训练得到一种好EnCoder海量向量查找假如我们有1亿以上的候选向量(表示型)对于一个给定向量,希望查找距离最接近的问答,搜索,推荐等场景均会使用我们会把海量向量存储到数据库,数据库会为向量设计一套索引在你输入一个向量后它会给你找出相似的KD树与向量索引的原理相似那么KD树是怎么做到不遍历所有向量能找到一个相似的空间切割假设有一点(3,5) 正常来讲它会跟所有的点都计算一遍,然后找到最近的,经过空间切割后,(3,5),,在(7,2)的时候,根据(7,2)的切割线x7,可以知道在(7,2)的左侧找到(5,4)同时根据的切割知道在y4的上面,那么我们只需要算(4,7),(5,4),(2,3) 就行因为到(7,2)以及到x7切割平面已经超过已知点的距离那么怎么选中间点和切割平面通过计算中位数和方差,为什么先把(7,2)作为顶点因为计算6个点的中位数选(5,4)和(7,2)都行切割平面看方差