如何选择负样本? 这是个很讲究的问题
语义匹配最简单介绍
NLP里面如果做相似度计算,或曰语义匹配,基本上分为两类:
- 浅层匹配:基于表层词,加上些权重。又可以划归为无监督流派。
- vsm,比如tfidf,bm25之类的。
- 或者最长公共子串,编辑距离这一类的。
- 还有一些稍微高级点,加上word embedding,比如wmd。
- 深度匹配:基于深度神经网络的,一般都是孪生网络(Siamese Networks)架构。需要训练数据,那么就是有监督或者半监督。
- 早些的比如DSSM(Deep Structured Semantic Model)、SimNet这些。
- 目前主流是预训练+微调范式,见下图。
- 用BERT等这些预训练的模型打个底,然后嘛,用任务相关的语料微调训练。
- 实操时,孪生的两侧如果是共享参数的,则一般做的是对称的Q-Q匹配之类的。
- 如果是非对称的,那么一般来说,一侧训练好的架构可以拆解为线下的encoder去对待检索的文档做向量化,另一侧来对线上的query做向量化。