使用ElasticSearch完成大模型+本地知识库:BM25+Embedding模型+Learned Sparse Encoder 新特性
在ElasticSearch中,我们可以使用BM25来进行相关性评分,并结合嵌入模型(如transformers)来改善搜索结果。以下是一个简化的例子,展示如何在ElasticSearch中集成BM25和嵌入模型。
首先,你需要一个ElasticSearch集群,并确保你的文档包含两部分信息:基本信息和文本信息。
{
"title": "文档标题",
"content": "文档内容",
"embedding": [0.1, 0.2, ...] // 文档的嵌入向量
}
然后,你可以在ElasticSearch的设置中使用BM25,并使用嵌入模型的输出作为相关性评分的一部分。
PUT /my_index
{
"settings": {
"index": {
"similarity": {
"my_similarity": {
"type": "BM25",
"k1": 1.2,
"b": 0.75
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"similarity": "my_similarity"
},
"content": {
"type": "text",
"similarity": "my_similarity"
},
"embedding": {
"type": "dense_vector",
"dims": 100 // 嵌入向量的维度
}
}
}
}
在查询时,你可以结合BM25得分和嵌入向量得分:
GET /my_index/_search
{
"query": {
"function_score": {
"query": {
"match": {
"content": "查询内容"
}
},
"functions": [
{
"script_score": {
"script": {
"source": "cosineSimilarity(params.query_vector, 'embedding') + params.bm25_score",
"params": {
"query_vector": [0.1, 0.2, ...] // 查询的嵌入向量
}
}
}
}
],
"boost_mode": "sum"
}
}
}
在这个例子中,我们定义了一个my_similarity
的相似性评分,它使用了BM25公式。在查询时,我们使用了ElasticSearch的函数查询功能,结合了BM25得分和基于余弦相似度的嵌入向量得分。这样可以更好地结合传统搜索和深度学习的结果。
评论已关闭