要设置 LlamaIndex 以进行多语言文档检索,首先要配置框架以处理多种语言的文档。 这包括选择一种支持多语言文本的合适嵌入模型,例如 SentenceTransformers 的“paraphrase-multilingual”模型或 OpenAI 的 text-embedding-3-small。 这些模型将各种语言的文本映射到共享的向量空间,从而实现跨语言相似性比较。 例如,您可以使用 embed_model = HuggingFaceEmbedding(model_name="sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
初始化 Hugging Face 嵌入模型,并在 LlamaIndex 的 ServiceContext
中进行设置。 将其与向量数据库(如 Chroma 或 FAISS)结合使用,后者可以高效地存储和查询嵌入。
接下来,预处理您的文档以处理特定于语言的细微差别。 使用跨语言工作的文本拆分器,例如 LlamaIndex 的 SentenceSplitter
或 LangChain 的 RecursiveCharacterTextSplitter
,并配置与语言无关的分隔符(如换行符或句点)。 例如,使用 splitter = RecursiveCharacterTextSplitter(["\n\n", "\n", "。", ".", " "])
拆分文本可以适应英语、中文和许多欧洲语言。 如果您的文档混合了多种语言,请在摄取期间添加元数据(例如,language: "es"
)以便稍后进行筛选。 对于基于 OCR 的 PDF 或扫描文档,请使用 Tesseract OCR 等工具以及语言包来准确提取文本。
最后,通过结合语义搜索和基于关键字的搜索来优化检索。 使用 LlamaIndex 的 VectorIndexRetriever
进行语义相似性搜索,并使用 BM25 等基于关键字的检索器进行混合搜索。 例如,创建一个 QueryEngine
,其中包含一个 RouterQueryEngine
,用于使用元数据在特定于语言的索引之间进行选择。 如果查询和文档使用不同的语言,请集成翻译 API(例如,Google 翻译)以在检索之前将查询映射到文档语言。 例如,在搜索英语文档索引之前,使用 translator.translate(query_text, dest="en")
将法语查询翻译成英语。 使用 MrTyDi 等多语言基准来验证跨语言的性能。