这次谈话从未发生过 上面看到的对话从未发生过。 它是使用 OpenAI 的 GPT-2 生成的,并且使用 完全来自我的旧帐户的Facebook Messenger对话(大约10年的对话对话)的数据集进行了培训。
GPT-2是一种 基于 变压器 的 大型 语言模型,具有15亿个参数,在800万个网页的数据集上进行训练。 GPT-2训练有一个简单的目标:根据某些文本中的所有先前单词预测下一个单词。 数据集的多样性导致这个简单的目标包含跨不同领域的许多任务的自然发生的演示。 GPT-2是GPT的直接放大,其参数超过10倍,并且训练的数据量超过10倍。
更好的语言模型及其含义 - 2019年2月14日
结果 这篇文章的目的是总结和指导完全基于您自己的信使数据建立自己的对话所需的过程。 我们会:
- 下载我们的Facebook消息数据
- 使用CloudFormation使用GPU实例设置AWS SageMaker
- 处理我们的Facebook数据
- 训练我们的定制版GPT-2
- 在我们的一些朋友之间生成Facebook对话
代码和广义工作流程在很大程度上取决于 u / Tenoke 通过微调OpenAI的GPT-2来 发布 模拟真人对话 的出色工作,该 数据来自Facebook Messenger 。 在撰写本文时,他的网站似乎已经关闭(随着流程),我强烈建议检查它是否确实恢复了! 消息数据 在加入之前,我们将首先下载我们的Facebook消息数据,因为它可能是最耗时的部分。 导航到您的Facebook帐户设置,然后单击 您的Facebook信息 > 下载您的信息 。 仅选择 消息 作为信息类型, 格式为JSON , 媒体质量低 。 我们将媒体质量设置得很低,因为我们目前没有任何需求。 单击 创建文件 生成数据的过程可能需要几分钟到几个小时。 要有耐心,并在没有它的情况下随意前进,让你的头围绕其余的设置。 一旦您有权下载它,您就可以从“ 可用文件” 下的“ 下载您的信息” 屏幕中 获取它 。 我们将数据存储在 AWS S3 存储桶中,以便从 AWS SageMaker 轻松访问 。 创建一个存储桶( 来自UI 或CLI),我们可以在本教程的其余部分使用 该存储桶 。我将使用一个名为 devopstar 。 aws s3 cp facebook.zip s3://devopstar/resources/fbmsg-analysis-gpt-2/facebook.zip 在你的存储桶中放置zip文件并不重要,只需记住你把它放在哪里以备日后使用。 AWS SageMaker Notebook 为了调整GPT-2模型,我们需要一些严肃的计算! 幸运的是,SageMaker使我们能够以 每小时约1.26美元 的成本访问相对便宜的GPU实例 。 注意 :以下操作将创建您的 ml.p2.xlarge 计算。 如上所述,此资源的成本固定为大约每小时1.26美元,但是如果您让该实例长时间运行,它将开始累加。 如果您没有一次完成工作,请务必移除(或关闭)实例。 我创建了一个小型CloudFormation模板,可用于设置SageMaker实例的基本权限。 要使用它,您需要通过运行以下命令来下载为本教程设置的存储库: git clone https://github.com/t04glovern/fbmsg-analysis-gpt-2.git SageMaker执行政策 从刚刚下拉的项目的根文件夹中运行以下命令。 确保将我的桶(devopstar)的引用更改为您自己的。 aws cloudformation create-stack \
--stack-name "fb-msg-gpt2-sagemaker-role" \
--template-body file://cloudformation/sagemaker_role.yaml \
--parameters ParameterKey=S3BucketName,ParameterValue=devopstar \
--capabilities CAPABILITY_IAM 成功创建角色后,检索ARN以供以后使用。 它看起来像 arn:aws:iam::XXXXXXXXXXXX:role/fb-msg-gpt2-sagemaker-role-ExecutionRole-PZL3SA3IZPSN 。 aws cloudformation describe-stacks --stack-name "fb-msg-gpt2-sagemaker-role" \
--query 'Stacks[0].Outputs[?OutputKey==`MLNotebookExecutionRole`].OutputValue' \
--output text SageMaker代码库 删除尽可能多的手动工作以部署此管道非常重要,并且在部署笔记本后引入大量开销的步骤之一是下拉 存储库 。 幸运的是,通过传入代码存储库,可以在笔记本启动期间包含此过程。 通过运行以下命令创建新的笔记本存储库: aws sagemaker create-code-repository \
--code-repository-name "t04glovern-gpt-2" \
--git-config '{"Branch":"master", "RepositoryUrl" : "https://github.com/t04glovern/fbmsg-analysis-gpt-2" }' SageMaker笔记本实例 现在一切准备就绪,我们可以创建一个新的笔记本实例,传递我们从前面的步骤中收集的几个参数。
- notebook-instance-name :您要为笔记本提供的名称
- instance-type :根据 定价 ,选择要启动的实例类型(使用GPU)
- role-arn :从我们使用CloudFormation创建执行角色的先前设置中检索
- default-code-repository :在上一步中创建的存储 库的 名称。
aws sagemaker create-notebook-instance \
--notebook-instance-name "fbmsg-gpt-2" \
--instance-type "ml.p2.xlarge" \
--role-arn "arn:aws:iam::XXXXXXXXXXXXX:role/fb-msg-gpt2-sagemaker-role-ExecutionRole-PZL3SA3IZPSN" \
--default-code-repository "t04glovern-gpt-2" 在 Amazon SageMaker控制台中 打开Notebook实例列表, 确认已正确创建新实例。 使用 JupyterLab 打开实例 当笔记本电脑在左侧打开时,您将看到 fbmsg-analysis-gpt-2 存储库 中的文件列表,该 存储库在设置过程中会自动为您下拉。 打开 messenger-analysis.ipynb 打开后,确认或选择首选内核为 conda_tensorflow_p36 。 检查笔记本中 是否 有设置 存储桶 和 data_key 的代码行 。 将值替换为我们上传 facebook.zip 文件 的上一步中生成的值 。
role = get_execution_role()
bucket='devopstar' # Change me
data_key = 'resources/fbmsg-analysis-gpt-2/facebook.zip' # Change me
s3 = boto3.resource('s3')
with open('facebook.zip', 'wb') as data:
s3.Bucket(bucket).download_fileobj(data_key, data) 最后单击 笔记本顶部 的 小Go箭头 (确保光标从最顶部的单元格开始)。 并继续执行每一行,包括 sh download_model.sh 117M 。 要确认结果,请检查左侧的文件浏览器,您应该注意到三个新文件/目录。 这些是:
- Facebook拉链文件
- 来自Facebook zip的解压缩消息目录
- 带有GPT-2模型的模型目录
调整GPT-2模型 环境现已设置好并可用于训练/调整GPT-2模型。 以下步骤将要求我们逐步使用笔记本顶部的Go箭头。 但是,我们将简要介绍每个块来描述正在发生的事情。 解析消息
files = []
for p, d, f in os.walk('messages/inbox'):
for file in f:
if file.endswith('message.json'):
files.append(f'{p}/{file}')
len(files) 通过浏览 消息/收件箱 目录, 将每个会话文件夹转换为列表 。 然后将一对辅助函数加载到内存中,其作用是帮助解析Facebook消息格式。 还会在(create_file,create_specific_file)中加载以下函数的两个版本。 这些函数中的每一个都可用于以稍微不同的方式解析文本语料库。
def create_file(files=files):
text_corpus = ''
banned_names = ()
for file in files:
with open(file, 'r') as f:
try:
msgs = json.load(f)['messages']
msgs.reverse()
except:
pass
else:
if not test_mostly_cyrilic(msgs) and not any(bn in file for bn in banned_names):
for msg in msgs:
try:
content = fix_encoding(msg['content'])
to_add = f"({msg['timestamp_ms']}) {msg['sender_name']}: {content}\n"
if not find_cyrilic(to_add):
text_corpus += to_add
except KeyError:
pass
print(file)
text_corpus += '\n\n'
with open('fb-cleaned.txt', 'w') as f:
f.write(text_corpus) 运行以下行将生成 fb-cleaning.txt 文件,其中包含消息文件夹中所有句子的大量列表。 NumPy编码 将清理后的数据编码为NumPy数据结构将有助于加快培训过程。 这是通过运行以下行来完成的 !PYTHONPATH=src ./encode.py --in-text fb-cleaned.txt --out-npz fb-cleaned.txt.npz 火车和样品 通过运行以下行开始训练调整后的模型 !PYTHONPATH=src ./train.py --dataset fb-cleaned.txt.npz --sample_every=250 --learning_rate=0.0001 --stop_after=251 训练过程将持续很长时间,但是每250个循环后我们将收到一个样本输出。 这个示例可以帮助我们了解模型在培训时的进展情况; 当我们对当前结果感到满意时,让我们选择停止。 第一个样本集可能会产生无意义的输出! 500个周期 给它一些时间,你会慢慢注意到它在改善。 重新运行训练有素的模型 如果您希望在完成培训后针对训练有素的模型运行模型,只需运行其余命令(如下所示)。 这将在 检查点中 复制 到 117M 模型文件夹,然后根据这些文件进行采样。 <span style="color:#444444"><code class="language-bash">mv checkpoint/run1/* models/117M/
!python3 src/generate_unconditional_samples.py --top_k 40 --temperature 0.9</code></span> SageMaker清理[重要] 完成笔记本电脑后,关闭它或 删除所有内容 非常重要, 这样您就不会支付每小时1.20美元的费用 。 笔记本实例清理 只需关闭并可选择从 SageMaker UI中 删除笔记本 。 或者,您可以运行以下aws-cli命令来删除笔记本 <span style="color:#444444"><code class="language-bash">aws sagemaker delete-notebook-instance \
--notebook-instance-name "fbmsg-gpt-2"</code></span> 代码存储库清理 (可选)使用 SageMaker UI 删除代码存储库 。 或者,您可以运行以下aws-cli命令来删除存储库 <span style="color:#444444"><code class="language-bash">aws sagemaker delete-code-repository \
--code-repository-name "t04glovern-gpt-2"</code></span> 执行角色清理 运行以下aws-cli命令以删除为SageMaker的执行角色创建的堆栈 <span style="color:#444444"><code class="language-bash">aws cloudformation delete-stack \
--stack-name "fb-msg-gpt2-sagemaker-role"</code></span> 出处技术牛论坛: https://www.js-new.com/thread-86-1-1.html |