BGE M3-Embedding 模型介绍

文献分享: BGE-M3——打通三种方式的嵌入模型 ACL'24 阅读详情
AI摘要

BGE-M3是BAAI和中国科学技术大学合作开发的多语言、多功能、多粒度文本嵌入模型,支持100多种语言,8192长度文本输入,以及密集、稀疏和多向量检索。模型在多语言检索、跨语言检索和长文档检索任务中表现出色。

BGE M3-Embedding来自BAAI和中国科学技术大学,是BAAI开源的模型。相关论文在https://arxiv.org/abs/2402.03216,论文提出了一种新的embedding模型,称为M3-Embedding,它在多语言性(Multi-Linguality)、多功能性(Multi-Functionality)和多粒度性(Multi-Granularity)方面表现出色。M3-Embedding支持超过100种工作语言,支持8192长度的输入文本,同时支持密集检索(Dense Retrieval)、多向量检索(Multi-Vector Retrieval)和稀疏检索(Sparse Retrieval),为现实世界中的信息检索(IR)应用提供了统一的模型基础,通过这几种检索方式的组合,取得了良好的混合召回效果。

我们可以查看官方与openai模型的对比,整体来看,采用三种方式联合检索的BGE-M3(ALL)在三项评测中全面领先,而 BGE-M3(Dense)稠密检索在多语言、跨语言检索中具有明显优势。
在这里插入图片描述

BGE-M3 模型亮点

  1. 多语言(Multi-Linguality),训练集包含100+种以上语言
  2. 多功能(Multi-Functionality),支持稠密检索(Dense Retrieval),还支持稀疏检索(Sparse Retrieval)与多向量检索(Multi-vector Retrieval)
  3. 多粒度(Multi-Granularity) BGE-M3目前可以处理最大长度为8192 的输入文本,支持“句子”、“段落”、“篇章”、“文档”等不同粒度的输入文本

BGE-M3 训练数据

M3-Embedding模型的训练数据组成是模型效果较好的一个关键创新点,因为它旨在支持多语言性、多功能性和多粒度性,训练数据分为三部分:
在这里插入图片描述

  • 无监督数据(Unsupervised Data):

  • 从大量多语言语料库中提取未经标记的文本数据,这些语料库包括Wikipedia、S2ORC、xP3、mC4和CC-News等。

  • 这些数据通过提取丰富的语义结构(例如标题-正文、标题-摘要、指令-输出等)来丰富模型的语义理解能力。

  • 无监督数据的规模达到了1.2亿文本对,覆盖了194种语言和2655种跨语言对应关系。

  • 微调数据(Fine-tuning Data):

  • 来自标记语料库的高质量数据,包括英语、中文和其他语言的数据集。

  • 例如,英语数据集包括HotpotQA、TriviaQA、NQ、MS MARCO等,而中文数据集包括DuReader、T2-Ranking、NLI-zh等。

  • 这些数据集用于进一步微调模型,以提高其在特定任务和语言上的性能。

  1. 合成数据(Synthetic Data):
  • 为了解决长文档检索任务中数据不足的问题,研究者们生成了额外的多语言微调数据(称为MultiLongDoc)。
  • 通过从Wikipedia和MC4数据集中随机选择长文章,并从中随机选择段落,然后使用GPT-3.5生成基于这些段落的问题,生成的问题和所选文章构成新的文本对,增加了训练数据的多样性和覆盖范围。

这些训练数据的创新之处在于:

  • 多语言覆盖:M3-Embedding通过大规模的多语言无监督数据,学习不同语言之间的共同语义空间,从而支持多语言检索和跨语言检索。
  • 数据多样性:通过结合无监督数据、微调数据和合成数据,M3-Embedding能够捕捉到不同类型和长度的文本数据的语义信息,从而提高模型对不同输入粒度的处理能力。
  • 高质量数据整合:通过精心筛选和整合不同来源的数据,M3-Embedding确保了训练数据的高质量,这对于模型学习有效的文本嵌入至关重要。
  • 通过这种创新的训练数据组成,M3-Embedding能够有效地学习并支持超过100种语言的文本嵌入,同时处理从短句到长达8192个词符的长文档,实现了在多语言、多功能和多粒度方面的突破。

从业界来看,M3-Embedding、E5-mistral-7b,都是利用GPT这样的LLM来合成了大量多语言数据,这个应该是后续的主流方案。

BGE-M3 混合检索

M3-Embedding统一了嵌入模型的三种常见检索功能,即密集检索(Dense retrieval)、词汇(稀疏)检索(Lexical retrieval)和多向量检索(Multi-vector retrieval)。以下是这些方法的公式化描述:

- 密集检索(Dense retrieval)
输入查询q被转换为基于文本编码器的隐藏状态Hq,使用特殊标记“[CLS]”的归一化隐藏状态来表示查询:eq=norm(Hq[0])e_q = \text{norm}(H_q[0])eq​=norm(Hq​[0])。类似地,我们可以获取段落p的嵌入表示为 ep=norm(Hp[0])e_p = \text{norm}(H_p[0])ep​=norm(Hp​[0])。查询和段落之间的相关性得分通过两个嵌入向量 epe_pep​ 和 eqe_qeq​的内积来度量:sdense←⟨ep,eq⟩s_{\text{dense}} \leftarrow \langle e_p, e_q \ranglesdense​←⟨ep​,eq​⟩。

    def dense_embedding(self, hidden_state, mask):
        if self.sentence_pooling_method == 'cls':
            return hidden_state[:, 0]
        elif self.sentence_pooling_method == 'mean':
            s = torch.sum(hidden_state * mask.unsqueeze(-1).float(), dim=1)
            d = mask.sum(axis=1, keepdim=True).float()
            return s / d

- 词汇检索(Lexical Retrieval)
输出嵌入还被用来估计每个词项的重要性,以促进词汇检索。对于查询中的每个词项t(在我们的工作中,词项对应于一个标记),词项权重被计算为 wqt←Relu(WlexHq[i])w_{qt} \leftarrow \text{Relu}(W_{\text{lex}} H_q[i])wqt​←Relu(Wlex​Hq​[i]),其中 Wlex∈Rd×1W_{\text{lex}} \in \mathbb{R}^{d \times 1}Wlex​∈Rd×1 是将隐藏状态映射到一个实数的矩阵。如果词项t在查询中出现多次,我们只保留其最大权重。我们以相同的方式计算段落中每个词项的权重。基于估计的词项权重,查询和段落之间的相关性得分通过查询和段落中共同出现的词项(表示为q∩pq ∩ pq∩p)的联合重要性来计算:slex←∑t∈q∩p(wqt⋅wpt)s_{\text{lex}} \leftarrow \sum_{t \in q \cap p}(w_{qt} \cdot w_{pt})slex​←∑t∈q∩p​(wqt​⋅wpt​)。

    def sparse_embedding(self, hidden_state, input_ids, return_embedding: bool = True):
        # sparse_linear 线性层= torch.nn.Linear(in_features=self.model.config.hidden_size, out_features=1)
        # 通过relu计算token weight
        token_weights = torch.relu(self.sparse_linear(hidden_state))
        if not return_embedding: return token_weights
        # 形状为(input_ids.size(0), input_ids.size(1), self.vocab_size)的零张量
        sparse_embedding = torch.zeros(input_ids.size(0), input_ids.size(1), self.vocab_size,
                                       dtype=token_weights.dtype,
                                       device=token_weights.device)
        # 将token_weights中的值分散scatter到sparse_embedding的相应位置,索引位置根据input_ids提供
        sparse_embedding = torch.scatter(sparse_embedding, dim=-1, index=input_ids.unsqueeze(-1), src=token_weights)
        # CLS,PAD 等无用token
        unused_tokens = [self.tokenizer.cls_token_id, self.tokenizer.eos_token_id, self.tokenizer.pad_token_id,
                         self.tokenizer.unk_token_id]
        sparse_embedding = torch.max(sparse_embedding, dim=1).values
        #  无用token weight设置为0
        sparse_embedding[:, unused_tokens] *= 0.
        return sparse_embedding

- 多向量检索(Multi-Vector Retrieval)
作为密集检索的扩展,多向量方法利用整个输出嵌入来表示查询和段落:Eq=norm(WmulHq),Ep=norm(WmulHp)E_q = \text{norm}(W_{\text{mul}} H_q), E_p = \text{norm}(W_{\text{mul}} H_p)Eq​=norm(Wmul​Hq​),Ep​=norm(Wmul​Hp​),其中 Wmul∈Rd×dW_{\text{mul}} \in \mathbb{R}^{d \times d}Wmul​∈Rd×d 是可学习的投影矩阵。按照ColBERT(Khattab和Zaharia, 2020)的方法,使用后期交互来计算细粒度的相关性得分:smul←1N∑i=1Nmax⁡j=1MEq[i]⋅Ep[j]s_{\text{mul}} \leftarrow \frac{1}{N} \sum_{i=1}^{N} \max_{j=1}^{M} E_q[i] \cdot E_p[j]smul​←N1​∑i=1N​maxj=1M​Eq​[i]⋅Ep​[j];N和M分别是查询和段落的长度。

由于嵌入模型的多功能性,检索过程可以在混合过程中进行。首先,可以通过每种方法单独检索候选结果(由于其高成本,可以免去多向量方法的这一步)。最终的检索结果是根据集成的相关性得分重新排序的:srank←sdense+slex+smuls_{\text{rank}} \leftarrow s_{\text{dense}} + s_{\text{lex}} + s_{\text{mul}}srank​←sdense​+slex​+smul​。

BGE-M3训练方式和创新点

在这里插入图片描述
GE-M3模型训练分为三个阶段:
1)RetroMAE预训练,在105种语言的网页数据和wiki数据上进行,提供一个可以支持8192长度和面向表示任务的基座模型;
2)无监督对比学习,在194种单语言和1390种翻译对数据共1.1B的文本对上进行的大规模对比学习;
3)多检索方式统一优化,在高质量多样化的数据上进行多功能检索优化,使模型具备多种检索能力。

其中,一些重要的关键技术如下:
1. 自学习蒸馏
人类可以利用多种不同的方式计算结果,矫正误差。模型也可以,通过联合多种检索方式的输出,可以取得比单检索模式更好的效果。因此,BGE-M3使用了一种自激励蒸馏方法来提高检索性能。具体来说,合并三种检索模式的输出,得到新的文本相似度分数,将其作为激励信号,让各单模式学习该信号,以提高单检索模式的效果。
在这里插入图片描述
2. 训练效率优化
通过根据长度对文本数据进行分组,确保一个batch内文本长度相对相似,从而减少填充。为了减少文本建模时的显存消耗,将一批数据分成多个小批。对于每个小批,利用模型编码文本,收集输出的向量同时丢弃所有前向传播中的中间状态,最后汇总向量计算损失,可以显著增加训练的batch size。
在这里插入图片描述

3. 长文本优化
BGE-M3提出了一种简单而有效的方法:MCLS(Multiple CLS)来增强模型的能力,而无需对长文本进行微调。

MCLS方法旨在利用多个CLS令牌来联合捕获长文本的语义。为每个固定数量的令牌插入一个cls令牌,每个cls令牌可以从相邻的令牌获取语义信息,最后通过对所有cls令牌的最后隐藏状态求平均值来获得最终的文本嵌入。
在这里插入图片描述

BGE-M3 实验结果

多语言检索任务,稀疏检索(Sparse)大幅超过了传统的稀疏匹配算法BM25。多向量检索(multi-vector)则获得了三种检索方式中的最佳效果。
在这里插入图片描述

跨语言检索能力(MKQA)
BGE-M3在跨语言任务上依然具备最佳的检索效果。稀疏检索并不擅长应对跨语言检索这种词汇重合度很小的场景。因此,稀疏检索的自身效果以及与其他方法混搭所带来的收益相对较小。

在这里插入图片描述
长文档检索能力 (MLRB: Multi-Lingual Long Retrieval Benchmark)
BGE-M3可以支持长达8192的输入文档,从实验结果可以观察到,稀疏检索(Sparse)的效果要显著高于稠密检索(Dense),这说明关键词信息对于长文档检索极为重要。
在这里插入图片描述

BGE-M3 模型微调

需要先安装

pip install -U FlagEmbedding

来源

git clone https://github.com/FlagOpen/FlagEmbedding.git
cd FlagEmbedding
pip install -e .

模型微调的数据集格式是json line格式文件,json格式如下:

{"query": str, "pos": List[str], "neg":List[str]}

query 是查询,pos 是正文本列表,neg 是负文本列表。

模型训练:

torchrun --nproc_per_node {number of gpus} \
-m FlagEmbedding.BGE_M3.run \
--output_dir {path to save model} \
--model_name_or_path BAAI/bge-m3 \
--train_data ./toy_train_data \
--learning_rate 1e-5 \
--fp16 \
--num_train_epochs 5 \
--per_device_train_batch_size {large batch size; set 1 for toy data} \
--dataloader_drop_last True \
--normlized True \
--temperature 0.02 \
--query_max_len 64 \
--passage_max_len 256 \
--train_group_size 2 \
--negatives_cross_device \
--logging_steps 10 \
--same_task_within_batch True \
--unified_finetuning True \
--use_self_distill True

参考文献

BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation【https://github.com/FlagOpen/FlagEmbedding/blob/master/FlagEmbedding/BGE_M3/BGE_M3.pd】
https://mp.weixin.qq.com/s/y-c-EelxbSUMmrZNCeqeAA

embedding模型bge-m3安装及Dify中调用 设备:Ubuntu GPU服务器(离线)、Windows10(联网:我的本机电脑)工具:putty(操作离线服务器)、WinSCP(文件上传)前置条件:目标服务器已安装ollama模型(我的不是用docker安装的) 阅读详情

相关推荐

【知识库特性增量】 DeepSeek-R1 模板支持 bge-m3 embedding model

进入【人工智能提供商】-【Embedder首选项】,在【嵌入引擎提供商】处选择“Ollama”,随后在下方【Ollama Embedding Model】处选择“bge-m3:latest”。将文档添加到工作区后,用户可以通过设置聊天模式调整 DeepSeek-R1 的回复方式,在【工作区LLM提供者】处可选用 DeepSeek-R1模型类型,比如 7b。点击上传图标,可以管理当前工作区的知识库。以本地文档上传为例,用户可以管理已上传的文档,并通过下方的上传按钮或拖拽方式上传新文档。

CloudStudio的博客 2892

文本向量模型BGE与BGE-M3

文本向量模型BGE与BGE-M3原理介绍

beingstrong的博客 2万+

Didy知识库:ollama bge-m3 部署,并实现与dify平台对接

这几天为了写技术博客,各种组件可谓是装了卸,卸了装,只想复现一些东西,确保你们看到的东西都是可以复现的。(看在我这么认真的份上,求个关注啊,拜托各位观众老爷了。这不,为了实验在windows上docker里运行pytorch,把docker重装了。dify也得重装:Dify基础:Dify平台的本地化部署(含windows部署中,常见问题及解决方案)结果发现,这个模型注册这里,有了一些新东西:那咱可得好好玩一玩。

xiezhipu的博客 1万+

三大知名向量化模型比较分析——m3e,bge,bce

BGE:在多语言支持、文本处理能力和检索精度方面表现优异,尤其适合需要高精度和高效率的场景。同时,其资源使用较为经济。M3E:专注于中文文本处理,具有强大的文本处理能力和灵活的部署选项,适合资源受限或需要私有化的应用场景。BCE:虽然具体细节较少,但其在RAG应用中的表现表明其具备一定的优势,可能适合特定的高精度需求场景。根据不同的应用需求和资源条件选择合适的模型会更加有效。

东南草堂 5万+

【人工智能时代】-BGE M3-Embedding 模型介绍

BGE M3-Embedding来自BAAI和中国科学技术大学,是BAAI开源的模型。相关论文在https://arxiv.org/abs/2402.03216,论文提出了一种新的embedding模型,称为M3-Embedding,它在多语言性(Multi-Linguality)、多功能性(Multi-Functionality)和多粒度性(Multi-Granularity)方面表现出色。

xiaoli8748的专栏 978

文本嵌入技术Text Embedding模型详解:text2vec、OpenAI ada-002到M3E及BGE-M3的演变

文本嵌入技术Text Embedding模型详解:text2vec、OpenAI ada-002到M3E及BGE-M3的演变

丨汀、的博客 2720

一文通透Text Embedding模型:从text2vec、openai-text embedding到m3e、bge

判断哪些文本嵌入模型效果较好,通常需要一个评估指标来进行比较,《MTEB: Massive Text Embedding Benchmark(海量文本嵌入基准)》就是一个海量文本嵌入模型的评估基准论文地址:https://arxiv.org/abs/2210.07316MTEB包含8个语义向量任务,涵盖58个数据集和112种语言。通过在MTEB上对33个模型进行基准测试,我们建立了迄今为止最全面的文本嵌入基准。我们发现没有特定的文本嵌入方法在所有任务中都占主导地位。

结构之法 算法之道 5万+

text-embedding-ada-002;BGE模型;M3E模型是Moka Massive Mixed Embedding;BERT

text-embedding-ada-002属于OpenAI大型语言模型系列的一部分,这个嵌入模型是为了将文本(如单词、短语或整段文本)转换为数值形式的向量,使得计算机能够处理和理解自然语言。

ZhangJiqun&191cm&85kg 1421

都在用BGE-M3,你确认这是对的选择?深度解析RAG系统中Embedding模型的合理选型

当前自媒体普遍推荐BGE-M3作为RAG系统首选Embedding模型,但实际应用需谨慎。本文对比BGE-M3与BGE-large的核心差异,揭示多语言支持、中文优化等关键因素,提供科学选型策略,帮助开发者避免盲目选择。

打造全国最全的AI Agent开发知识领域的博客 1483

RAG 之 Embedding 模型 (一)

M3E 是 Moka Massive Mixed Embedding 的缩写。Moka,此模型由 MokaAI 训练,开源和评测,训练脚本使用 uniem ,评测 BenchMark 使用 MTEB-zhMassive,此模型通过千万级 (2200w+) 的中文句对数据集进行训练;Mixed,此模型支持中英双语的同质文本相似度计算,异质文本检索等功能,未来还会支持代码检索;Embedding,此模型是文本嵌入模型,可以将自然语言转换成稠密的向量。

Muti-Agent 3011

本地部署Embedding模型API服务的实战教程

本文主要介绍了本地部署Embedding模型API服务的实战教程,希望对使用大语言模型的同学们有所帮助。 文章目录 1. 前言 2. 配置环境 2.1 安装虚拟环境 2.2 安装依赖库 2.3 下载模型 3. 运行代码 3.1 启动模型服务 3.2 调用代码

herosunly的博客 15万+

大模型 RAG 基础:信息检索、文本向量化及 BGE-M3 embedding 实践

本文整理了一些 BGE-M3 相关的 RAG 知识。

hao_wujing的专栏 5255

别再死记硬背参数了!手把手教你用Fluent欧拉模型搞定流化床模拟(附颗粒粘度/体积分数设置详解)

本文深入解析Fluent欧拉模型在流化床模拟中的应用,重点讲解颗粒粘度和体积分数等关键参数的设置原理与科学方法。通过对比不同模型(如Syamlal-O'Brien、Gidaspow)的适用场景,帮助工程师摆脱参数死记硬背,实现精准模拟。内容涵盖相间作用机制、求解策略优化及结果验证,为化工、能源领域的流化床模拟提供实用指南。

weixin_42656416的博客 429

Embedding模型:bge-m3和bge-large-zh-v1.5如何选?

目前公认质量最好的Embedding模型就是 Text-embedding-ada-002 ,OpenAI开发,1536维,性能优异但不开源,且国内 使用受限。那么,还有什么 开源好用 的embedding模型推荐吗?有,那就是 bge系列。去年有一篇文章也写到了这个话题,阅读量不低。看来大家目前都在搭建私域的RAG系统,也是特别关注 embedding模型 的选择哈。bge系列,有2个模型推荐,分别是:BGE-M3 和 BGE-large-zh-v1.5 模型,需要根据具体需求和场景进行权衡。

xx_nm98的博客 2万+

BGE(BAAI General Embedding)模型详解

BGE(BAAI General Embedding)是北京智源人工智能研究院(BAAI)推出的通用文本嵌入模型系列,旨在为各种自然语言处理任务提供高质量的向量表示。

ttyy1112的专栏 7558

博途V17 & PLCSIM & FactoryIO 连接教程

PLCSIM V17 和 FactoryIO 连接教程前言一、软件版本二、连接步骤1. 连接PLCSIM2. 博途编程3.连接FactoryIO总结 前言 该文详细讲解了新手入门博途,并通过使用自带PLCSIM和FactoryIO实现连接。 一、软件版本 TIA Portal V17 S7-PLCSIM V17 Factory IO V2.5.1 二、连接步骤 1. 连接PLCSIM 打开PLCSIM 进入项目模式 新建仿真项目 2. 博途编程 将F

soledad_chao的博客 2万+

大模型 RAG关键知识总结:信息检索 + 文本向量化 + BGE-M3 实践全解析!

RAG (Retrieval-Augmented Generation,检索增强生成),是一种利用信息检索(Information Retrieval) 技术增强大模型生成效果(generation)的技术。RAG 在步骤上很简单。

2401_85373691的博客 1270

FFmpeg实战:5分钟搞定m3u8视频下载与ts文件合并(附完整命令)

本文详细介绍了如何使用FFmpeg快速下载m3u8视频并合并ts文件为mp4格式。通过简洁的命令行操作,读者可以轻松完成视频处理任务,包括环境准备、链接获取、下载合并及性能优化等实用技巧,特别适合需要高效处理流媒体内容的用户。

weixin_30836759的博客 221

text-embedding 嵌入模型

文本嵌入通常在单个任务的一小部分数据集上进行评估,而不包括它们在其他任务中的可能应用。目前尚不清楚最新的语义文本相似性嵌入(STS)是否可以同样很好地应用于其他任务,如聚类或重新排序。这使得该领域的进展难以跟踪,因为各种模型不断被提出而没有得到适当的评估。为了解决这个问题,我们引入了海量文本语义向量基准测试(MTEB)。MTEB包含8个语义向量任务,涵盖58个数据集和112种语言。通过在MTEB上对33个模型进行基准测试,我们建立了迄今为止最全面的文本嵌入基准。

weixin_43589681的博客 2659

【时间序列预测算法】——Holt-Winters算法介绍及代码实现

背景 一阶二阶三阶指数平滑方法拟合效果均较好,通过结合数据自然属性,数据自身、趋势变化、季节性,提出了这三个角度的衡量量,可以说,理解起来更自然、更亲切。 公式 一阶: sts_tst​是t时刻对xtx_txt​的估计值,这里只有一个参数α,是数据本身的平滑属性的体现。 二阶: 引入了时间趋势变量btb_tbt​,优化了一下一阶的公式。同时还可以预测t+m时刻的值: 三阶: 又引入了季节性周期描述变量ctc_tct​,优化了一下二阶的公式。同时还可以预测t+m时刻的值: NOTE:ct

BlackValley的博客 1万+

Android自动化新方案:ESP32-C3蓝牙HID模拟触控与手势操作实战(附源码)

本文详细介绍了使用ESP32-C3通过蓝牙HID协议实现Android设备自动化操作的完整方案。该硬件方案成本低廉且能完美规避系统风控,可模拟鼠标移动、点击及复杂手势操作,延迟低于50毫秒,适用于游戏连招和应用测试等场景。文章包含完整的源码实现和性能优化技巧。

kotlin6android的博客 378

银河麒麟v10(arm架构)部署Embedding模型bge-m3【简单版本】

银河麒麟v10(arm架构)部署Embedding模型bge-m3【简单版本】

mizhiakk的博客 2747

白话机器学习算法理论+实战番外篇之Xgboost

1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Adaboost等 无监督算法:聚类,降维,关联规则, PageRank等 我前面已经尝试用最白话的语言完成了一个白话机器学习算法理论+实战系列,这个系列已经基本包含了上面这些算...

Miracle8070 1万+

关于embedding向量模型的知识

embedding。

本博客,博文仅代表个人操作经验,不能完全解决你的问题,仅供参考,佛系回复。 1838

YOLOv11 TensorRT极致加速:C++部署性能优化完全指南

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有!

LXY_LOVE36的博客 118

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 用检索增强生成让大模型更强大,这里有个手把手的Python实现
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

123我是木头人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值