Simcse+lucene搜索

1、背景介绍

依靠机器学习、深度学习算法对信息的深度感知能力,精准捕获用户投诉、建议意图、目的

2、技术方案

2.1、粗排召回方案

2.1.1、搜索引擎框架--Lucene

Lucence 中的分词器包含两个部分,分别是切词器 Tokenizer 和过滤器 TokenFilter。切词器顾名思义负责切,将一个句子切成一连串单词流,切词器输出的单词流是过滤器的输入,它负责去掉无用的词汇比如停用词,过滤器还可以是词汇转换,比如大小写转换,过滤器还可以生成新词汇,比如同义词。抽象类 Tokenizer 和 TokenFilter 都继承自 TokenStream 抽象类,Tokenizer 负责将文本(Reader)转成单词流,TokenFilter 负责将输入单词流转成另一个单词流。

有了上图中的流水线构造出的最终的 TokenStream,Lucene 就会将输入的文章灌入其中得到最终的单词流,然后对单词流中的每个单词建立 Key 到 PostingList 的映射以形成倒排索引。这里的单词流串联的是带有 Payload 的单词,每个单词都会有一些附加属性,诸于单词的文本、单词在文档中的偏移量、单词在单词流中的位置等。

2.1.1.1、分布式Lucene

Simcse+lucene搜索_第1张图片

  • 所有的server都共用同一个索引文件目录
  • 针对同一索引目录的写操作使用分布式锁进行控制

2.1.2、分词器

2.1.2.1、jieba分词

Simcse+lucene搜索_第2张图片

  • 分词特点
  1. 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析; 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义; 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
  2. 支持自定义词典
  1. 支持繁体分词
  2. MIT 授权协议

  • 自定义词典,载入词典
  1. 开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率,有利于模型更加专注于特定场景域。

2.1.3、停词表

停用词(Stop Words) ,词典译为“电脑检索中的虚字、非检索用字”。在SEO中,为节省存储空间和提高搜索效率,搜索引擎在索引页面或处理搜索请求时会自动忽略某些字或词,这些字或词即被称为Stop Words(停用词)。
停用词一定程度上相当于过滤词(Filter Words),不过过滤词的范围更大一些,包含黄色、政治等敏感信息的关键词都会被视做过滤词加以处理,停用词本身则没有这个限制。通常意义上,停用词(Stop Words)大致可分为如下两类:

使用十分广泛,甚至是过于频繁的一些单词。比如英文的“i”、“is”、“what”,中文的“我”、“就”之类词几乎在每个文档上均会出现,查询这样的词搜索引擎就无法保证能够给出真正相关的搜索结果,难于缩小搜索范围提高搜索结果的准确性,同时还会降低搜索的效率。因此,在真正的工作中,Google和百度等搜索引擎会忽略掉特定的常用词,在搜索的时候,如果我们使用了太多的停用词,也同样有可能无法得到非常精确的结果,甚至是可能大量毫不相关的搜索结果。

文本中出现频率很高,但实际意义又不大的词。这一类主要包括了语气助词、副词、介词、连词等,通常自身并无明确意义,只有将其放入一个完整的句子中才有一定作用的词语。如常见的“的”、“在”、“和”、“接着”之类,比如“SEO研究院是原创的SEO博客”这句话中的“是”、“的”就是两个停用词

2.1.4、同义词表

  • Synonyms 中文近义词工具包

通过同义词表提高引擎的搜索范围,例如“特朗普在美参加大选” VS “川普在美参加了今年的总统大选”;通过人名同义、地名同义、尽可能召回多的候选工单,提高粗排的召回率。

2.1.5、相似性计算方法

  • TF-IDF技术
    • 原理

在一份给定的文件里,词频 (term frequency, TF) 指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(分子一般小于分母 区别于IDF),以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。)

逆向文件频率 (inverse document frequency, IDF) 是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。

某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。

TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TFIDF实际上是:TF * IDF,TF词频(Term Frequency),IDF反文档频率(Inverse Document Frequency)。TF表示词条在文档d中出现的频率(另一说:TF词频(Term Frequency)指的是某一个给定的词语在该文件中出现的次数)。IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t具有很好的类别区分能力。如果某一类文档C中包含词条t的文档数为m,而其它类包含t的文档总数为k,显然所有包含t的文档数n=m+k,当m大的时候,n也大,按照IDF公式得到的IDF的值会小,就说明该词条t类别区分能力不强。(另一说:IDF反文档频率(Inverse Document Frequency)是指果包含词条的文档越少,IDF越大,则说明词条具有很好的类别区分能力。)但是实际上,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好代表这个类的文本的特征,这样的词条应该给它们赋予较高的权重,并选来作为该类文本的特征词以区别与其它类文档。这就是IDF的不足之处。

2.1.6、阈值控制

    • 通过阈值控制召回粗排数量
    • 通过阈值控制召回工单与Query的相关性

2.2、精排召回方案

2.2.1、SimCSE算法

2.2.1.1、无监督学习

Simcse+lucene搜索_第3张图片

  1. 利用模型中的Dropout mask,对每一个句子进行两次前向传播(论文中是从维基百科中随机选取了100w个句子进行训练),得到两个不同的embeddings向量,将同一个句子得到的向量对作为正样本对,对于每一个向量,选取其他句子产生的embeddings向量作为负样本,以此来训练模型

  2. How to use Dropout mask? 对于带有Dropout的模型,在训练过程中Dropout都是打开的,且对于每个不同样本其在前向传播的过程中Dropout都不是固定一致的,因此我们不需要做其他额外的设置,只需要将每个句子copy两份传入模型即可。
  1. 如何采样负样本?论文采取了我们熟悉的In-batch training即将同一个batch中其他不同源句子产生的dropout 增广embedding作为负样本,即损失函数中的hj+
  2. 为什么在计算相似度时我们需要对句子向量做L2正则?张俊林:对比学习研究进展精要给出了一个非常形象的解释,这样做的目的是将所有的句子向量映射在一个半径为1的超球体上,一方面我们将所有向量统一至单位长度,去除了长度信息是为了让模型的训练更加稳定;另一方面如果模型的表示能力足够好,能够把相似的句子在超球面上聚集到较近区域,那么很容易使用线性分类器把某类和其它类区分开(参考下图)。当然在图像领域上很多实验也证明了,增加L2正则确实能提升模型效果。

2.2.1.2、有监督学习

有监督对比学习最终选择了利用SNLI+MNLI数据集(For each premise and its entailment

hypothesis, there is an accompanying contradiction hypothesis) ,与无监督方法类似,将每一个premise和与其相对的entailment作为正样本对,把其对应的contradiction和同一个batch中其他premise的entailment和contradiction作为负样本训练即可

Simcse+lucene搜索_第4张图片

2.2.1.3、SimCSE算法衡量标准

  1. Alignment:衡量相似样本对应的特征向量在空间上分布的距离是否足够近

  1. Uniformity:衡量系统保留信息的多样性:映射到单位超球面的特征,尽可能均匀地分布在球面上,分布得越均匀,意味着保留的信息越充分。

  1. 作者将不同方法得到的Sentence Embeddings空间的Alignment和Uniformity指标进行比对(两个指标均为越小越好),通过下图我们可以得到相比于直接使用预训练的Bert,SimCSE方法较大程度提升了uniformity,这与我们之前的论证符合。与Bert-flow和Bert-whitening这类线性变换方法相比,SimCSE则通过拉近相似句子之间的空间距离,在Alignment上有较大的优势。总体来说SimCSE通过无监督/有监督的对比训练方法在保持Alignment的同时提高了句子向量在特征空间分布的均匀性。

Simcse+lucene搜索_第5张图片

3、方案架构

搜索流程如下

Simcse+lucene搜索_第6张图片

4、搜索结果评价

4.1、准确率和召回率

相关(Relevant)

无关(NonRelevant)

被检索到(Retrieved)

true positives(TP)

false positives(FP)

未被检索到(Not Retrieved)

false negatives(FN)

true negatives(TN)

召回率R计算公式:

准确率P计算公式:

在现有架构下,通过不断迭代,同时优化召回率和准确率。

你可能感兴趣的:(机器学习,NLP相关,搜索引擎,lucene,simcse,全文检索)