模型:
flax-sentence-embeddings/multi-QA_v1-mpnet-asymmetric-Q
SentenceTransformers是一组模型和框架,可用于从给定的数据训练和生成句子嵌入。生成的句子嵌入可用于聚类、语义搜索和其他任务。我们使用两个独立的预训练模型,并使用对比学习目标对它们进行训练。问题和答案对来自StackExchange和其他数据集被用作训练数据,以使模型对问题/答案嵌入相似性更加鲁棒。我们在Hugging Face组织的比赛中开发了这个模型,并将其作为项目的一部分进行了开发。我们在运行该项目时受益于高效的硬件基础架构,运行了7个TPU v3-8,并且得到了来自Google的Flax、JAX和Cloud团队成员的关于高效深度学习框架的帮助。
这个模型集旨在用作搜索引擎的句子编码器。给定一个输入句子,它输出一个捕捉句子语义信息的向量。这个句子向量可以用于语义搜索、聚类或句子相似性任务。为了进行语义搜索,应该同时使用两个模型。
以下是使用 SentenceTransformers 库来获取给定文本特征的模型使用方法:
from sentence_transformers import SentenceTransformer model_Q = SentenceTransformer('flax-sentence-embeddings/multi-QA_v1-mpnet-asymmetric-Q') model_A = SentenceTransformer('flax-sentence-embeddings/multi-QA_v1-mpnet-asymmetric-A') question = "Replace me by any question you'd like." question_embbedding = model_Q.encode(text) answer = "Replace me by any answer you'd like." answer_embbedding = model_A.encode(text) answer_likeliness = cosine_similarity(question_embedding, answer_embedding)
我们使用了预训练的 Mpnet-base 。有关预训练过程的详细信息,请参考模型卡片。
我们使用对比目标对模型进行微调。形式上,我们从批次中每对可能的句子对中计算余弦相似性。然后,通过与真实对进行比较,应用交叉熵损失。
我们在TPU v3-8上训练了模型。我们以批量大小1024(每个TPU核心128个)进行了80,000个步骤的训练。我们使用了500的学习率预热。序列长度限制为128个标记。我们使用了AdamW优化器,学习率为2e-5。完整的训练脚本可在当前存储库中获取。
我们使用了多个Stackexchange问题-答案数据集的串联来微调我们的模型。还使用了MSMARCO、NQ和其他问题-答案数据集。
Dataset | Paper | Number of training tuples |
---|---|---|
1238321 | - | 4,750,619 |
1239321 | - | 364,001 |
12310321 | - | 73,346 |
12311321 | 12312321 | 87,599 |
12313321 | - | 103,663 |
12314321 | 12315321 | 325,475 |
12316321 | 12317321 | 64,371,441 |
12318321 | 12319321 | 77,427,422 |
12320321 | 12321321 | 9,144,553 |
12322321 | 12323321 | 3,012,496 |
12324321 Question/Answer | 12325321 | 681,164 |
SearchQA | - | 582,261 |
12326321 | 12327321 | 100,231 |