NLP实战:对GPT-2进行微调以生成创意的域名

本文涉及的产品
.cn 域名,1个 12个月
NLP自然语言处理_基础版,每接口每天50万次
NLP自然语言处理_高级版,每接口累计50万次
简介: NLP实战:对GPT-2进行微调以生成创意的域名

介绍

从Majestic Millions的前100万个域名列表中取了大约100,000个网站之后,我对355M参数模型进行了微调。结果异常准确,同时又很有创意。看一下结果:

image.png

Namekrea AI生成的域名和元描述

如果有足够的训练数据,GPT-2就能理解上下文。为了训练它,我们需要大量数据。这可以通过抓取网站的元描述轻松完成。幸运的是,互联网上不乏网站:)

通过使用CSV文件读取每一行,可以微调GPT-2。在开始抓取之前,我们需要定义该算法可以理解的数据结构类型。为此,我采用了一种非常简单的方法,即为GPT-2的每个域提供1行文本并提供元描述。我们的训练数据中的一个条目将如下所示:

Create an account or log into Facebook. Connect with friends, family and other people you know. Share photos and videos, send messages and get updates. = @ = facebook.com

如您所见,我们首先输入给定上下文的元上下文,然后使用普通文本中不存在的定界符。您可以选择自然文本中通常不存在的任何内容。我选择了此定界符:-> = @ =

步骤一:抓取数据

如您所料,手动复制和粘贴网站的元上下文将花费大量时间。我们需要提出一种能够生成干净训练数据的抓取算法。

数据的清洁度很重要,因为大多数机器学习模型都依赖于质量。您的机器学习模型需要和您的训练数据一样好。因此:

在训练机器学习模型时,请切记:垃圾的进出!

image.png

那我所说的干净数据是什么意思呢?首先,GPT-2主要接受通过互联网收集的英语数据的培训。因此,我们需要确保以英语收集元上下文数据。其次,有很多带有元描述的网站,这些网站使用表情符号和不同的字符。我们不希望在最终收集的数据中有任何这些。

那我所说的干净数据是什么意思呢?首先,GPT-2主要接受通过互联网收集的英语数据。因此,我们需要确保以英语形式收集元上下文数据。其次,有很多带有元描述的网站使用表情符号和不同的字符。我们不希望在最终收集的数据中有任何这些字符。

我们设计一个抓取算法,它应该能够使用以下逻辑过滤来提取数据:

  1. 仅限英语
  2. 没有表情符号和类似的符号。只是单纯的英文文本。
  3. 仅收集一系列TLD(例如.com,.net,.org ..)的数据
  4. 速度快!我们需要进行多重处理,才能同时从多个域名中获取数据,如果速度不够,抓取数据将花费很多时间。


我们已经决定了主要需求,下面我们继续构建抓取程序!

Python有很多很棒的网站抓取的库,例如BeautifulSoup。它具有许多功能,可以立即开始抓取网站。我们将使用该库来获取域名,然后将其写入csv文件。

from bs4 import BeautifulSoup
import urllib3
import ssl
import pandas
from multiprocessing import Process
import tldextract
ssl._create_default_https_context = ssl._create_unverified_context
# Load data into pandas dataframe
df = pandas.read_csv('./data/majestic_million.csv')
# We will fetch and try to get the metadeffetch_meta(url):try:
        res = req.request('GET', str(url),headers=headers, timeout=1)
        soup = BeautifulSoup(res.data, 'html.parser')
        description = soup.find(attrs={'name': 'Description'})
    # If name description is big letters:if description == None:
            description = soup.find(attrs={'name': 'description'})
            if description == None:
                print('Context is empty, pass')
                meta_data = Noneelse:
                content = description['content']
                url_clean = tldextract.extract(url)
                suffix = url_clean.suffix
                domain = url_clean.domain
                # Try to clean up websites with RU, JP, CN, PL we are trying to get only english trainig data.if suffix in ['com','org','ai','me','app','io','ly','co']:
                    print(url)
                    print(url_clean)
                    print(content)
                    meta_data = (str(content) + ' = @ = ' + str(domain) + '.' + str(suffix) + '\n')
                # Domains with weird tld's are not in our priority. We would like to keep our training data as clean as possible.else:
                    print('Domain suffix is low priority ' + str(url))
                    meta_data = Nonereturn meta_data
    except Exception as e:
        print(e)

由于某些原因,Github Gist嵌入无法正常工作。所以请在namekrea的github仓库中查看源代码中的scraper.py

首先scraper.py从前100万个域名列表中读取域名,然后开始抓取数据。

注意:运行scraper.py后,您将最终获得来自5个不同线程的5个不同文件。因此,您需要将这些文件合并为1个,然后将其转换为csv文件,否则将无法进行微调。

scraper.py的.txt输出如下所示:

Create an account or log into Facebook. Connect with friends, family and other people you know. Share photos and videos, send messages and get updates. = @ = facebook.com
Search the world's information, including webpages, images, videos and more. Google has many special features to help you find exactly what you're looking for. = @ = google.com
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube. = @ = youtube.com

抓取数据完毕后,我们将继续执行下一步。

步骤二:微调

GPT-2模型非常大!中型预训练模型具有3.55亿个参数!使用普通的笔记本电脑CPU绝对不可能对这种架构进行微调。在我的设置中,我使用了2x1070Ti GPU,大约花了2个小时才能达到高质量的输出水平。

让我们看一下项目的总体架构,以了解如何训练该模型:

image.png


用于微调GPT-2以生成域名的工作流程的基本架构

因此,首先,我们将数据抓取并组合了文本文件到一个csv中,以使其可通过model_trainer.py脚本调用。

训练完成后,我们会将执行text_generator.py以随机生成域名。

步骤三:AI生成的域名

随机生成的域名很酷,但是如果我们不能向GPT-2发出提示,它就不是很有用。幸运的是,这可以通过前缀变量实现:

gpt2.generate(sess, model_name=model_name,
              #run_name=run_name, checkpoint_dir=checkpoint_dir,
              temperature=0.8, include_prefix=True, prefix='The best e-cigarette',
              truncate='<|endoftext|>', nsamples=10, batch_size=2, length=128
              )

结果非常好笑:

尼古丁含量超过99%的最佳电子烟。电子烟不只是一种电子烟。这是一个通讯APP。用作便携式蒸发器。或将其放在口袋中,并使用智能手机控制vape。Vaporsca是最好的电子烟比较网站。

vape还是通讯应用程序?我可以肯定地说这件事很有创意:D

GPT-2当然是令人惊讶的神经网络体系结构。没有GPT-2软件包,这个项目可能要花费更多的时间。

目录
相关文章
|
2月前
|
SQL 数据采集 自然语言处理
NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比
NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比
|
4天前
|
机器学习/深度学习 人工智能 PyTorch
使用PyTorch实现GPT-2直接偏好优化训练:DPO方法改进及其与监督微调的效果对比
本文将系统阐述DPO的工作原理、实现机制,以及其与传统RLHF和SFT方法的本质区别。
50 22
使用PyTorch实现GPT-2直接偏好优化训练:DPO方法改进及其与监督微调的效果对比
|
5月前
|
人工智能 自然语言处理 测试技术
RAG微调Llama 3竟超越GPT-4!英伟达GaTech华人学者提出RankRAG框架
【7月更文挑战第21天】英伟达与GaTech华人团队提出RankRAG框架,通过在Llama 3模型上微调,实现检索和生成的统一,超越GPT-4在知识密集型任务的表现。RankRAG利用指令微调让模型同时学习上下文排名和生成,减少了对独立检索模型的依赖。在多基准测试中胜过GPT-4,展示出提升LLMs性能的新潜力。尽管面临数据需求大和计算成本高的挑战,RankRAG为RAG任务优化提供了新途径。[[1](https://arxiv.org/abs/2407.02485)]
94 3
|
2月前
|
机器学习/深度学习 弹性计算 人工智能
大模型进阶微调篇(三):微调GPT2大模型实战
本文详细介绍了如何在普通个人电脑上微调GPT2大模型,包括环境配置、代码实现和技术要点。通过合理设置训练参数和优化代码,即使在无独显的设备上也能完成微调,耗时约14小时。文章还涵盖了GPT-2的简介、数据集处理、自定义进度条回调等内容,适合初学者参考。
465 6
|
2月前
|
自然语言处理 PyTorch 算法框架/工具
掌握从零到一的进阶攻略:让你轻松成为BERT微调高手——详解模型微调全流程,含实战代码与最佳实践秘籍,助你应对各类NLP挑战!
【10月更文挑战第1天】随着深度学习技术的进步,预训练模型已成为自然语言处理(NLP)领域的常见实践。这些模型通过大规模数据集训练获得通用语言表示,但需进一步微调以适应特定任务。本文通过简化流程和示例代码,介绍了如何选择预训练模型(如BERT),并利用Python库(如Transformers和PyTorch)进行微调。文章详细说明了数据准备、模型初始化、损失函数定义及训练循环等关键步骤,并提供了评估模型性能的方法。希望本文能帮助读者更好地理解和实现模型微调。
92 2
掌握从零到一的进阶攻略:让你轻松成为BERT微调高手——详解模型微调全流程,含实战代码与最佳实践秘籍,助你应对各类NLP挑战!
|
3月前
|
人工智能 自然语言处理 算法
魔搭上新啦! 智源千万级指令微调数据集Infinity-Instruct,Llama3.1仅微调即可接近GPT-4
智源研究院在今年6月推出了千万级指令微调数据集Infinity Instruct。Infinity Instruct在 Huggingface等平台发布后,快速到达了Huggingface Dataset的Trending第一
魔搭上新啦! 智源千万级指令微调数据集Infinity-Instruct,Llama3.1仅微调即可接近GPT-4
|
3月前
|
数据可视化 Swift
小钢炮进化,MiniCPM 3.0 开源!4B参数超GPT3.5性能,无限长文本,超强RAG三件套!模型推理、微调实战来啦!
旗舰端侧模型面壁「小钢炮」系列进化为全新 MiniCPM 3.0 基座模型,再次以小博大,以 4B 参数,带来超越 GPT-3.5 的性能。并且,量化后仅 2GB 内存,端侧友好。
小钢炮进化,MiniCPM 3.0 开源!4B参数超GPT3.5性能,无限长文本,超强RAG三件套!模型推理、微调实战来啦!
|
3月前
|
数据采集 自然语言处理 监控
大模型微调使GPT3成为了可以聊天发布指令的ChatGPT
正是通过微调大模型使得GPT3成为了可以聊天发布指令的ChatGPT。聊天大模型在通用大模型的基础上加一层微调就实现人人能用的大模型,使得通用大模型的能力被更多人使用和了解。
63 4
大模型微调使GPT3成为了可以聊天发布指令的ChatGPT
|
2月前
|
开发工具 git
LLM-03 大模型 15分钟 FineTuning 微调 GPT2 模型 finetuning GPT微调实战 仅需6GB显存 单卡微调 数据 10MB数据集微调
LLM-03 大模型 15分钟 FineTuning 微调 GPT2 模型 finetuning GPT微调实战 仅需6GB显存 单卡微调 数据 10MB数据集微调
79 0
|
4月前
|
存储 NoSQL 算法
实战算法篇:设计短域名系统,将长URL转化成短的URL.
小米介绍了一种实用的短域名系统设计,用于将冗长的URL转化为简短链接。短链接不仅节省空间,便于分享,还能支持数据分析。系统通过唯一编号结合62进制转换生成短标识,并利用如Redis这样的数据库存储长链接与短标识的映射关系。最后,通过302重定向实现用户访问时的长链接恢复。这一方案适用于多种场景,有效提升用户体验与数据追踪能力。
109 9