在大语言模型(LLM)如GPT-3的时代,处理和推理大规模文本数据的效率显得尤为重要。LLMLingua是一种创新的方法,利用经过精简训练的语言模型(如GPT2-small,LLaMA-7B),可以有效识别和移除提示中的非必要标记,从而在几乎不损失性能的情况下实现高达20倍的压缩。这篇文章将详细介绍如何使用LLMLingua作为文档压缩工具,改善LLM的推理效率。
LLMLingua通过使用经过紧凑训练的语言模型,识别文本中非必要的部分并移除。这种压缩不仅减少了处理的文本体积,还保持了文本的关键信息,从而在大语言模型上实现更快的推理。
我们将使用LangChain库来加载文本并设置向量存储检索器。我们将以2023年国情咨文为例,将其拆分成多个文档片段并存储在检索器中。
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
documents = TextLoader(
"../../how_to/state_of_the_union.txt",
).load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
texts = text_splitter.split_documents(documents)
embedding = OpenAIEmbeddings(model="text-embedding-ada-002")
retriever = FAISS.from_documents(texts, embedding).as_retriever(search_kwargs={"k": 20})
通过将检索器与LLMLingua压缩器结合,我们能够在压缩检索结果的同时保持信息完整。
from langchain.retrievers import ContextualCompressionRetriever
from langchain_community.document_compressors import LLMLinguaCompressor
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(temperature=0)
compressor = LLMLinguaCompressor(model_name="openai-community/gpt2", device_map="cpu")
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor, base_retriever=retriever
)
compressed_docs = compression_retriever.invoke(
"What did the president say about Ketanji Jackson Brown"
)
pretty_print_docs(compressed_docs)
通过结合LLMLingua文档压缩和QA生成步骤,我们可以更有效地从压缩文档中获取答案。
from langchain.chains import RetrievalQA
chain = RetrievalQA.from_chain_type(llm=llm, retriever=compression_retriever)
result = chain.invoke({"query": query})
通过LLMLingua,我们可以显著提高大语言模型的效率,同时保持信息完整性。这为在资源有限的环境中使用LLM提供了一条有效的路径。
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—
因篇幅问题不能全部显示,请点此查看更多更全内容