Skip to main content

Cohere Reranker

Cohere 是一家加拿大初创公司,提供自然语言处理模型,帮助企业改善人机交互。

本笔记本展示了如何在检索器中使用Cohere的重排序端点。这是在ContextualCompressionRetriever的基础上构建的。

#!pip install cohere
#!pip install faiss

# 或者 (根据 Python 版本)

#!pip install faiss-cpu
# 获取新的令牌:https://dashboard.cohere.ai/

import os
import getpass

os.environ["COHERE_API_KEY"] = getpass.getpass("Cohere API Key:")
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
# 用于打印文档的辅助函数


def pretty_print_docs(docs):
print(
f"\n{'-' * 100}\n".join(
[f"文档 {i+1}:\n\n" + d.page_content for i, d in enumerate(docs)]
)
)

设置基本的向量存储检索器 (Set up the base vector store retriever)

让我们从初始化一个简单的向量存储检索器开始,并存储2023年的国情咨文(以块为单位)。我们可以设置检索器以检索大量(20个)文档。

from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.document_loaders import TextLoader
from langchain.vectorstores import FAISS

documents = TextLoader("../../../state_of_the_union.txt").load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
texts = text_splitter.split_documents(documents)
retriever = FAISS.from_documents(texts, OpenAIEmbeddings()).as_retriever(
search_kwargs={"k": 20}
)

query = "What did the president say about Ketanji Brown Jackson"
docs = retriever.get_relevant_documents(query)
pretty_print_docs(docs)
    文档 1:

总统的最重要的宪法责任之一就是提名人选担任美国最高法院的职位。

我在4天前提名了巡回上诉法院法官Ketanji Brown Jackson。她是我们国家最顶尖的法律智慧之一,将继续延续Breyer法官的卓越传统。
----------------------------------------------------------------------------------------------------
文档 2:

正如我去年所说的,特别是对我们年轻的跨性别美国人,作为总统,我将永远支持你们,让你们做真实的自己,发挥上帝赋予你们的潜力。

尽管我们似乎从来没有达成一致,但事实并非如此。去年,我签署了80项两党议案。从防止政府停摆到保护亚裔免受仍然普遍存在的仇恨犯罪,再到改革军事司法。
----------------------------------------------------------------------------------------------------
文档 3:

前私人执业的顶级诉讼律师。前联邦公共辩护人。来自公立学校教育工作者和警察家庭。一个共识的建设者。自从她被提名以来,她得到了广泛的支持,从警察兄弟会到民主党和共和党任命的前法官。

如果我们要推进自由和正义,我们需要保护边境并修复移民制度。
----------------------------------------------------------------------------------------------------
文档 4:

他见证了乌克兰人民的勇敢。

从泽连斯基总统到每一个乌克兰人,他们的无畏、勇气和决心激励着世界。

全体公民用自己的身体阻挡坦克。从学生到退休教师,他们变成了保卫家园的士兵。

正如泽连斯基总统在他在欧洲议会的演讲中所说的,“光明将战胜黑暗。”乌克兰驻美国大使今晚在这里。
----------------------------------------------------------------------------------------------------
文档 5:

我与他们的家人交谈,并告诉他们,我们永远对他们的牺牲感激不尽,我们将继续履行他们的使命,恢复每个社区应有的信任和安全。

我在这些问题上已经工作了很长时间。

我知道什么是有效的:投资于犯罪预防和社区警察,他们会巡逻,了解社区,并能恢复信任和安全。

所以,让我们不要放弃我们的街道。也不要在安全和平等正义之间做出选择。
----------------------------------------------------------------------------------------------------
文档 6:

哈里斯副总统和我一起竞选,为美国提出了一个新的经济愿景。

投资于美国。教育美国人。发展劳动力。从底层和中间层开始建设经济,而不是从上层开始。

因为我们知道,当中产阶级增长时,穷人有了向上攀升的阶梯,富人也会过得很好。

美国曾经拥有世界上最好的道路、桥梁和机场。

现在我们的基础设施在世界上排名第13。
----------------------------------------------------------------------------------------------------
文档 7:

今晚,我宣布司法部将指定一名负责调查疫情欺诈的首席检察官。

到今年年底,赤字将减少到我上任前的不到一半。

我是唯一一位在一年内削减赤字超过一万亿美元的总统。

降低成本也意味着要求更多的竞争。

我是一个资本家,但没有竞争的资本主义不是真正的资本主义。

这是剥削,它会推高价格。
----------------------------------------------------------------------------------------------------
文档 8:

在过去的40年里,我们被告知,如果我们给最富有的人减税,好处会向其他人传导下来。

但这种“向下滴漏”的理论导致了经济增长的疲软、工资下降、赤字增加,以及近一个世纪以来富人与其他人之间的差距最大。

哈里斯副总统和我一起竞选,为美国提出了一个新的经济愿景。
----------------------------------------------------------------------------------------------------
文档 9:

去年仅仅在美国,我们创造了369,000个新的制造业工作岗位。

这得益于像来自匹兹堡的工会钢铁工人JoJo Burgess这样的人。他的家族代代相传都是钢铁工人,他今晚与我们在一起。

正如俄亥俄州参议员谢罗德·布朗所说,“是时候埋葬‘锈带’的标签了。

是时候了。

但是,尽管我们经济中有很多亮点,创纪录的就业增长和更高的工资,但太多的家庭仍然在努力跟上账单。
----------------------------------------------------------------------------------------------------
文档 10:

我还呼吁国会:通过一项法律,确保在伊拉克和阿富汗受到有毒物质暴露影响的退伍军人最终获得应得的福利和全面的医疗保健。

第四,让我们终结我们所知道的癌症。

这对我、吉尔、卡玛拉和你们许多人来说都是个人问题。

癌症是美国的第二大死因,仅次于心脏病。
----------------------------------------------------------------------------------------------------
文档 11:

他永远不会扼杀他们对自由的热爱。他永远不会削弱自由世界的决心。

我们今晚在一个经历了这个国家有史以来最艰难的两年的美国相聚。

疫情是惩罚性的。

很多家庭每月都在挣扎,难以跟上食品、汽油、住房等费用的上涨。

我理解。
----------------------------------------------------------------------------------------------------
文档 12:

女士们,先生们,副总统,我们的第一夫人和第二先生。国会议员和内阁成员。最高法院法官。我的美国同胞们。

去年,COVID-19让我们分离。今年,我们终于再次相聚。

今晚,我们作为民主党人、共和党人和独立人士相聚。但最重要的是作为美国人。

我们有责任对彼此、对美国人民、对宪法负责。

我们坚定不移地相信,自由将永远战胜暴政。
----------------------------------------------------------------------------------------------------
文档 13:

我知道。

这些士兵中的一位就是我的儿子贝奥中校。

我们不确定是不是燃烧坑导致了他的脑癌,或者导致我们的许多军人患病。

但我致力于尽一切可能找出答案。

我致力于像俄亥俄州的Danielle Robinson这样的军人家庭。

他是一名士兵,国民警卫队。在科索沃和伊拉克担任战地医生。
----------------------------------------------------------------------------------------------------
文档 14:

不久之后,我们将加强《打击妇女暴力法案》,这是我三十年前首次起草的法案。我们需要向全国展示,我们可以团结一致,做出重大的事情。

因此,今晚我提出了一个国家团结议程。我们可以共同做的四件大事。

首先,打击阿片类药物危机。

我们可以做很多事情。增加预防、治疗、伤害减少和康复的资金。
----------------------------------------------------------------------------------------------------
文档 15:

第三,支持我们的退伍军人。

退伍军人是我们中最优秀的人。

我一直相信,我们有一种神圣的责任,即装备我们派往战争的所有人,并在他们回国后照顾他们和他们的家人。

我的政府正在提供就业培训和住房援助,现在还帮助低收入退伍军人免除医疗费用。

我们在伊拉克和阿富汗的部队面临许多危险。
----------------------------------------------------------------------------------------------------
文档 16:

当我们投资于我们的工人,当我们共同从底层和中间层开始建设经济时,我们可以做到长久以来没有做到的事情:建设一个更美好的美国。

两年多来,COVID-19影响着我们生活的每一个决定,也影响着整个国家的生活。

我知道你们感到疲倦、沮丧和筋疲力尽。

但我也知道这一点。
----------------------------------------------------------------------------------------------------
文档 17:

现在是时候了。

我们的责任之时。

我们的决心和良知之时,历史本身的考验。

正是在这一刻,我们的品格得以形成,我们的目标得以找到,我们的未来得以锻造。

我了解这个国家。

我们将通过考验。

保护自由和民主,扩大公平和机会。

我们将拯救民主。

尽管这些时期如此艰难,但我对今天的美国比我一生中的任何时候都更加乐观。
----------------------------------------------------------------------------------------------------
文档 18:

他不知道如何停止战斗,她也不知道。

在她的痛苦中,她找到了要求我们做得更好的目标。

今晚,Danielle,我们正在做到。

职业病管理局正在开创将有毒物质暴露与疾病联系起来的新方法,已经帮助更多的退伍军人获得福利。

今晚,我宣布我们将扩大对患有九种呼吸系统癌症的退伍军人的资格。
----------------------------------------------------------------------------------------------------
文档 19:

我理解。

我记得当年我爸爸不得不离开我们在宾夕法尼亚州斯克兰顿的家去找工作。我在一个家庭中长大,如果食品价格上涨,你会感受到它。

这就是为什么作为总统,我首先要做的事情之一就是努力通过《美国复苏计划》。因为人们正在受苦。我们需要采取行动,我们也做到了。

在我们历史的关键时刻,很少有立法能够像这样将我们从危机中拯救出来。
----------------------------------------------------------------------------------------------------
文档 20:

所以,让我们不要放弃我们的街道。也不要在安全和平等正义之间做出选择。

让我们团结起来保护我们的社区,恢复信任,并对执法人员负责。

这就是为什么司法部要求执法人员佩戴身体摄像头,禁止使用致命的掐颈手法,并限制其执行无敲门令。

使用CohereRerank进行重新排序

现在让我们用ContextualCompressionRetriever包装我们的基础检索器。我们将添加一个CohereRerank,使用Cohere重新排序端点对返回的结果进行重新排序。

from langchain.llms import OpenAI
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CohereRerank

llm = OpenAI(temperature=0)
compressor = CohereRerank()
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor, base_retriever=retriever
)

compressed_docs = compression_retriever.get_relevant_documents(
"关于Ketanji Jackson Brown,总统说了什么"
)
pretty_print_docs(compressed_docs)
    文档 1:

总统最重要的宪法责任之一就是提名某人担任美国最高法院的职位。

我在4天前提名了巡回上诉法院法官Ketanji Brown Jackson。她是我们国家最顶尖的法律智慧之一,将继续延续布雷耶法官的卓越传统。
----------------------------------------------------------------------------------------------------
文档 2:

我与他们的家人交谈,并告诉他们我们永远感激他们的牺牲,我们将继续履行他们恢复每个社区应得的信任和安全的使命。

我长期以来一直在处理这些问题。

我知道什么是有效的:投资于犯罪预防和社区警察,他们会巡逻,了解社区,恢复信任和安全。

所以让我们不要放弃我们的街道。也不要在安全和平等正义之间做出选择。
----------------------------------------------------------------------------------------------------
文档 3:

一位前私人执业的顶级诉讼律师。一位前联邦公共辩护人。来自公立学校教育工作者和警察家庭。一个共识建设者。自从她被提名以来,她得到了广泛的支持,从警察兄弟会到民主党和共和党任命的前法官。

如果我们要推进自由和正义,我们需要确保边境安全并修复移民制度。

当然,您可以在问答流水线中使用这个检索器。

from langchain.chains import RetrievalQA
chain = RetrievalQA.from_chain_type(
llm=OpenAI(temperature=0), retriever=compression_retriever
)
chain({"query": query})
    {'query': '关于Ketanji Brown Jackson,总统说了什么',
'result': '总统说Ketanji Brown Jackson是全国最顶尖的法律智慧之一,她是一个共识建设者,得到了从警察兄弟会到民主党和共和党任命的前法官的广泛支持。'}