终极指南:LLM Universe多语言支持的中文分词与跨语言嵌入技术全解析
终极指南LLM Universe多语言支持的中文分词与跨语言嵌入技术全解析【免费下载链接】llm-universe本项目是一个面向小白开发者的大模型应用开发教程在线阅读地址https://datawhalechina.github.io/llm-universe/项目地址: https://gitcode.com/datawhalechina/llm-universeDatawhale / llm-universe 是一个面向小白开发者的大模型应用开发教程提供了从基础到进阶的完整学习路径帮助开发者快速掌握LLM应用开发技能。本文将深入探讨如何在该项目中实现多语言支持的中文分词与跨语言嵌入技术为构建全球化的大模型应用奠定基础。多语言支持在LLM应用中的重要性在全球化的今天大语言模型LLM的多语言支持能力变得越来越重要。LLM可以用于多种语言不仅限于英语它们的多语言能力使得跨文化和跨语言的应用变得更加容易。无论是构建跨语言情感分析模型、开发多语言问答系统还是实现全球化的知识库检索都离不开高效的中文分词和跨语言嵌入技术。图LLM多语言能力示意图展示了不同语言在向量空间中的分布中文分词技术LLM理解中文的基础中文分词是将连续的中文文本分割成有意义的词语序列的过程是中文自然语言处理的基础。与英文等拼音文字不同中文句子中没有明显的词语边界因此分词对于LLM理解中文至关重要。中文分词的挑战与解决方案中文分词面临着诸多挑战如歧义消解、未登录词识别等。在LLM Universe项目中我们可以利用LangChain等工具来处理中文分词任务。虽然项目中没有直接提供中文分词的代码实现但我们可以通过以下方式来集成中文分词功能使用 Jieba、THULAC 等成熟的中文分词库利用 Hugging Face Transformers 中的中文预训练模型结合 LLM 的上下文理解能力进行动态分词中文分词在项目中的应用在构建中文知识库时合理的分词策略可以显著提高检索效果。例如在处理南瓜书等中文文档时我们可以先进行分词再将分词结果用于文本向量化# 伪代码中文分词与文本向量化流程 import jieba from langchain.text_splitter import RecursiveCharacterTextSplitter # 中文文本分词 def chinese_tokenize(text): return .join(jieba.cut(text)) # 读取中文文档 loader UnstructuredMarkdownLoader(../../data_base/knowledge_db/prompt_engineering/1. 简介 Introduction.md) documents loader.load() # 对文档进行分词处理 tokenized_docs [chinese_tokenize(doc.page_content) for doc in documents] # 使用递归字符文本分割器 text_splitter RecursiveCharacterTextSplitter( chunk_size500, chunk_overlap50 ) split_docs text_splitter.create_documents(tokenized_docs)跨语言嵌入技术连接不同语言的桥梁跨语言嵌入技术能够将不同语言的文本映射到统一的向量空间中使得语义相似的文本无论使用何种语言其向量表示都非常接近。这为实现多语言知识库检索、跨语言文本分类等应用提供了可能。向量嵌入基础在机器学习和自然语言处理NLP中词向量word embedding是一种以单词为单位将每个单词转化为实数向量的技术。这些实数向量可以被计算机更好地理解和处理。词向量背后的主要理念是相似或相关的对象在向量空间中的距离应该很近。图向量嵌入示意图展示了文本如何转化为向量空间中的点在RAGRetrieval Augmented Generation检索增强生成应用中使用的向量技术一般为通用文本向量(Universal text embedding)该技术可以对一定范围内任意长度的文本进行向量化与词向量不同的是向量化的单位不再是单词而是输入的文本输出的向量会捕捉更多的语义信息。多语言嵌入模型选择LLM Universe项目中提供了多种嵌入模型的使用示例包括OpenAI、文心千帆、讯飞星火和智谱等API。对于跨语言场景我们可以选择专门的多语言嵌入模型如text-embedding-3-largeOpenAI的最新嵌入模型支持多语言MTEB得分为64.6MIRACL得分为54.9bge-large-zh中文优化的多语言嵌入模型在中文任务上表现优异xlm-roberta-base支持100多种语言的预训练模型适合跨语言迁移学习以下是使用OpenAI API获取多语言嵌入的示例代码def openai_embedding(text: str, model: strNone): # 获取环境变量 OPENAI_API_KEY api_keyos.environ[OPENAI_API_KEY] client OpenAI(api_keyapi_key) # embedding modeltext-embedding-3-small, text-embedding-3-large, text-embedding-ada-002 if model None: modeltext-embedding-3-large # 推荐使用支持多语言的large模型 response client.embeddings.create( inputtext, modelmodel ) return response跨语言相似性计算跨语言嵌入的核心在于不同语言的语义相似性计算。通过计算不同语言文本向量之间的余弦相似度我们可以判断它们在语义上的接近程度图跨语言文本相似性示意图展示了不同语言中语义相似的文本在向量空间中的接近程度以下是计算中文和英文文本相似度的示例代码import numpy as np from sklearn.metrics.pairwise import cosine_similarity # 中文文本 chinese_text 人工智能正在改变世界 # 英文文本 english_text Artificial intelligence is changing the world # 获取嵌入向量 chinese_embedding openai_embedding(chinese_text, modeltext-embedding-3-large).data[0].embedding english_embedding openai_embedding(english_text, modeltext-embedding-3-large).data[0].embedding # 计算余弦相似度 similarity cosine_similarity([chinese_embedding], [english_embedding]) print(f中文和英文文本的相似度{similarity[0][0]})实战构建多语言知识库结合中文分词和跨语言嵌入技术我们可以构建一个支持多语言检索的知识库系统。以下是实现步骤1. 数据准备收集多语言文档如中文的南瓜书和英文的Prompt Engineering教程# 获取folder_path下所有文件路径储存在file_paths里 file_paths [] folder_path ../../data_base/knowledge_db for root, dirs, files in os.walk(folder_path): for file in files: file_path os.path.join(root, file) file_paths.append(file_path)2. 文本预处理对不同语言的文本进行分词和清洗# 遍历文件路径并把实例化的loader存放在loaders里 loaders [] for file_path in file_paths: file_type file_path.split(.)[-1] if file_type pdf: loaders.append(PyMuPDFLoader(file_path)) elif file_type md: loaders.append(UnstructuredMarkdownLoader(file_path)) # 下载文件并存储到texts texts [] for loader in loaders: texts.extend(loader.load()) # 文本清洗和分词 cleaned_texts [] for text in texts: # 根据语言类型选择不同的分词方法 if is_chinese(text.page_content): cleaned_text chinese_tokenize(text.page_content) else: cleaned_text text.page_content # 英文等语言可直接使用空格分词 cleaned_texts.append(cleaned_text)3. 文档分割使用递归字符文本分割器将长文档分割成合适大小的块图文档分割示例展示了如何将长文本分割成重叠的块# 使用递归字符文本分割器 text_splitter RecursiveCharacterTextSplitter( chunk_size500, chunk_overlap50 ) split_docs text_splitter.create_documents(cleaned_texts)4. 向量化与存储将分割后的文档块向量化并存储到向量数据库from langchain.vectorstores import Chroma from langchain.embeddings import OpenAIEmbeddings # 初始化嵌入模型 embeddings OpenAIEmbeddings(modeltext-embedding-3-large) # 创建向量数据库 db Chroma.from_documents( documentssplit_docs, embeddingembeddings, persist_directory../../data_base/vector_db/chroma ) db.persist()5. 多语言检索使用不同语言的查询词进行知识库检索# 中文查询 chinese_query 什么是提示工程 chinese_docs db.similarity_search(chinese_query) print(中文查询结果, chinese_docs[0].page_content) # 英文查询 english_query What is prompt engineering? english_docs db.similarity_search(english_query) print(英文查询结果, english_docs[0].page_content)优化与最佳实践嵌入模型选择策略根据项目需求和预算选择合适的嵌入模型模型每美元页数MTEB得分MIRACL得分多语言支持text-embedding-3-large9,61564.654.9优秀text-embedding-3-small62,50062.344.0良好text-embedding-ada-00212,50061.031.4一般对于多语言应用推荐使用text-embedding-3-large它在跨语言任务上表现最佳。如果预算有限可以选择text-embedding-3-small在性能和成本之间取得平衡。文档分割参数调整根据文档语言和类型调整分割参数# 中文文档分割参数 chinese_splitter RecursiveCharacterTextSplitter( chunk_size400, # 中文通常需要更小的块大小 chunk_overlap60, # 更大的重叠以保持上下文 separators[\n\n, \n, 。, , , , ] # 中文专用分隔符 ) # 英文文档分割参数 english_splitter RecursiveCharacterTextSplitter( chunk_size500, chunk_overlap50, separators[\n\n, \n, . , ! , ? , , , ] # 英文专用分隔符 )混合检索策略结合词法检索和向量检索的优势提高多语言检索效果# 混合检索示例 from langchain.retrievers import HybridRetriever from langchain.retrievers.self_query.base import SelfQueryRetriever from langchain.chains.query_constructor.base import AttributeInfo # 定义元数据属性 metadata_field_info [ AttributeInfo( namesource, description文档的来源路径, typestring, ), AttributeInfo( namelanguage, description文档的语言可能是中文或英文, typestring, ), ] # 创建自查询检索器 self_query_retriever SelfQueryRetriever.from_llm( llm, # 你的LLM模型 db, 文档内容, metadata_field_info, ) # 创建混合检索器 hybrid_retriever HybridRetriever( retrievers[self_query_retriever, db.as_retriever()], weights[0.3, 0.7] # 调整权重 ) # 使用混合检索器进行查询 results hybrid_retriever.get_relevant_documents(什么是RAG技术)总结与展望中文分词和跨语言嵌入技术是构建多语言LLM应用的关键。通过本文介绍的方法你可以在LLM Universe项目中实现高效的多语言支持为全球用户提供更好的服务。随着大语言模型技术的不断发展未来的多语言支持将更加自然和高效。我们可以期待更强大的多语言嵌入模型支持更多语言和更精准的语义映射实时跨语言翻译与嵌入融合打破语言壁垒基于多模态的跨语言理解结合文本、图像等多种信息通过持续学习和实践你将能够构建出更加智能、更加包容的多语言AI应用为全球化时代贡献力量要开始你的多语言LLM应用开发之旅只需克隆Datawhale / llm-universe项目git clone https://gitcode.com/datawhalechina/llm-universe祝你的多语言LLM应用开发之路顺利【免费下载链接】llm-universe本项目是一个面向小白开发者的大模型应用开发教程在线阅读地址https://datawhalechina.github.io/llm-universe/项目地址: https://gitcode.com/datawhalechina/llm-universe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考