• [技术干货] 使用bert(base)对比大语言模型(ChatGLM2-6B)做文本分类心得总结
    什么是bertBidirectional Encoder Representations from Transformers (BERT) 是一种基于变压器的机器学习技术,用于自然语言处理 (NLP) 预训练,由 Google 开发。 BERT 由 Jacob Devlin 和他的 Google 同事于 2018 年创建并发布。 2019 年,谷歌宣布已开始在其搜索引擎中使用 BERT,到 2020 年底,它几乎在所有英语查询中都使用了 BERT。 2020 年的一项文献调查得出结论,在一年多的时间里,BERT 已成为 NLP 实验中无处不在的基线,超过 150 篇研究出版物分析和改进了该模型。BERT 有两种模型:BERTBASE:12 个编码器和 12 个双向自注意头BERTLARGE:24 个编码器和 16 个双向自注意头。 两种模型都是根据从 BooksCorpus 中提取的 8 亿单词和英语维基百科中的 25 亿单词的未标记数据进行预训练的。bert与大模型(chatGPT)的区别Google 的 BERT(Bidirectional Encoder Representations from Transformers)和 ChatGPT(GPT-3.5)都是人工智能模型,但它们的应用场景和任务不同。BERT 是一种预训练语言模型,旨在为自然语言处理任务提供高质量的特征表示。它通过双向 Transformer 网络结构学习自然语言的上下文信息,从而在各种自然语言理解任务中表现出色,如文本分类、命名实体识别、情感分析等。BERT 模型的预训练数据来自于互联网上的大量文本语料库,例如维基百科和新闻文章等。而 ChatGPT 则是一种大型语言模型,旨在生成自然语言文本。它使用了单向的 Transformer 网络结构,并通过海量文本数据进行训练,从而学会生成人类类似的文本响应。ChatGPT 的应用场景主要是在线聊天机器人、自然语言生成、文本摘要等。虽然 BERT 和 ChatGPT 都是基于 Transformers 模型开发的,但它们的应用领域和任务不同,因此它们的结构和预训练数据也不同。在实际应用中,研究人员可以根据具体任务需求选择合适的模型进行微调和优化。bert与大模型(ChatGLM2-6B)在中文训练规模上的区别BERT 和 ChatGLM2-6B 都是基于 Transformers 模型的人工智能助手,但它们的训练规模和能力有所不同。以下是 BERT 和 ChatGLM2-6B 训练规模之间的对比:模型结构: BERT 是一种双向 Transformer 模型,采用双向编码器来学习文本数据中的上下文信息。它的预训练目标是最大化预测下一句的正确概率。BERT 模型有多种版本,如 BERT-base(1.1 亿参数)、BERT-large(3.4 亿参数)和 BERT-xl(11 亿参数)。 ChatGLM2-6B 是一种基于 BERT 模型的改进版,采用了单向 Transformer 网络结构。它的预训练目标是生成自然语言文本。ChatGLM2-6B 模型的版本为 ChatGLM2-6B,参数数量为 6 亿。训练数据: BERT 和 ChatGLM2-6B 的训练数据有所不同。BERT 的预训练数据主要包括了维基百科(英语版)和新闻文章等互联网文本资源。而 ChatGLM2-6B 的训练数据主要来源于清华大学 KEG 实验室和智谱 AI 公司提供的中文语料库,包括网页、书籍、新闻、论坛、问答对话等。训练规模: 从上述模型版本中,我们可以看出 ChatGLM2-6B 模型的训练规模大于 BERT 模型。ChatGLM2-6B 模型的参数数量为 6 亿,而 BERT-xl 只有 11 亿。这意味着 ChatGLM2-6B 模型在处理自然语言任务时具有更强的表达能力。性能和应用场景: ChatGLM2-6B 模型在保留了 BERT 模型优点的基础上,针对中文问答场景进行了优化。相较于 BERT 模型,ChatGLM2-6B 模型在中文问答任务上具有更好的性能。此外,ChatGLM2-6B 模型还可以应用于其他自然语言处理任务,如文本分类、命名实体识别等。bert(base)做文本分类为啥比大模型(ChatGLM2-6B)快很多先说结论:我们的项目是对用户分类其他的评价,做一个预分类,看看具体是反馈给哪个部门。经过大量测试,我们发现bert模型,无论是训练还是生成,所耗费的时间都比chatGLM2-6B快非常多原因分析:BERT 和 ChatGLM2-6B 都是基于 Transformers 模型的人工智能助手,但它们在训练和生成速度上的差异,可能源于以下几个方面:模型结构: BERT 是一种双向 Transformer 模型,采用双向编码器来学习文本数据中的上下文信息。它的预训练目标是最大化预测下一句的正确概率。BERT 模型有多种版本,如 BERT-base(1.1 亿参数)、BERT-large(3.4 亿参数)和 BERT-xl(11 亿参数)。 ChatGLM2-6B 是一种基于 BERT 模型的改进版,采用了单向 Transformer 网络结构。它的预训练目标是生成自然语言文本。ChatGLM2-6B 模型的版本为 ChatGLM2-6B,参数数量为 6 亿。训练数据和预处理: BERT 和 ChatGLM2-6B 的训练数据有所不同。BERT 的预训练数据主要包括了维基百科(英语版)和新闻文章等互联网文本资源。而 ChatGLM2-6B 的训练数据主要来源于清华大学 KEG 实验室和智谱 AI 公司提供的中文语料库,包括网页、书籍、新闻、论坛、问答对话等。 在预处理方面,BERT 模型采用了掩码语言模型(Masked Language Model,MLM)进行预训练,而 ChatGLM2-6B 采用了下一句预测任务(Next Sentence Prediction,NSP)。MLM 预训练目标使得模型在生成文本时更关注词汇的上下文信息,而 NSP 则相对关注整句话的语义关系。这使得 BERT 在中文分类任务上表现较好。生成速度: 在生成速度方面,BERT 和 ChatGLM2-6B 的差异主要体现在生成任务的复杂性。BERT 模型在生成文本时,采用了无监督的 MLM 预训练目标,使得模型能够在没有明确任务指导的情况下生成连贯、自然的文本。而 ChatGLM2-6B 模型在生成任务上采用了有监督的 NSP 任务,其生成速度相对较慢,因为模型需要在给定上下文中预测下一个句子。综上所述,BERT 在中文分类任务上相较于 ChatGLM2-6B 具有优势,主要得益于其双向 Transformer 结构、MLM 预训练目标以及模型规模。而在训练和生成速度方面,主要得益于其较小的模型规模、高效的优化算法和硬件设施,因此快很多如果想提示ChatGLM2-6B的速度,建议量化到Int4,同时减少训练的轮数(但是这会使得丢失率变大),需要权衡利弊
  • [技术干货] 如何用 Python 和深度迁移学习做文本分类【转】
    本文为你展示,如何用10几行 Python 语句,把 Yelp 评论数据情感分类效果做到一流水平。疑问在《如何用 Python 和 fast.ai 做图像深度迁移学习?》一文中,我为你详细介绍了迁移学习给图像分类带来的优势,包括:用时少成本低需要的数据量小不容易过拟合有的同学,立刻就把迁移学习的这种优势,联系到了自己正在做的研究中,问我:老师,迁移学习能不能用在文本分类中呢?正在为数据量太小发愁呢!好问题!答案是可以。回顾《如何用机器学习处理二元分类任务?》一文,我们介绍过文本分类的一些常见方法。首先,要把握语义信息。方法是使用词嵌入预训练模型。代表词语的向量,不再只是一个独特序号,而能够在一定程度上,刻画词语的意义(具体内容,请参见《如何用Python处理自然语言?(Spacy与Word Embedding)》和《如何用 Python 和 gensim 调用中文词嵌入预训练模型?》)。其次,上述方法只能表征单个词语含义,因此需要通过神经网络来刻画词语的顺序信息。例如可以使用一维卷积神经网络(One Dimensional Convolutional Neural Network, 1DCNN):或者使用循环神经网络(Recurrent Neural Network, RNN):还有的研究者,觉得为了表征句子里词语顺序,用上 CNN 或者 LSTM 这样的复杂结构,有些浪费。于是 Google 干脆提出了 Universal Sentence Encoder ,直接接受你输入的整句,然后把它统一转换成向量形式。这样可以大幅度降低用户建模和训练的工作量。困难这些方法有用吗?当然有。但是 Jeremy Howard 指出,这种基于词(句)嵌入预训练的模型,都会有显著缺陷,即领域上下文问题。这里为了简化,咱们只讨论英文这一种语言内的问题。假设别人是在英文 Wikipedia 上面训练的词嵌入向量,你想拿过来对 IMDB 或 Yelp 上的文本做分类。这就有问题了。因为许多词语,在不同的上下文里面,含义是有区别的。直接拿来用的时候,你实际上,是在无视这种区别。那怎么办?直觉的想法,自然是退回去,我不再用别人的预训练结果了。使用目前任务领域的文本,从头来训练词嵌入向量。可是这样一来,你训练工作量陡增。目前主流的 Word2vec , Glove 和 fasttext 这几个词嵌入预训练模型,都出自名门。其中 word2vec 来自于 Google,Glove 来自于斯坦福,fasttext 是 facebook 做的。因为这种海量文本的训练,不仅需要掌握技术,还要有大量的计算资源。同时,你还很可能遭遇数据不足的问题。这会导致你自行训练的词嵌入模型,表现上比之前拿来别人的,结果更差。维基百科之所以经常被使用来做训练,就是因为文本丰富。而一些评论数据里面,往往不具备如此丰富的词汇。怎么办呢?迁移Jeremy Howard 提出了一种方法,叫做“用于文本分类的通用语言模型微调(ULMFiT)”。论文在这里:Howard, J., & Ruder, S. (2018). Universal language model fine-tuning for text classification. In Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) (Vol. 1, pp. 328-339).在这篇文章里,他提出了一个构想。有人(例如早期研究者,或者大机构)在海量数据集(例如Wikipedia)上训练语言模型。之后发布这个模型,而不只是词嵌入向量的表达结果;普通用户拿到这个模型后,把它在自己的训练文本(例如 Yelp 或者 IMDB 评论)上微调,这样一来,就有了符合自己任务问题领域上下文的语言模型;之后,把这个语言模型的头部,加上一个分类器,在训练数据上学习,这就有了一个针对当前任务的完整分类模型;如果效果还不够好,可以把整个儿分类模型再进行微调。文中用了下图,表达了上述步骤。注意在这个语言模型中,实际上也是使用了 AWD-LSTM 作为组块的(否则无法处理词语的顺序信息)。但是你根本就不必了解  AWD-LSTM 的构造,因为它已经完全模块化包裹起来了,对用户透明。再把我们那几个比方拿出来说说,给你打打气:你不需要了解显像管的构造和无线信号传输,就可以看电视和用遥控器换台;你不需要了解机械构造和内燃机原理,就可以开汽车。用 Python 和 fast.ai 来做迁移学习,你需要的,只是看懂说明书而已。下面,我们就来实际做一个文本分类任务,体会一下“通用语言模型微调”和深度迁移学习的威力。数据我们使用的文本数据,是 Yelp reviews Polarity ,它是一个标准化的数据集。许多文本分类的论文,都会采用它进行效果对比。我们使用的版本,来自于 fast.ai 开放数据集,存储在 AWS 上。它和 Yelp reviews Polarity 的原始版本在数据内容上没有任何区别,只不过是提供的 csv ,从结构上符合 fast.ai 读取的标准化需求(也就是每一行,都把标记放在文本前面)。点击这个链接,你就能看到 fast.ai 全部开放数据内容。其中很多其他数据类别,对于你的研究可能会有帮助。我们进入“自然语言处理”(NLP)板块,查找到 Yelp reviews - Polarity 。这个数据集有几百兆。不算小,但是也算不上大数据。你可以把它下载到电脑中,解压后查看。注意在压缩包里面,有2个 csv 文件,分别叫做 train.csv(训练集)和 test.csv(测试集)。我们打开 readme.txt 看看,其中数据集的作者提到:The Yelp reviews polarity dataset is constructed by considering stars 1 and 2 negative, and 3 and 4 positive. For each polarity 280,000 training samples and 19,000 testing samples are take randomly. In total there are 560,000 trainig samples and 38,000 testing samples. Negative polarity is class 1, and positive class 2.之所以叫做极性(Polarity)数据,是因为作者根据评论对应的打分,分成了正向和负向情感两类。因此我们的分类任务,是二元的。训练集里面,正负情感数据各 280,000 条,而测试集里面,正负情感数据各有 19,000 条。网页上面,有数据集作者的论文链接。该论文发表于 2015 年。这里有论文的提要,包括了不同方法在相同数据集上的性能对比。如图所示,性能是用错误率来展示的。 Yelp reviews - Polarity 这一列里面,最低的错误率已经用蓝色标出,为 4.36, 那么准确率(accuracy)便是 95.64%。注意,写学术论文的时候,一定要注意引用要求。如果你在自己的研究中,使用该数据集,那么需要在参考文献中,添加引用:Xiang Zhang, Junbo Zhao, Yann LeCun. Character-level Convolutional Networks for Text Classification. Advances in Neural Information Processing Systems 28 (NIPS 2015).环境为了运行深度学习代码,你需要一个 GPU 。但是你不需要去买一个,租就好了。最方便的租用方法,就是云平台。在《如何用 Python 和 fast.ai 做图像深度迁移学习?》一文中,我们提到了,建议使用 Google Compute Platform 。每小时只需要 0.38 美元,而且如果你是新用户, Google 会先送给你300美金,1年内有效。我为你写了个步骤详细的设置教程,请使用这个链接访问。当你的终端里面出现这样的提示的时候,就证明一切准备工作都就绪了。我把教程的代码,已经放到了 github 上面,请使用以下语句,下载下来。git clone https://github.com/wshuyi/demo-nlp-classification-fastai.git之后,就可以呼叫 jupyter 出场了。jupyter lab注意因为你是在 Google Compute Platform 云端执行 jupyter ,因此浏览器不会自动弹出。你需要打开 Firefox 或者 Chrome,在其中输入这个链接(http://localhost:8080/lab?)。打开左侧边栏里面的 demo.ipynb。本教程全部的代码都在这里了。当然,你如果比较心急,可以选择执行Run->Run All Cells,查看全部运行结果。但是,跟之前一样,我还是建议你跟着教程的说明,一步步执行它们。以便更加深刻体会每一条语句的含义。载入在 Jupyter Lab 中,我们可以使用 !+命令名称 的方式,来执行终端命令(bash command)。我们下面就使用 wget 来从 AWS 下载 Yelp 评论数据集。!wget https://s3.amazonaws.com/fast-ai-nlp/yelp_review_polarity_csv.tgz在左边栏里,你会看到 yelp_review_polarity_csv.tgz 这个文件,被下载了下来。对于 tgz 格式的压缩包,我们采用 tar 命令来解压缩。!tar -xvzf yelp_review_polarity_csv.tgz左侧边栏里,你会看到 yelp_review_polarity_csv 目录解压完毕。我们双击它,看看内容。文件下载和解压成功。下面我们从 fast.ai 调用一些模块,来获得一些常见的功能。from fastai import *from fastai.text import *from fastai.core import *我们设置 path 指向数据文件夹。path = Path('yelp_review_polarity_csv')然后我们检查一下训练数据。train_csv = path/'train.csv'train = pd.read_csv(train_csv, header=None)train.head()每一行,都包括一个标签,以及对应的评论内容。这里因为显示宽度的限制,评论被折叠了。我们看看第一行的评论内容全文:train.iloc[0][1]对于验证集,我们也仿照上述办法查看。注意这里数据集只提供了训练集和“测试集”,因此我们把这个“测试集”当做验证集来使用。valid_csv = path/'test.csv'valid = pd.read_csv(valid_csv, header=None)valid.head()下面我们把数据读入。data_lm = TextLMDataBunch.from_csv(path, valid='test')data_clas = TextClasDataBunch.from_csv(path, valid='test', vocab=data_lm.train_ds.vocab)注意,短短两行命令,实际上完成了若干功能。第一行,是构建语言模型(Language Model, LM)数据。第二行,是构建分类模型(Classifier)数据。它们要做以下几个事儿:语言模型中,对于训练集的文本,进行标记化(Tokenizing)和数字化(Numericalizing)。这个过程,请参考我在《如何用Python和机器学习训练中文文本情感分类模型?》一文中的介绍;语言模型中,对于验证集文本,同样进行标记化(Tokenizing)和数字化(Numericalizing);分类模型中,直接使用语言模型中标记化(Tokenizing)和数字化(Numericalizing)之后的词汇(vocabs)。并且读入标签(labels)。因为我们的数据量有数十万,因此执行起来,会花上几分钟。结束之后,我们来看看数据载入是否正常。data_lm.train_ds.vocab_size训练数据里面,词汇一共有60002条。我们看看,词汇的索引是怎么样的:data_lm.train_ds.vocab.itos分类器里面,训练集标签正确载入了吗?data_lm.train_ds.labels验证集的呢?data_lm.valid_ds.labels数据载入后,我们就要开始借来预训练语言模型,并且进行微调了。语言模型本文使用 fast.ai 自带的预训练语言模型 wt103_v1,它是在 Wikitext-103 数据集上训练的结果。我们把它下载下来:model_path = path/'models'model_path.mkdir(exist_ok=True)url = 'http://files.fast.ai/models/wt103_v1/'download_url(f'{url}lstm_wt103.pth', model_path/'lstm_wt103.pth')download_url(f'{url}itos_wt103.pkl', model_path/'itos_wt103.pkl')左侧边栏里,在数据目录下,我们会看到一个新的文件夹,叫做 models 。其中包括两个文件:好了,现在数据、语言模型预训练参数都有了,我们要构建一个 RNNLearner ,来生成我们自己的语言模型。learn = RNNLearner.language_model(data_lm, pretrained_fnames=['lstm_wt103', 'itos_wt103'], drop_mult=0.5)这里,我们指定了语言模型要读入的文本数据为 data_lm,预训练的参数为刚刚下载的两个文件,第三个参数 drop_mult 是为了避免过拟合,而设置的 Dropout 比例。下面,我们还是让模型用 one cycle policy 进行训练。如果你对细节感兴趣,可以点击这个链接了解具体内容。learn.fit_one_cycle(1, 1e-2)因为我们的数据集包含数十万条目,因此训练时间,大概需要1个小时左右。请保持耐心。50多分钟后,还在跑,不过已经可以窥见曙光了。当命令成功执行后,我们可以看看目前的语言模型和我们的训练数据拟合程度如何。你可能会觉得,这个准确率也太低了!没错,不过要注意,这可是语言模型的准确率,并非是分类模型的准确率。所以,它和我们之前在这张表格里看到的结果,不具备可比性。我们对于这个结果,不够满意,怎么办呢?方法很简单,我们微调它。回顾下图,刚才我们实际上是冻结了预训练模型底层参数,只用头部层次拟合我们自己的训练数据。微调的办法,是不再对预训练的模型参数进行冻结。“解冻”之后,我们依然使用“歧视性学习速率”(discriminative learning rate)进行微调。如果你忘了“歧视性学习速率”(discriminative learning rate)是怎么回事儿,请参考《如何用 Python 和 fast.ai 做图像深度迁移学习?》一文的“微调”一节。注意这种方法,既保证靠近输入层的预训练模型结构不被破坏,又尽量让靠近输出层的预训练模型参数尽可能向着我们自己的训练数据拟合。learn.unfreeze()learn.fit_one_cycle(1, 1e-3)好吧,又是一个多小时。出去健健身,活动一下吧。当你准时回来的时候,会发现模型的效能已经提升了一大截。前前后后,你已经投入了若干小时的训练时间,就为了打造这个符合任务需求的语言模型。现在模型训练好了,我们一定不能忘记做的工作,是把参数好好保存下来。learn.save_encoder('ft_enc')这样,下次如果你需要使用这个任务的语言模型,就不必拿 wt103_v1 从头微调了。而只需要读入目前存储的参数即可。分类语言模型微调好了,下面我们来构造分类器。learn = RNNLearner.classifier(data_clas, drop_mult=0.5)learn.load_encoder('ft_enc')learn.fit_one_cycle(1, 1e-2)虽然名称依然叫做 learn ,但注意这时候我们的模型,已经是分类模型,而不再是语言模型了。我们读入的数据,也因应变化成了 data_clas ,而非 data_lm 。这里,load_encoder 就是把我们的语言模型参数,套用到分类模型里。我们还是执行 "one cycle policy" 。这次,在20多分钟的训练之后,我们语言模型在分类任务上得出了第一次成绩。接近95%的准确率,好像很不错嘛!但是,正如我在《文科生用机器学习做论文,该写些什么?》一文中给你指出的那样,对于别人已经做了模型的分类任务,你的目标就得是和别人的结果去对比了。回顾别人的结果:对,最高准确率是 95.64% ,我们的模型,还是有差距的。怎么办?很简单,我们刚刚只是微调了语言模型而已。这回,我们要微调分类模型。先做一个省事儿的。就是对于大部分层次,我们都保持冻结。只把分类模型的最后两层解冻,进行微调。learn.freeze_to(-2)learn.fit_one_cycle(1, slice(5e-3/2., 5e-3))半小时以后,我们获得了这样的结果:这次,我们的准确率,已经接近了97% ,比别人的 95.64% 要高了。而且,请注意,此时训练损失(train loss)比起验证损失(valid loss)要高。没有迹象表明过拟合发生,这意味着模型还有改进的余地。你如果还不满意,那么咱们就干脆把整个儿模型解冻,然后再来一次微调。learn.unfreeze()learn.fit_one_cycle(1, slice(2e-3/100, 2e-3))因为微调的层次多了,参数自然也多了许多。因此训练花费时间也会更长。大概一个小时以后,你会看到结果:准确率已经跃升到了 97.28%。再次提醒,此时训练损失(train loss)依然比验证损失(valid loss)高。模型还有改进的余地……对比虽然我们的深度学习模型,实现起来非常简单。但是把咱们2018年做出来的结果,跟2015年的文章对比,似乎有些不大公平。于是,我在 Google Scholar 中,检索 yelp polarity ,并且把检索结果的年份限定在了2017年以后。对第一屏上出现的全部文献,我一一打开,查找是否包含准确率对比的列表。所有符合的结果,我都列在了下面,作为对比。下表来自于:Sun, J., Ma, X., & Chung, T. S. (2018). Exploration of Recurrent Unit in Hierarchical Attention Neural Network for Sentence Classification. 한국정보과학회 학술발표논문집, 964-966.注意这里最高的数值,是 93.75 。下表来自于:Murdoch, W. J., & Szlam, A. (2017). Automatic rule extraction from long short term memory networks. arXiv preprint arXiv:1702.02540.这里最高的数值,是 95.4 。下表来自于:Chen, M., & Gimpel, K. (2018). Smaller Text Classifiers with Discriminative Cluster Embeddings. In Proceedings of the 2018 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 2 (Short Papers) (Vol. 2, pp. 739-745).这里最高的数值,是 95.8 。下表来自于:Shen, D., Wang, G., Wang, W., Min, M. R., Su, Q., Zhang, Y., … & Carin, L. (2018). Baseline needs more love: On simple word-embedding-based models and associated pooling mechanisms. arXiv preprint arXiv:1805.09843.这里最高的数值,是 95.81 。这是一篇教程,并非学术论文。所以我没有穷尽查找目前出现的最高 Yelp Reviews Polarity 分类结果。另外,给你留个思考题——咱们这种对比,是否科学?欢迎你在留言区,把自己的见解反馈给我。不过,通过跟这些近期文献里面的最优分类结果进行比较,相信你对咱们目前达到的准确率,能有较为客观的参照。小结本文我们尝试把迁移学习,从图像分类领域搬到到了文本分类(自然语言处理)领域。在 fast.ai 框架下,我们的深度学习分类模型代码很简单。刨去那些预处理和展示数据的部分,实际的训练语句,只有10几行而已。回顾一下,主要的步骤包括:获得标注数据,分好训练集和验证集;载入语言模型数据,和分类模型数据,进行标记化和数字化预处理;读入预训练参数,训练并且微调语言模型;用语言模型调整后的参数,训练分类模型;微调分类模型值得深思的是,在这种流程下,你根本不需要获得大量的标注数据,就可以达到非常高的准确率。在 Jeremy Howard 的论文里,就有这样一张对比图,令人印象非常深刻。同样要达到 20% 左右的验证集错误率,从头训练的话,你需要超过1000个数据,而如果使用半监督通用语言模型微调(ULMFiT, semi-supervised),你只需要100个数据。如果你用的是监督通用语言模型微调(ULMFiT, supervised),100个数据已经能够直接让你达到10%的验证集错误率了。这给那些小样本任务,尤其是小语种上的自然语言处理任务,带来了显著的机遇。Czapla 等人,就利用这种方法,轻松赢得了 PolEval'18 比赛的第一名,领先第二名 35% 左右。感兴趣的话,他们的论文在这里。Google 给你的300美金,应该还剩余一些吧?找个自己感兴趣的文本分类任务,实际动手跑一遍吧。转自:https://mp.weixin.qq.com/s?__biz=MzIyODI1MzYyNA==&mid=2653540491&idx=1&sn=46d7d9c998925dbc6e58de225efb624b&chksm=f389ba5cc4fe334a0406bc59126cdac66efca21c7c143662ffc3e23e8f88dcd970388137b940&cur_album_id=1339178811027587075&scene=189#wechat_redirect
  • [技术干货] 如何用 Python 和 fast.ai 做图像深度迁移学习【转】
     本文带你认识一个优秀的新深度学习框架,了解深度学习中最重要的3件事。框架看到这个题目,你可能会疑惑:老师,你不是讲过如何用深度学习做图像分类了吗?迁移学习好像也讲过了啊!说得对!我要感谢你对我专栏的持续关注。我确实讲过深度学习做图像分类,以及迁移学习这两项内容。写这篇文章,是因为最近因为科研的关系,发现了 fast.ai 这款框架。我希望把它介绍给你。你可能会不解,之前介绍过的 TuriCreate, Tensorflow, tflearn 和 Keras 好像都挺好用的啊!我想问问,你在实际的科研工作里,用过哪一个呢?大多数的读者,只怕基本上都没真正用它们跑过实际的任务。为什么呢?因为对普通用户(例如我经常提到的“文科生”),这些框架要么用起来很简单,但是功能不够强大;要么功能很强大,但是不够易用。例如苹果的 TuriCreate ,我给你演示过,直接零基础上手都没问题。但当你希望对模型进行构造调整的时候,马上就会发现困难重重。因为其专长在于快速产生模型,并且部署到苹果移动设备,因此文档里面底层细节的介绍是有欠缺的。而且有些模型,非苹果平台目前还不能兼容。至于某著名框架,直到推出3年后,在各方压力下,不得已才把好用的 Eager Execution 作为主要使用模式。其间充分体现了那种技术人员独有的傲慢和固执。另外,就连程序员和数据科学家们都把吐槽“看不懂”它的官方文档当作了家常便饭。这些轶事,由于公开发布会招致口水仗,所以我只写在了知识星球专属语雀团队《发现了一套非常棒的(该框架名称)视频教程》一文中。感兴趣的话,不妨去看看。原本我认为, Keras 已经是把功能和易用性做到了最佳平衡了。直到我看到了 Jeremy Howard,也就是 fast.ai 创始人提出的评判标准——如果一个深度学习框架需要写个教程给你,那它的易用性还不够好。我看了之后,可以用感动来形容。Jeremy 说这话,不是为了夸自己——因为他甚至做了个 MOOC 出来。他自己评价,说目前 fast.ai 的易用性依然不算成功。但在我看来, fast.ai 是目前把易用性和功能都做到了极致的深度学习框架。它的门槛极低。如同 TuriCreate 一样,你可以很轻易用几句话写个图片分类模型出来,人人都能立即上手。它的天花板又很高。因为它只是个包裹了 Pytorch 的代码库。你可能也听说了,在过去的一年里,Pytorch 在学术界大放异彩,就是因为它的门槛对于科研人员来说,已经足够友好了。如果你有需求,可以非常方便地通过代码的修改和复用,敏捷构造自己的深度学习模型。这种积木式的组合方式,使得许多新论文中的模型,可以第一时间被复现验证。如果你在这个过程中有了自己的灵感和心得,可以马上实践。且慢,fast.ai 的作者不是已经做了自己的 MOOC 了吗?那写这篇文章,岂不是多此一举?不是的。首先,作者每年迭代一个 MOOC 的版本,因为 MOOC 一共包括三门课程,分别是:Practical Deep Learning for CodersCutting Edge Deep Learning for CodersIntroduction to Machine Learning for Coders但现在你能看到的深度学习基础课,还是去年录的。今年10月,伴随着 Pytorch 1.0 的推出, fast.ai 做了一次显著的大版本(1.0)更新。如果你去看去年的课程,会发现和目前的 fast.ai 代码有很多区别。在完成同一个功能时,你愿意再跑去学旧的过时内容吗?特别是,如果搞混了,还很容易出错。可是,想看到这个版本课程的免费视频,你至少得等到明年1月。因为目前正式学员们也才刚刚开课。而且,那视频,也是英文的。正因如此,我觉得有必要给你讲讲,如何用最新的 fast.ai 1.0 版本,来完成图像深度迁移学习。数据Jeremy 在 MOOC 中提到,如果你打算让机器通过数据来学习,你需要提供3样东西给它,分别是:数据(Data)模型结构(Architecture)损失度量(Loss Metrics)模型结构,是根据你的具体问题走的。例如说,你需要让机器做图片分类,那么就需要使用卷积神经网络(Convolutional Neural Network)来表征图片上的像素信息构成的特征。如果你需要做自然语言处理,那么就可以使用循环神经网络(Recurrent Neural Network)来捕捉文本或者字符的顺序关联信息。损失衡量,是指你提供一个标准,衡量机器对某项任务的处理水平。例如说对于分类效果如何,你可以使用交叉熵(Binary Cross Entropy)来评判。这样,机器会尝试最小化损失结果,从而让分类表现越来越好。至于数据,因为我们这里的任务是做分类。因此需要有标注的训练数据。我已经把本文需要用到的数据放到了这个 github 项目上。打开其中的 imgs 文件夹,你会看见3个子文件夹,分别对应训练(train),验证(valid)和测试(test)。打开 train 文件夹看看。你没猜错,我们用的图片还是哆啦A梦(doraemon)和瓦力(walle)。因为这样不仅可以保持教程的一惯性,而且也可以保证结果对比的公平。打开哆啦A梦的目录看看:展示其中第一个文件内容。好熟悉,是不是?你可以浏览一下其他的哆啦A梦照片,然后别忘了去瓦力的文件夹里面扫上一眼。这就是我们的数据集了。环境为了运行深度学习代码,你需要一个 GPU 。但是你不需要去买一个,租就好了。最方便的租用方法,就是云平台。fast.ai 官方,给出了以下5种云计算平台使用选项:Paperspace GradientSalamanderSageMakerGoogle Compute PlatformAmazon Web Services EC2其中,我推荐你使用的,是 Google Compute Platform 。原因很简单,首先它成本低,每小时只需要 0.38 美元。更重要的是,如果你是新用户, Google 会先送给你300美金,1年内有效。算算看,这够你运行多久深度学习?原先,fast.ai 上面的设置 Google Compute Platform 教程写得很简略。于是我写了个一步步的教程,请使用这个链接访问。不过,我发现 fast.ai 的迭代速度简直惊人,短短几天时间,新的教程就出来了,而且详尽许多。因此你也可以点击这里查看官方的教程。其中如果有跳步,你可以回看我的教程,作为补充。因此,Google Compute Platform 中间步骤,咱们就不赘述了。当你的终端里面出现这样的提示的时候,就证明一切准备工作都就绪了。下面,你需要下载刚刚在 github 上面的代码和数据集。git clone https://github.com/wshuyi/demo-image-classification-fastai.git之后,就可以呼叫 jupyter 出场了。jupyter lab注意因为你是在 Google Compute Platform 云端执行 jupyter ,因此浏览器不会自动弹出。你需要打开 Firefox 或者 Chrome,在其中输入这个链接(http://localhost:8080/lab?)。打开左侧边栏里面的 demo.ipynb。本教程全部的代码都在这里了。当然,你如果比较心急,可以选择执行Run->Run All Cells,查看全部运行结果。但是,跟之前一样,我还是建议你跟着教程的说明,一步步执行它们。以便更加深刻体会每一条语句的含义。载入我们先要载入数据。第一步是从 fast.ai 读入一些相关的功能模块。from fastai import *from fastai.vision import *from fastai.core import *接着,我们需要设置数据所在文件夹的位置,为 imgs 目录。执行:path = Path('imgs')下面,我们让 fast.ai 帮我们载入全部的数据。这时我们调用 ImageDataBunch 类的 from_folder 函数,结果存储到 data 中:data = ImageDataBunch.from_folder(path, test='test', ds_tfms=get_transforms(), size=224)注意这里,我们不仅读入了数据,还顺手做了2件事:我们进行了数据增强(augmentation),也就是对数据进行了翻转、拉伸、旋转,弄出了很多“新”训练数据。这样做的目的,是因为数据越多,越不容易出现过拟合(over-fitting),也就是模型死记硬背,蒙混考试,却没有抓住真正的规律。我们把图片大小进行了统一,设置成了 224 x 224 ,这样做的原因,是我们需要使用迁移学习,要用到预训练模型。预训练模型是在这样大小的图片上面训练出来的,因此保持大小一致,效果更好。下面,检查一下数据载入是否正常:data.show_batch(rows=3, figsize=(10,10))没问题。图片和标记都是正确的。训练用下面这一条语句,我们把“数据”、“模型结构”和“损失度量”三样信息,一起喂给机器。learn = ConvLearner(data, models.resnet34, metrics=accuracy)数据就不说了,模型我们采用的是 resnet34 这样一个预训练模型作为基础架构。至于损失度量,我们用的是准确率(accuracy)。你可能会纳闷,这就完了?不对呀!没有告诉模型类别有几个啊,没有指定任务迁移之后接续的几个层次的数量、大小、激活函数……对,不需要。因为 fast.ai 根据你输入的上述“数据”、“模型结构”和“损失度量”信息,自动帮你把这些闲七杂八的事情默默搞定了。下面,你需要用一条指令来训练它:learn.fit_one_cycle(1)注意,这里我们要求 fast.ai 使用 one cycle policy 。如果你对细节感兴趣,可以点击这个链接了解具体内容。5秒钟之后,训练结束。验证集准确率是,100%。注意,你“拿来”的这个 resnet34 模型当初做训练的时候,可从来没有见识过哆啦A梦或者瓦力。看了100多张形态各异,包含各种背景噪声的图片,它居然就能 100% 准确分辨了。之前我们讲过机器学习的可解释性很重要。没错,fast.ai 也帮我们考虑到了这点。preds,y = learn.get_preds()interp = ClassificationInterpretation(data, preds, y, loss_class=nn.CrossEntropyLoss)执行上面这两行语句,不会有什么输出。但是你手里有了个解释工具。我们来看看,机器判断得最不好的9张图片都有哪些?interp.plot_top_losses(9, figsize=(10,10))因为准确率已经 100% 了,所以单看数值,你根本无法了解机器判断不同照片的时候,遇到了哪些问题。但是这个解释器却可以立即让你明白,哪些图片,机器处理起来,底气(信心)最为不足。我们还能让解释器做个混淆矩阵出来:interp.plot_confusion_matrix()不过这个混淆矩阵好像没有什么意思。反正全都判断对了。评估我们的模型,是不是已经完美了?不好说。因为我们刚才展示的,只是验证集的结果。这个验证集,机器在迭代模型参数的时候每一回都拿来尝试。所以要检验最为真实的效能,我们需要让机器看从来没有看到过的图片。你可以到 test 目录下面,看看都有什么。注意这里一共6张图片,3张哆啦A梦的,3张瓦力的。这次,我们还会使用刚才用过的 get_preds 函数。不过区别是,我们把 is_test 标记设置为 True,这样机器就不会再去验证集里面取数据了,而是看测试集的。preds,y = learn.get_preds(is_test=True)注意目录下面看到的文件顺序,是依据名称排列的。但是 fast.ai 读取数据的时候,其实是做了随机洗牌(randomized shuffling)。我们得看看实际测试集里面的文件顺序。data.test_dl.dl.dataset.ds.x好了,我们自己心里有数了。下面就看看机器能不能都判断正确了。preds这都啥玩意儿啊?别着急,这是模型预测时候,根据两个不同的分类,分别给出的倾向数值。数值越大,倾向程度越高。左侧一列,是哆啦A梦;右侧一列,是瓦力。我们用 np.argmax 函数,把它简化一些。np.argmax(preds, axis=1)这样一来,看着就清爽多了。我们来检查一下啊:瓦力,瓦力,哆啦A梦,哆啦A梦,哆啦A梦,哆啦A梦……不对呀!最后这一张,walle.113.jpg,不应该判断成瓦力吗?打开看看。哦,难怪。另一个机器人也出现在图片中,圆头圆脑的,确实跟哆啦A梦有相似之处。要不,就这样了?微调那哪儿行?!我们做任务,要讲究精益求精啊。遇到错误不要紧,我们尝试改进模型。用的方法,叫做微调(fine-tuning)。我们刚刚,不过是移花接木,用了 resnet34 的身体,换上了一个我们自定义的头部层次,用来做哆啦A梦和瓦力的分辨。这个训练结果,其实已经很好了。但是既然锁定了“身体”部分的全部参数,只训练头部,依然会遇到判断失误。那我们自然想到的,就应该是连同“身体”,一起调整训练了。但是这谈何容易?你调整得动作轻微,那么效果不会明显;如果你调整过了劲儿,“身体”部分的预训练模型通过海量数据积累的参数经验,就会被破坏掉。两难啊,两难!好在,聪明的研究者提出了一个巧妙的解决之道。这非常符合我们不只一次提及的“第一性原理”,那就是返回到事情的本源,问出一句:谁说调整的速度,要全模型都一致?!深度卷积神经网络,是一个典型的层次模型。模型靠近输入的地方,捕获的是底层的特征。例如边缘形状等。模型靠近输出的地方,捕获的是高层特征,例如某种物体的形貌。对于底层特征,我们相信哆啦A梦、瓦力和原先训练的那些自然界事物,有很多相似之处,因此应该少调整。反之,原先模型用于捕获猫、狗、兔子的那些特征部分,我们是用不上的,因此越靠近输出位置的层次,我们就应该多调整。这种不同力度的调整,是通过学习速率(learning rate)来达成的。具体到我们的这种区分,专用名词叫做“歧视性学习速率”(discriminative learning rate)。你可能想放弃了,这么难!我不玩儿了!且慢,看看 fast.ai 怎么实现“歧视性学习速率”。learn.unfreeze()learn.fit_one_cycle(3, slice(1e-5,3e-4))对,只需在这里指定一下,底层和上层,选择什么不同的起始速率。搞定。没错,就是这么不讲道理地智能化。这次,训练了3个循环(cycle)。注意,虽然准确率没有变化(一直是100%,也不可能提升了),但是损失数值,不论是训练集,还是验证集上的,都在减小。这证明模型在努力地学东西。你可能会担心:这样会不会导致过拟合啊?看看就知道了,训练集上的损失数值,一直高于验证集,这就意味着,没有过拟合发生的征兆。好了,拿着这个微调优化过后的模型,我们再来试试测试集吧。首先我们强迫症似地看看测试集文件顺序有没有变化:data.test_dl.dl.dataset.ds.x既然没有变,我们就放心了。下面我们执行预测:preds,y = learn.get_preds(is_test=True)然后,观察结果:np.argmax(preds, axis=1)如你所见,这次全部判断正确。可见,我们的微调,是真实有用的。小结本文为你介绍了如何用 fast.ai 1.0 框架进行图像深度迁移学习。可以看到, fast.ai 不仅简洁、功能强大,而且足够智能化。所有可以帮用户做的事情,它全都替你代劳。作为研究者,你只需要关注“数据”、“模型结构”和“损失度量”这3个关键问题,以改进学习效果。我希望你不要满足于把代码跑下来。用你获得的300美金,换上自己的数据跑一跑,看看能否获得足够满意的结果。转自 https://mp.weixin.qq.com/s?__biz=MzIyODI1MzYyNA==&mid=2653540487&idx=1&sn=34704d1611631ebd3d421f5e831941c7&chksm=f389ba50c4fe33460875f65e6cdcc5339bc532290e0f686b2c8d4b2f9af5f38bb73082199f38&scene=21#wechat_redirect 
  • [热门活动] 【数字人专题直播有奖提问】DTSE Tech Talk 技术直播 NO.45:看直播提问题赢华为云定制U型按摩枕、华为云定制POLO衫等好礼!
    中奖结果公示感谢各位小伙伴参与本次活动,本次活动获奖名单如下:请各位获奖的伙伴在10月23日之前点击此处填写收货地址,如逾期未填写视为弃奖。再次感谢各位小伙伴参与本次活动,欢迎关注华为云DTSE Tech Talk 技术直播更多活动~直播简介【直播主题】华为云数字人赋能千行百业,共享AIGC新机遇【直播时间】2023年10月18日 16:30-18:00【直播专家】左雯 华为云媒体DTSE技术布道师【直播简介】数字人作为元宇宙中真人沉浸式体验的重要入口和AIGC的关键要素,伴随元宇宙和AIGC双轮产业进步,关注本期直播,告诉你数字人将如何带来千行百业的产业变革?直播链接:cid:link_1活动介绍【互动方式】直播前您可以在本帖留下您疑惑的问题,专家会在直播时为您解答。直播后您可以继续在本帖留言,与专家互动交流。我们会在全部活动结束后对参与互动的用户进行评选。【活动时间】即日起—2023年10月19日【奖励说明】评奖规则:活动1:直播期间在直播间提出与直播内容相关的问题,对专家评选为优质问题的开发者进行奖励。奖品:华为云定制U型按摩枕活动2:在本帖提出与直播内容相关的问题,由专家在所有互动贴中选出最优问题贴的开发者进行奖励。奖品:华为云定制POLO衫更多直播活动直播互动有礼:官网直播间发口令“华为云 DTSE”抽华为云定制短袖T恤、填写问卷抽华为云定制保温杯等好礼分享问卷有礼 :邀请5位朋友以上完成问卷即可获得华为云定制棒球帽。老观众专属福利:连续报名并观看DTT直播3期以上抽送华为云DTT定制T恤。【注意事项】1、所有参与活动的问题,如发现为复用他人内容,则取消获奖资格。2、为保证您顺利领取活动奖品,请您在活动公示奖项后2个工作日内私信提前填写奖品收货信息,如您没有填写,视为自动放弃奖励。3、活动奖项公示时间截止2023年10月20日,如未反馈邮寄信息视为弃奖。本次活动奖品将于奖项公示后30个工作日内统一发出,请您耐心等待。4、活动期间同类子活动每个ID(同一姓名/电话/收货地址)只能获奖一次,若重复则中奖资格顺延至下一位合格开发者,仅一次顺延。5、如活动奖品出现没有库存的情况,华为云工作人员将会替换等价值的奖品,获奖者不同意此规则视为放弃奖品。6、其他事宜请参考【华为云社区常规活动规则】。
  • [其他] 浅谈 生成式人工智能AIGC
    生成式人工智能AIGC(Artificial Intelligence Generated Content)是人工智能1.0时代进入2.0时代的重要标志。 GAN、CLIP、Transformer、Diffusion、预训练模型、多模态技术、生成算法等技术的累积融合,催生了AIGC的爆发。算法不断迭代创新、预训练模型引发AIGC技术能力质变,多模态推动AIGC内容多边形,使得AIGC具有更通用和更强的基础能力。 从计算智能、感知智能再到认知智能的进阶发展来看,AIGC已经为人类社会打开了认知智能的大门。通过单个大规模数据的学习训练,令AI具备了多个不同领域的知识,只需要对模型进行适当的调整修正,就能完成真实场景的任务。 AIGC对于人类社会、人工智能的意义是里程碑式的。短期来看AIGC改变了基础的生产力工具,中期来看会改变社会的生产关系,长期来看促使整个社会生产力发生质的突破,在这样的生产力工具、生产关系、生产力变革中,生产要素——数据价值被极度放大。 AIGC把数据要素提到时代核心资源的位置,在一定程度上加快了整个社会的数字化转型进程。生成式人工智能(Generative Artificial Intelligence)**1. 基本原理:生成式人工智能是指使用机器学习和深度学习技术,特别是生成对抗网络(GANs)和变分自动编码器(VAEs)等模型,来生成新的、具有一定创造性的内容。这些模型学习了真实世界数据的分布,然后可以生成与这些数据相似的新数据。生成对抗网络(GANs): GANs由一个生成器网络和一个判别器网络组成。生成器尝试生成看起来真实的数据,而判别器则尝试区分真实数据和生成数据。这个过程是一个对抗的过程,最终生成器生成的数据越来越逼真。变分自动编码器(VAEs): VAEs是一种用于学习数据分布的概率生成模型。它们通过学习输入数据的潜在变量表示来实现这一目标,这使得它们可以生成新的、与输入数据相似的样本。**2. 应用领域:生成式人工智能在多个领域都有广泛的应用:图像生成: 生成对抗网络被广泛用于生成逼真的图像。这种技术在图像合成、风格转换、图像修复等领域有着重要应用。文本生成: 自然语言处理领域的生成模型可以用于生成文本,包括文章、对话、故事等。音频生成: 类似的技术也可以用于生成逼真的音频,包括语音合成、音乐创作等应用。视频生成: 结合图像和音频生成技术,生成式人工智能也可以用于视频生成,包括视频合成、特效添加等。**3. 挑战与未来发展:逼真度与多样性: 生成模型在提高生成内容的逼真度和多样性方面面临挑战。逼真度指生成的内容与真实世界的相似度,多样性指生成内容的多样性和创造性。伦理和法律问题: 随着生成式人工智能技术的发展,社会将面临伦理和法律问题,包括内容的合法性、隐私问题等。增强学习和生成结合: 未来,生成式人工智能可能会与增强学习技术结合,实现更加智能和自主的内容生成。总的来说,生成式人工智能是一个非常活跃且具有挑战性的研究领域,它将持续推动着人工智能技术在内容创造领域的应用。如果"AIGC"在之后成为一个特定的产品或者标准,我建议您查阅最新的资料以获取详细信息。AIGC的主要特点:并行计算能力: AIGC通常拥有强大的并行计算能力,这对于深度学习中大规模矩阵运算等任务非常重要。特定硬件架构: 这些图形卡通常拥有专门为深度学习任务设计的硬件架构,例如NVIDIA的Tensor Cores,用于加速矩阵计算。高性能计算: AIGC通常具有高性能计算能力,能够在较短的时间内完成大量的计算任务,这对于大规模数据集和复杂模型的训练非常重要。深度学习框架的支持: 这些图形卡通常能够无缝集成到主流的深度学习框架中,如TensorFlow、PyTorch等,使得开发者可以方便地利用它们进行深度学习任务的开发。灵活性与定制性: 一些AIGC产品具有可编程性,可以根据特定任务进行定制,这使得它们可以适应各种不同的人工智能应用场景。节能和散热设计: 由于长时间高强度的计算会产生大量热量,AIGC通常具备节能和散热设计,以确保在高性能计算的同时保持稳定的工作温度。应用领域:AIGC广泛应用于各种人工智能应用,包括图像识别、语音识别、自然语言处理、推荐系统等。在这些领域,大规模的深度学习模型需要大量的计算资源,AIGC提供了一种高效的解决方案。
  • [参赛经验分享] 2023“域见杯”医检人工智能开发者大赛(赛题二:智能染色体核型分析)-赛队“道”TOP1方案分享
    大家好,我是来自参赛队伍的“道”,本次比赛很荣幸获得第一名,以下是我比赛过程的思路分享。数据分析本赛道提供的数据均经过脱敏,包含Question和Answer两个字段:数据两个字段连接后最大长度526,有90%数据长度不超过200,存在少量的异常值,数据长度呈现长尾分布。在训练过程使用分桶训练以及开启混合精度可以数倍提升训练速度。下图统计不同长度的词频,数据中存在很多高频词,其中有一个长度为11的文本出现了1943次,针对此数据特点,本方案提出了基于BPE的Mask策略,用于脱敏文本分词,也是和其他队伍的区别的点,具体在后文介绍。数据特点总结:初赛阶段对比了BART、CPT和Pegasus三者实验,Pegasus效果最好,BART效果最差,猜测因为Pegasus针对摘要任务设计,有从较强的从原文总结答案的能力,本次赛题数据要求从给出的核型分析信息生成诊断结果,也需要从原文总结答案,任务上比较相似。预训练策略训练使用的是预训练微调的训练模式,将两个字段的文本连接后再mask,然后送到模型预训练,通过预训练阶段对齐脱敏文本和开源权重,可以提升微调模型效果,加快微调收敛。mask方式采用了两种策略:        第一种是ngram的Mask方式,以0.1:0.2:0.3:0.4的概率mask文本长度为4、3、2、1的连续字符。        第二种基于BPE的mask,其先利用BPE算法生成词表,然后对句子分词,最后以词的粒度mask。相对ngram的好处首先是BPE生成的单词语义信息更完整,可以缓解单个完整语义被分成多块的问题。其次不会导致词表爆炸。预训练损失函数是:LM Loss和MLM Loss的结合,LM Loss的目的是将预训练任务和微调任务对齐,使模型拥有预测下一个token的能力,MLM Loss使得模型集中理解被Mask部分的内容。检索增强:另外微调阶段尝试了检索增强方法,但线上单模掉了很多,猜测是因为检索增强本身是解决知识长尾问题的,本赛题数据量较少,模型很容易记住所有知识,遗忘现象不明显,增加检索策略后反而会引入噪音,影响模型的稳定性。最后是通过对不同策略训练的模型集成效果,基于BPE的Mask是在比赛尾声做的尝试,直接拿来做集成了,在最高成绩的基础上又提升了1.5个百分点,没来得及测单模,这一块好好调一调应该还有上分空间,后续还可以尝试拿来作为微调阶段的词表:预训练和微调阶段所使用到的Trick有:线性Warmup、FGM、RDrop、Cos学习率衰减、标签平滑、权重平均,此外在微调阶段对解码器的输入注入噪音缓解曝光偏差问题,EMA我用了掉分(可能是用了权重平均的缘故)。线上单模最高成绩1.3187,基础权重使用的是燃灯的Pegasus Base模型,用Large反而还会掉点。致谢        最后感谢主办方为我们提供了这次的比赛机会,让我们能够在医疗领域贡献自己的力量,探索人工智能的无限可能性。
  • [参赛经验分享] 2023“域见杯”医检人工智能开发者大赛(赛题二:智能染色体核型分析)-赛队“智能网优”TOP2方案分享
    前言 大家好,我是“智能网优”赛队的队长,这次是单人参赛,有幸拿下取得第二成绩,在此做个简单的分享。 分享 首先是简单的数据分析,本赛题根据金域提供的核型分析异常结果及其对应的解释文本数据,生成含有辅助诊断要素且便于意思理解的结果解释文本信息。需要注意的本次比赛数据均为脱敏处理数据,训练数据共7527条。在基本数据分析阶段主要包含三个工作,分析输入输出文本长度分布将模型文本长度定在256;根据脱敏后文本分布确定可用tokken长度大于616;丢弃异常数据。模型选择方面,先对比t5/bart/gpt/cpt选择t5,对比t5-pegasus的small与base版本选择small版本(large的我没有硬件算力),从huggingface上选择多种t5系列模型预训练权值进行对比,最后选定t5-pegasus-small,mt0-small,Randeng-T5-Char-57M-Chinese等系列融合。赛后交流有部分队伍说比如t5-copy效果很好,但是我对比的时候只选择了有small版本的模型,比如t5-copy没有small版本就不对比了。训练策略主要使用了预训练,EMA,FGM效果比较好:最后总结下亮点与不足,赛后与大部分队伍进行方案交流只有本方案使用了small版本,训练和推理速度肯定是领先的,但是在可以采集更多训练样本情况下,small将明显弱于base。针对这个问题和主办方交流的得知,该领域7527条训练样本还真的是现实生产情况,那small版本还有其意义吧,不过相信未来领域数据应该会越来越多,small版本潜力有限。感想 本人本职工作为通信行业,也是在传统行业耕耘10年以后才开始从零基础学习编程和算法。这次参加金域比赛收获颇多,受邀参观了国内最先进的医检实验室初步了解医检行业的同时也交流了AI在医检行业的应用,从现场专家坦诚的交流来看AI在医检行业的落地及困难与通信行业有诸多共通之处,感觉未来工作有很多借鉴思路。与这次接待的金域文瑛等专家的交流,也能感觉到金域众多工程师的工匠精神以及赛事总结梁董发言的复合型人才发展理念。感谢广州市科学技术局、金域医学以及华为云提供的这次机会,也希望有一天能看到医疗AI普惠到千万家庭中去。 
  • [分享交流] 如何优雅地处理Java多线程编程中的共享资源问题?
    如何优雅地处理Java多线程编程中的共享资源问题,以确保线程安全和高性能?
  • [问题求助] AIGC和生成式AI有什么区别吗?
    AIGC和生成式AI有什么区别吗?
总条数:58 到第
上滑加载中