构建完全阿拉伯语检索增强生成(RAG)管道:

社区文章 发布于 2024 年 11 月 30 日

image/png

我们能否构建一个完全阿拉伯语的 RAG 管道? 构建一个完全阿拉伯语的检索增强生成(RAG)管道是一个雄心勃勃但可实现的目标。这需要结合检索系统、重排技术和生成模型方面的进展——所有这些都经过定制,以处理阿拉伯语的独特复杂性。尽管每个组件都扮演着不同的角色,但它们必须无缝协作,才能在下游 NLP 应用程序中提供高质量的结果。要创建一个全面的阿拉伯语 RAG 管道,我们需要三个主要组件:

1. 阿拉伯语检索系统 [GATE 嵌入]

检索系统是管道的基础,负责有效地从大型语料库中识别相关文档或文本块。对于专门的阿拉伯语检索系统,我们必须关注:

✨ 语义理解:利用能够捕捉阿拉伯语形态、句法和语义细微差别的嵌入。

✨ 预训练模型:使用针对阿拉伯语检索任务进行微调的最先进嵌入。

语义嵌入是此检索过程的基础,它将文本数据转换为编码语义信息的高维向量。这些嵌入是使用高级神经网络架构(如 BERT)生成的,这些架构已在大型语料库上进行了预训练,并针对特定任务进行了微调。然而,当前的语义嵌入模型面临多项挑战,包括管理上下文丰富的查询,以及在不影响准确性的前提下确保高效检索。此外,大多数嵌入主要针对英语或多语言上下文设计,对阿拉伯语的关注有限,这可能会降低其在阿拉伯语特定应用中的有效性。

我们为增强阿拉伯语检索所做的工作?

为了改进阿拉伯语检索,我们专注于创建高质量的嵌入,以适应阿拉伯语的独特特征。在这项工作中,一个重要的里程碑是开发了 Omartificial-Intelligence-Space/GATE-AraBERT-v1,一个专门为阿拉伯语文本嵌入设计的强大模型。

关于 GATE-AraBERT-v1:

GATE,即通用阿拉伯语文本嵌入,是一种专门的嵌入模型,使用SentenceTransformers框架在多任务设置中进行训练。这种设置确保模型在多个相关任务中表现良好,从而增强其多功能性和鲁棒性。

为了使 GATE-AraBERT-v1 在语义检索方面高效,它在以下数据集上进行了训练:🔸 AllNLI(所有自然语言推理)数据集,帮助模型理解句子之间的关系,如蕴涵、矛盾和中立。它还确保嵌入能够捕捉文本对之间的上下文和语义关系。

🔸 STS(语义文本相似性)数据集,增强模型量化两段文本在含义上相似程度的能力。

🔸 三元组和语义数据,模型还使用三元组进行训练,这优化了嵌入,以最小化语义相似文本之间的距离,同时最大化不相似文本之间的距离。

这种训练方法确保模型能够捕捉阿拉伯语文本中深层的语义细微差别,这对于有效的检索至关重要。主要优点

GATE-AraBERT-v1的开发和微调显著提高了阿拉伯语检索能力

🔹 语义理解:嵌入经过微调,能够理解阿拉伯语复杂的形态、句法和语义。

🔹 增强文档检索:通过利用语义相似性,即使缺少精确的关键词匹配,模型也能检索与用户查询高度相关的文档。

应用和影响

GATE-AraBERT-v1嵌入是构建需要精确和语义丰富的阿拉伯语检索系统的基石。从问答系统到信息检索平台,该模型显著提高了结果质量和用户满意度。

通过关注嵌入质量和使用多样化、语义丰富的训练数据集,我们为增强阿拉伯语检索奠定了坚实的基础。这一进展使我们更接近实现完全集成的阿拉伯语 RAG 管道

2. 一个好的重排器(可选但对提高精度至关重要)

重排是检索增强生成(RAG)管道中的一个关键步骤,因为它能够优化初始阶段检索到的文档集。虽然初始检索注重速度,但它通常会返回高度相关和边缘相关结果的混合。

重排确保只优先处理最相关的信息,减少噪声和无关内容。

通过向LLM(大型语言模型)提供更精确和上下文更合适的文档集,重排提高了响应的准确性和连贯性。如果没有重排,LLM可能会处理较不相关的数据,从而增加生成不准确或无根据信息的可能性。这使得重排对于优化RAG系统的效率和可靠性都至关重要。

我们为增强阿拉伯语重排器做了哪些工作?

为了改进检索增强生成(RAG)系统中的阿拉伯语重排,我们开发了Omartificial-Intelligence-Space/ARA-Reranker-V1,也称为ARM-V1

该模型专门用于精确处理阿拉伯语重排任务。与生成向量表示的嵌入模型不同,ARM-V1评估查询和段落之间的直接相似性,生成一个相关性分数,以识别最适合上下文的文档。输出分数使用 sigmoid 函数归一化到 [0, 1] 范围,确保可解释的相关性度量。

训练过程

ARM-V1 在丰富的正向和硬负向查询-段落对数据集上进行训练,使其在区分相关结果和干扰项方面表现出色。训练过程的关键方面包括:

▪️ 利用每个查询包含多个硬负例的数据集,以提高鲁棒性。

▪️ 使用直接计算相关性分数的 CrossEncoder 架构。

▪️ 采用批量训练,包含数千个样本,确保即使在具有挑战性的场景下也能实现高性能。

以下是训练的简化概述:

▫️ 数据集包含查询、正例和多个负例,加载并处理成使用 InputExample 的训练样本。

▫️ CrossEncoder 模型以连续输出范围的相关性分数进行初始化。

▫️ 模型使用 DataLoader 进行批处理,并使用重排评估器(CERerankingEvaluator)来监控性能。使用预热步骤和自动混合精度(AMP)来优化训练效率。

▫️ 模型经过三个 epoch 的微调,并进行频繁评估,以确保持续改进。

ARM-V1 模型已成为我们阿拉伯语 RAG 管道的基石,极大提高了文档重排的精度和可靠性。通过将结果缩小到最相关的文档,ARM-V1 确保生成模型接收高质量输入,从而减少噪声并提高响应准确性。

3. 一个好的生成式阿拉伯语大型语言模型:

RAG 管道的核心是生成模型,负责根据检索到的信息合成连贯且上下文准确的响应。然而,对于阿拉伯语来说,专门为此步骤设计的可靠开源大型语言模型(LLM)存在显著空白。

目前,大多数系统都依赖昂贵的基于 API 的解决方案,如 OpenAI 的 GPT 模型、Anthropic 的 ClaudeGoogle 的 Gemini,它们提供强大的功能,但也带来了成本、有限定制和数据隐私等挑战。要实现真正有效的阿拉伯语专用生成模型,需要对以语言为中心的预训练、微调和与用户偏好对齐进行大量投资。

ALLaM 的前景

这一领域的一个有前景的进展是ALLaM(Arabic Large Language Model),一个专门为阿拉伯语设计的最先进的大型语言模型。ALLaM 代表着ArabicNLP向前迈出的重要一步,其功能使其在与其他全球模型的竞争中具有高度竞争力。

ALLaM 的主要特点包括:

🔸 语言对齐和知识迁移:ALLaM 采用词汇扩展和阿拉伯语与英语混合预训练,以实现无缝的第二语言习得,确保强大的阿拉伯语能力,同时不损失其英语熟练度。

🔸 并行/翻译数据使用:模型利用并行数据集对齐阿拉伯语和英语之间的知识,增强其理解和生成阿拉伯语文本的能力。

🔸 人类偏好对齐:通过人类反馈进行的大量微调显著提高了 ALLaM 的性能,甚至超越了缺乏此类对齐的更大模型。

🔸 最先进的性能:ALLaM 在多项阿拉伯语自然语言处理基准测试中取得了顶尖成绩,包括 MMLU Arabic、ACVA 和 Arabic Exams,展示了其在各种任务中的卓越能力。

尽管 ALLaM 展示了卓越的潜力,但它并非开源,这限制了其在更广泛用例和社区驱动的增强中的可访问性。

开源阿拉伯语生成模型的需求

为了真正实现强大的阿拉伯语 RAG 管道,迫切需要开发专门为阿拉伯语量身定制的开源大型语言模型 (LLM)。此类模型将允许:

▪️ 定制:根据特定用例或领域调整模型。

▪️ 成本效益:减少对昂贵 API 的依赖。

▪️ 数据隐私:确保敏感数据不离开组织边界。

▪️ 社区贡献:鼓励阿拉伯语 NLP 生态系统内的协作改进和创新。

虽然像 ALLaM 这样的模型正在铺平道路,但阿拉伯语 NLP 的未来取决于开发可访问的开源解决方案,这些解决方案专门满足阿拉伯语的语言丰富性和复杂性。

集成挑战:为阿拉伯语 RAG 管道搭建舞台

构建一个集成检索、重排和生成的内聚阿拉伯语 RAG 管道需要细致的工程和所有组件的对齐。每个组件都扮演着关键角色,它们的相互作用决定了系统的整体有效性。当我们进入实施阶段时,以下是需要考虑的因素:

关键集成要求

⏺ 无缝互操作性:确保检索系统和重排器产生的输出格式与生成模型的输入预期无缝对齐。这种平滑的切换对于保持管道效率和准确性至关重要。

⏺ 性能优化:处理计算需求和减少延迟对于实现实时或接近实时的响应至关重要,特别是对于面向用户的应用程序。

⏺ 阿拉伯语专用评估指标:衡量管道成功与否涉及使用针对阿拉伯语自然语言处理任务(用于检索、排名和生成)量身定制的基准。这些指标确保系统有效应对特定语言挑战。

实现阿拉伯语 RAG 管道

在下一节中,我们将演示如何使用 LangChain、我们定制的检索系统和重排器以及 GPT-4 mini 作为生成模型来构建一个功能齐全的阿拉伯语 RAG 管道。

这一实际实现展示了:

⏺ 检索系统如何快速获取潜在相关文档。

⏺ 重排器如何过滤和优先处理这些文档,确保生成模型只接收到最符合上下文的信息。

⏺ 大型语言模型如何根据高质量输入合成连贯而精确的响应。

重排和检索在实践中的作用

通过组合这些组件,管道展示了重排和检索在确保用户收到最相关和最准确输出方面的强大功能。此工作流程不仅突出了我们阿拉伯语特定检索和重排的先进功能,还为创建高效可靠的阿拉伯语 NLP 解决方案树立了基准。在接下来的应用程序中,您将看到这些组件之间的协同作用如何推动卓越性能,提供根据用户查询定制的上下文丰富且准确的结果。

构建阿拉伯语 RAG 管道:实践指南

本实践指南演示了如何使用 LangChain、自定义检索嵌入、重排器和 GPT-4 mini 模型来构建一个阿拉伯语检索增强生成(RAG)管道。

数据集概述:

该数据集包含关于倭马亚王朝建立的历史信息,格式为两页阿拉伯语 PDF。

管道组件:

  • PDF 加载器:从数据集中提取文本。 [阿拉伯语内容]
  • 语义分块器:使用阿拉伯语嵌入将文本分成具有语义意义的块。[GATE 嵌入]
  • 向量存储检索器:根据查询检索最相关的文档。
  • 交叉编码器重排器:对检索到的文档进行相关性重排。[ARM-V1]
  • 大型语言模型:根据检索和重排的上下文生成答案。[GPT-4o-mini]

实现

1. 加载数据集

from langchain_community.document_loaders import PyPDFLoader

loader = PyPDFLoader("/path/to/your/dataset.pdf")
docs = loader.load()

此代码将数据集加载为文档列表。每个文档都包含元数据(例如,页码、来源)。

2. 将文档分割成块

from langchain_experimental.text_splitter import SemanticChunker
from langchain_huggingface import HuggingFaceEmbeddings

embeddings = HuggingFaceEmbeddings(model_name="Omartificial-Intelligence-Space/GATE-AraBert-v1")
splitter = SemanticChunker(embeddings)
chunks = splitter.split_documents(docs)

此步骤确保文档被划分为可管理、语义上有意义的块以进行检索。

3. 创建向量存储检索器

from langchain_community.vectorstores import Chroma

vectorstore = Chroma.from_documents(chunks, embeddings)
vectorstore_retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

向量存储器使用语义嵌入为给定查询检索前 3 个相关文档。

4. 对检索到的文档进行重排

from langchain_community.cross_encoders import HuggingFaceCrossEncoder
from langchain.retrievers.document_compressors import CrossEncoderReranker
from langchain.retrievers import ContextualCompressionRetriever

model = HuggingFaceCrossEncoder(model_name="Omartificial-Intelligence-Space/ARA-Reranker-V1")
compressor = CrossEncoderReranker(model=model, top_n=3)
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor, base_retriever=vectorstore_retriever
)

重排器根据文档的相关性分数对其进行重新排序,从而提高 LLM 输入的质量。

5. 生成最终答案

from langchain_community.chat_models import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough

llm = ChatOpenAI(temperature=0.7, max_tokens=256, model_name="gpt-4o-mini")

template = """
<|system|>
انتا مساعد ذكي تجيب على الاسئلة باللغة العربية و بشكل واضح بدون أي إضافات
context: {context}
</s>
<|user|>
{query}
</s>
<|assistant|>
""" 

prompt = ChatPromptTemplate.from_template(template)
output_parser = StrOutputParser()

qa_chain = (
    {"context": compression_retriever, "query": RunnablePassthrough()}
    | prompt
    | llm
    | output_parser
)

query = "ما تأسست الدولة الأموية؟"
result = qa_chain.invoke(query)

此链条集成了所有组件以生成最终答案。

管道执行

1. 查询

ما تأسست الدولة الأموية؟

2. 向量存储检索到的上下文元数据

以下是向量存储检索器检索到的前 3 个上下文及其元数据:

阿拉伯语 RAG 管道:上下文元数据分析

本节重点介绍查询 "ما تأسست الدولة الأموية؟"(倭马亚王朝是何时建立的?)的检索和重排上下文,以及它们相关的元数据。对比展示了重排如何提高检索信息的相关性。


向量存储检索到的上下文

上下文 ID 页面内容(片段) 元数据
1 倭马亚王朝在伊玛目阿里·本·阿比·塔利卜遇害后立即建立…… {'page': 0, 'source': '/path/to/test2.pdf'}
2 倭马亚王朝的统治阶段,统治体系完全不同…… {'page': 0, 'source': '/path/to/test2.pdf'}
3 倭马亚王朝在统一了民族的团体战役后建立…… {'page': 0, 'source': '/path/to/test2.pdf'}

重排的上下文

上下文 ID 页面内容(片段) 元数据
1 倭马亚王朝在伊玛目阿里·本·阿比·塔利卜遇害后立即建立…… {'page': 0, 'source': '/path/to/test2.pdf'}
2 倭马亚王朝是在沙姆人民选择穆阿维叶·本·阿比·苏菲扬之后建立的…… {'page': 0, 'source': '/path/to/test2.pdf'}
3 倭马亚王朝的统治阶段展示了哈里发政权向世袭制的转变…… {'page': 0, 'source': '/path/to/test2.pdf'}

检索与重排的关键区别

方面 向量存储检索 重排
目的 获取与查询语义相关的文档。 根据与查询的具体相关性过滤并优先处理文档。
相关性 检索范围广泛的上下文,可能包含切向信息。 精炼列表,确保最符合上下文的块获得优先权。
元数据 包含对源 PDF 和页码的引用,与重排相同。 与检索相同,但侧重于文本中最相关的部分。
重点 相关信息范围更广。 重点关注查询特定细节。

总之,

  • 向量存储检索提供广泛的语义相关上下文。
  • 重排通过优先处理最与查询相关的内容来增强焦点和精度。
  • 这种协同作用确保生成模型产生连贯、准确的答案。

3. 管道生成的最终答案

تأسست الدولة الأموية مباشرة بعد مقتل الإمام علي بن أبي طالب في عام 661 ميلادي، حيث تم انتخاب معاوية بن أبي سفيان كخليفة للمسلمين.

结论

在这次实践经验中,我们演示了如何通过集成先进的检索、重排和生成组件来构建一个有效的阿拉伯语检索增强生成(RAG)管道。该管道突出了以下关键见解:稳健的检索:GATE-AraBERT 嵌入和语义分块器的使用实现了高效的文档检索,为管道奠定了坚实的基础。

⏺ 通过重排提高精度:引入 ARA-Reranker 显著提高了检索到的上下文的相关性,确保生成模型使用高度集中和有意义的输入进行操作。

⏺ 准确生成:通过将精确检索和重排与 GPT-4 mini 的强大功能相结合,管道提供了清晰且上下文准确的阿拉伯语答案。

⏺ 阿拉伯语特定优化:通过利用专用工具和模型,管道解决了阿拉伯语自然语言处理(NLP)特有的挑战,例如语义复杂性。

关键要点

此实践实现强调了检索、重排和生成之间协同作用的重要性,以在阿拉伯语应用程序中产生高质量输出。通过增强管道的每个组件,我们更接近于构建高效、可扩展且特定于语言的 RAG 系统。

随着阿拉伯语 NLP 工具生态系统的不断发展,进一步的优化(例如开源阿拉伯语 LLM)将开启新的可能性,使这些管道更易于访问和更具影响力。

参考文献

[1] Nacar, O., & Koubaa, A. (2024). Enhancing Semantic Similarity Understanding in Arabic NLP with Nested Embedding Learning. arXiv preprint arXiv:2407.21139.

[2] 介绍 10 万上下文窗口 (2023), Anthropic

[3] N. Liu, K. Lin, J. Hewitt, A. Paranjape, M. Bevilacqua, F. Petroni, P. Liang, Lost in the Middle: How Language Models Use Long Contexts (2023),

[4] N. Reimers, I. Gurevych, Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks (2019), UKP-TUDA

[5] Bari, M. S., Alnumay, Y., Alzahrani, N. A., Alotaibi, N. M., Alyahya, H. A., AlRashed, S., ... & Khan, H. (2024). Allam: Large language models for arabic and english. arXiv preprint arXiv:2407.15390.

奥马尔·纳卡尔

社区

好文章,但为什么不使用阿拉伯语模型进行生成,例如拥有多个 HF 模型或 Silmar 等的 Cohere,而不是 OpenAI?

注册登录以发表评论