Elasticsearch:BM25 及 使用 Elasticsearch 和 LangChain 的自查询检索器

BM25是一种常用的搜索信息检索模型,它基于词频(TF)和逆文档频率(IDF)的概念,并结合了文档的长度标准化(Dl)和查询的长度标准化(Ql)来评估查询和文档的相关性。

在Elasticsearch中,可以通过设置index.search.similarity参数来指定使用BM25相似性评分模型。

以下是一个简单的Elasticsearch设置,使用BM25相似性评分模型的例子:




PUT /my_index
{
  "settings": {
    "similarity": {
      "my_similarity": {
        "type": "BM25",
        "k1": 1.2,
        "b": 0.75
      }
    }
  }
}

在Elasticsearch中使用BM25进行查询时,可以指定相似性评分模型:




GET /my_index/_search
{
  "query": {
    "match": {
      "content": {
        "query": "Elasticsearch",
        "similarity": "my_similarity"
      }
    }
  }
}

在Python中,使用elasticsearch-dsl-py库可以很容易地设置相似性评分模型。以下是一个设置BM25相似性评分模型的例子:




from elasticsearch_dsl import connections, Document, Text, BM25Similarity, Similarity
 
connections.create_connection(hosts=['localhost:9200'])
 
similarity = Similarity('my_similarity', BM25Similarity(k1=1.2, b=0.75))
 
class MyDocument(Document):
    content = Text(similarity='my_similarity')
 
    class Index:
        name = 'my_index'
        settings = {
            'similarity': similarity
        }
 
if __name__ == '__main__':
    MyDocument.init()

在Python中使用Elasticsearch进行查询时,可以指定相似性评分模型:




from elasticsearch_dsl import Search
 
s = Search(using='localhost:9200', index='my_index')
s = s.query('match', content={'query': 'Elasticsearch', 'similarity': 'my_similarity'})
response = s.execute()

LangChain是一个用于构建和优化语言模型应用和工作流的Python库。LangChain提供了一个自QueryRewrite自动生成查询的功能,可以用来自动优化搜索查询。

以下是一个使用LangChain创建自QueryRewrite的例子:




from langchain import LLM, LLMChain, ConversationLLM, QR
 
llm = LLM(...)  # 初始化LLM模型
chain = LLMChain(llm, qr_type=QR.from_llm(llm))  # 创建包含自QueryRewrite的LLM链
 
response = chain.respond("搜索Elasticsearch相关的文档")

在这个例子中,LangChain会使用LLM模型来理解用户查询,并生成一个优化后的查询,然后将其用于搜索Elasticsearch中的相关文档。

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日