第一次实习前的一些准备工作与知识储备
千帆杯原生应用挑战赛
- 大赛主旨:大赛以“创意无限·生成未来”为主题,紧密围绕当前AI技术的前沿动态和应用趋势,借助百度智能云千帆AppBuilder和ModelBuilder两大智能开发助手,鼓励参赛者打造出更多具有创新性、实用性和社会价值的AI原生应用
- 第一期:游乐场排队规划助手:赛题聚焦春节假期游乐园排队效率问题,鼓励开发者利用 AI 能力施展“时间魔法”,打造一款具有实用性的“游乐场排队规划助手”,帮助游客更好地了解乐园的排队情况,设计个性化的游玩路线,在有限的时间内获得最“High”的体验,同时为管理者提供优化运营策略的决策支持。
- 此大赛没有规定数据集,需求成果是使用主办方框架的应用程序。参赛者需要自己获取相关数据,如大赛第一名使用的是香港迪士尼数据
- 第二期:生成一个可制作贺岁文案内容的精调模型(限定使用ERNIE Speed,通过对模型精调使其保持原有能力的同时,具备准确理解并执行文案创作中创作长度相关指令的能力)。
- 此大赛提供了少量数据集(56)条,同时要求对数据集进行扩展(最终至少需要100条数据),数据为json形式
- 与第一期不同,此期是方向特化的微调模型开发,需要使用主办方框架
- 第一期:游乐场排队规划助手:赛题聚焦春节假期游乐园排队效率问题,鼓励开发者利用 AI 能力施展“时间魔法”,打造一款具有实用性的“游乐场排队规划助手”,帮助游客更好地了解乐园的排队情况,设计个性化的游玩路线,在有限的时间内获得最“High”的体验,同时为管理者提供优化运营策略的决策支持。
- 大赛形式:
- 第一期:基于AppBuilder平台提供的强大开发套件和资源环境,使用平台预置的Agent框架,以零代码的方式创建Agent智能体,自动化调用各种工具打造游乐场排队规划助手AI原生应用。
- 游客只需要输入时间预算和游玩喜好,Agent智能体就能生成并执行Python代码,求解优化问题,智能规划出游玩项目路线。
————————生成python,求解optimization问题的agent
- 游客只需要输入时间预算和游玩喜好,Agent智能体就能生成并执行Python代码,求解优化问题,智能规划出游玩项目路线。
- 第二期:通过在千帆大模型平台使用平台上的各种模型调优工具,结合相关数据,基于ERNIE-Speed调优生成符合赛题主题要求且效果优秀的模型。
- 作品信息需包含:
- 微调后的模型效果展示(输入输出示例截图)
- 部署后的模型API文档(包含url地址、超参配置和步骤描述)
- access_token;
- 作品信息需包含:
- 第一期:基于AppBuilder平台提供的强大开发套件和资源环境,使用平台预置的Agent框架,以零代码的方式创建Agent智能体,自动化调用各种工具打造游乐场排队规划助手AI原生应用。
阿里天池竞赛
1. 基于LLM智能问答系统学习赛
- 赛题思想:未来金融科技领域将深刻体现Agent的价值,即一个智能代理能根据用户需求进行意图识别和决策。本次大赛的赛题虽为单一,但融合了数据查询与文本理解两大任务,充分体现了Agent核心思想:根据不确定输入,判断用户意图,并调用相应服务或功能生成答案。
- 模型使用:不限制选手的模型使用,选手可以选择商业化模型或者开源模型,也可以结合多个模型,共同创建一个问答系统。可以采用Prompt Engineering方法,也可以使用外部数据对模型进行微调。推荐使用“通义千问金融大模型”或“通义千问7B模型”作为基础大模型,
- 任务目标:数据查询题——根据用户的问题,生成相应的SQL查询语句,精准查询问题结果;文本理解题:对长文本进行细致检索与解读,高效提取关键信息。
- 数据集描述:赛事主办方提供三类数据。一个是10张数据表(sqlite),一个是招股说明书(pdf文件,标准的招股说明书形式,没有进行数据处理),以及将招股说明书pdf解析后的txt文件。
- 大模型拓展操作:扩展金融行业词表;增量训练行业金融200B规模,涵盖中英文财报、研报、新闻、书籍、论坛等多种类型数据;
训练上下文扩展到16K,借助NTK和LogN等技术,推理长度可以扩展到64K
2. 通义千问AI挑战赛 - Code Qwen能力算法赛道
- 目的:如何通过高质量的数据微调提升基础语言模型的代码能力?——聚焦于通义千问大模型微调训练的竞赛,其主要目标是通过高质量的数据探索和拓展开源模型 Qwen 1.8B 及 Qwen 72B 的代码能力上限。高质量的数据是大模型提升效果的关键,初赛阶段主要聚焦在如何通过 SFT 提升基础模型的代码能力。需要选手基于最新开源的 Qwen 1.8 模型作为基础模型,在提供的训练框架上自行进行数据收集与微调,训练完成后将进行自动评估,返回最终结果进行排名;
- 数据集特征
- Evol-instruction-66k: 基于开源open-evol-instruction-80k过滤低质量,重复和human eval相似的数据后得到的高质量代码类微调数据
- e.x.{
“instruction”: “Using the text file from the link, https://norvig.com/big.txt, use the SpellChecker module from the pyspellchecker package in Python to find spelling mistakes in the text file. Additionally, measure the efficiency of the implemented spell checker. Report the number of false positives and false negatives, and provide a way to visualize these instances. Also, improve the spell checker by using custom dictionaries or other natural language processing techniques to reduce these errors.”,
“output”: “Here is an outline of how to address this problem:\n(Note we will need to installpyspellchecker
andrequests
dependencies if not present already). You can install it using:\n\npip install pyspellchecker requests\n
\n\npython\nimport requests\nfrom spellchecker import SpellChecker\n\n# Get the text file\nurl = \"https://norvig.com/big.txt\"\nresponse = requests.get(url)\ntext = response.text\n\n# Remove punctuation and special characters\ntext = ''.join(e for e in text if e.isalnum() or e.isspace())\n\n# Tokenize text (naive method)\nwords = text.split()\n\n# Initialize spell checker\nspell = SpellChecker()\n\n# Find misspelled words\nmisspelled = spell.unknown(words)\n\n# Print result\nprint(f\"Number of misspelled words: {len(misspelled)}\")\n
\nThis snippet will output a number of misspelled words found in the text.\n\nIn order to measure the efficiency in terms of false negatives and false positives, you need to know the true positives and true negatives, which requires the ground truth that in this case would be some kind of ‘clean’ version of the text without typos. \n\nWe can perform a counter-example with a small list that has good and bad spelled word:\npython\n# Assuming we have two lists which contain correctly spelled and incorrectly spelled words.\ncorrectly_spelled = ['apple', 'banana', 'pear']\nincorrectly_spelled = ['aple', 'banan', 'per']\n\n# Everything the spellchecker says is fine should be in the correctly spelled list.\nfalse_negatives = [word for word in correctly_spelled + incorrectly_spelled if word not in spell.known([word])]\n\n# Everything the spellchecker says is wrong should be in the incorrectly spelled list.\nfalse_positives = [word for word in correctly_spelled + incorrectly_spelled if word not in spell.unknown([word])]\n\nprint(f\"False Negatives: {false_negatives}\")\nprint(f\"False Positives: {false_positives}\")\n
\n\nVisualizing results can be done in many ways depending on your preferences and exact needs. In simple cases, you could list the incorrectly spelled words found by the spell checker, but you could also create a plot using matplotlib, or a word cloud using the WordCloud module.\n\nTo improve the spell checker, you can add words to its dictionary. The pyspellchecker has a corpus we can add our words, as shown below:\n\npython\nupdated_dictionary = set(list(spell.word_frequency.dictionary.keys()) + [\"additional\", \"dictionary\", \"words\"])\nspell.word_frequency.load_words(updated_dictionary)\n
\n\nIf you have a custom dictionary, you can just load this directly.\n\nPyspellchecker probabilities are based on the occurrence of a word in the text. As a result, the more domain-specific text you can provide it, the more accurate it becomes.\n\nAnother optimization could be to apply a stemming algorithm before comparing words to the dictionary since the dictionary typically includes only root words.\n\nIn addition, you can use Machine Learning or Natural Language Processing techniques to improve spell check. Techniques such as:\n1. Using a context-based spelling correction by using BERT model. \n2. Training a customized spell-check model using a dataset relevant to your problem.\n3. Using N-gram approach, where the context of the word is used for the correction (this is used in Google\u2019s spell checker as of 2010).\n4. Use of phonetic algorithms (e.g., Soundex, Metaphone, etc.) which are used to correct phonetically misspelled words.”
}
- CodeExercise-Python-27k: 基于chatgpt生成的高质量python练习题数据
- e.x.{“data_name”: “CodeExercise-Py”, “id”: 0, “chat_rounds”: [{“role”: “human”, “content”: “Write a Python function named "add_numbers" that takes two parameters, "num1" and "num2", and returns the sum of the two numbers.\nInput: None”, “chat_round_id”: 0}, {“role”: “bot”, “content”: “
python\ndef add_numbers(num1, num2):\n \"\"\"\n This function takes two numbers as input and returns their sum.\n\n Parameters:\n num1 (int or float): The first number.\n num2 (int or float): The second number.\n\n Returns:\n int or float: The sum of num1 and num2.\n \"\"\"\n return num1 + num2\n\n# Example usage\nresult = add_numbers(5, 3)\nprint(result) # Output: 8\n\n\n
“, “chat_round_id”: 1}]}
闻达:一个大规模语言模型调用平台
1. 知识库检索增强
- sentence_transformers + 检索,支持faiss/fess检索,可以选择本地/在线检索、索引预先/实时构建
- 没有提到长文本能力,仅仅是取决于model本身的功能
DeepBI
1. 定义/底模
- 基于OPENAI GPT4 模型开发的BI系统,可以自动生成sql与图表
- 核心问题是:如何在通过API的情况下优化SQL生成与结果分析?图表生成是模型生成还是调用某些库方法?
- 初步判断是用了python的第三方包,如pyecharts等进行图表生成;完全调用GPT4 API,似乎仅在prompt上做了一些简单的处理?
- 还是midware的思想;在代码生成上,没有做到交叉生成,python和sql生成是分开的
CodeT5+
模型结构:encoder-decoder结构
- 编码器学习从代码/文本序列(完整、部分或跨度屏蔽序列)中对上下文表示进行编码。
- 根据预训练学习任务,解码器被训练以生成不同类型的输出。
- 预训练任务的混合使模型能够学习代码上下文的有意义的表示,并在不同级别恢复丢失的信息:代码跨度、部分程序和完整程序。
训练策略:多任务混合
- 目的是增强LLM的理解能力
- 结合了不同类型的学习任务,包括span denoising, causal language modeling (CLM), text-code contrastive learning, and matching tasks(跨度去噪、因果语言建模(CLM)、文本代码对比学习和匹配任务)。他们发现,如此广泛的预训练任务集可以帮助模型从代码和文本数据中学习丰富的表示,并弥合各种应用中的预训练微调差距。
- 如何实现通过对模型进行调整加速训练?—————shallow encoder and deep decoder策略
- keep the small encoder and the cross-attention layers trainable while freezing the deep decoder LLM. ————Such architecture is designed with the intuition that the decoder is often employed to deal with a higher level of complexity in generation tasks and requires a larger number of neural parameters.
训练trick
- unimodal code data and bimodal code-text data.(纯代码 + 代码与注释?)
- 二阶段预训练策略(实践证明可以增强更丰富的文本表示)
- 第一阶段只采用纯代码训练:从GitHub等开源平台获得了数据(许可证)。总共采用了九种编程语言的多语言培训数据。
- 第二阶段采用代码+文本作为训练数据:每个数据样本都包含一个文本代码对,其中包括一个代码函数及其相应的描述函数语义的文档字符串。
- Instruction Tuning
- tuning the models with synthetic instruction-following tasks
下列为可能参考到的论文及启发点
————LLM agent for generating code with python and SQL
1. CleanAgent: Automating Data Standardization with LLM-based Agents
- 提出一个具有声明性、统一 API 的 Python 库,用于标准化列类型,通过简洁的 API 调用简化 LLM 的代码生成。
- 类似与midware的思想,加了一个中间层方便tuning,实际价值似乎不大
2. LiveCodeBench: Holistic and Contamination Free Evaluation of Large Language Models for Code
- 一套code generation效果评价方法,MIT伯克利大学出品,或许可以一试
3. KnowCoder: Coding Structured Knowledge into LLMs for Universal Information Extraction
- 中国科学院大学CAS Key Laboratory of Network Data Science and Technology出品
- 旨在开发一种LLM易于理解的统一模式表示,以及鼓励LLM遵循模式并准确提取结构化知识的有效学习框架(Universal Information Extraction (UIE) task)
- 已有UIE方法的一些不足:在类别及其归属的判定上、关联与实体的存在条件判断上不足;classification label/自然语言 对LLM来说需要更多资源去理解;缺乏通用性
- 此文章实际上是用python代码来表示知识和信息,是information to python再to knowledge的过程