• [获奖公告] 【开发者日专场】产品体验官:MusicGen文本生成音乐案例体验
    华为云开发者日·上海站来啦!参加“MusicGen文本生成音乐案例体验”项目提出你的建议或使用体验有机会获得开发者盲盒礼包惊喜不容错过,快叫上小伙伴一起来参加吧~【体验项目】MusicGen文本生成音乐案例体验【活动时间】2024年8月30日-9月6日【参与方式】直接在此活动帖下方回帖提建议/提建议即可比如对产品功能的改进建议、对活动流程的感想、对现场活动的感悟等等PS:不要少于30字哦~【获奖规则】奖项设置有效回复楼层评选条件获奖名额激励礼品优质建议奖20对产品功能有改进价值的建议1名开发者盲盒礼品价值50-100元积极反馈奖20优质建议奖轮空的情况下进行抽取抽取1名开发者盲盒礼品价值50元【活动规则】1、本帖的回帖建议不少于30字,仅限于对“MusicGen文本生成音乐案例体验”体验项目,其他项目建议不参与此次活动,否则将视为无效内容。2、本次活动将根据实际参与情况发放奖励,包括但不限于用户百分之百中奖或奖项轮空的情况;以上奖品均为实物奖品,具体发放视出库情况而定;3、活动预计于结束后七天内完成奖项公示,并于结束后15个工作日内完成邮寄。【温馨提示】1、请务必使用个人实名账号参与活动(IAM、企业账号等账号参与无效)。如一个实名认证对应多个账号,只有一个账号可领取奖励,若同一账号填写多个不同收件人或不同账号填写同一收件人,均不予发放奖励。2、所有获得奖品的获奖用户,请于获奖后3日内完成实名认证,否则视为放弃奖励。
  • [其他] 【atc模型转换报错】onnx->om模型转换 一直报E40001 python动态库非法
    模型转换从onnx到om 使用atc转换。 python版本3.10.  cann 版本为8.0。芯片 ascend310p duo报如下错误。当前根据如下文档转换的,先把stable diffusion模型转到onnx, 然后onnx转到om模型。https://gitee.com/ascend/ModelZoo-PyTorch/blob/master/ACL_PyTorch/built-in/foundation_models/stable_diffusion/README.md安装路径
  • [热门活动] MetaStudio生产线给大家放福利啦~
    小编最近收到很多私信,感受到了大家对数字人的跃跃欲试,却对价格望而止步于是乎~给大家放一个小福利,仅需19.9元即可制作60分钟的数字人视频啦!cid:link_0
  • [技术干货] LangChain自定义工具COT思维链
    在人工智能和自然语言处理领域,思维链(Chain of Thought, COT)是一种强大的推理技术,它通过在推理过程中显式地展示中间步骤来帮助模型更好地理解和解答复杂问题。LangChain作为一个功能强大的NLP工具链,支持自定义思维链工具,使用户能够构建适合自己任务需求的推理过程。本文将介绍如何使用LangChain自定义COT思维链工具,并通过代码示例展示其应用。一、COT思维链简介COT思维链是一种通过显式地展示推理步骤来增强模型推理能力的方法。在解答复杂问题时,模型不仅给出最终答案,还会逐步展示推理过程,这有助于提高模型的解释性和可靠性。LangChain提供了自定义思维链的功能,使得用户可以灵活地构建自己的推理过程。二、自定义COT思维链的步骤自定义LangChain的COT思维链主要包括以下几个步骤:定义任务和问题首先,明确你要解决的任务和问题类型。这可以是任何需要推理和解释的问题,如数学计算、逻辑推理等。构建推理步骤根据任务需求,设计合理的推理步骤。这些步骤应该能够逐步引导模型从问题出发,通过一系列中间步骤最终得到答案。使用LangChain构建思维链使用LangChain的API,将你的推理步骤转换为可执行的思维链。你可以利用LangChain提供的工具和组件,如文本生成、知识库查询等,来构建思维链。测试和优化思维链在构建完思维链后,进行测试以确保其正常工作。你可以通过输入不同的问题来检查思维链的推理能力和准确性。根据测试结果,对思维链进行优化和调整。三、代码示例下面是一个使用LangChain自定义COT思维链的简单示例,用于解决简单的数学问题。首先,确保你已经安装了LangChain和相关的依赖:pip install langchain然后,你可以按照以下步骤创建自定义的COT思维链:from langchain.chains import PromptTemplate from langchain.text_generation import TextGeneration from langchain import PromptTemplate, LLMChain # 步骤1:定义问题和推理步骤 problem = "What is 2 + 3?" # 设计推理步骤 # 1. 将问题转换为数学表达式 # 2. 计算数学表达式的值 # 3. 返回计算结果 # 步骤2:构建推理步骤的函数或模型 # 在这个简单的示例中,我们不需要额外的模型,而是直接编写推理逻辑 def calculate_expression(expression): try: return str(eval(expression)) except Exception: return "Error in calculation" # 步骤3:使用LangChain构建思维链 # 定义推理过程的模板 prompt_template = PromptTemplate.from_template( """\ Given the question: {question} I will break it down into steps to solve it. Step 1: Convert the question into a math expression: {expression} Step 2: Calculate the value of the expression: {value} Final Answer: {final_answer} """ ) # 创建思维链 chain = LLMChain.from_prompt(prompt_template, input_variables=["question", "expression", "value", "final_answer"]) # 步骤4:执行思维链并获取结果 # 在这个例子中,我们直接调用计算函数并传递结果给思维链 expression = "2 + 3" value = calculate_expression(expression) final_answer = value # 执行思维链 result = chain.run( question=problem, expression=expression, value=value, final_answer=final_answer ) # 输出结果 print(result)在上面的代码中,我们首先定义了一个简单的数学问题。然后,我们创建了一个推理步骤的函数calculate_expression,用于计算数学表达式的值。接下来,我们使用LangChain的PromptTemplate和LLMChain来构建思维链。在模板中,我们定义了推理过程的格式,并通过占位符来传递问题、表达式、计算结果和最终答案。最后,我们执行思维链并打印出结果。四、总结通过自定义COT思维链,我们可以利用LangChain构建复杂的推理过程,以满足特定任务的需求。通过定义推理步骤、构建思维链和执行推理过程,我们可以提高模型的解释性和推理能力。在上面的示例中,我们展示了如何使用LangChain自定义一个简单的数学问题的COT思维链。你可以根据自己的任务需求,扩展和修改这个示例,以构建更复杂的推理过程。希望这个示例能够帮助你更好地理解如何使用LangChain自定义COT思维链。
  • [技术干货] LangChain:如何自定义工具
    在人工智能和自然语言处理的领域中,工具链的定制性往往决定了其应用的广泛性和深度。LangChain作为一款强大的语言模型工具链,允许用户根据具体需求自定义工具,以更好地满足各种复杂的场景需求。本文将介绍如何使用LangChain进行工具自定义,并通过代码示例来展示具体步骤。一、LangChain简介LangChain是一个基于Python的自然语言处理工具链,它整合了多种NLP模型和工具,使得用户可以轻松地构建复杂的语言处理任务。通过LangChain,用户可以创建自定义的工具,以满足各种特定的需求。二、自定义工具的步骤自定义LangChain工具的步骤主要包括以下几个部分:定义工具的功能首先,你需要明确你的工具需要实现什么功能。这可以是任何与文本处理相关的任务,如文本分类、实体识别、摘要生成等。选择或训练模型根据你的功能需求,选择适合的预训练模型,或者如果你有足够的数据,也可以训练自己的模型。集成模型到LangChain将选定的模型集成到LangChain中,创建自定义的工具类。使用自定义工具在你的应用中使用这个自定义工具,处理文本数据。三、代码示例下面是一个简单的示例,展示了如何使用LangChain创建一个自定义的文本分类工具。首先,确保你已经安装了LangChain和相关的NLP库:pip install langchain transformers然后,你可以按照以下步骤创建自定义工具:from langchain.text_classification import ZeroShotClassification from transformers import pipeline # 步骤1:定义工具的功能 # 这里我们创建一个基于零样本学习的文本分类工具 # 步骤2:选择或训练模型 # LangChain提供了多种预训练模型,这里我们选择使用transformers库中的模型 nlp = pipeline("zero-shot-classification") # 步骤3:集成模型到LangChain class CustomTextClassifier: def __init__(self): self.nlp = nlp def classify_text(self, text: str, labels: list[str]): # 使用transformers的零样本学习模型进行分类 result = self.nlp(text, labels, multi_label=False) return result['labels'][0] if result['labels'] else None # 步骤4:使用自定义工具 custom_classifier = CustomTextClassifier() text_to_classify = "This is a great movie!" labels = ["positive", "negative"] classification_result = custom_classifier.classify_text(text_to_classify, labels) print(f"The text is classified as: {classification_result}")在这个示例中,我们创建了一个基于零样本学习的文本分类工具。首先,我们使用了transformers库中的pipeline函数来加载预训练的零样本学习模型。然后,我们定义了一个CustomTextClassifier类,该类封装了模型,并提供了一个classify_text方法,用于对给定的文本进行分类。最后,我们创建了一个CustomTextClassifier的实例,并使用它来对一段文本进行分类。四、总结LangChain为用户提供了强大的自定义工具的能力,使得用户可以轻松地根据自己的需求构建复杂的NLP任务。通过选择合适的模型并将其集成到LangChain中,用户可以创建出功能强大的自定义工具,以满足各种实际应用场景的需求。通过本文的示例,你应该对如何在LangChain中自定义工具有了初步的了解。希望这能帮助你更好地利用LangChain来构建你的NLP应用。
  • [技术干货] LangChain与AutoGen的区别
    作为人工智能领域的两个重要框架,LangChain和AutoGen在各自的应用场景中发挥着关键作用。尽管它们都是用于构建语言模型应用的工具,但在设计理念、功能特点以及使用场景上却存在显著差异。本文将对LangChain和AutoGen进行详细对比,以便读者更好地理解和选择适合自己的工具。一、设计理念LangChain的设计理念在于提供一套灵活且强大的框架,帮助开发者构建基于大型语言模型(LLM)的应用程序。它注重模块化、可扩展性和易用性,提供了丰富的组件和接口,使得开发者能够轻松地将各种语言模型集成到他们的应用中。而AutoGen则更注重自动化和简化工作流程。它旨在帮助开发者快速搭建基于大语言模型的复杂应用程序,通过自动执行一系列任务来降低开发难度和成本。AutoGen的设计理念更偏向于让开发者能够专注于业务逻辑的实现,而不需要过多关注底层的技术细节。二、功能特点1. LangChain模块化设计:LangChain采用了模块化的设计思想,将各种功能拆分成独立的组件,方便开发者进行组合和定制。这使得LangChain具有很高的灵活性和可扩展性,能够适应各种复杂的应用场景。丰富的接口:LangChain提供了丰富的接口和工具,使得开发者能够轻松地与各种语言模型进行交互。无论是调用模型的推理功能,还是进行模型的训练和优化,LangChain都能提供强大的支持。强大的链式调用:LangChain的另一个特点是支持链式调用,即可以将多个组件串联起来形成一个完整的流程。这使得开发者能够构建出更加复杂和强大的语言应用,实现一系列连贯的任务。2. AutoGen自动化工作流程:AutoGen的核心功能是自动化执行一系列与语言模型相关的任务。它可以根据开发者的需求自动完成模型的搭建、训练、优化等流程,大大减轻了开发者的负担。简化的搭建过程:AutoGen通过提供简洁明了的配置选项和可视化界面,使得开发者能够轻松地搭建基于大语言模型的应用。即使是没有深厚技术背景的用户也能够快速上手。优化性能:AutoGen还具备性能优化的功能,能够自动调整模型的参数和配置,以提高模型的性能和准确度。这使得开发者能够更加专注于业务需求的实现,而不需要过多关注模型的技术细节。三、使用场景1. LangChain定制化的语言应用:对于那些需要高度定制化的语言应用,LangChain是一个很好的选择。通过组合不同的组件和接口,开发者可以根据具体需求构建出独特的功能和流程。复杂的工作流程:LangChain的链式调用特性使得它特别适合处理复杂的工作流程。通过串联多个组件,开发者可以构建出一系列连贯的任务,实现更加高效和自动化的数据处理和分析。2. AutoGen快速原型开发:AutoGen的自动化和简化特性使得它非常适合用于快速原型开发。开发者可以利用AutoGen快速搭建起一个基本的语言应用框架,然后进行后续的迭代和优化。降低开发难度:对于那些没有深厚技术背景但又需要构建语言应用的用户来说,AutoGen是一个很好的选择。它简化了开发流程和技术细节,使得用户能够更加轻松地完成应用的搭建和部署。总结LangChain和AutoGen作为两个优秀的语言模型框架,各自具有独特的设计理念和功能特点。LangChain注重模块化、可扩展性和易用性,适合构建定制化的语言应用和处理复杂的工作流程;而AutoGen则更注重自动化和简化工作流程,适合快速原型开发和降低开发难度。在选择使用哪个框架时,开发者应根据自己的需求、项目特点以及团队的技术栈来综合考虑。
  • [技术干货] LangChain来实现多Agent的协同工作
    导语随着区块链技术的发展,智能合约逐渐成为各行业解决问题的利器。在这其中,LangChain作为一款开源的智能合约开发工具,提供了多Agent协同工作的功能,下面我们就来看一下如何使用LangChain来实现多Agent的协同工作。1. 背景介绍多Agent系统是一种基于分布式计算的工作模式,它能够将任务拆分成多个子任务,并由多个智能合约来处理。而LangChain则是一种基于区块链的智能合约编程语言,能够实现多智能合约的协同工作。2. 需求设定假设我们需要开发一个供应链管理系统,其中包含三个智能合约Agent:生产商、批发商和零售商。生产商负责生产商品并上传到区块链,批发商负责采购商品并分发给零售商,零售商负责销售商品给最终用户。3. 代码实现首先,我们定义三个智能合约Agent:Producer(生产商)、Wholesaler(批发商)和Retailer(零售商)。它们分别负责不同的任务。// Producer.sol contract Producer { function produceProduct(string memory product) public { // 生产商品的逻辑 } } // Wholesaler.sol contract Wholesaler { mapping(string => uint) public products; function purchaseProduct(string memory product, uint quantity) public { // 采购商品的逻辑 products[product] += quantity; } function distributeProduct(string memory product, uint quantity, address retailer) public { // 分发商品的逻辑 require(products[product] >= quantity, "Insufficient quantity"); products[product] -= quantity; // 调用零售商的接口 Retailer(retailer).receiveProduct(product, quantity); } } // Retailer.sol contract Retailer { function receiveProduct(string memory product, uint quantity) public { // 零售商接收商品的逻辑 } }接下来,我们使用LangChain的多Agent协同工作功能来实现这个供应链管理系统。// SupplyChain.sol pragma langchain = "0.1"; import "./Producer.sol"; import "./Wholesaler.sol"; import "./Retailer.sol"; contract SupplyChain { Producer producer; Wholesaler wholesaler; Retailer retailer; constructor(address producerAddress, address wholesalerAddress, address retailerAddress) public { producer = Producer(producerAddress); wholesaler = Wholesaler(wholesalerAddress); retailer = Retailer(retailerAddress); } function manageSupplyChain(string memory product, uint quantity) public { producer.produceProduct(product); wholesaler.purchaseProduct(product, quantity); wholesaler.distributeProduct(product, quantity, address(retailer)); } }4. 运行效果创建一个SupplyChain合约实例,并传入Producer、Wholesaler和Retailer的地址,然后调用manageSupplyChain函数来协调各个Agent的工作。// main.sol pragma langchain = "0.1"; import "./SupplyChain.sol"; address producerAddress = 0x123...; // 填入Producer合约的地址 address wholesalerAddress = 0x456...; // 填入Wholesaler合约的地址 address retailerAddress = 0x789...; // 填入Retailer合约的地址 contract Main { SupplyChain supplyChain; constructor() public { supplyChain = new SupplyChain(producerAddress, wholesalerAddress, retailerAddress); } function runSupplyChain(string memory product, uint quantity) public { supplyChain.manageSupplyChain(product, quantity); } }5. 总结通过LangChain的多Agent协同工作功能,我们可以轻松地实现多个智能合约的协同工作,实现更加复杂的业务逻辑。在供应链管理系统中,通过Producer、Wholesaler和Retailer三个Agent的协同工作,我们能够完成商品从生产到销售的全过程。以上是使用LangChain实现多Agent协同工作的示例,希望能够帮助读者更好地理解和应用智能合约的多Agent模式。
  • [技术干货] 大模型,向量数据库,prompt的关系是什么
    一、引言随着科技的飞速发展,人工智能(AI)已经成为了当今社会最为热门的话题之一。在AI领域,大模型、向量数据库和prompt是三个核心概念,它们在AI技术的发展中起着至关重要的作用。本文将详细介绍这三个概念,并探讨它们之间的区别和联系。二、大模型(Large Models)2.1 定义大模型(Large Models),在人工智能领域,通常指的是具有大量参数的深度学习模型,这些模型能够处理和生成极其复杂的数据模式。大模型的参数数量可以从数百万到数十亿甚至更多,这使得它们在处理自然语言、图像识别、语音识别等任务时表现出色。在以前,业界一般喜欢把这类模型称为“序列到序列模型(Sequence to Sequence)”,因为用户的输入是一个文本序列,模型的输出也是一个文本序列,所以就是“序列到序列”。 这就是大模型的行为表现,很简单,你输入一段文本, 它输出一段文本。2.2 特点你可以把大模型理解为人脑,而训练数据就像是历史记忆。以下是大模型的几个关键特点:强大的表示能力:大模型由于其庞大的参数规模,能够学习到更加丰富和细致的数据特征,从而在理解复杂任务时具有更强的表示能力。泛化能力:大模型在多个任务上展示出了良好的泛化能力,即它们能够将在一个任务上学到的知识应用到其他相关的任务上,这一点在多模态学习、迁移学习等领域尤为重要。预训练与微调:许多大模型采用预训练和微调的两阶段训练策略。在预训练阶段,模型在大规模的数据集上学习通用知识;在微调阶段,模型在特定任务的数据集上进行调整,以适应特定的应用场景。计算资源需求:大模型的训练和推理需要大量的计算资源,包括高性能的GPU集群、高速的存储系统和高效的并行计算技术。能源和成本:由于大模型需要大量的计算资源,它们的训练和运行通常伴随着较高的能源消耗和成本。2.3 国产大模型目前市面上可谓是百模大战,国内较火的大模型有以下几个百度——“文心一言”大模型阿里——“通义千问”大模型腾讯——“混元助手”大模型华为——“盘古”大模型科大讯飞——“讯飞星火”大模型网易——“玉言”大模型360——“360智脑”大模型京东——“言犀”大模型清华智谱 ——“ChatGLM”大模型等等三、向量数据库(Vector Databases)3.1 在大模型中的使用场景有了大模型和Prompt工程,已经可以让大模型帮我们完成很多任务了,向量数据库并不是必须的。向量数据通常出现在需要外挂一些额外知识、或者输入太大需要分片等等情况来使用。3.2 定义大模型的最大输入长度,一般都有限制,单位是token。目前主流大模型至少支持4千以上,数万是常态,10万+的也有(注意token指的是一个英文单词,与中文汉字并不等价) 在使用大型模型时,通常会遇到需要存储和查询大量向量数据的情况。这些向量数据可能代表文本、图像、音频或其他类型数据的特征。想象一下,你有一个非常大的图书馆,里面有很多书(数据),而你想快速找到与你手中的一张照片最相似的照片。如果我们希望大模型能够针对整个图书馆的书来回答用户的问题,一个明显的难点是整个图书管的书太多了,远远超过了大模型可处理的最长文本长度。此时我们可以借助向量数据库来解决这个问题。向量数据库的工作原理可以分为几个关键步骤:数据插入、数据存储、数据索引和数据查询。下面我将用通俗易懂的语言来简单介绍这些步骤:数据插入:当你有一些数据(比如图片、文本等)需要存储到向量数据库时,你首先会使用一个模型将这些数据转换成向量。这个模型会提取数据的关键特征,并将这些特征编码成一个数值列表,也就是向量。数据存储:一旦数据被转换成向量,它就会被存储到数据库中。数据库会为每个向量分配一个唯一的标识符,这样你就可以在之后通过这个标识符来检索向量。数据索引:为了能够快速查询向量,数据库会使用一种叫做索引的技术来组织向量。索引就像是一本目录,它帮助数据库快速找到相似的向量。有多种索引技术,比如哈希索引、树状索引等,它们都有各自的优势和适用场景。数据查询:当你想要找到与某个向量相似的向量时,你会向数据库发送一个查询请求。数据库会使用索引来快速定位与查询向量最接近的向量,并返回这些向量及其关联的数据。向量数据库的工作原理就像是有一个非常聪明的图书馆管理员,他知道每本书(数据)的内容和位置,当你给出一个主题(查询向量),他能够快速找到与这个主题最相关的书籍。向量数据库通过高效的存储和索引机制,使得在大规模数据中查找相似项变得快速和简单。3.3 与传统数据库的区别向量数据库的核心技术之一是将数据转化为向量形式,并使用索引结构对向量数据进行存储和查询。这些索引结构,如向量树、局部敏感哈希(LSH)等,能够更有效地支持向量数据的相似度搜索。通过这种方式,向量数据库能够实现高效的相似度搜索,这在处理大规模的向量数据集时尤为重要。这对于许多应用场景,如推荐系统、图像识别、自然语言处理等,是至关重要的。用关系数据库理论上当然也可以。在关系型数据库中存储vector和page都不是问题。当需要计算哪一个页面和用户请求最相似时,我们可以遍历一次所有的vector,分别与用户请求计算相似度,然后找到最相似的那一条记录。但问题是计算相似度的开销不可忽略!!!上面这个关系型数据库最大的问题是每一次都要计算N次相似度,耗时会较大。向量数据库的核心是解决相似度计算的效率问题。在向量数据库中,通常会使用名为Vector Quantization的技术,将向量间相似的计算转化为只包含加法和查表。两个128维向量相似度的计算(比如通过点乘计算),需要128次乘法和127次加法。而乘法开销远远大于加法。使用Vector Quantization技术,可以完全没有乘法计算,只含数次加法和数次查表。这就是向量数据库带来的好处。3.4 RAG技术随着大模型技术的不断发展,向量数据库也在不断地优化和升级。例如,大模型RAG(Retrieval-Augmented Generation)结合了信息检索和生成的功能,向量数据库在这类模型中的应用也成为热门话题。这显示了向量数据库在支持先进的大模型技术方面的潜力和价值。 向量数据库(Vector Database)是一种专门用于存储、管理、查询和检索向量(Vectors)的数据库。由于向量本质上是一串数字,因此不管是文本、图片、语音、视频只要可以转换为数字的,都可以存到向量数据库中。 常见的是使用向量模型如text2vec、m3e、bge等将文本转换为向量,使用clip、unet等图像模型将图片转为向量,同样声学模型可以将语音转换为向量。当然也有更复杂的多模态模型可以同时对文本、图片进行处理。大致流程如下图:RAG技术,首先使用检索技术,查找与用户问题最相关的文档,然后把文档和问题组合成提示词输入到模型中,由模型推理生成最终结果。如下图所示,最简单的就是左边这种模式,是原生的RAG技术。当然,这种原生的技术存在缺陷,一般效果不会特别好,因此有了右边优化的技术,添加了不少流程和步骤去帮助我们更好的生成回答。大模型中的向量数据库通过其高效的相似度搜索和灵活的存储查询能力,为处理多维向量数据提供了强大的支持,推动了各种应用场景的发展和创新。3.5 LangChain 的RAG示例以下两种方法取自 LangChain 的RAG示例3.5.1 父文档检索(Parent Document Retriever)父文档检索的思路是,我利用相似度召回了一个语义上相似的小块,然后返回一个能提供完整上下文信息的大块,这样可以帮助模型更好的理解上下文的语义,进行高质量的回答。LangChain 中的 Parent Document Retriever 就相当于结合了不同粒度的文本块去构建检索过程,具体的实现流程如下:首先就是使用两个文本分割器去将文本切分为父文档块和子文档块,然后建立向量存储区存储子块,建立内存存储区存储父块。之后我们需要创建 Parent Document Retriever,将上面定义好的分割器、存储器,并执行add_documents 方法将文档添加到检索器中。在使用的时候,调用 get_relevant_documents 方法,这个时候实际上会调用向量检索返回子块的 ID,然后根据子块ID 将对应父块的内容返回给用户。3.5.2 多向量检索(MultiVector Retriever)多向量检索的思路是为同一篇文档提供不同视角的向量建模,例如:分割文档、做摘要、假设性问题等分割文档:就是将文档切分为不同大小的块,然后分别构建向量摘要:为每个文档创建摘要,将其与文档一起嵌入(或者替代文档);可以利用大模型进行文档总结,输出摘要内容。摘要一般包含了整篇文档的语义信息,但是会比原文要更精简。当然,使用大模型进行总结的时候,需要对大模型效果进行评估,正常来说 6B、7B 大小的模型效果不会太好。假设性问题:为每个文档创建适合回答的假设性问题,将其与文档一起嵌入。这个是一个典型的逆向思维的例子,就是根据现在有的这篇文档,先让大模型提出几个这篇文档能够解答的问题,然后将这些问题编码成向量进行存储。这其实基于一个假设就是如果一篇文章能回答某一个问题,那么也可以回答与其相似的问题,当然,这个假设在一般情况下都是成立的,因此可以拿来使用。四、Prompt4.1 什么是Prompt在大模型中,特别是在自然语言处理(NLP)和深度学习领域,prompt是指一个特定的输入,用于引导模型生成或预测期望的输出。这种技术被广泛应用于生成式预训练Transformer模型,如GPT系列。 prompt在大模型中起到了一个桥梁的作用,连接了模型的预训练阶段和具体的应用任务,使得模型能够更准确地理解和生成期望的输出。4.2 为什么输入会被称为Prompt那么为什么好端端的输入会被称为Prompt?这是因为在大模型成功之前,一般而言模型的能力都是单一的。一个可以做“文本分类”的模型做不了“关键词识别”,所以人们对模型的使用方法也是单一的。 由于大模型不一样,它的能力更全面、更通用,人们可以通过输入不同的文本来让大模型执行不同的任务,因此Prompt一词便出现了。4.3 prompt的形式Prompt可以是多种形式,包括文本、图像或其他模态的数据。在NLP中,prompt通常是一段文本,用于启动或指导模型进行某种特定的任务。例如,在问答系统中,prompt可能是一个问题,模型根据这个问题生成答案。在文本生成任务中,prompt可以是一个句子的开头,模型接着生成完整的句子或段落。4.4 prompt与微调的区别近年来,prompt-based learning或prompt engineering在NLP领域变得非常流行。这种方法的核心思想是通过设计合适的prompt来更好地利用预训练模型的知识,从而在各种NLP任务上实现更好的性能。与传统的微调(fine-tuning)方法相比,prompt-based learning有时能够更灵活地适应不同的任务,并且可能需要的计算资源更少。4.5 思维链思维链,一种典型的Prompt工程。就是在给模型示例时,把中间的计算步骤拆解一下,一步一步来计算,如下图(以清华智谱的 ChatGLM4 为例),我们发现,模型在作答时也会跟着我们的思路去拆解问题,然后得到正确答案。以下是在ChatGLM4中使用思维链的一个范例问题:小明有12个苹果,他有买了两袋苹果,每袋苹果有3个,问小明现在总过有几个苹果。 答案:初始有12个苹果,买了两袋苹果, 每袋苹果有3个,所以买了的苹果数量为2*3=6个。 总共苹果数为初始数量加上买了的数量,即12+6=18个苹果。 问题:小红有10个香蕉,他给了小明1个香蕉,又买了4个香蕉,问小红现在总共有几个香 蕉。 请问答案是什么?答案: 小红初始有10个香蕉,给了小明1个香蕉后,剩余10-1=9个香蕉。之后又买了4个香蕉,所以小红现在的香蕉总数为9+4=13个。五、区别与联系5.1 区别大模型通常是指能够处理庞大数据和复杂任务的机器学习模型,比如GPT-4就是一种大模型(国内大模型有百度的文心一言、阿里的通义千问、华为的盘古、清华智谱的ChatGLM 等等)。向量数据库则是一种存储大量向量数据并支持高效向量检索的技术。而prompt则是一种对模型输入进行设计的方法,它可以帮助指导大模型生成更加准确和有针对性的输出。5.2 联系这三者之间的关系在于,大模型可以通过向量数据库进行向量化存储,并且通过prompt进行输入引导以生产更具针对性的输出,向量数据库可以帮助大模型进行向量检索和相关性匹配,而prompt可以帮助大模型更好地理解用户输入并生成相关的输出。因此,这三者可以相互配合,共同用于解决各种复杂的自然语言处理和信息检索任务。六、总结经过上面的描述,你应该对大模型、向量数据库、prompt有了一个比较完善的认知了。下面用一个不是非常恰当的例子做一个简要的概述。我们假设大模型是辆跑车,那么prompt 就是方向盘,车再好也得有方向盘才能开到目的地,而向量数据库有点像导航 APP,给你提供最新的路况信息,没有向量数据库的话就只能凭记忆(训练大模型时使用的历史资料)开车,万一路况有变可能会遇到麻烦或走岔了路(得到错误回答)。再比如你问大模型:“你们村的村长是谁?”。由于你们村太小,大模型可能并不知道(大模型训练时,没有相关训练集),或者知道的是很久以前的信息(大模型一般只知道截至至训练时刻的历史数据)。但如果向量数据库里有你们村历任村长的信息,并且提供给大模型,大模型就可以告诉你当前的村长是谁了。七、参考文献1.大模型,向量数据库,prompt的关系是什么 cid:link_0 2.从 LangChain 中学习检索增强 cid:link_2本文参与华为云社区【内容共创】活动第26期。 任务16:大模型,向量数据库,prompt的关系是什么?
  • [技术干货] 万字长文 详解语义解析中的NL2SQL【转】
    NL2SQL是语义解析和智能问答领域的前沿问题,旨在将人类的自然语言问句转化为结构化查询语句,是实现人类和数据库无缝交互、提升数据库分析效率的核心技术。这一技术对于推动人工智能与数据库的交互,实现更高效、更便捷的数据查询和分析具有重要的价值。我们团队自成立以来,一直致力于结合公司实际业务和项目需求,自主研发高效的NL2SQL算法。我们的研究在多个公开数据集上取得了显著的效果,展示了我们的算法在自然语言处理和语义理解方面的优势。同时,我们也在真实的业务项目中积累了宝贵的实践经验,这使我们深入理解了NL2SQL技术在实际应用中的挑战和可能性。本文的主要内容将围绕NL2SQL技术的发展历史和我们的工程实践经验进行分享。我们将首先回顾NL2SQL技术的发展历程,阐述其背后的基本理念和技术原理,然后详细介绍我们在工程实践中如何利用和优化这项技术,以满足实际业务的需求。我们希望通过分享我们的经验和实践,能为这个领域的研究者和实践者提供一些有益的参考和启示。一、NL2SQL问题描述以往,当业务数据分析人员或用户需要通过SQL查询业务数据或进行数据分析时,他们通常需要经历以下繁琐的步骤:需求总结:首先,业务数据分析人员或用户需要明确并总结他们想要查询的数据的具体需求。这包括确定需要查询哪些字段、设置哪些条件、以及可能的数据聚合方式等。后端工程师介入:随后,后端工程师需要根据这些需求编写相应的SQL语句。这要求他们不仅要理解业务需求,还要确保SQL的准确性和性能。完成SQL编写后,后端工程师还需要部署服务并建立与数据库的连接。前端工程师的任务:在后端工程师完成SQL部署之后,前端工程师需要介入,为这条SQL查询编写对应的用户界面。这意味着他们需要创建适当的输入字段、按钮、以及数据展示组件等。运维工程师上线:当前端工程师完成界面编写后,运维工程师会负责将这一服务上线,确保所有的后端和前端组件都能够正常工作,并且与数据库的连接是稳定的。查询执行与数据展示:经历上述步骤后,业务数据分析人员或用户终于可以登录页面,执行SQL查询并查看结果。但如果他们对数据有任何新的查询需求或修改,整个流程可能需要重复进行。举个例子,假设用户想要查询一个表格中的特定数据,如某个时间段内的订单总额。为了获得这一答案,他们需要明确他们的查询需求(例如,选择时间范围、订单状态等)。随后,后端工程师会编写相应的SQL语句来执行这一查询,如选择特定的时间范围并对订单金额进行求和。然后,前端工程师会为该查询创建一个界面,允许用户输入时间范围和其他条件。最后,当运维工程师将这一功能上线后,用户可以通过该界面执行SQL查询并查看结果。这种方式虽然可行,但显然不够高效,且存在诸多不必要的中间环节。因此,当前的技术发展趋势是寻找更为高效、自动化的解决方案,如使用NL2SQL技术,使用户可以直接通过自然语言进行查询,从而大大简化整个查询流程。例如,下图中对一个表格进行查询,针对该需求需要写成一条SQL语句才能在数据库中执行并得到答案。减少数据分析和查询时的工作量,使用户能够更便捷、直观地获取所需数据,一种理想的方式是让用户只需通过一个搜索框进行交互。在这样的设想中,用户只需输入查询语句,而系统则通过自然语言处理技术,将用户的自然语言输入转化为可执行的SQL查询。这样,用户无需了解复杂的SQL语法,也无需通过多个界面和环节来执行查询和获取结果。这正是NL2SQL技术要解决的问题。详见下图。上图可以看出,我们将以前研发SQL查询新需求的工作效率极大地提高了,并且很多非IT人士也能通过自然语言交互界面便捷快速地和数据库交互,业务流程速度大为提高。二、NL2SQL数据集在机器学习和自然语言处理的研究中,相关领域的数据集是研究的基础。针对NL2SQL这一任务,我们有多种数据集可供选择。这些数据集可以根据其涉及的数据库表的数量和SQL结构的复杂性进行分类。单表无嵌套数据集:ATIS&GeoQuery数据集:ATIS数据集来源于机票订阅系统,由用户的提问生成SQL语句,属于单一领域且上下文相关的数据集。而GeoQuery则与美国的地理相关,包含880条问题及对应的SQL语句,属于单一领域但上下文无关的数据集。WikiSQL数据集:鉴于ATIS和GeoQuery数据集的规模较小且标注简单,2017年,VictorZhong等研究人员基于维基百科标注了一个大型数据集,名为WikiSQL。这个数据集包含了80654条训练数据,涉及26521个数据库,它的推出引起了学术界的广泛关注,并催生了一系列先进的模型,如Seq2SQL、SQLNet和TypeSQL。多表嵌套数据集:Spider数据集:WikiSQL数据集虽然规模较大,但其问题只涉及一个表格,且仅支持简单的SQL操作,这与现实生活中的场景不太吻合。为了更真实地反映实际情境,耶鲁大学的研究人员在2018年推出了Spider数据集,这是目前最为复杂的Text-to-SQL数据集。它涵盖了138个领域的200多个数据库,每个数据库平均关联到5.1个表格,并且训练集和测试集中使用的数据库是不重叠的。此外,Spider数据集中的SQL语句更为复杂,包括了多种关键字和嵌套查询。中文CSpider数据集:西湖大学在EMNLP2019上发布了一个中文的Text-to-SQL数据集CSpider。这个数据集基于Spider数据集,对其中的问题进行了翻译,并使用SyntaxSQLNet作为基线系统进行了测试。同时,它还探讨了中文环境下的一些额外挑战,如中文问题与英文数据库的对应、中文分词问题等。竞赛数据集:在国内,已经举办了多次关于NL2SQL的竞赛。其中,追一科技举办的“首届中文NL2SQL挑战赛”和百度举办的“2020语言与智能技术竞赛:语义解析任务”是规模较大的两次比赛。追一比赛的数据集为单表无嵌套NL2SQL数据集,其数据形式较为简单,每条SQL仅包含基本的语法现象,没有聚合函数,因此算法实现相对容易。这些数据集为NL2SQL的研究提供了丰富的资源,使得研究者可以在不同的场景下测试和优化他们的模型。下面两个图为比赛官方页面截图:三、主要技术路线目前关于NL2SQL技术路线的发展已经涵盖了多种方法,以下是其中主流的几种:Seq2Seq方法:在深度学习的背景下,很多研究者将Text-to-SQL任务看作是神经机器翻译任务,并主要采用Seq2Seq的模型框架。基线模型Seq2Seq结合了Attention、Copying等机制后,能在ATIS、GeoQuery数据集上达到84%的精确匹配。但在更复杂的数据集如WikiSQL和Spider上,其表现相对较差,分别为23.3%的精确匹配和37.0%的执行正确率,以及在Spider数据集上只能达到5~6%的精确匹配。模板槽位填充方法:此方法将SQL的生成过程划分为多个子任务,每个子任务负责预测某一语法现象中的列。它对单表无嵌套的情况表现较好,且能保证生成的SQL语法正确。但缺点是它只能对固定的SQL语法模板进行建模,对于存在嵌套的SQL情况处理不够灵活。中间表达方法:以IRNet为代表,此方法是目前的主流方法。它将SQL生成分为两步:首先预测SQL语法的骨干结构,然后对其进行列和值的补充。这种方法在后续的研究中得到了广泛的应用和优化。结合图网络的方法:为了解决多个表中存在同名列时的预测不准确问题,研究者提出了结合图网络的方法。其中,Global-GNN和RatSQL是这一方法的代表。由于结合了图网络可以更好的表征数据库内的表和列之间的拓扑关系,该方案为当前优势方案。强化学习方法:以Seq2SQL为代表,此方法在每一步都会计算当前决策生成的SQL是否正确。从本质上说,强化学习是基于交互产生的训练数据集的有监督学习。其效果与翻译模型相似,但在某些情况下可能更为有效。结合预训练模型、语义匹配的方法:此方法利用表格内容作为预训练语料,并结合语义匹配任务的目标输入数据库Schema,从而选择所需的列。例如,BREIDGE和GRAPPA就是采用了这种方法,它们在处理复杂的查询任务时展现出了较高的效率。随着技术的不断进步和创新,我们可以预期NL2SQL领域将会涌现出更多的先进方法和解决方案。1. X-SQL方法随着自然语言处理(NLP)技术的快速发展,将自然语言转化为结构化查询语言(SQL)的能力已经成为了研究的热点。在众多的方法中,X-SQL方法凭借其独特的处理方式和高效性能,成为了当前模板填充法的代表。X-SQL方法将单表的NL2SQL任务拆分成多个子任务,每个子任务专门负责预测某一语法现象中存在的列和对列的操作,从而将整个NL2SQL任务转化为一个在列上的分类任务。这不仅简化了问题的复杂度,还提高了预测的准确度。1.1 X-SQL网络结构X-SQL的网络结构主要由编码器、上下文强化层和输出层组成。编码器:该部分采用了改良的BERT模型——MT-DNN作为基础的编码器。在数据输入形式上,X-SQL方法将自然语言问题和各列的名称一同输入,它们之间使用BERT中的特殊token [SEP]进行分隔。为了更好地表示不同的数据类型,每列的开始位置都使用了一个特定的token。此外,编码器中的[CLS] token被替换为了[CTX] token,这是为了更好地捕捉上下文信息。上下文强化层:这一层的主要作用是将每个列的输出向量与[CTX]位置的输出向量合并,从而得到一个更为丰富和具有代表性的列向量。这一设计可以使得模型更好地理解和利用列与列之间的关系,从而提高预测的准确性。输出层:在X-SQL中,输出层负责六个子任务,分别是:W-NUM(条件个数)、W-COL(条件对应列)、W-OP(条件运算符)、W-VAL(条件目标值)、S-COL(查询目标列)和S-AGG(查询聚合操作)。这些子任务共同构成了一个完整的SQL查询语句。1.2 稀疏问题与解决方案在实际的工程实践中,目标数据库往往拥有大量的列,而SQL查询通常只会涉及到其中的少数几列。这就导致了标记数据的稀疏性问题,即大量的列在训练过程中很少或者根本没有被选中,从而使得模型难以有效地学习这些列的特征。为了解决这一问题,X-SQL方法采用了两种策略:列名的相关性排序和人工重采样。列名的相关性排序:在训练之前,首先对所有的列名进行相关性排序,将与自然语言问题相关性较高的列排在前面。这样,模型在训练时可以更加关注这些相关的列,从而提高学习效果。人工重采样:针对那些被选中次数较少的列,X-SQL方法还采用了一种人工重采样的策略。具体来说,就是在训练过程中对这些列进行重复采样,增加它们在训练数据中的出现次数,从而使得模型能够更好地学习它们的特征。X-SQL方法通过独特的网络结构和有效的稀疏问题解决方案,实现了高效的NL2SQL转换。这一方法不仅简化了问题的复杂度,还提高了预测的准确度,为自然语言处理领域带来了新的突破。模型结构如图所示:-SQL网络结构2. IRNet方法IRNet设计了一种在自然语言和SQL之间的中间表达SemQL,采用两步完成Text-to-SQL的过程:第一步SchemaEncoding和Schema Linking:SchemaEncoding顾名思义就是对表结构(表名、列名、列类型、主键、外键等等)进行编码,以便后续模型训练使用。SchemaLinking则是要把Question中表述的内容与具体的表名和列名对齐。第二步预测SemQL,然后用第一步预测的列来填充SemQL所表示的SQL语法结构。文中设计的中间表达SemQL结构如下:QL根据文中设定的规则可以拆解为如下图的语法树:、算法大赛实践分享:以国家电网调控人工智能创新大赛为例比赛赛题及背景在电力领域,电网调控系统多年来已积累了大量的电网运行数据,这些数据存储在数据库或文件系统中,具有规模大、种类多、范围广等特点。传统的数据分析方法,需要专业人员通过机器编程语言与数据库进行交互,为数据分析设置了一定的门槛。随着数据量的增长,数据挖掘的深度不够和数据价值变现能力弱等问题逐渐暴露出来。为了解决这些问题,人工智能技术被寄予厚望,期望其可以变革人机交互方式,提高数据分析挖掘效率,更好地释放数据的价值。具体到此次比赛的赛题,针对电网调控系统数据的结构化和半结构化存储特点,以及海量数据分析的繁琐低效问题,参赛者被要求利用语义解析技术训练AI智能体。这个智能体需要能够理解调控系统中的常见问题,解析数据库的表、属性、外键等复杂关系,并生成SQL语句在数据库中执行,从而为用户提供自动、高效、精准的信息检索服务。赛题理解和分析此次赛题主要属于语义解析领域,核心任务是将自然语言转换为逻辑形式,尤其是转换为数据库查询语句。语义解析被认为是将自然语言映射到其语义表征的过程,这种技术已被广泛应用于各种环境中,例如将自然语言解析为数据库查询或在会话代理中进行查询解析。在学术研究和技术应用中,基于模板填充的解析技术、基于Seq2Seq的语义解析技术、基于强化学习的语义解析技术等都是常见的解决方案。对于此次赛题的具体要求,“给定自然语言表述的电网调控问题及其对应的数据库,要求参评的语义解析系统自动生成SQL查询语句。”通过分析提供的数据集,我们了解到这些数据都是来源于电网调控领域的真实语料,涵盖了46张表和与之对应的1720条调控场景问题与SQL语句的对应关系。这些数据涉及了公共数据、电力一次设备、自动化设备等多个数据对象,并包括了同一类问题的多种不同问法。技术路线考虑到此次赛题涉及的数据资源都属于同一数据库,不存在跨领域的问题,且SQL的表达方式在这些数据中表现出较好的一致性,我们选择了基于Seq2Seq的翻译模型作为核心技术路线。为了更好地应对数据集的“单一数据库”、“较多连表查询”、“表列数目较大”等特点,我们特别设计了一个基于Transformer的融合表列值信息的Seq2Seq语义解析模型。在这个模型中,Transformer被用作基础的特征提取单元,同时我们构建了一个能够融合表、列、值多元信息的Encoder-Decoder架构,以完成端到端的NL2SQL任务。算法流程图如下:算法流程详细描述:在算法的开始阶段,由于所提供的数据集规模相对较小,为了更好地训练模型并提高其泛化能力,我们首先对数据进行了增广处理。具体的增广方法包括对原始的自然语言问句进行分词,并利用列名替换、停用词替换以及句式替换等技术,生成新的问句-SQL查询对。此外,为了进一步增强模型的鲁棒性,我们采用了AEDA(An Easier Data Augmentation)的噪音增强技术,该技术主要是通过在原始文本中随机插入标点符号来增加噪音样本。处理完数据后,我们注意到SQL语句对大小写是不敏感的,因此为了简化后续处理,我们将所有的SQL语句统一转化为小写字符。接下来是算法中的一个关键环节,即如何将数据库的模式(Schema)信息与自然语言问句相结合。我们采用了基于模糊匹配的方法,根据不同的自然语言问句动态地生成相应的Schema信息,并与原问句进行拼接。这样,模型可以更好地理解问句中的意图,并准确地生成对应的SQL查询。对于增广后的数据集,我们选用了基于Transformer架构的生成式预训练Text2Text模型进行端到端的微调(Finetune)。在测试阶段,我们同样会为测试样本动态生成Schema拼接信息,并完成端到端的推理预测,得到最终的SQL语句。在算法的实现过程中,有以下几个关键环节:使用AEDA技术对自然语言问句进行数据增强,增加模型的鲁棒性。为了简化处理并保证一致性,我们将所有的输入和输出文本都转换为小写。对每一个自然语言问句,我们都采用动态Schema信息生成技术,为其添加额外的相关信息。对于生成的SQL语句,大部分我们采用Greedy Decoding进行解码,但对于部分较长的SQL查询,我们会采用Top-p Sampling或Beam Search Decoding来确保解码的准确性。关于AEDA数据增强技术和动态Schema信息生成技术,它们是本次比赛中我们方案的两个核心点。AEDA技术简单而有效,通过插入标点符号增加了噪音文本,从而提高了模型的鲁棒性。而动态Schema信息生成技术则解决了NL2SQL任务中的Schema Linking问题,使得自然语言问句与数据库中的目标表和列联系更为紧密。如果想了解结合图网络的方案和更多实践内容,我们推荐一本书《语义解析:自然语言生成SQL与知识图谱问答》。该书中对方案有更为详细的解答。一、这本书解决了什么问题?语义解析中NL2SQL和KBQA的实际意义:通过自然语言查询数据库的意义在于提高效率和便捷性。随着技术的发展,知识存储方式也在不断演进,其中结构化和参数化是两种主要的存储方式。随着大模型运动的愈演愈烈,参数化存储可以将知识融入模型中,使得在输入时能够进行编码表示,这种方式有望逐渐取代传统的知识图谱。然而,即使机器学习模型将来达到与人类相当的水平,数据库和知识库仍然是必不可少的。因为知识图谱可能会演变成一种适合机器使用的机器词典,而不是现在我们所熟知的样子。所以参数化存储方式并不能完全替代结构化存储方式,也就是未来还是需要以数据库为代表的结构化知识存储方式。人要访问这些结构化知识,最为便捷的方式是通过自然语言进行查询。通过自然语言查询数据库,用户可以以更加直观和高效的方式与数据库进行交互。相比于传统的查询语言,自然语言更加符合人类的思维习惯,使得非专业人士也能够轻松地从数据库中获取信息。这种交互方式的改进可以极大地提高工作效率,减少学习成本,并推动数据库的广泛应用。通过自然语言查询数据库的意义在于适应知识存储方式的变革,提高工作效率和便捷性,推动数据库技术的发展和应用。自然语言生成SQL:本书详细解析了如何利用先进的语义解析技术,将自然语言转化为结构化的SQL查询语言。通过深度学习和自然语言处理技术,我们深入探讨了如何准确识别用户的查询意图,并将其转化为高效的SQL查询。读者将学习到如何利用现代AI工具和技术,自动化生成复杂的SQL查询,从而极大地提高数据检索的效率和准确性。不仅如此,本书还讨论了如何处理模糊查询、同义词、实体链接等常见问题,以确保生成的SQL查询能够真实反映用户的查询需求。通过丰富的案例和实战练习,读者将掌握这一技能,并能够在实际工作中应用自如。知识图谱问答:在知识图谱问答方面,本书展示了如何构建一个能够理解、推理和回答复杂问题的智能系统。通过结合知识图谱和先进的自然语言处理技术,我们让机器具备了理解和回答各种领域问题的能力。本书详细介绍了如何使用最新的图神经网络、生成模型等技术,提高知识图谱问答的性能。同时,我们还讨论了如何处理知识的不完整性、噪声和更新等问题,以确保系统的回答既准确又可靠。通过本书,读者将学习到如何构建一个高效、智能的问答系统,为用户提供更加便捷、个性化的服务。无论是企业内部的知识管理,还是面向公众的智能客服,这些技术都将发挥巨大的作用。解决大模型幻觉与可控性问题:随着模型规模的日益庞大,大模型在确保输出形式语言的可靠性以及输出答案的真实性方面,遭遇了前所未有的困境。这种“大模型幻觉”以及其带来的不可控性,是现今人工智能领域亟待解决的难题。幸运的是,《语义解析:自然语言生成SQL与知识图谱问答实战》一书,为我们指明了方向。书中,作者不仅深入剖析了NL2SQL和KBQA这两种技术在应对大模型幻觉中的关键作用,还提供了具体的实施策略和方法。通过引入外部知识、优化训练策略等手段,我们可以有效地增强模型的鲁棒性,降低其产生幻觉的倾向。同时,结合人类的反馈与干预,我们可以确保模型在实际应用中更加贴合真实需求,提高其整体的表现水平。对于那些正在或即将面对大模型挑战的数据科学家、工程师以及AI爱好者来说,这本书无疑是一部宝贵的实战指南。它为我们提供了明确的解决方案和策略,帮助我们更好地驾驭这些日益庞大的模型,确保它们在为人类服务时,既可靠又真实。本书不仅提供了理论上的指导,还通过大量的实验和案例分析,展示了这些解决方案在实际应用中的效果。读者将学习到如何评估和改进大模型的性能,确保它们在各种应用中都能提供准确、可靠的信息和帮助。二、书的内容概览《语义解析:自然语言生成SQL与知识图谱问答实战》一书,由领域专家联袂推荐,语义解析大赛获奖者撰写,满足工业级应用安全、精准需求,弥合大模型的不足。本书深入剖析语义解析技术的原理与实践,涵盖机器翻译、模板填充、强化学习、GNN、中间表达五大技术方向,并随书提供案例代码。第1章首先介绍了NL2SQL和KBQA中的语义解析技术,包括人机交互应用与语义解析难点分析,主流的语义解析技术及其方案对比,以及语义解析的预训练模型和数据集。第2章至第6章分别介绍了基于机器翻译、模板填充、强化学习、GNN和中间表达的语义解析技术。每一章都详细描述了相关技术的原理、模型构建和应用实例,使读者能够深入了解并掌握这些技术在语义解析任务中的应用。第7章和第8章分别面向无嵌套简单SQL查询和复杂嵌套SQL查询的原型系统构建。这两章通过任务简介、任务解析、模型整体架构和代码示例,展示了如何利用语义解析技术构建面向SQL查询的原型系统。第9章介绍了面向SPARQL的原型系统构建,利用T5、BART、UniLM等模型生成SPARQL语句,实现路径排序和SPARQL语句修正和再次排序。第10章讨论了预训练优化,包括预训练技术的发展、定制预训练模型TaBERT、TAPAS和GRAPPA等方案的设计和实现。第11章是语义解析技术落地思考,从研究与落地的差别、产品视角的考虑、潜在的落地场景和实践技巧等方面,探讨了如何将语义解析技术应用于实际场景中。本书内容丰富,涵盖了语义解析技术的多个方面,不仅提供了深入的理论分析,还展示了大量的实践应用。通过本书的阅读,读者可以对自然语言处理语义解析领域新兴的子任务——NL2SQL有一个清晰地认识,充分了解语义解析任务的相关研究进展,对主流技术方案进行详细阐述与分析,并从实践的角度展示NL2SQL完整的技术实现流程。希望本书能够帮助读者深入理解并高效搭建起语义解析框架,同时对语义解析领域的发展起到一定的促进作用。三、读者可以从中收获什么?读者从《语义解析:自然语言生成SQL与知识图谱问答实战》中可以收获多方面的知识和实践经验。首先,读者可以深入了解语义解析技术的原理与实践。本书涵盖了机器翻译、模板填充、强化学习、GNN、中间表达等五大技术方向,并详细解释了这些技术在NL2SQL和KBQA中的应用。通过对这些技术的深入剖析,读者可以获得对语义解析任务更深入的理解,包括其挑战、解决方案以及实际应用。其次,读者可以学习到各种语义解析技术的实现细节和应用实例。本书提供了丰富的案例代码和具体实践指导,以单表无嵌套和多表有嵌套为例,从数据预处理、模型的构建,到模型优化技巧等方面为读者构建了完整的NL2SQL技术实现流程。通过学习这些代码和实践指导,读者可以掌握如何在实际项目中应用语义解析技术,解决自然语言处理任务中的实际问题。此外,本书还对语义解析技术的发展进行了全面的梳理和讨论。通过对预训练技术的发展、定制预训练模型的设计和实现等内容的介绍,读者可以了解到最新的研究进展和趋势,为未来的研究和应用提供有益的参考。在更广泛的层面上,本书还可以帮助读者提升对自然语言处理和人工智能领域的整体认知。通过对语义解析技术的深入剖析,读者可以更好地理解自然语言处理任务的本质和挑战,以及人工智能技术在解决实际问题中的应用和价值。这种认知的提升有助于读者在未来的学习和工作中更好地把握自然语言处理和人工智能领域的发展趋势和应用方向。《语义解析:自然语言生成SQL与知识图谱问答实战》一书提供了对语义解析技术的全面深入剖析和实践指导,可以帮助读者深入理解并高效搭建起语义解析框架,同时对语义解析领域的发展起到一定的促进作用。读者通过本书的阅读和实践,不仅可以提升自己在自然语言处理和人工智能领域的认知和技能水平,还可以为未来的研究和应用提供有益的参考和启示。四、结语《语义解析:自然语言生成SQL与知识图谱问答实战》是一本引领你走进语义解析世界的实战宝典,让你深入探索自然语言处理与人工智能的奇妙交融。这本书凭借其深入浅出的解析、实践导向的代码示例和前沿的技术洞察,为每一位读者揭示了语义解析技术的核心奥秘。无论你是正在探索这一领域的数据科学家、工程师,还是仅仅对人工智能感兴趣的普通人,这本书都将为你打开一扇全新的大门,引领你走进一个充满挑战与机遇的新世界。在这个信息爆炸的时代,掌握语义解析技术就如同掌握了一把解锁知识宝库的钥匙,让你在信息的海洋中畅游无阻。快来阅读吧,让这本书成为你探索语义解析世界的得力导师,与你一同开启这段令人兴奋的智力冒险!
  • [案例分享] 向量数据库
    原文链接:cid:link_0向量数据库也许你最近可能听过这样的新闻,某向量数据库的初创公司刚写好 PPT,就获得了几千万的投资,某公司的开源的向量数据库因其代码的简陋而登上了 Hackernews 等等。在过去几个月时间中, AI 应用的发展如火如荼,带动了 AI 应用技术栈上下游的火爆,而向量数据库就是其中最热门的之一。笔者最近因为开发 ChatFiles 和 VectorHub 两款开源项目的需要从而对向量数据库(Vector Database)进行了学习,在对主流的向量数据库和搜索算法有了大概的了解后,笔者决定将这些知识整理成一篇文章,希望能够帮助到大家。
  • [案例分享] AI如何颠覆数据库讨论纪要
    注:原文URL:https://mp.weixin.qq.com/s/D8EtMUd4RZOStFaq3tIm2w详细的讨论会分享背景请见我们上一篇文章《AI如何颠覆软件:你能为AI打工吗?》。我们尽量每周都会组织不同领域的AI讨论会,覆盖软件行业的所有细分。为了保持一个活跃的讨论环境,对参与人群会有限制,请有意愿参与讨论会的直接私信后台“微信号,个人介绍,以及擅长讨论什么话题”,从业者/创业者优先。本期讨论会参与者:邰骋,墨奇科技创始人,向量数据库创业者,师从知名的应用数学领域科学家、中国科学院院士鄂维南。主要研究方向为大规模非结构化数据处理算法和系统,在SIAM、JMLR、ICML等国际期刊会议发表多篇论文,是国内人工智能、应用数学方面的领军学者。Haowei,Snowflake早期员工,多年数据库内核开发经验,专注容器化和虚拟化技术。Yujia,微软Copilot产品经理,正在尝试Copilot+各种场景。以及资深数据架构师,数据库/BI创业者,投资人,参与讨论作出的贡献。1 AI会如何改变数据库交互AI改变的交互对OLTP硬影响不大:使用到的Python、Java等,用这些代码建好应用后,很难想象会替换成自然语言和数据库进行交互AI会降低OLAP的交互门槛,促进数据仓库普及:在OLAP的场景下,需要BI和数据仓库交互。以及看到基于GPT将自然语言转成SQL的技术,然后进行数据查询的产品、Prototype等,会大大降低非技术人员和数据仓库交互的门槛以史为鉴,当对象的使用门槛降低的时候,普及性就会越来越高。例如当图形界面GUI问世的时候,个人电脑就普及了。同样,当LLM降低数据仓库的门槛时候,越来越多的公司(而不仅仅是科技公司),都会变成Data Driven导向,或者以数据来进行决策。公司中的每一个人都可以快速根据数据决策,做决策的效率和频率都会提高。自然语言仍很难替代所有SQL语言:SQL是非常古老的语言,产生于1980年代。SQL有一个问题,简单的东西非常简单,一旦复杂化后,就会变得反人类。故如果没有经过专门的训练,一般人只能拿SQL 做简单的事情。现在大语言模型把它翻译成 SQL,最长的SQL 大概存成文本文件的话大概有 20 个Megabyte,这个就完全不是人能够读的东西了。今天为什么大家都用SQL,因为说白了可能是一种习惯,但这种习惯有没有被挑战?就算没有大模型其实也正在被挑战,比如spark,现在就很多人就觉得不管是 Python还是Java,通过spark API 去写比写 SQL其实更顺利一点。所以在很多 ETL 的场景下面,现在很也不单纯用 SQL ,很多的 ETL 现在都是用 Spark ,其中原因之一就是SQL 这个语言不够直观。SQL也是更加精确的语言,在复杂的和机器场景下的准确性要高于自然语言。很难用自然语言去精准地表达一些复杂的接口、Query。虽然现在已经出现了自然语言转SQL的GPT工具,但因为自然语言的局限复杂度不够,复杂场景仍然做不了未来更多是简单的查询用自然语言接口,复杂的场景还是需要SQL,或者Spark、Python,SQL有很强的韧性,可以适应各种复杂场景。自然语言 vs SQL=易用 vs 效率/精准:当追求极致的简易性,在效率和准确上就会有牺牲,就需要自然语言。就类似于过去编程情况,如果追求便捷就会用Python,但可能会牺牲效率;如果追求效率,用C++这样更接近于机器的语言,学习曲线就会更高。自然语言不是针对数据库查询的最优选择,但会根据使用者的情况有Trade Off。2 AI是否能改变数据库底层AI很难改变底层:LLM很难对计算引擎、网络等产生影响,数据库内核的发展和LLM的演变也没什么关系。但数据库可能未来会承担更多的模型训练任务,不再是单纯的数据层的数据库,这相当于数据库从数据层往训练工具演变。现有数据库架构会不会因为AI而演化出类似HTAP的情况,同一份数据有两种形态:在为LLM训练的场景,可能不会很普遍,大模型需要的训练数据主要是知识,和平时公司商业用途需要查询的数据,还是两种数据。但对于中小规模的模型,会有这类的场景,很多公司都会有内部需求。比如简单的情况,数仓一般是Column Format,再做一个Compression,这种情况非常常见。但做AI训练的时候,一般需要Row Format。如果传了两份到storage engine之后,这两份相关性不大。存完之后是存在一个地方,是两个表还是一个表,没有什么关系。应用A(比如说一般数仓)永远不会探索为应用B(基于AI训练的结果)存的那一份。应用B也永远不会探索为应用A存的那一份。除非应用A需要用到一份,应用B需要用到同样的一份,这个时候把这张表作为一张表看待,有比较大价值。现在的实际情况是,两个应用永远不会碰到同一份。从某种程度上来说,这两个应用physically比较独立。如果硬要把这两份数据说是属于一样表,但就像很多OLTP的表,OLAP经过ETL之后形成OLAP的表。大家也知道这两张数据库表是同样一张表,但是基于数据库的应用就把它当作两张单独的表来看。因为做OLAP的时候,永远也不会访问OLTP的那个数据表。所以如果两个应用之间没有相互的mix和match的时候,把它当成两张不同的表,在两个不同引擎里面存储,还是当成一张表有两个format来看,实际没有本质的影响。而一定要把这两个当成一张表的两个不同引擎来看的时候,事实上增加了系统的难度。在目前的情况下,机器学习的 training 的 format 和做OLAP查询的这两种format,本身天然是不会相互碰到,也就导致了目前还没有需求非得要把这两份数据当做同一张表格的两种形态。目前可以把它当成两个单独的表格来处理,并不影响使用。不知道将来会不会有BI的应用导致现在这种假设不成立。这是有可能的,正如HTAP。往10年前看的时候,AP是AP,TP是TP。这两年HTAP出来了,因为有真实的需求,可能对于AI和AP在过个几年也会有这样需求,但是就目前为止还看不到。3 LLM可以直接作为数据库使用吗?很难替代数据库的使用场景:LLM很难解决ACID问题,LLM的初衷就不是为了精准查询设计的,LLM的查询结果很难保证准确的Number,也很难保证Snapshot isolation。长期来看,LLM也很难匹配数据库的性价比,数据库都有非常复杂的场景优化。更可能的演化,还是LLM改变了数据库的交互,但LLM本身不会成为数据库。4 数据仓库/数据湖在训练中的支持情况数仓/数据湖未来都会搭建训练平台:传统数仓/数据湖之前是提供数据源,但未来可以作为训练平台,例如替代一部分Sagemaker的场景。从客户角度,在数仓/数据湖中做训练,尤其是训练小模型场景,可以省去移到训练平台的数据迁移成本,省去中间Pipeline的维护,省去ETL的过程,也不需要把数据放在不同系统中减少了Replica。同样,从安全性和隐私性角度出发,未来会看到更多类似GDPR的规范,多个数据存储系统会导致数据泄露的风险加大,也需要雇专门的人去审计不同系统中的数据合规性要求。从产品完整性的角度,数仓本来做的就是做商业决策,成为ML/AI的训练平台后也可以完善商业决策,也属于本身的计划发展方向。训练也是多次的,对数仓/数据湖都会有带动作用:GPT或者大语言模型的技术革命,会让更多企业意识到AI的价值。在过去的很多年里,AI不是一个新技术,但用得好的都是很大的科技企业,在传统企业的渗透率仍然非常非常低。GPT更像是破圈的Trigger,迫使所有公司都去尝试ML/AI,不一定是直接接入LLM,还有很多垂直的企业场景。从具体的带动关系来看,AI训练不是只训练一次,需要不断地训练,有不断的新数据进来。每隔一段时间就要去更新模型,上线新模型。也就需要不断地向数仓/数据湖去要数据。5 AI对部分数据仓库/数据湖的影响数据仓库最本质的还是产品能力,AI不是决定性因素Databricks随着Dolly的推出,有机会帮助他们的一些客户更好更容易地训练大模型。但大多数企业还是负担不起大模型的训练。所以还是更加的倾向于训练小模型,或者训练一个 good enough 的模型,或者说是一些模型的 fine tuning。就fine tuning来说其实也有很多方法,然后有一种方法,我听说是可以先训练一个比较小的模型,然后和大模型在 merge 一下,调一下权重。Databricks和 Snowflake 其实更多的还是赋能企业,他们提供了一个平台,能帮企业更好地去训练。至于说他们开源了这个模型, Dalle2 它只是一个开源模型,还要看开源生态能不能搭建起来。Databricks选择开源这样一个模型,在对模型的支持上就可能有偏向性,不确定是否能保证对其他模型也有很好的支持。微软也有偏向性,包括选择OpenAI。亚马逊和Snowflake目前没有偏向性。6 Copilot能帮助分析型数据库实现什么样的新场景目前Copilot/其他大模型的目标还是降低普通/简单任务的门槛:不管是Copilot,还是其他的大模型,目前最擅长的东西肯定不在于非常高级和难的任务,而是在于能够降低一些普通和简单任务的门槛。不管是在 Office 的处理还是数据库,都是在拓展易用性,以及能够大规模的让一些企业去进行操作上的升级,或者是让更多的人可以做更多的事情。大模型能够解决的问题的复杂性还取决于成本:对于成本的问题,如果我们降低承载大模型使用的大模型相关的产品或相关的体验的使用的成本,这里其实是一个目的导向的事情,即如果我们希望它以一个什么样价格收费是市场能够接受的,或者说我们能提供的价值是否能够cover成本。这里面有很多工程加算法的问题,像刚才提到的我们到底什么样的情况下才需要大模型,不是所有的问题和所有的处理都必须要使用大模型。实际上各家的大模型在实际解决问题的时候,已经在考虑成本的问题了:那这里面前期需要做一个判断,从技术上其实在微软这方面做的背后的工程量和 OpenAI 做的都很多。虽然用户感知到好像都是GPT/LLM在回答,但这里面可能会有一些筛选,有一些情况其实传统的搜索或者更早期的AI就能有一个非常好的结果的时候,就不会再去用高级的模型。其实这上面会有,就包括数据库之后的应用,这方面也会有很多的方法可以降低这个成本。7 向量数据库的前世今生向量数据之前的应用:邰博士之前主要做向量的算法、图的算法,也在北大教授人工智能课程。最早做向量数据库的时候还不叫向量数据库,但会用到很多向量和图。在大模型之前主要是用作搜索/推荐,以前像Google做网页搜索的时候,有一些关键词特征,就是向量特征。除了搜索引擎外,还会用到例如微博中。后来在计算机视觉中也有了向量表示,图像可以变成一个向量的表示,这些都是为了做向量搜索的。语音也是同样的,可以做声纹比较。在Bio-informatics里,也可以基于基因相似的序列、蛋白质的结构比例等等。向量数据库正变得更加重要:向量数据,同传统数据库里面有整型、字符串,比较新的比如地理信息的一些坐标等,也是一种数据类型。LLM出现后,向量的这种数据类型将会变得更加重要。意味着不同的数据库往后都要需要支持向量。而专门为这种数据类型做一些Data Infrastructure的优化也变得更加必要。为了优化结构化数据的读写,产生了TP;为了优化海量数据的计算,产生了AP;为了优化非结构化数据,产生了文件数据库等。针对向量数据,怎么如何做存储,怎么如何做索引,怎么如何做高性能的查询、压缩等等进行专门的优化也是非常必要的,使之能够让其更好的面向 AI 应用。除了向量,在这个场景,以后可能还会有更多其他的类型的数据。图也是很重要的类型(并不是现在见到的大图,可能是一些小的图等等,可能就几百节点,但是数量会很多,就跟向量一样,可能是多个向量组成的这些图),也是以后可能的演化。8 向量数据库与其他Data Infra的关联跟分析型场景的结合度比较高:现在很多情况向量是作为一个数据类型在做的,Workflow 里面的很多环节它都有关系。比如原始数据,ETL进分析型数据库,再向量化进向量数据库。Huggingface 上很多这样的模型,可以把不同类型的语音文本、pdf等向量化。Metadata的结构化的特征,或者是模型预测的这种标签的特征,也会向量化。从学习框架上来讲:在训练模型和推理过程中,现在都可以用到一些向量,当然不是所有的都用。现在的Transformer架构,加一个外置的Memory ,可以在参数不大的情况下,达到和大参数模型一样的效果。其实就是外挂的向量数据库加上一个中小模型,可以得到一个很好的效果。然后在推理应用的层面上,如做搜索引擎,做行业应用等等。要把不同的类型整合在一起做一些分析,这更多是偏向于分析型的应用,如果最单纯的那种向量近似搜索的话,或者精确搜索的话,只是针对这种类型的分析。当然很多刚才讲的应用里面,像 flaw detection 推荐系统,要跟结构化的特征一起做联合的分析。先写一段SQL,用结构化的信息做一些过滤,做一个过滤,然后再用向量做一些查询找一些相似的例子等等。这反而是在应用中非常常见的,就是在这种实际应用中,都是要跟结构化的数据做结合的。单纯用向量这个我觉得可能看到的还少一点,可能只是作为召回这种情况或者更简单的使用,或者模型训练的使用。联合应用的情况会更多,比如墨奇做的MyScale数据库,针对Clickhouse进行了二次开发,在这个基础上开发了一个新的引擎,它可以对向量、对图做一些联合的查询。可以分析向量,也可以分析原来结构化的数据。这就是说从前到后,从数据源、数据的转化、包括跟机器去做大模型、到应用层等等,存在一个紧密的关系。把向量作为一个环节来看,让他跟其他的数据做一些紧密的结合,联合的分析会更有用。分析型数据库也有必要与向量数据结合:墨奇+Clickhouse已经在做这方面的工作了,Elastic和PG也有向量插件了。未来有必要专门为AI做一个新兴的数据库,支持AI Native应用,对数据的查询要求和过去可能会有差别。未来单一的向量数据库可能是一个比较薄的产品,更多是和现有的分析型数据库结合。例如一个很适合的向量数据库+Clickhouse场景就是大模型推理,比如 GPT 3,它context size是很有限的。现在GPT 到GPT3 token 的 size 从 8000 变成了这个 2 万多,提高3 倍的contact size, 需要的计算量~ 9 倍,是个平方的关系,所以 long-term memory 是大模型的问题。那现在有向量数据库,可以充当这个 long-term memory。很多人做一些算法上改善的尝试,目前都没有成功,包括用一些逼近的方法,包括用linear attention,但都失败了,那full attention 在一段时间内还是要长期要在的。这样的话,在一段时间内可能就需要有一个外置的memory,通过long-term memory 来解决大模型的问题,这就是大模型带起来的最大的一个需求。我觉得向量数据库充当这个long-term memory,就是非常合适。还有比如相似人的查询,或图的搜索任务。或者再加一些别的限制,可能这个在“我的品类”者“商品推荐”,在这个类型中,我们找一个跟竞品比较像的,或者怎么样。就所有这些任务,推荐等等,都是有结构化的描述在这里,也很适合和向量数据库结合。还有比如全文检索跟ES也可以结合,向量可以解决模糊搜索和语义搜索的需求。9 向量数据库的未来演进方向未来可能不只是大模型:例如Google的很多论文都在讲,中等规模模型+外界大数据库,那可以实现更大规模模型的效果。如果看OpenAI之前的论文的话,也将很多类似的。如果有很好的、精标的数据集,然后有很好的人工干预,那么不用大模型,几百亿级别的模型也可以做到和千亿级别模型一样的效果。向量数据库还有很大的优化空间:针对向量的压缩、索引、查询的优化都还有很多空间。从向量算法来看,现在开源的库很多,像Pinecone、Milvus等等,开发者可能用ivf、hsw这些,做深入优化工作,可以使得性能、Density等提高很多,例如墨奇的压缩就做得很好,可以比过去存10数十倍以上的数据。从AI应用的角度来看,向量数据库会成为LLM在性价比上的补充:高质量性能的外部数据库,对训练和推理上都会有很大的助力,也就需要一个向量+分析都能支持很好的数据库。未来会走向一个融合引擎的数据库,支持向量、图、全文检索、结构化数据等类型10 传统数据库在向量数据库的尝试已经有在做,但优化层面还很浅:分析性数据库(OLAP)做向量更加有意义,例如Elastic做得意义就大于MongoDB来做。Elastic已经尝试添加了子向量模块,包括向量检索的功能,但是跟完整的向量数据库相比,功能差距还很大。目前传统数据库厂家还没有根据向量这一特殊类型,去优化存储和计算引擎,更多是接入库和简单算法。想要做到向量数据库的能力,还要做到算法层面优化,不能只靠开源生态。MongoDB结合得不紧密,分析型场景对于MongoDB也不是主要的。Clickhouse非常适合做向量数据库,墨奇也给Clickhouse贡献了很多Feature。11 向量数据库还能怎么补充大模型LLM主要有三个普遍的缺陷,需要向量数据库来补充:第一,比较本质的,比如GPT 3,它使用到21年9月份的数据,那练完之后模型里面存的知识就是静态,不能被更新。然后它的 context size,需要实时的信息,比如说,这周华南地区的销售怎么样?可以问GPT,但它不能告诉你答案,即便给了答案也不是真实的。所以只能是跟数据库结合,有一个实时数据源,提供给它这种实时的信息。那么向量数据库它可以这种包括跟数据库的结合,这里不只是向量数据库,跟实时数据源的结合,可以解决这个实时性的问题。第二,精确性的问题。在搜索里面用的很多。知识存在大模型的参数里面,也是有记忆的,但是很难精确的去取回一些信息。问大模型两次问题答案会不一样。希望有很精确的信息的时候,在数据库里面是可以有非常精确的东西,有这种可靠性。所以要很精确的信息的时候,可以在这里做企业搜索,文档搜索,这种数据库的查询就会非常有用。第三,数据权限跟管理的问题。比如想问CTO薪酬是多少,类似这种信息不能够放在大模型里面,因为放进之后所有人都能 access 大模型,无意之间泄露重要信息。包括政府等客户的信息,不能把这些加入到训练语料当中去。这些信息还是要放到数据库里再来做,所以天然可能就形成一个模式:非实时的信息,不敏感的信息,但是又有系统性,规律性的东西,作为领域知识的、行业知识,或者更通用的一般的知识,放到大模型里面去,形成一个载体;另一个载体是承载实时的、精确的,有权限、隐私要求的信息,那么放到数据库。LLM厂商都有尝试去解决,但目前进展一般:OpenAI 有一些新的插件也是为了暂时的去解决这些问题,但在短期内不容易有很大优化。到 GPT 5/6,也不会有太大的改进,还是需要依靠外部memory的这种结合来提高它的 effective context size。12 大模型会如何影响数据处理以及ETL环节ETL本身也是一个工程问题,会有一定的复杂性,但是从目前来看用大模型已经可以去解决一些ETL需求:像大模型包括 GBT-4,做这类事情很多效果都远超预期。去年这个时候都不会觉得它有那么好。但特别从去年 10 月份之后到现在,performance好了很多。过去很难用规则表达的,或者一般小的模型难处理好的东西,就是或者不愿意去fine-tune一个小的模型的任务,现在变得很容易。过去做这个事情:以最复杂的PDF为例(PDF内可能包含文字、图,尤其是PPT 转的PDF,里面内容很多)。过去做法是训练一个 Bert 或 fine-tune Bert, fine -tune 很多模型去解决不同的数据转化。这都导致在于是要么很高的训练模型的门槛,或者要么在一个场景需要做有很多模型。然后现在的大模型,比如说让他去抽取简历,去抽取PDF格式的年报的信息,效果真的是都非常好。感觉实际效果跟人工标的那个准确率其实都差不多的,但是使用过程要快很多。这带来一个更大的一个好处:过去要维护很多的中小模型,现在通过一个大模型,然后再加上prompt 和 Meta prompt engineering,就可以做很多事情。维护成本变得很低,效果也不差。成本角度,如果都用大模型来做特征提取的工作的话,成本会很贵很高,因为chatgpt按 token来收费。但也有很多别的做法可以降低成本,比如Stanford,Databricks,还有国内的一些公司在做的事情。方法是用 GPT 4来产生很多的标签数据。比如说一天可以产生10 万个 GPT 4/100 万个 GPT 4 的样例,然后用它来 finetune 一个自己训练的百亿的模型,到时候就不用再调用 GPT 4 了。就直接用finetune好的这个模型,然后用来做ETL,会便宜一个数量级(vs 都调用GPT4)。目前成本对于企业内的一些智能文档等场景,是可以承受的,但是就是就是它蒸馏之后,或者是根据 instruction tuning 之后,这个成本对于哪些场景目前是可以接受的?如果是蒸馏之后,就是说 fine tune 之后,比方用一个百亿的模型再做一些整治,其实成本是比较低的。可能还有一些成本更低的,像大家开源的模型这块得也是挺大的一个力量。在很多ETL任务上已经到了一个很可用的程度了。墨奇MyScale数据库介绍MyScale 是墨奇科技研发的一款用于向量计算的高性能数据库。一方面,MyScale基于ClickHouse内核开发,兼顾了极强的向量数据处理能力和极好的OLAP型数据库的复杂数据分析能力,同时完整支持SQL语言,极大降低了数据迁移和开发者学习成本;另一方面,MyScale在精确检索、结构化数据和非结构化数据联合查询、高密度索引存储等任务上实现了自研算法的核心突破,主要指标显著优于同类产品,处于世界领先地位。随着大语言模型的技术突破,向量数据库+大语言模型这种新范式的重要价值也迅速凸显。通过对领域知识的海量数据进行向量化并存储在向量数据库中,可以很大程度上解决大语言模型的几个主要缺陷:无法有效覆盖时效性数据和领域数据;生成内容缺乏事实依据;输入/输出的内容长度显著。通过向量检索+大语言模型的结合,生成式AI的回复将更可控、可解释、可溯源。目前MyScale的Cloud版本已经进入内测阶段,只需通过简单的注册,即可免费享有数百万规模向量数据的处理能力,欢迎访问https://myscale.com/进行体验!
  • [技术干货] 【分享交流】以前做后端的,想转AI需要学哪些知识
    以前做后端的,想转AI需要学哪些知识
  • [技术干货] 普通人的AI工具包【转】
    1、AI智能写作ChatGPT和文心一言这类的大语言模型都可以帮助我们写作。ChatGPT网址:https://chat.openai.com/文学一言网址:https://yiyan.baidu.com/以小红书为例,宝子们喜欢用emoji标签,可以这样去问ChatGPT:你是一位小红书种草博主,【产品介绍】。请为【要宣传的产品】写一篇种草推文要求如下:1、内容包括:产品卖点、使用场景、亲身体验2、文章多使用emoji的可爱表情,多用空行3、文案最后加标签,标签的格式是#标签2、写PPT用AI帮我们写PPT。这里采用ChatGPT + 闪击PPT。首先,去问ChatGPT(给个模版):假设你是一家电商公司的营销总监,名字叫AI沉思录,有着10年的5A广告公司工作经验,操盘过很多大型营销活动,销量均超千万。现在你需要结合自己的经验,以 《借势野性消费热潮,快速拓展市场份额 》为主题,进行PPT汇报,要求如下: 第一、一定要使用中文。 第二、页面形式有3种,封面、目录、列表。 第三、目录页要列出内容大纲。 第四、根据内容大纲,生成对应的PPT列表页,每一页PPT列表页使用=====列表=====开头。 第五、封面页格式如下: =====封面===== # 主标题 ## 副标题 演讲人:我的名字 第六、目录页格式如下: =====目录===== # 目录 ## CONTENT 1、内容 2、内容 第七、列表页格式如下: =====列表===== # 页面主标题 1、要点1 要点描述内容 第八、列表页里的要点描述内容是对要点的详细描述,10个字以上,50个字以内。要结构化,且内容非常的详细。 第九、目录页要列出内容大纲,包括制定完善的市场营销策略、联合其他企业开展跨界合作、积极参加各类行业展会和活动、加强与媒体的合作和提高品牌曝光率4个方面。 最后,一定要使用代码块回复你生成的内容,切记切记。ChatGPT生成的复制到闪击PPT:闪击网址:https://ppt.sankki.com/#/intro国外的也有类似的网站,例如MindShow,https://www.mindshow.fun/3、AI绘画国内有文心一格、6pen、国外有Midjourney等,但是我觉得相对好用的是这个:网址:cid:link_7选择左侧的AI image generation就可以开始生成图片了。每天免费150的额度,也就是150张图片。4、图片处理以我的工作经验,这两个常用~图片压缩:https://tinypng.com/图片去背景:https://www.remove.bg/5、视频处理试用过很多国内外的AI生成视频,我还是觉得对大多数人,剪映(电脑版)最好用。剪映网址:https://www.capcut.cn/字幕一键生成配音、配音转字幕、还算丰富的转场特效库。6、图片转文字我用的是微信自带的。微信电脑版可以直接在图片复制。手机端可以长按图片,然后提取文字。7、最后总结大概就写到这里了,列举了一些常用工具。工具不在多,而在于如何用于自己的工作流里。目前我使用AI工具,能提高自己30%的工作效率(估测)。希望你也能找到属于自己的工作流。转自 https://aichensilu.com/2023/ptrdagjb/
  • [技术干货] AIGC内容创作网站整理【转】
    1、Yaara网址:https://yaara.ai/Yaara AI 将帮助用户从给定的提示生成创意内容,并改进现有内容的语法和流程。这将有助于将长文档汇总为较短的部分。撰写长篇文章,例如文章,博客文章,甚至书籍2、Copy.ai网址:https://www.copy.ai/CopyAI一个AI文案撰写助手,帮助优化营销文案。3、Writesonic网址:https://www.futurepedia.io/tool/writesonicWritesonic 是一个人工智能作家,为博客、Facebook 广告、谷歌广告和 Shopify 免费创建对 SEO 友好的内容。4、Easy-Peasy.AI网址:https://easy-peasy.ai/使用 AI 工具更快、更轻松地完成文案。5、Jasper网址:https://www.jasper.ai/利用人工智能将创建内容的速度提高 10 倍。Jasper 是最高质量的 AI 文案工具,拥有超过 3,000 条五星评论。最适合撰写博客文章、社交媒体内容和营销文案6、Creaitor AI网址:https://www.creaitor.ai/Creaitor 是一个人工智能驱动的内容写作平台,为用户提供 使用智能高效的解决方案来编写剧本。7、Cowriter网址:https://cowriter.org/loginCowriter 是一种 AI 写作工具,可以通过为永固生成内容来帮助用户加快和激发写作灵感。8、Copymatic网址:https://copymatic.ai/?via=futurepedia使用 AI 在几秒钟内生成内容和复制 使用 AI 来增加流量并节省工作时间。自动撰写独特、引人入胜且高质量的文案或内容:从长篇博客文章或登录页面到数字广告,只需几秒钟9、CopyMonkey网址:https://copymonkey.ai/CopyMonkey 在几秒钟内生成和优化亚马逊列表。人工智能有助于在亚马逊列表中放置所有重要关键字。10、Peppertype.ai网址:https://www.peppertype.ai/可帮助用户在几秒钟内生成高质量的内容11、Hypotenuse ai网址:https://www.hypotenuse.ai/通过 AI 文案将几个关键字转化为原创、有见地的文章、产品描述和社交媒体文案——所有这些都在几分钟内完成。12、Shakespeare网址:https://www.shakespeare.ai/lp/start-for-free/?fpr=vivek45莎士比亚是一款人工智能文案软件,能够创建用户在个人或职业生活中可能需要的几乎任何类型的文案。13、Post AI网址:https://www.postai.pro/使用 AI 平台创建内容的一种方式。14、Newswriter.ai网址:https://newswriter.ai/Newswriter.ai 是一种由 AI 驱动的新闻稿写作工具,可帮助用户在几分钟内创建引人注目、引人注目的新闻稿。使用 GPT-3 OpenAI 技术。Newswriter 提供两种服务:从头开始撰写新闻稿或改进现有新闻稿。15、Localio网址:https://localio.io/专为数字机构和小型企业设计的AI文案工具。它可以快速轻松地为商业网站,Google My Business,Yelp,Facebook LinkedIn,Youtube等创建销售驱动内容16、Marmof网址:https://marmof.com/AI 驱动的写作工具,可帮助用户在几秒钟内创建内容。17、Notion AI网址:https://www.notion.so/product/ai在任何概念页面中利用 AI 的无限力量。写得更快,思考得更大,并增强创造力。像变魔术一样!18、GPT3 Playground网址:https://platform.openai.com/playgroundOpenAI 的开放平台和例子。19、Analogenie网址:https://analogenie.com/Analogenie 是一个简单直观的工具,用于生成类比、改进论点、解释复杂的概念并帮助读者更好地理解内容。20、Glasp网址:https://glasp.co/ai-writingGlasp 是一种社交网络荧光笔,人们可以使用它来突出显示和组织来自网络的报价和想法,而无需在屏幕之间来回切换,并同时访问其他志同道合的人的学习。21、Frase网址:https://www.frase.io/tools/Frase 在文案、摘要、释义和广告类别中提供了几种有用的 AI 写作工具。22、Grammarly网址:https://www.grammarly.com/使用 Grammarly 的新 AI 应用程序自信地写作。超越语法和拼写,通过自动建议进行样式和语气。适用于电子邮件,文档,社交媒体和几乎所有内容。23、Type AI网址:https://type.ai/AI 驱动的文档编辑器,可帮助用户非常快速地编写。它可以让你更快、更容易地写作。24、Outline网址:https://outline.ai/大纲是一个人工智能驱动的协作文档编辑器。告别作家的障碍,向更好的写作问好。25、Friday AI网址:https://www.heyfriday.ai/home根据提示输入信息,hey Friday可以帮助用户创建,重写和输出完整,高质量的博客,信件或营销文案。26、UltraBrainstomer网址:https://ultrabrainstomer.com/loginUltraBrainstomer 是一款尖端的头脑风暴工具,可以生成商业理念、撰写演讲、撰写社交媒体帖子或者制作电子邮件。27、NeuroSpell网址:https://neurospell.com/NeuroSpell是基于深度学习的拼写和语法自动纠正器。提供 30 多种语言版本。包括所有语言的录音机(语音转文本)。可以接受特定领域内词汇和措辞以及特定纠错的培训。其他功能包括 – 人机交互量优化。文本流改进/扩充。写作辅助。校对 RPA。客户工作流输入丰富。语音转文本增强功能。OCR 纠错。28、Corrector App网址:https://corrector.app/使用此在线拼写检查器检查文本。犯的任何错误或改变写作以使其更流畅的语法建议都将突出显示。只需单击任何更正即可将它们转换为不同的东西。他们还将解释语法错误,以便用户了解哪里出错了。29、Elephas网址:https://elephas.app/唯一可与 Mac 集成的 AI 编写器。 跨应用程序工作。30、typly网址:https://typly.app/使用我们的键盘单击一下即可回复所有消息!通常自动生成与对话上下文匹配的句子。允许通过单击回答问题或继续线程。31、Maester.app网址:https://maester.app/使用我们直观的模板引擎释放 GPT-3 的全部潜力。 快速生成适合重复需求的自定义输出,并与全世界分享。它可以帮助用户进行内容管理,大学和工作以及软件开发。32、DREAM.page网址:https://dream.page/用 AI 的魔力进行写作和发布! 立即加入候补名单。33、Othersideai网址:https://hyperwriteai.com/个人写作助理。 HyperWrite/OthersideAI提供建议和句子补全,以改善写作水平。34、http://Redacta.me网址:https://www.redacta.me/使用人工智能快速、轻松、经济地创建西班牙语文案。 专门为西班牙语而训练35、WordAI网址:https://wordai.com/使用 AI 将内容输出提高 10 倍。使用人工智能来缩短周转时间,延长预算,并创建更多 Google 和读者会喜欢的高质量内容。36、HelloScribe网址:https://www.helloscribe.ai/更好的写作,更多创意。HelloScribe易于使用的AI工具可帮助公关和营销专业人员更智能地工作。37、CaliberAI网址:https://www.caliberai.net/caliberai人工智能有助于最大限度地降低用户使用 AI 诽谤的风险。 它近乎实时地标记高风险内容,专门设计用于协助编辑和增强人工监督。38、LuciaA网址:https://luciaai.com/高级 AI 写作助手。luciaai使用最新、最先进的人工智能技术。有了 Lucia,可以比以往更快、更好地写作。39、Sudowrite网址:https://www.sudowrite.com/随时可用的头脑风暴伙伴。 帮助写作。40、AIDuh网址:https://aiduh.com/Chrome 扩展程序,通过 AI 驱动的响应将写作时间缩短 大概98%。41、LanguageTool网址:https://languagetool.org/LanguageTool纠正拼写错误,但它也提供了所有可能文本的完整写作分析。除了拼写、语法和单词选择外,语言风格也得到了纠正。它掌握30多种语言和方言,主要语言是英语,西班牙语,德语,法语,荷兰语和葡萄牙语。42、WebCopilot网址:https://www.webcopilot.co/使用 AI 编写。加快用户写作过程并专注于重要的事情。43、Text Generator Plugin网址:https://text-gen.com/文本生成器是一种开源 AI 助手工具,它将生成人工智能的强大功能带入黑曜石中知识创造和组织的力量。 例如,使用文本生成器根据知识数据库生成想法、有吸引力的标题、摘要、大纲和整个段落。 可能性是无穷无尽的!44、Compose网址:https://www.compose.ai/compose是一个免费的Chrome扩展程序,使用AI自动编写。网站的宣传语:我们不应该每天花40%的时间打字:是时候改变游戏规则了。45、HandyPlugins网址:https://handyplugins.co/handywriter/Handywriter是一个人工智能驱动的写作助手,可以帮助用户为WordPress创建内容。它可以检查抄袭,甚至可以修复语法和拼写错误。46、nichess网址:https://nichesss.com/只需单击一个按钮即可获取博客文章、广告、社交媒体内容、诗歌、商业理念等。47、SmartScribe网址:https://www.smartscribe.app/写作变得更加容易… SmartScribe通过使用人工智能帮助解决阅读和写作的复杂性。48、Writewithlaika网址:https://www.writewithlaika.com/又一个写作助手。49、Lex网址:https://lex.page/又一个写作助手。50、Quasi网址:https://quasi.market/使用 AI 创建艺术、代码、音乐等。51、Humata AI网址:https://www.humata.ai/上传 PDF 并从中获取答案。 创建报告的速度提高了 100 倍。理解技术文档的速度提高了 100 倍。分析法律文档的速度提高 100 倍52、Apple Books网址:https://www.apple.com/in/apple-books/由文本转语音AI讲述的有声读物现在可以通过Apple的Books获得。 最初仅适用于浪漫和小说书籍,其中列出了两种可用的数字声音:麦迪逊和杰克逊。53、Penelope AI网址:https://penelope-ai.vercel.app/一个复杂的人工智能写作助手。轻松加快写作速度 – 释义、总结、生成故事或 AI 自动完成。54、WriteGPT网址:https://writegpt.ai/WriteGPT 使专业人士能够在日常任务中成为超人。通过仅使用无缝键盘的热键访问 writeGPT,克服非生产性的浏览习惯。此外,我们促进及时的工程,以有效地阅读,编写,重写,回复电子邮件,编码和研究任何内容。55、Writey AI网址:https://writey.ai/更改内容的创建方式。利用人工智能更快地创建内容。最先进的语言人工智能第一个真正的免费抄袭 A.I 与原创和研究内容,检查 Writey A.I 在行动56、Letterdrop网址:https://letterdrop.com/创建的内容增加 32%,速度更快,麻烦更少。Letterdrop 可简化并自动化内容操作。57、Eilla AI网址:https://eilla.ai/Eilla.ai 是一个人工智能驱动的助手,可为企业、博客、广告、电子邮件和逼真的图像或艺术生成高质量的内容。免费开始,无需信用卡!58、Thundercontent网址:https://thundercontent.com/使用 AI 生成内容。 Thundercontent使用人工智能来帮助撰写有关任何主题的文章。还可以生产内容59、Writer网址:https://writer.com/Writer,适用于团队的 AI 写作平台。随时随地制作清晰、一致且符合品牌的内容。60、Spinrewriter网址:https://www.spinrewriter.com/借助ENL技术,Spin Rewriter帮助撰写SEO文章。生产独特的,人性化的内容才能在Google上排名更高。61、BlogNLP网址:https://www.blognlp.com/BlogNLP 是一款免费的 AI 博客写作工具,可帮助用户打破作家的障碍,在很短的时间内创建原创内容。62、Scalenut网址:https://www.scalenut.com/以简单且可扩展的方式制作符合业务目标的内容。引导式工作流程,只需 5 分钟即可完成博客!63、HoppyCopy网址:https://www.hoppycopy.co/撰写高转化率电子邮件,速度提高 10 倍。 节省无数的写作时间。使用 AI 为数百种不同的电子邮件营销活动、滴灌、新闻通讯等生成强大的文案。64、Rytr网址:https://rytr.me/Rytr 是一款 AI 写作助手,可帮助用户在几秒钟内以一小部分成本创建高质量的内容!65、Superflows网址:https://www.superflows.ai/Superflow是一种智能自动化工具。它允许用户通过使用 AI 自动执行繁琐的任务来专注于高价值的工作。 输入任务(起草电子邮件回复,进行在线研究等),它会控制浏览器完成它。66、萝卜工坊网址:http://www.beautifulcarrot.com/在线转换模拟手写字体文档,让打印的字看起来像手写的一样;AI专属字体制作,智能模仿文字书写风格;一个软件快速解决文字抄写烦恼。转自 https://zhuanlan.zhihu.com/p/626026307
  • [技术干货] ChatGLM模型中bin和safetensors区别是什么
    前言在阿里魔塔上查看chatGLM3-6b的模型:cid:link_0可以看到,最新的master模型有两种后缀:bin 和 safetensorsbin 文件和 safetensors 文件都是用于存储大型语言模型(LLM)如 GPT、LLama2等的模型参数和权重的格式,但它们的具体用途和格式有所不同。.bin 文件.bin 文件通常是 PyTorch 模型的序列化格式。这种格式用于存储模型的权重和参数。它是一个二进制文件,通常与 .config 文件一起使用,后者存储模型的配置信息(例如层数、隐藏单元数等)。.bin 文件可以通过 PyTorch 的 torch.save 函数创建,并可以通过 torch.load 函数加载。这种格式适用于快速保存和加载模型,但不一定优化了跨平台兼容性或安全性。safetensors 文件safetensors 是一个较新的格式,设计用于存储大型的、用于机器学习的张量数据。它特别关注于数据的安全性和有效性,例如通过验证数据的完整性来防止数据损坏。safetensors 文件格式可能还包括了对数据布局和类型的优化,这有助于提高加载数据时的效率。这种格式通常用于大规模的、分布式的机器学习环境,其中数据安全和验证非常重要。总的来说,选择哪种格式取决于具体需求。如果需要快速、简单地保存和加载模型,.bin 可能是更好的选择,如果关注于数据的安全性和大规模分布式环境下的效率,那么 safetensors 可能是更合适的选择。
总条数:58 到第
上滑加载中