[InternLM 大模型开源社区]大模型实战营第三期@202408-基础岛-第4关-llamaindex+Internlm2 RAG实践

任务类型任务内容预计耗时完成度
闯关任务基于 LlamaIndex 构建自己的 RAG 知识库,寻找一个问题 A 在使用 LlamaIndex 之前InternLM2-Chat-1.8B模型不会回答,借助 LlamaIndex 后 InternLM2-Chat-1.8B 模型具备回答 A 的能力,截图保存45mins完成
  • check this out! github repo llamaindex
  • vi llamaindex_env.sh, copy below, and bash llamaindex_env.sh run it!
    conda create -n llamaindex python=3.10 -y
    source activate llamaindex
    pip install  torch==2.1.2+cu118 torchvision==0.16.2+cu118 torchaudio==2.1.2 torchtext \
    	llama-index  llama-index-llms-huggingface  \
    	llama-index-embeddings-huggingface llama-index-embeddings-instructor \
    	transformers huggingface_hub \
    	sentence-transformers sentencepiece \
    	einops protobuf \
    	-f https://mirror.sjtu.edu.cn/pytorch-wheels/cu118/?mirror_intel_list \
    	-f https://download.pytorch.org/whl/cu118/torch_stable.html
    
  • download sentence-transformers
    conda activate llamaindex \
    	&& export HF_ENDPOINT='https://hf-mirror.com' \
    	&& mkdir -p /root/model && \
    	huggingface-cli download sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 --local-dir /root/model/sentence-transformer
    
  • download NLTK: vi nltk.sh and copy it, then bash nltk.sh
    git clone https://gitee.com/yzy0612/nltk_data.git  --branch gh-pages /root/nltk_data
    mv /root/nltk_data/packages/*  /root/nltk_data/
    unzip /root/nltk_data/tokenizers/punkt.zip -d /root/nltk_data/tokenizers
    unzip /root/nltk_data/taggers/averaged_perceptron_tagger.zip -d /root/nltk_data/taggers
    
  • vi llamaindex_internlm.py, copy it, then conda activate llamaindex && python llamaindex_internlm.py
    from llama_index.llms.huggingface import HuggingFaceLLM
    from llama_index.core.llms import ChatMessage
    llm = HuggingFaceLLM(
        model_name="/root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b",
        tokenizer_name="/root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b",
        model_kwargs={"trust_remote_code":True},
        tokenizer_kwargs={"trust_remote_code":True}
    )
    
    rsp = llm.chat(messages=[ChatMessage(content="xtuner是什么?")])
    print(rsp)
    

请添加图片描述- run it mkdir -p /root/code/llamaindex/data && wget https://raw.githubusercontent.com/InternLM/xtuner/main/README_zh-CN.md -O /root/code/llamaindex/data/README_zh-CN.md

  • vi llamaindex_RAG.py, copy it, then python llamaindex_RAG.py
    from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
    
    from llama_index.embeddings.huggingface import HuggingFaceEmbedding
    from llama_index.llms.huggingface import HuggingFaceLLM
    
    #初始化一个HuggingFaceEmbedding对象,用于将文本转换为向量表示
    embed_model = HuggingFaceEmbedding(
    #指定了一个预训练的sentence-transformer模型的路径
        model_name="/root/model/sentence-transformer"
    )
    #将创建的嵌入模型赋值给全局设置的embed_model属性,
    #这样在后续的索引构建过程中就会使用这个模型。
    Settings.embed_model = embed_model
    
    llm = HuggingFaceLLM(
        model_name="/root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b",
        tokenizer_name="/root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b",
        model_kwargs={"trust_remote_code":True},
        tokenizer_kwargs={"trust_remote_code":True}
    )
    #设置全局的llm属性,这样在索引查询时会使用这个模型。
    Settings.llm = llm
    
    #从指定目录读取所有文档,并加载数据到内存中
    documents = SimpleDirectoryReader("/root/code/llamaindex/data").load_data()
    #创建一个VectorStoreIndex,并使用之前加载的文档来构建索引。
    # 此索引将文档转换为向量,并存储这些向量以便于快速检索。
    index = VectorStoreIndex.from_documents(documents)
    # 创建一个查询引擎,这个引擎可以接收查询并返回相关文档的响应。
    query_engine = index.as_query_engine()
    response = query_engine.query("xtuner是什么?")
    
    print(response)
    
    

请添加图片描述

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模型+RAG(Retrieval-Augmented Generation)是一种结合了检索和生成的方法,用于实现数据采集。具体步骤如下: 1. 数据收集:首先需要收集大量的原始数据,可以是文本、图像、音频等形式的数据。这些数据可以从互联网、数据库、文档等多个渠道获取。 2. 数据预处理:对收集到的原始数据进行预处理,包括数据清洗、去重、标注等操作。这一步骤旨在提高数据的质量和准确性,为后续的模型训练做准备。 3. 模型训练:使用大模型进行训练,可以选择使用预训练的语言模型(如GPT)或自定义的模型。在训练过程中,可以采用生成式对抗网络(GAN)等方法来增强模型的生成能力。 4. 检索模块构建:为了提高生成结果的准确性和相性,需要构建一个检索模块。该模块可以使用传统的信息检索技术,如倒排索引、向量检索等,也可以使用深度学习方法,如BERT、Dense Retrieval等。 5. 数据采集:利用构建好的检索模块,对用户提出的问题或需求进行检索,获取与之相的数据。可以根据检索结果的相性进行排序,选择最相的数据进行生成。 6. 数据生成:基于检索到的数据,使用大模型进行生成。可以采用生成式模型,根据检索到的数据进行文本、图像等内容的生成。生成的结果可以根据需求进行进一步的处理和优化。 7. 结果评估:对生成的结果进行评估,可以使用人工评估或自动评估的方式。评估指标可以包括生成结果的准确性、流畅性、相性等。 8. 迭代优化:根据评估结果,对模型和检索模块进行优化和调整。可以通过增加训练数据、调整模型参数、改进检索算法等方式来提升系统的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值