Macielyoung/sentence_representation_matching

句子匹配模型,包括无监督的SimCSE、ESimCSE、PromptBERT,和有监督的SBERT、CoSENT。

Python

97

8 commits

updated Oct 29, 2022

See the code

README

sentence_representation_matching

该项目主要是文本匹配相关模型,包含使用SimCSE、ESimCSE、PromptBert三种无监督文本匹配模型和SBert、CoSent两种有监督文本匹配模型。

无监督文本匹配

1. SimCSE

利用Transformer Dropout机制,使用两次作为正样本对比,以此来拉近正样本,推开负样本。

模型结构:

simcse

损失函数:

simcse_loss

模型效果:
dataPertainedPool_typeDropoutBatch_sizeDev_corrTest_corr
STS-Bhfl/chinese-bert-wwm-extavg_first_last0.1640.760760.70924
STS-Bhfl/chinese-bert-wwm-extavg_first_last0.2640.759960.71474
STS-Bhfl/chinese-bert-wwm-extavg_first_last0.3640.765180.71237
STS-Bhfl/chinese-roberta-wwm-extavg_first_last0.1640.759330.69070
STS-Bhfl/chinese-roberta-wwm-extavg_first_last0.2640.769070.72410
STS-Bhfl/chinese-roberta-wwm-extavg_first_last0.3640.772030.72155

参考:

1)https://github.com/princeton-nlp/SimCSE

2)https://github.com/KwangKa/SIMCSE_unsup

3)https://arxiv.org/pdf/2104.08821.pdf

2. ESimCSE

在SimCSE的基础上,通过重复句子中部分词组来构造正样本,同时引入动量对比来增加负样本。

模型结构:

esimcse

损失函数:

esimcse_loss

模型效果:
dataPertainedDup_rateQueue_numPool_typeDropoutBatch_sizeDev_corrTest_corr
STS-Bhfl/chinese-bert-wwm-ext0.232avg_first_last0.1640.772740.69639
STS-Bhfl/chinese-bert-wwm-ext0.232avg_first_last0.2640.770470.70042
STS-Bhfl/chinese-bert-wwm-ext0.232avg_first_last0.3640.779630.72478
STS-Bhfl/chinese-roberta-wwm-ext0.364avg_first_last0.1640.775080.7206
STS-Bhfl/chinese-roberta-wwm-ext0.364avg_first_last0.2640.774160.7096
STS-Bhfl/chinese-roberta-wwm-ext0.364avg_first_last0.3640.78093 0.72495

参考:https://arxiv.org/pdf/2109.04380.pdf

3. PromptBert

使用Prompt方式来表征语义向量,通过不同模板产生的语义向量构造正样本,同一批次中的其他样本作为负样本。

损失函数:

promptbert_loss

本实验使用两个句子模板:
1)[X],它的意思是[MASK]。
2)[X],这句话的意思是[MASK]。

在计算损失函数时为了消除Prompt模板影响,通过替换模板后的句子[MASK]获取的表征减去模板中[MASK]获取的表征来得到句子向量表征。
模型效果:
dataPertainedPool_typeDropoutBatch_sizeDev_corrTest_corr
STS-Bhfl/chinese-bert-wwm-extx_index0.1320.782160.73185
STS-Bhfl/chinese-bert-wwm-extx_index0.2320.783620.73129
STS-Bhfl/chinese-bert-wwm-extx_index0.3320.766170.71597
STS-Bhfl/chinese-roberta-wwm-extx_index0.1320.799630.73492
STS-Bhfl/chinese-roberta-wwm-extx_index0.2320.77640.72024
STS-Bhfl/chinese-roberta-wwm-extx_index0.3320.778750.73153

参考:https://arxiv.org/pdf/2201.04337.pdf

4. 模型对比

通过各组对比试验,并挑选模型最优测试集结果展示如下。

ModelPertained-BertPretrained-Roberta
SimCSE0.714740.72410
ESimCSE0.724780.72495
PromptBERT0.731850.73492

有监督文本匹配

1. SBert

使用双塔式来微调Bert,MSE损失函数来拟合文本之间的cosine相似度。

模型结构:

SBERT Siamese Network Architecture

参考:https://www.sbert.net/docs/training/overview.html

2. CoSent

构造一个排序式损失函数,即所有正样本对的距离都应该小于负样本对的距离,具体小多少由模型和数据决定,没有一个绝对关系。

损失函数:

cosent_loss

参考:

1)https://spaces.ac.cn/archives/8847

2)https://github.com/shawroad/CoSENT_Pytorch

Macielyoung/sentence_representation_matching

句子匹配模型,包括无监督的SimCSE、ESimCSE、PromptBERT,和有监督的SBERT、CoSENT。

Python

97

8 commits

updated Oct 29, 2022

See the code

README

sentence_representation_matching

该项目主要是文本匹配相关模型,包含使用SimCSE、ESimCSE、PromptBert三种无监督文本匹配模型和SBert、CoSent两种有监督文本匹配模型。

无监督文本匹配

1. SimCSE

利用Transformer Dropout机制,使用两次作为正样本对比,以此来拉近正样本,推开负样本。

模型结构:

simcse

损失函数:

simcse_loss

模型效果:
dataPertainedPool_typeDropoutBatch_sizeDev_corrTest_corr
STS-Bhfl/chinese-bert-wwm-extavg_first_last0.1640.760760.70924
STS-Bhfl/chinese-bert-wwm-extavg_first_last0.2640.759960.71474
STS-Bhfl/chinese-bert-wwm-extavg_first_last0.3640.765180.71237
STS-Bhfl/chinese-roberta-wwm-extavg_first_last0.1640.759330.69070
STS-Bhfl/chinese-roberta-wwm-extavg_first_last0.2640.769070.72410
STS-Bhfl/chinese-roberta-wwm-extavg_first_last0.3640.772030.72155

参考:

1)https://github.com/princeton-nlp/SimCSE

2)https://github.com/KwangKa/SIMCSE_unsup

3)https://arxiv.org/pdf/2104.08821.pdf

2. ESimCSE

在SimCSE的基础上,通过重复句子中部分词组来构造正样本,同时引入动量对比来增加负样本。

模型结构:

esimcse

损失函数:

esimcse_loss

模型效果:
dataPertainedDup_rateQueue_numPool_typeDropoutBatch_sizeDev_corrTest_corr
STS-Bhfl/chinese-bert-wwm-ext0.232avg_first_last0.1640.772740.69639
STS-Bhfl/chinese-bert-wwm-ext0.232avg_first_last0.2640.770470.70042
STS-Bhfl/chinese-bert-wwm-ext0.232avg_first_last0.3640.779630.72478
STS-Bhfl/chinese-roberta-wwm-ext0.364avg_first_last0.1640.775080.7206
STS-Bhfl/chinese-roberta-wwm-ext0.364avg_first_last0.2640.774160.7096
STS-Bhfl/chinese-roberta-wwm-ext0.364avg_first_last0.3640.78093 0.72495

参考:https://arxiv.org/pdf/2109.04380.pdf

3. PromptBert

使用Prompt方式来表征语义向量,通过不同模板产生的语义向量构造正样本,同一批次中的其他样本作为负样本。

损失函数:

promptbert_loss

本实验使用两个句子模板:
1)[X],它的意思是[MASK]。
2)[X],这句话的意思是[MASK]。

在计算损失函数时为了消除Prompt模板影响,通过替换模板后的句子[MASK]获取的表征减去模板中[MASK]获取的表征来得到句子向量表征。
模型效果:
dataPertainedPool_typeDropoutBatch_sizeDev_corrTest_corr
STS-Bhfl/chinese-bert-wwm-extx_index0.1320.782160.73185
STS-Bhfl/chinese-bert-wwm-extx_index0.2320.783620.73129
STS-Bhfl/chinese-bert-wwm-extx_index0.3320.766170.71597
STS-Bhfl/chinese-roberta-wwm-extx_index0.1320.799630.73492
STS-Bhfl/chinese-roberta-wwm-extx_index0.2320.77640.72024
STS-Bhfl/chinese-roberta-wwm-extx_index0.3320.778750.73153

参考:https://arxiv.org/pdf/2201.04337.pdf

4. 模型对比

通过各组对比试验,并挑选模型最优测试集结果展示如下。

ModelPertained-BertPretrained-Roberta
SimCSE0.714740.72410
ESimCSE0.724780.72495
PromptBERT0.731850.73492

有监督文本匹配

1. SBert

使用双塔式来微调Bert,MSE损失函数来拟合文本之间的cosine相似度。

模型结构:

SBERT Siamese Network Architecture

参考:https://www.sbert.net/docs/training/overview.html

2. CoSent

构造一个排序式损失函数,即所有正样本对的距离都应该小于负样本对的距离,具体小多少由模型和数据决定,没有一个绝对关系。

损失函数:

cosent_loss

参考:

1)https://spaces.ac.cn/archives/8847

2)https://github.com/shawroad/CoSENT_Pytorch