gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

分类归档人工智能

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  
  • 分类归档: "人工智能"
  • ( 页面4 )
提示词 3月 14,2023

如何用chatgpt写某个主题的小说提示词运用实例

要写某个主题的小说,给的提示词越少,chatgpt越随机生成,可以给一个大概故事概要,让chatgpt生成自己想要的内容。

例如:写一篇伴游的故事,给chatgpt或new bing以下提示:

写一篇18岁女大学生,父母离婚,在云南大理当伴游赚学费的故事。

以下是chatgpt生成的内容,还是一个不错的故事:

李婷婷是一名十八岁的大学新生,她的父母因为父亲赌博欠下巨债而离婚,她被迫自己负担学费和生活费。为了赚钱,她在网上注册了一个伴游账号,假装自己是一名有钱的白领女性,接受各种陪游邀请。

一天,她收到了一个来自云南大理的邀请,对方是一名叫林浩然的年轻男子,他说他是一名摄影师,想要找一个漂亮的女孩子陪他去拍摄大理的风景。李婷婷看了他的照片和资料,觉得他长得很帅气,而且报价很高,便答应了。

李婷婷飞到大理后,在机场见到了林浩然。他比照片上还要英俊迷人,穿着休闲时尚的衣服,手里拎着一个相机包。他微笑着向李婷婷打招呼,并送给她一束鲜花。

“你好,我是林浩然。”他说。

“你好,我是李婷婷。”李婷婷也笑着回应。

“你真漂亮。”林浩然赞美道。

“谢谢。”李婷婷心里暗暗高兴。

两人坐上出租车后,林浩然告诉李婷婷他已经为她订好了酒店,并且安排了三天的行程。第一天去苍山景区看三塔、寂照庵和多肉花海;第二天去洱海湿地公园和洱滨村看海鸥、芦苇和水鸭子;第三天去巍山古城看南诏文化和民族风情。

“听起来很不错啊。”李婷婷说。

“我想给你拍些美丽的照片。”林浩然说,“你愿意吗?”

“当然愿意。”李婷婷说,“只要你不介意我不太会摆姿势。”

“没关系,我会教你的。”林浩然说,“相信我。”

两人在大理度过了三天快乐而甜蜜的时光。林浩然用他的相机记录下了每一个美好的瞬间,并且把照片发给了李婷婷,两个人的爱情萌芽从此地开始。


小说家用chatgpt写小说
利用chatgpt扩展写小说提示词运用实例
如何使用 ChatGPT 写文章
使用 GPT3 帮助您写一篇读者会记住的博客

作者 east
提示词 3月 12,2023

利用chatgpt扩展写小说提示词运用实例

根据某段话来写一篇短篇小说,这段话是“双手抵在了电梯壁上。人再多,也没人能再碰撞到我了……他给我”。

在chatgpt或new bing中,输入以下话:

根据下面的内容,写一篇青春朦胧的爱情故事。“双手抵在了电梯壁上。人再多,也没人能再碰撞到我了......他给我”

以下是chatgpt生成的内容,看起来还是一篇质量不错的文章,真实惊讶chatgpt的文案写作能力。

双手抵在了电梯壁上。人再多,也没人能再碰撞到我了......他给我点了菜,全都是我喜欢吃的。他说他记得我每次和他一起吃饭时都会点什么。他说他想让我开心。

我们相识于一次聚会。那天晚上,他穿着一件白色衬衫,笑容灿烂。我们坐在同一张桌子上,聊得很投机。他告诉我他是一名律师,专门处理商业纠纷。他说他喜欢挑战和竞争。

我们交换了电话号码,并约定下次再见面。从那以后,我们就开始频繁地联系和约会。每次见面,他都会给我带来惊喜和温暖。有时候是一束鲜花,有时候是一张电影票,有时候是一本书。

我们之间没有明确的关系定义,也没有承诺或者保证。我们只是享受着彼此的陪伴和关怀。我们像恋人又像朋友,在这个快节奏的城市里寻找着属于自己的乐趣和安慰。

直到有一天,我收到了一个陌生女人的电话。她自称是他的妻子,并且质问我为什么要破坏她们的家庭。她说她已经知道了我们之间的事情,并且要求我立刻离开他。

原来,在这段感情朦胧的故事里,只有我一个人被蒙在鼓里。原来,在这个光鲜亮丽的男人身后,隐藏着一个不为人知的秘密。

我的心碎成千万片。
作者 east
chatgpt 3月 12,2023

如何使用chatgpt做自媒体赚钱及提问实例

ChatGPT是一款自然语言处理模型,可以生成自然流畅的语言,帮助你在自媒体领域提供更好的内容。

你可以利用ChatGPT做以下几件事:

利用ChatGPT生成文章或故事:你可以向ChatGPT提供主题、关键字或简要大纲,然后它将帮助你生成一个完整的、有意义的文章或故事。

利用ChatGPT回答读者提问:你可以使用ChatGPT回答读者在社交媒体或博客上留言或评论的问题,从而增强你的自媒体影响力。

利用ChatGPT生成标题和引言:标题和引言对于吸引读者很重要。 ChatGPT可以生成令人惊叹的标题和引言,以吸引读者的注意力。

搜素引擎会不会惩罚chatgpt生成的文章?

搜索引擎一般不会惩罚ChatGPT生成的文章,除非它们是抄袭或重复的内容。12

如果你想使用ChatGPT生成文章,你应该注意以下几点:

选择一个有趣和独特的主题,避免与其他人重复。

使用ChatGPT生成文章的大纲或初稿,然后根据自己的风格和需求进行修改和优化。

检查ChatGPT生成的内容是否符合事实、逻辑和语法,避免出现错误或不恰当的表达。

使用论文查重系统检测文章是否有抄袭或重复的部分,如果有,删除或改写它们。

注明文章中引用的来源和参考文献,尊重他人的知识产权。

​

假设你想写一篇介绍饺子机械设备的宣传文章,你可以这样操作:

在ChatGPT的输入框中输入以下内容:

我是一名饺子机械设备的销售人员,我想写一篇介绍我们公司产品的宣传文章,
要求如下:
– 文章标题:饺子机械设备,让你轻松做出美味饺子
– 文章长度:300字左右
– 文章内容:介绍我们公司的产品特点、优势和服务

点击“发送”按钮,等待ChatGPT生成文章。

查看ChatGPT生成的文章,并根据需要进行修改或补充。

以下是可能生成的文章:

饺子机械设备,让你轻松做出美味饺子

饺子是中国人最喜爱的食物之一,但是手工包饺子费时费力,而且效果不一定好。
如果你想快速方便地制作出美味可口的饺子,那么你就需要我们公司的饺子机械
设备。

我们公司专业生产各种规格和型号的饺子机械设备,可以满足不同客户的需求。
我们的产品有以下几个特点:

– 自动化程度高:只需将面团和馅料放入机器中,就可以自动完成和面、压皮、
包馅、成型等步骤,无需人工干预。
– 质量可靠:我们采用优质材料和先进技术制造我们的产品,保证了产品的耐用
性和稳定性。我们还通过了ISO9001质量管理体系认证和CE安全认证。
– 效率高速:我们的产品可以根据客户需求调节速度和产量,每小时可以制作出
数千个或数万个饺子。而且每个饺子都大小均匀、形状美观、口感好。
– 服务完善:我们提供免费上门安装、调试和培训服务,并提供一年内免费保修
和终身维护服务。如果您有任何问题或需求,我们都会及时响应并解决。

如果您对我们公司的产品感兴趣,请联系我们获取更多信息和报价。我们期待与
您合作,为您提供最优质的产品和服务。

作者 east
chatgpt 3月 12,2023

利用ChatGPT来学习数据库开发知识和解决疑问

ChatGPT在数据库开发方面有一些潜在的应用场景,例如:

  • 作为一个交互式的数据库查询工具,可以让用户用自然语言提出问题,并返回相应的SQL语句和查询结果。
  • 作为一个数据库设计助手,可以根据用户的需求和描述,生成合理的数据模型和表结构,并提供优化建议。
  • 作为一个数据库教学辅助,可以根据用户的水平和兴趣,提供适合的数据库知识、案例和练习,解决用户的疑问,并给出反馈和评价。

例如在数据库开发当中,对in子查询和left join的区别和应用场景不是很清楚,可以问ChatGPT。

问ChatGPT:什么场景用子查询in,什么场景用left join?

ChatGPT答:子查询in查出来的条数不一定和left join的左表条数一样多。这取决于子查询in的条件和left join的右表是否有重复或空值。如果您想统计两种方式的记录数,您可以使用count函数和group by语句。

问ChatGPT:请给我一个例子说明in和left join的区别。

ChatGPT答:好的,我来给您一个例子说明in和left join的区别。假设我们有两个表,一个是product,一个是sale,分别存储了产品的信息和销售记录。我们想要查询哪些产品没有被销售过。我们可以用子查询in来写这样的语句:

SELECT name, cost FROM product WHERE id NOT IN (SELECT product_id FROM sale);

这个语句会先从sale表中获取所有已经销售过的产品的id,然后从product表中筛选出不在这些id中的产品的名称和价格。

我们也可以用left join来写这样的语句:

SELECT name, cost FROM product LEFT JOIN sale ON product.id = sale.product_id WHERE sale.product_id IS NULL;

这个语句会先把product表和sale表按照id进行连接,然后从连接后的结果中筛选出那些没有对应的sale记录(即sale.product_id为空)的产品的名称和价格。

两种方式都可以得到相同的结果,但是left join可能更高效一些,因为它只需要扫描一次两个表,而子查询in需要扫描两次。

作者 east
深度学习 1月 30,2023

如何使用 ChatGPT 写文章

介绍

出于很多原因,写博客是有益的。 今天在本文中,我将向您展示如何使用来自 openAI 的新的高级 AI ChatGPt 撰写博客文章。 它是免费使用的,使用 ChatGPT 撰写文章所需的时间明显减少。 所以让我们深入探讨一下。

我们将逐步解决这个问题。 所以让我们开始吧

第 1 步:在 OpenAI 中创建一个帐户以访问该服务

创建一个帐户以访问 chatgpt。 它简单易行。 你可以注册使用谷歌。

第 2 步:访问 ChatGPT

转到左下角的 chatGPT 部分或标题中的 TRY 部分。 如果你成功了,你会看到这样的界面

第 3 步:搜索需求旺盛且竞争激烈的细分领域

如果您已经确定了要写的主题,那很好。 否则,您可以借助 vidIQ 等关键字搜索工具

在这里你可以找到高搜索量和低竞争的关键字,就像我找到的那样。 这个工具非常有用。

第4步:在chatgpt中搜索以提供有关关键字的博客标题

在那里。 chatgpt 已回复了 5 个关于您提供的关键字的博客标题。 选择其中一个来写一篇文章。

第 5 步:在 chatgpt 中搜索大纲

在搜索框中搜索“provide the outline for this title : Title”。

你可以看到回复。 它将恢复为 5-6 个轮廓。

第 6 步:搜索博客部分

搜索“提供此大纲的博客部分:大纲”

如您所见,它已通过博客部分作出回应。

现在将所有这些复制并粘贴到一个 .doc 文件中

对每个轮廓逐一重复第 5 步和第 6 步,然后按顺序粘贴到同一个 .doc 文件中。 一旦你复制并粘贴了所有的大纲和博客部分,你就可以进入下一步了

第七步:重写文章

转到 duplichecker 文章重写器

复制 ae 到目前为止复制和粘贴的 .doc 文件中的所有内容。 粘贴在中间的框中。 解决验证码并单击重写文章。

在右侧部分,您将获得一篇新改写的文章。 按下一步并通过单击复制按钮复制所有内容

粘贴回 .doc 文件以代替上一篇文章。

这是您新改写的文章。 这篇文章可能有一些拼写错误和字体问题。 修改它,我们很高兴。

第 8 步:GPT-2 输出检测器演示

您可以遵循的另一个步骤是您可以在此工具中检查是否存在抄袭。 您的文章有多少是真实的并且是从某处复制的。

第 9 步:发布

如果您已正确执行所有步骤,那么您可以继续在任何平台上发布您的文章。

作者 east
深度学习 1月 30,2023

ChatGPT 如何运行原理?AIGC 的演变过程

AIGC,即AI-generated Content,是一种利用人工智能进行内容创作的方式,被认为是继PGC(Professionally-generated Content)和UGC(User-generated Content)之后的一种新型内容创作方式。 AIGC在文字、图片、音视频、软件开发等多个领域发展迅速,近几年也有很多专注于AIGC的创作体验平台,用户输入一句话,让AI合成一张与之相关的图片 描述,或者更常见的是,输入一篇文章的描述,或者只是一个故事的开头,然后让 AI 为您完成文章。 它在任何需要写作或内容创建的地方都有广泛的应用,例如编写财务报告、开发代码或创建销售/营销材料。 它可以帮助人们更快地理解和分析复杂的信息,从而帮助他们做出更好的决策并产生巨大的价值。 由于技术的进步,这些提高生产力的愿景正在成为现实。

RNN Seq2Seq

长期以来,AIGC 一直以基于 RNN 的 Seq2Seq 模型为主,该模型由两个 RNN 网络组成,第一个 RNN 是编码器,第二个 RNN 是解码器。 RNN Seq2Seq 生成的文本质量通常较差,常伴有语法错误或语义不明,主要是错误传递和放大造成的。

RNN Seq2Seq

2017 年,Transformer 模型结构被引入,并因其能够捕获复杂的特征表示以及与 RNN 模型相比提高了训练效率而迅速受到欢迎。 由此开发出一系列预训练模型,成为AIGC的领先技术。 下一节将概述这些模型。 Transformer 模型特别有用,因为它可以并行处理序列,导致文本编写算法研究的重点转向 Transformer 模型。

                Transformer 模型体系

UniLM

UniLM,Unified Language Model的简称,是微软研究院于2019年开发的生成式BERT模型。与传统的Seq2Seq模型不同,它只利用了BERT,没有Decoder组件。 它结合了其他几种模型的训练方法,例如 L2R-LM (ELMo, GPT)、R2L-LM (ELMo)、BI-LM (BERT) 和 Seq2Seq-LM,因此称为“Unified”模型。

UniLM 模型架构(来源)

UniLM的预训练分为三个部分:Left-to-Right、Bidirectional和Seq-to-Seq。

这三种方式的区别仅在于Transformer的mask矩阵的变化:

对于Seq-to-Seq,前一句的Attention被masked用于后一句,使得前一句只能关注自己而不能关注后一句; following sentence中的每个单词对其后续单词的Attention被masked,只能关注其之前的单词;

对于Left-to-Right,Transformer的Attention只关注词本身和它前面的词,不关注它后面的词,所以mask矩阵是一个下三角矩阵;

对于 Bidirectional,Transformer 的 Attention 关注所有的词,包括 NSP 任务,就像原始的 BERT 一样。

在 UniLM 预训练过程中,这三种方法中的每一种都训练了 1/3 的时间。 与原始BERT相比,增加的单向LM预训练增强了文本表示能力,增加的Seq-to-Seq LM预训练也使得UniLM在文本生成/编写任务中表现良好。

UniLM的预训练分为三个部分:Left-to-Right、Bidirectional和Seq-to-Seq。

这三种方式的区别仅在于Transformer的mask矩阵的变化:

对于Seq-to-Seq,前一句的Attention被masked用于后一句,使得前一句只能关注自己而不能关注后一句; following sentence中的每个单词对其后续单词的Attention被masked,只能关注其之前的单词;

对于Left-to-Right,Transformer的Attention只关注词本身和它前面的词,不关注它后面的词,所以mask矩阵是一个下三角矩阵;

对于 Bidirectional,Transformer 的 Attention 关注所有的词,包括 NSP 任务,就像原始的 BERT 一样。

在 UniLM 预训练过程中,这三种方法中的每一种都训练了 1/3 的时间。 与原始BERT相比,增加的单向LM预训练增强了文本表示能力,增加的Seq-to-Seq LM预训练也使得UniLM在文本生成/编写任务中表现良好。

T5

T5,全称Text-to-Text Transfer Transformer,是谷歌在2020年提出的一种模型结构,其总体思路是使用Seq2Seq文本生成来解决所有下游任务:例如问答、摘要、分类、翻译、匹配、 continuation、denotational disambiguation 等。这种方法使所有任务能够共享相同的模型、相同的损失函数和相同的超参数。

T5的模型结构是基于多层Transformer的Encoder-Decoder结构。 T5 与其他模型的主要区别在于,GPT 家族是仅包含 Decoder 结构的自回归语言模型(AutoRegressive LM),而 BERT 是仅包含 Encoder 的自编码语言模型(AutoEncoder LM)。

文本到文本框架图。 每个任务都使用文本作为模型的输入,模型经过训练可以生成一些目标文本。 这些任务包括翻译(绿色)、语言可接受性(红色)、句子相似性(黄色)和文档摘要(蓝色)(来源)。

T5的预训练分为无监督和监督两部分。

无监督训练

无监督部分是类似于BERT的MLM方法,只是BERT是masking单个单词,而T5是masking一段连续的单词,即text span。 被屏蔽的文本范围仅由单个屏蔽字符替换,即屏蔽后文本的屏蔽序列长度也是未知的。 Decoder部分只输出mask的text span,其他词统一替换为集合<X>、<Y>、<Z>符号。 这样做有三个好处,一是增加了预训练的难度,显然预测未知长度的连续文本跨度是比预测单个词更难的任务,这也使得训练好的语言模型的文本表示能力更强 通用且更适应于对质量差的数据进行微调; 二是生成任务输出序列长度未知,T5的预训练很好 T5中使用的这种预训练任务也称为CTR(Corrupted Text Reconstruction)。

监督培训

监督部分使用了GLUE和SuperGLUE中包含的四大类任务:机器翻译、问答、总结和分类。 Fine-tune 的核心是将这些数据集和任务组合在一起作为一个任务,为了实现这一点,人们想到了为每个任务设计不同的前缀,与任务文本一起输入。 例如,对于翻译任务,翻译“That is good”。 从英语到德语,然后“将英语翻译成德语:很好。 目标:Das ist gut。 进入培训,“将英语翻译成德语:很好。 target:”,模型输出预测为“Das ist gut.”。 其中“将英语翻译成德语:”是为此翻译任务添加的前缀。

Supervised training

BART 代表双向和自回归变压器。 它是Facebook在2020年提出的一种模型结构,顾名思义,它是一种结合了双向编码结构和自回归解码结构的模型结构。 BART模型结构吸收了BERT中Bidirectional Encoder和GPT中Left-to-Right Decoder的特点,建立在标准的Seq2Seq Transformer模型之上,比BERT更适合文本生成场景。 同时,相对于GPT,它还拥有更多的双向上下文上下文信息。

                            BART模型体系

BART的预训练任务采用了还原文本中[噪声]的基本思想。 BART 使用以下特定 [噪音]:

Token Masking:和BERT一样,随机选择一个token替换为[MASK];

Token Deletion:随机删除一个token,模型必须确定丢失了哪个输入;

Text Infilling:与 T5 方法类似,屏蔽一个文本范围,每个文本范围都被一个 [MASK] 标签替换。

Sentence Permutation:将输入分成多个句子,以句点为分隔符,随机打乱;

Document Rotation:随机均匀地选择一个token,并以所选token作为新的开始围绕它旋转输入,该任务训练模型识别文档的开头。

可以看出,相比于BERT或者T5,BART在Encoder端尝试各种[noise],原因和目的也很简单:

BERT 中使用的简单替换导致 Encoder 输入携带了一些关于序列结构的信息(例如序列的长度),这些信息在文本生成任务中通常不会提供给模型。

BART 使用一组更多样化的 [噪声],目的是破坏有关序列结构的信息并防止模型“依赖”它。 对于各种输入[噪声],BART在Decoder端采用统一的重构形式,即输出正确的原句。 BART 使用的预训练任务也称为 FTR(全文重建)。

通用技术

GPT代表生成预训练。 它是一种迭代预训练模型,其主要成员家族包括第一代GPT、GPT-2、GPT-3、InstructGPT,以及目前流行的ChatGPT。 下面我们一一介绍。

GPT-1

第一代GPT是OpenAI于2018年提出的预训练语言模型,其诞生早于BERT,其核心思想是基于大量未标注数据进行生成式预训练学习,然后fine- 根据特定任务调整它。 由于专注于生成式预训练,GPT模型结构只使用了Transformer的Decoder部分,其标准结构包括Masked Multi-Head Attention和Encoder-Decoder Attention。 GPT的预训练任务是SLM(Standard Language Model),根据之前的上下文(window)来预测词的当前位置,所以需要保留Mask Multi-Head Attention来屏蔽后面的context 防止信息泄露的词。 因为没有使用Encoder,所以从GPT结构中去掉了Encoder-Decoder Attention。

GPT-2

第一代GPT的问题是fine-tuning下游任务缺乏可迁移性,Fine-Tuning层不共享。 为了解决这个问题,OpenAI 在 2019 年引入了 GPT 家族的新成员:GPT-2。

           GPT-2模型体系

GPT-2 的学习目标是使用无监督的预训练模型来完成有监督的任务。 与第一代GPT相比,GPT-2有以下变化:

模型结构去掉了Fine-Tuning层,所有任务都通过为语言模型设计合理的语句进行预训练,训练需要保证每个任务的损失函数收敛;

Layer Normalization的位置移到了每个sub-block的input,在最后一个Self-Attention之后也增加了一个Layer Normalization;

使用改进的初始化方法,其中残差层的权重在初始化时缩放为1/√N倍,其中N是残差层的数量;

Vocabulary scale 扩展到 50257,输入上下文的大小从 512 扩展到 1024,并使用更大的 batch_size 进行训练。 GPT-2的多任务训练使其具有更强的泛化能力,当然这也得益于其使用了高达40G的训练语料。 GPT-2最大的贡献是验证了用海量数据和大量参数训练的模型无需额外训练即可迁移到其他类别任务的能力。

GPT-3

2020年,OpenAI在GPT-2的基础上进一步推出了GPT-3。 GPT-3的做法更简单粗暴,模型整体结构和训练目标与GPT-2相似,但GPT-3将模型规模增加到1750亿个参数(比GPT-2大115倍),使用45TB 的训练数据。 由于参数数量惊人,GPT-3 可以使用零样本和少量样本进行学习和预测,而无需进行梯度更新。

InstructGPT

超大模型GPT-3确实在生成任务方面取得了前所未有的成绩,尤其是在零样本和少样本场景下,但是GPT-3面临了一个新的挑战:模型的输出并不总是有用的,它可能会输出 不真实、有害或反映负面情绪的结果。 这种现象是可以理解的,因为预训练的任务是语言模型,预训练的目标是在输入约束下最大化输出为自然语言的可能性,而不是“用户需要安全和有用”的要求。 为了解决这个问题,OpenAI在2022年发表了基于GPT-3的重要研究:InstructGPT,引入了人类反馈强化学习(RLHF)技术。

                                 Instruct GPT处理流程

InstructGPT在模型本身方面与GPT-3没有太大变化,主要变化在训练策略上。 总体思路是让标注者为调用示例提供演示答案,然后使用这些数据对模型进行微调,使其做出更合适的响应。 其训练步骤分为三步:

收集演示数据并使用监督训练训练模型。 对提示数据集的一部分进行采样以进行手动注释,并将其用于 Fine-Tuning GPT-3。

收集对比数据并训练奖励模型。 对一批数据进行采样并将其输入到在步骤 1 中微调的模型中。注释者根据其优点对模型的输出进行排序,并使用该数据来训练奖励模型。

使用强化学习来优化模型的输出。 利用第2步得到的奖励模型,通过强化学习优化第1步微调后的模型输出,使模型输出更合适的反应。

由此产生的 InstructGPT 在 following instructions 方面比 GPT-3 好很多,而且 InstructGPT 不太可能凭空编造事实,有害输出的产生有小幅下降趋势。

ChatGPT

ChatGPT 是 OpenAI 于 2022 年 11 月 30 日正式发布的最新研究成果,它采用与 InstructGPT 相同的方法,使用从人类反馈中强化学习(RLHF)来训练模型,在数据收集方法上有所改进(未具体披露)。

ChatGPT 实战(来源)

可以看出,ChatGPT的训练过程与InstructGPT的训练过程是一致的,不同的是InstructGPT是在GPT-3上微调,而ChatGPT是在GPT-3.5上微调(GPT-3.5是OpenAI训练的模型 Q4 2021 自动化代码编写能力强)。

纵观从第一代GPT到ChatGPT的发展历程,OpenAI已经证明,使用超大数据训练超大模型,得到的预训练语言模型足以应对自然语言理解和自然语言生成等各种下游任务,甚至 无需微调,仍然可以处理零/少量样本任务。 在输出的安全性和可控性方面,OpenAI 的答案是基于人力强化学习:雇佣了 40 名全职标注员工作了近 2 年(标注时间官方未透露,作者仅从粗略推断) GPT-3和ChatGPT间隔两年半,因为强化学习需要不断迭代)为模型的输出提供标注反馈,只有有了这些数据才能进行强化学习来指导模型的优化。 Transformer+超大数据+超大模型+海量人力+强化学习,造就了今天现象级的ChatGPT。

作者 east
深度学习 1月 28,2023

使用 GPT3 帮助您写一篇读者会记住的博客

写博客时时间紧迫或缺乏灵感? 别担心 – GPT3 游乐场即将让您的生活真正轻松。

我假设您知道 GPT3 是什么,并且您已经拥有可以访问 GPT3 Playground 的 OpenAI 帐户。 您可以在此处访问游乐场。

1.集思广益

对我来说,第三个想法通常是黄金点子。 因为我会在淋浴时有一个绝妙的想法……最终不可避免地会变得太宽泛,我在大约 1/3 的方式中失去了动力。我对这篇文章的第一个想法是如何构建一个应用程序,它使用 GPT3 但这太宽泛了(对很多人来说用处不大)

我的第二个想法是如何构建一个使用 GPT3 的写作应用程序……这会更有用,但我不想泄露我所有的秘密���

所以我决定如何写一个你的读者会记住的博客(在 GPT3 的帮助下)。 这适合所有喜欢 DIY 的人。

此提示将帮助您深入了解想法,以便:

帮助 GPT3 帮你写(更多)

更好地吸引目标读者(你应该有一个!)。

这是提示语。

Create a list of content ideas related to [topic]. Focus on the following keywords:

 [keywords]

 These content ideas are for a person who [insert persona here]

如果你有一个主题(你最初的想法)、关键词和你想与之交谈的特定人,你几乎可以保证得到一个惊人的主题列表,你可以写。

您可能会节省其中的 30%。

好消息 – 在 GPT3 playground 中产生这些想法需要 30 秒,而不是你自己的 30 分钟。

2.生成大纲

一旦我从 GPT3 得到一个粗略的轮廓,我几乎总是会(大量)编辑它。 编辑大纲比完整的帖子更容易。

这是我用来生成平均博客大纲的提示语:

Create a blog outline with the topic of “[title]” for a reader who [reader description].    //IF YOU HAVE KEYWORDS YOU WANT TO FOCUS ON ADD THIS: Use the following keywords if possible: [keywords]

Outline as markdown:

  #

我喜欢 markdown,因为它很容易阅读,而且 GPT3 已经知道什么是 markdown。

想好主题后,将其输入 GPT3 提示框以生成大纲。 这将是您撰写博文的基础,因此请根据需要对其进行审查和编辑。

3. 写草稿

“引导”GPT3 生成对您有价值的东西的最佳方法是欺骗它,让它认为它是根据您的提示提出来的,并且它只是在继续思考。 这就像一个真正梦幻般的天才(或蹒跚学步的孩子),具体取决于您问的是谁,但重要的是不要打破咒语。

这实际上是谷歌和其他公司试图检测内容是否由 AI 创建的方式。 但这是另一天的博客文章。

一旦我有了一个大纲,我几乎总是会跳过生成一个完整的博客并自己充实内容。 但是 – 如果你想得到一个像样的草稿,这里有一个提示:

Create a full and comprehensive blog post on the “[topic]” from the following outline for a reader with the persona who [persona description]. Do not include a table of contents.

Outline:

[outline]

1000 word [contentType] formatted as markdown:

 #

这应该输出一个 500-1000 字的博客。 如果没有,点击重试几次,直到你能让 AI 做你想让它做的事。 GPT3 不擅长数词,也不擅长说真话。 所以你一定要在点击发布之前检查你的博客的准确性(并不是说你会发布人工智能写的东西而不编辑它,对吧?!)

同样,我喜欢 markdown,因为它让我更容易阅读。 如果您不在乎,可以删除该部分。

4、编辑发表

如果您一直在关注,您就会在 GPT3 操场上看到一个博客的草稿。 在将其复制并粘贴到 Google 文档或 Word 之前,请帮自己一个忙,让 GPT3 对您的内容进行编辑传递(为您节省一些时间,听起来不像机器人)。 你可以使用这个示例提示,但你不能在这里出错(随意试验!)

You’re a writer for the NYT writing an amazing blog. What do we need? Let’s think step by step.

    First, we need a first draft.

    First draft:

    [your draft from the step above]

    Then, we can write our final draft and lets format it as Markdown.

    Final Draft:

    #

这应该使您的内容听起来不像机器人。 您还可以尝试一些很酷的事情,例如:

像我是 16 世纪的英国海盗一样重写此博客

写一个很好的论据来反对这个博客。 我真的很喜欢这个,因为人工智能在反对我的观点方面做得很好

以[著名作者]的风格重写此博客

我希望本指南能帮助您成为更好的作家并与世界分享更多有价值的内容。

作者 east
深度学习 1月 26,2023

GPT-3:这将如何影响 SEO 和内容营销?

随着时间的推移,人工智能的进步使机器变得越来越聪明,以至于它们学会了利用自己的训练和知识做出基于逻辑的决策,而几乎不需要人工干预。
目录
围绕 GPT-3 的议论
人类与 GPT-3 写作
GPT 3:它对 SEO 和内容营销的影响
关键要点
最后的话
常见问题
AI(人工智能)引人入胜且充满未来感,但埃隆·马斯克和比尔·盖茨等科技巨头以及斯蒂芬·霍金斯等科学家都表示他们对 AI 越来越谨慎。 不可否认,通过促进自动化,人工智能生成的内容在很多方面让日常生活变得更轻松,但在专业方面,工作自动化加剧了人们对被机器人取代的恐惧。

随着时间的推移,人工智能的进步使机器变得更加智能,以至于它们学会了利用自己的训练和知识做出基于逻辑的决策,而几乎不需要人工干预。 因此,它不仅对重复性的体力工作构成威胁,甚至对那些需要学习和决策的工作也构成威胁。

其中一项工作是内容营销人员或作家,他们投入逻辑思维、创造力和研究来为读者创造相关的内容(文本)。 但似乎,随着 Generative Pre-Trained Transformer Version 3 (GPT-3) 和其他自动化内容编写技术的出现,AI 可以以更快的速度生成类似人类的文本。 因此,内容营销人员了解 GPT-3 内容生成器将如何影响内容营销和搜索引擎优化 (SEO) 的未来至关重要。

围绕 GPT-3 的议论
如果您专业从事内容营销、数字营销机构、作家或 SEO 专家,那么您现在一定已经听说过 GPT-3 文案写作的嗡嗡声。 在讨论它对 SEO 和内容营销的影响之前,让我们从技术上了解一下 GPT-3 内容生成器。

GPT-3 由总部位于旧金山的人工智能研究实验室 OpenAI 推出,是一种可以通过处理示例进行学习的深度神经网络。 它可用作自然语言处理 (NLP) 系统的自回归语言模型。 简单来说,GPT-3 是一种基于 AI 的预训练语言模型,可以自动生成文本。 这不是同类中的第一个,因为我们已经有了微软的语言模型、Turing NLG、NVIDIA 的 Megatron 和 GPT-2(GPT-3 的直接前身)。

但为什么 GPT-3 SEO 会产生如此大的炒作? 这是因为 GPT-3 文案自动编写的内容质量非常高,很难将其与真实作者编写的文本区分开来。

人类与 GPT-3 写作对比
2020 年 8 月,VWO 对 GPT-3 生成的文本与人工编写的文本进行了 A/B 测试。 450 个品牌中共有 18 个入围品牌参与,并使用 GPT-3 API 生成各种语言的副本以供测试。 根据 VWO,参与者对 AI 编写的内容所提供的语言准确性非常满意。

在几秒钟内,GPT-3 内容生成器就可以像人类一样写出令人信服的内容。 它可以写任何主题、任何风格或任何语气。 以下是用户发布的 GPT-3 生成内容示例。

想象一下,一位作家为了获得某个学科或主题的知识而投入研究的时间; 与他竞争的是 GPT-3 SEO 编写的自动化内容。 它经过海量千兆字节的文本数据训练,实时拥有整个互联网的集体智慧。

与其他语言模型相比,GPT-3 内容生成器如此特别的原因在于其 1750 亿个参数的容量。

GPT-3 能够进行称为“元学习”的事情,这使其成为与任务无关的模型。 因此,它可以在不同平台上执行多项 NLP 任务,无需或只需极少的微调(额外训练)。

Gmail 完成你的电子邮件句子,这也是人工智能,但它是“狭义人工智能”,这意味着它只接受特定任务的训练,不会处理其他任何事情。 Siri、Alexa 和 Cortana 都由狭义人工智能提供支持。

但作为一个任务不可知论者,GPT-3 内容生成器可以展示通用智能的一些特性。 因此,即使没有对特定任务进行手动工程,它也可以在一系列自然语言处理任务中实现类似人类的效率和准确性,例如语言翻译、文本分类、情感提取、新闻文章生成、撰写博客、创建社交媒体帖子、 生成推文、释义、创建博客主题、问答系统和角色对话。 它甚至可以生成 HTML 代码。 GPT-3 的写作速度是人类作家的 500 倍,它对语法和拼写的掌握无可挑剔。 它产生出色的语法并具有广泛的词汇量。

GPT 3:它对 SEO 和内容营销的影响
GPT-3 内容生成器可以自动生成文本,但这对内容营销意味着什么? 这是否意味着从 SEO 的角度来看,内容营销专业人士将能够通过 GPT-3 自动化内容节省资金? 这是否意味着内容作者的工作将会过时? 那么搜索引擎算法呢? 他们会接受 GPT-3 内容,还是会被列为黑帽 SEO?

GPT-3 文案不能取代注重质量和读者参与度的内容,因为 GPT-3 也有局限性,即它不能像人脑一样思考或变得有创造力。 它通过消化庞大的语言内容数据库进行学习,然后利用其通过评估先前单词来预测下一个单词的能力来编写新的合成内容。 因此,它可能会创建与主题相关的内容,但有时它可能完全没有头脑。

GPT-3 可以淘汰低质量或低成本的内容工厂
GPT-3 内容可以胜过内容工厂出售的低成本和低质量的内容,这些内容可读性强,但无法提高社交媒体份额或吸引反向链接。 在创建低层文章时,GPT-3 内容会更可靠,因为它可以更好地包含来自可靠来源的特定主题信息。 GPT-3 内容生成器在未来将继续变得更加实惠,当这种情况发生时,它将迫使内容工厂倒闭。

GPT-3 擅长创建短期内容,是改写、主题优化、摘要等目的的智能工具。但对于长篇事实内容,它就迷失了方向。

GPT-3 内容会排名吗?
使用 GPT-3 SEO 工具,SEO 从业者可以通过投入更少的时间和金钱来访问大量的博客和文章。 但他们能否将这些自动化内容片段用于 SEO 实践,或者像谷歌这样的搜索引擎会更新他们的算法来检测 AI 生成的内容并对其进行惩罚?

由于其能够创建大量博客点,GPT-3 SEO 面临成为黑帽 SEO 策略的诱人工具的风险,这反过来可能导致前所未有的互联网垃圾邮件。

谷歌作为搜索引擎的成功在于其将用户与有用内容联系起来的能力,而且它不会在这一点上妥协。 谷歌声称,对于其算法,对内容进行排名的唯一标准是它为用户增加了多少实际价值。 不管是人工智能编写的还是人工编写的; 如果内容用陈旧和重复的信息向互联网发送垃圾邮件,它就不会获得排名。

GPT-3:内容营销人员如何从中受益?
注重质量的内容营销人员不会在这里用黑帽 SEO 或低质量文章向互联网发送垃圾邮件。 他们已经避免了此类内容,并专注于能够:

与读者联系
提高品牌知名度
增加网站和登陆页面的自然流量
促进潜在客户的产生和转化
在社交媒体上分享
吸引更多观众
GPT-3 文案可以帮助内容营销人员实现这些目标吗? GPT-3 内容生成器可能并不总是能够编写概念上原创的、高质量的、合乎逻辑的和更长的内容,至少在这个时间点上是这样。 但它的 AI 可以提供很多功能,可以通过增强作家的构思能力来增强作家的潜力。 例如,它可以通过为标题、产品描述、CTA 按钮等生成建议来支持作者的构思。

内容写作本身就是一个艰难的过程。 这不仅仅是写一些语法正确的句子。 专业作家需要弄清楚要写什么,如何使它更具吸引力,如何使其以解决方案为导向或流行等等。 但是相当多的时间花在了重新措辞、主题优化、编写 SEO 元描述、谷歌广告文案脚注、作者描述、产品描述等任务上。

GPT-3 SEO 工具可以自动化这些类型的写作,以方便作者,并让他或她有更多时间专注于需要人类创造力、勤奋、研究和准备的写作方面。

例如,Peppertype.ai 是一种基于 GPT-3 的内容创建工具,旨在使创作者的构思过程相对容易一些。 使用该平台,作家或内容营销人员可以在几秒钟内获得 AI 制作的简短内容片段,例如社交媒体帖子标题、推文、电子商务产品描述、SEO 元描述、Facebook 广告、博客创意、时事通讯、播客 和营销理念。 只需一次输入,它就可以建议 15 个备选博客创意或推文创意。 因此,作为 GPT-3 工具的 pepper.ai 对内容开发人员来说是一个很大的推动力,因为它可以帮助他们节省时间,做更有意义的工作,并提出更好的文章。

关键要点
GPT-3(Generative Pre-trained Transformer)是一种使用深度学习生成文本的语言模型。
GPT-3 内容生成器由 Elon Musk 的 Open AI 于 2020 年 6 月创建。
Peppertype.ai 等许多工具都使用 GPT-3 SEO 集成功能来生成内容。
GPT-3 内容生成器可以在不同平台上执行多个 NLP 任务,无需或只需极少的微调(额外训练)。
GPT-3 内容生成器可以胜过低质量机构生成的低质量、关键字填充的内容。
GPT-3 文案写作也是可能的,因为它生成的文本几乎与人类编写的文本相似。 它使用培训分析,因此可以提供有关用户的信息以生成内容。
GPT-3 内容生成器或任何 AI 生成的内容最适合创建小标题、CTA、标题等。 GPT-3 还不能用来创建高质量的长篇内容。
GPT-3 内容或任何人工智能生成的内容无法与人类书面内容竞争,因为有时它没有意义。
GPT-3 将为 SEO 和数字营销人员提供一个新的搜索引擎市场,具有强大的 NLP。
Google 根据内容的相关性对内容进行排名。 因此,由 GPT-3 SEO 串在一起的一堆词不会像有意义的内容那样排名。
GPT-3 内容生成器将改变未来数字营销的面貌。
GPT-3 文案写作不会完全取代人类作家。 这会帮助他们。

最后的话
GPT-3 内容生成器是在推出其前身 GPT-2 一年后推出的。 仅在一年内,其制造商就将其容量从 15 亿个参数更新为高达 1750 亿个参数。 这就是 GPT 语言模型快速发展的方式。

未来,这些模型将变得更加复杂,并将开发出更像人类的 NLP 能力。 随着演变的每个阶段,它将继续影响内容营销和实践它的人。 保持领先地位的唯一方法是根据 GPT 和其他此类技术带来的变化进行调整和发展。 如果内容营销人员学习如何释放其潜力,该工具可以成为对内容营销人员的强大、增强的支持。

常见问题

谁可以使用 GPT-3?
Elon Musk 的 Open AI 于 2020 年 6 月发布了 GPT-3 内容生成器。它已经发布了有限的 beta 容量。 开发人员在候补名单上注册以使用其功能。 世界各地的许多开发人员已经认识到 GPT-3 文案的潜力,候补名单已被淘汰。 Open AI 于 2021 年 11 月宣布将立即提供给开发者使用。 但是,有一些条件。 只有某些国家可以使用它。 来自古巴、伊朗和俄罗斯的开发人员将无法使用这种完全集成的 GPT-3 SEO 的功能。

GPT-3有什么用?
GPT-3 内容生成器,顾名思义,用于生成逼真的自动化内容,就像真人制作的那样。 诚然,创造力无法喂给机器。 但是,通过用户培训分析,GPT-3 SEO 结合了搜索引擎优化。 有关目标受众的信息被输入其中,以生成近乎完美的副本。 它已经产生了文章、诗歌、新闻报道、故事、对话等等。

训练GPT-3需要多长时间?
大型机器学习模型,如训练 GPT-3 内容生成器所需的模型,需要巨大的计算能力(数百 exaflops)并减少内存占用。 这些模型包含大型嵌入表。 单个 GPU 是不够的。 如果他们的任务是运行像 BERT 或 GPT-3 这样的数十亿参数语言模型,它就会崩溃。 模型并行技术用于跨多个 GPU 拆分参数。 然而,它们非常昂贵、难以使用且难以扩展。 使用 8 个 V100 GPU 训练 1750 亿个参数的 GPT-3 内容生成器需要 36 年。

GPT-3训练了哪些数据?
GPT-3 SEO 拥有 1750 亿个参数,是最大的内容生成器语言学习模型。 它使用来自不同数据集的 45TB 文本数据进行训练。 模型本身没有信息。 它不是为存储事实而设计的。 GPT-3 内容生成器的唯一目的是预测下一个单词或句子序列。

GPT-2 和 GPT-3 有什么区别?
GPT-2 内容生成器无法生成音乐和广泛的故事。 GPT-3 可能是迄今为止最大的语言学习模型。 GPT-3 SEO 非常擅长生成讲故事的内容。 它还可以总结文本、翻译语言、生成计算机代码、撰写论文、回答问题等等。 但是,GPT-3 只擅长预测下一个句子序列。 它不能存储信息。

作者 east
Keras 4月 15,2022

如何在 Keras 中使用词嵌入层进行深度学习

词嵌入提供了词及其相对含义的密集表示。

它们是对更简单的词袋模型表示中使用的稀疏表示的改进。

词嵌入可以从文本数据中学习并在项目之间重用。它们也可以作为在文本数据上拟合神经网络的一部分来学习。

在本教程中,您将了解如何使用 Keras 在 Python 中使用词嵌入进行深度学习。

完成本教程后,您将了解:

关于词嵌入以及 Keras 通过嵌入层支持词嵌入。
如何在拟合神经网络的同时学习词嵌入。
如何在神经网络中使用预训练的词嵌入。
从我的新书《自然语言处理的深度学习》开始您的项目,包括分步教程和所有示例的 Python 源代码文件。

让我们开始吧。

2018 年 2 月更新:修复了由于底层 API 更改而导致的错误。
2019 年 10 月更新:针对 Keras 2.3 和 TensorFlow 2.0 进行了更新。

教程概述
本教程分为 3 个部分; 他们是:

词嵌入
Keras 嵌入层
学习嵌入的例子
使用预训练手套嵌入的示例

1.词嵌入
词嵌入是一类使用密集向量表示来表示词和文档的方法。

这是对传统的词袋模型编码方案的改进,在传统的词袋模型编码方案中,使用大的稀疏向量来表示每个单词或对向量中的每个单词进行评分以表示整个词汇表。这些表示是稀疏的,因为词汇量很大,并且给定的单词或文档将由一个主要由零值组成的大向量表示。

相反,在嵌入中,单词由密集向量表示,其中向量表示单词在连续向量空间中的投影。

向量空间中单词的位置是从文本中学习的,并且基于使用该单词时围绕该单词的单词。

单词在学习向量空间中的位置称为它的嵌入。

从文本中学习词嵌入的两个流行示例包括:

Word2Vec。
GloVe。
除了这些精心设计的方法之外,还可以将词嵌入作为深度学习模型的一部分进行学习。这可能是一种较慢的方法,但会根据特定的训练数据集定制模型。

2、Keras嵌入层
Keras 提供了一个嵌入层,可用于文本数据上的神经网络。

它要求对输入数据进行整数编码,以便每个单词都由一个唯一的整数表示。这个数据准备步骤可以使用 Keras 提供的 Tokenizer API 来执行。

Embedding 层使用随机权重初始化,并将学习训练数据集中所有单词的嵌入。

它是一个灵活的层,可以以多种方式使用,例如:

它可以单独用来学习一个词嵌入,以后可以保存并在另一个模型中使用。
它可以用作深度学习模型的一部分,其中嵌入与模型本身一起学习。
它可用于加载预训练的词嵌入模型,一种迁移学习。
Embedding 层被定义为网络的第一个隐藏层。它必须指定 3 个参数:

它必须指定 3 个参数:

input_dim:这是文本数据中词汇的大小。例如,如果您的数据被整数编码为 0-10 之间的值,那么词汇表的大小将为 11 个单词。
output_dim:这是嵌入单词的向量空间的大小。它为每个单词定义了该层的输出向量的大小。例如,它可以是 32 或 100 甚至更大。为您的问题测试不同的值。
input_length:这是输入序列的长度,就像您为 Keras 模型的任何输入层定义的一样。例如,如果您的所有输入文档都包含 1000 个单词,那么这将是 1000。
例如,下面我们定义了一个包含 200 个词汇表的 Embedding 层(例如,从 0 到 199 的整数编码词,包括 0 到 199),一个 32 维的向量空间,其中将嵌入词,输入文档每个有 50 个词。


e = Embedding(200, 32, input_length=50)

Embedding 层具有学习的权重。 如果您将模型保存到文件中,这将包括嵌入层的权重。

Embedding 层的输出是一个 2D 向量,对于输入的单词序列(输入文档)中的每个单词都有一个嵌入。

如果您希望将 Dense 层直接连接到 Embedding 层,则必须首先使用 Flatten 层将 2D 输出矩阵展平为 1D 矢量。

现在,让我们看看如何在实践中使用嵌入层。

3、学习嵌入的例子
在本节中,我们将研究如何在将神经网络拟合到文本分类问题时学习词嵌入。

我们将定义一个小问题,我们有 10 个文本文档,每个文档都有一个关于学生提交的作品的评论。 每个文本文档被分类为正“1”或负“0”。 这是一个简单的情感分析问题。

首先,我们将定义文档及其类标签。

# define documents
docs = ['Well done!',
		'Good work',
		'Great effort',
		'nice work',
		'Excellent!',
		'Weak',
		'Poor effort!',
		'not good',
		'poor work',
		'Could have done better.']
# define class labels
labels = array([1,1,1,1,1,0,0,0,0,0])

接下来,我们可以对每个文档进行整数编码。 这意味着作为输入,嵌入层将具有整数序列。 我们可以尝试其他更复杂的词模型编码包,如计数或 TF-IDF。

Keras 提供了 one_hot() 函数,该函数将每个单词的散列创建为有效的整数编码。 我们将估计词汇量为 50,这比减少散列函数冲突概率所需的要大得多。

# integer encode the documents
vocab_size = 50
encoded_docs = [one_hot(d, vocab_size) for d in docs]
print(encoded_docs)

序列具有不同的长度,Keras 更喜欢对输入进行矢量化,并且所有输入都具有相同的长度。 我们将填充所有输入序列的长度为 4。同样,我们可以使用内置的 Keras 函数来完成此操作,在本例中为 pad_sequences() 函数。

# pad documents to a max length of 4 words
max_length = 4
padded_docs = pad_sequences(encoded_docs, maxlen=max_length, padding='post')
print(padded_docs)

我们现在准备将嵌入层定义为神经网络模型的一部分。

Embedding 的词汇量为 50,输入长度为 4。我们将选择一个 8 维的小嵌入空间。

该模型是一个简单的二元分类模型。 重要的是,嵌入层的输出将是 4 个 8 维向量,每个词一个。 我们将其展平为一个 32 元素的向量,以传递给 Dense 输出层。

# define the model
model = Sequential()
model.add(Embedding(vocab_size, 8, input_length=max_length))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
# compile the model
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# summarize the model
print(model.summary())

最后,我们可以拟合和评估分类模型。

# fit the model
model.fit(padded_docs, labels, epochs=50, verbose=0)
# evaluate the model
loss, accuracy = model.evaluate(padded_docs, labels, verbose=0)
print('Accuracy: %f' % (accuracy*100))

下面提供了完整的代码清单。

from numpy import array
from keras.preprocessing.text import one_hot
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers.embeddings import Embedding
# define documents
docs = ['Well done!',
		'Good work',
		'Great effort',
		'nice work',
		'Excellent!',
		'Weak',
		'Poor effort!',
		'not good',
		'poor work',
		'Could have done better.']
# define class labels
labels = array([1,1,1,1,1,0,0,0,0,0])
# integer encode the documents
vocab_size = 50
encoded_docs = [one_hot(d, vocab_size) for d in docs]
print(encoded_docs)
# pad documents to a max length of 4 words
max_length = 4
padded_docs = pad_sequences(encoded_docs, maxlen=max_length, padding='post')
print(padded_docs)
# define the model
model = Sequential()
model.add(Embedding(vocab_size, 8, input_length=max_length))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
# compile the model
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# summarize the model
print(model.summary())
# fit the model
model.fit(padded_docs, labels, epochs=50, verbose=0)
# evaluate the model
loss, accuracy = model.evaluate(padded_docs, labels, verbose=0)
print('Accuracy: %f' % (accuracy*100))

运行示例首先打印整数编码的文档。

 
[[6, 16], [42, 24], [2, 17], [42, 24], [18], [17], [22, 17], [27, 42], [22, 24], [49, 46, 16, 34]]

然后打印每个文档的填充版本,使它们都具有统一的长度。

 
[[ 6 16  0  0]
[42 24  0  0]
[ 2 17  0  0]
[42 24  0  0]
[18  0  0  0]
[17  0  0  0]
[22 17  0  0]
[27 42  0  0]
[22 24  0  0]
[49 46 16 34]]

定义网络后,将打印层的摘要。 我们可以看到,正如预期的那样,Embedding 层的输出是一个 4×8 矩阵,它被 Flatten 层压缩为一个 32 元素的向量。

 
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
embedding_1 (Embedding)      (None, 4, 8)              400
_________________________________________________________________
flatten_1 (Flatten)          (None, 32)                0
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 33
=================================================================
Total params: 433
Trainable params: 433
Non-trainable params: 0
_________________________________________________________________

注意:您的结果可能会因算法或评估过程的随机性或数值精度的差异而有所不同。考虑运行该示例几次并比较平均结果。

最后,打印出训练模型的准确率,表明它完美地学习了训练数据集(这并不奇怪)。

精度:100.000000


您可以将学习到的权重从嵌入层保存到文件中,以供以后在其他模型中使用。

您通常也可以使用此模型对测试数据集中具有相同类型词汇的其他文档进行分类。

接下来,让我们看看在 Keras 中加载预训练的词嵌入。

4、使用预训练手套嵌入的示例
Keras Embedding 层也可以使用在其他地方学习的词嵌入。

在自然语言处理领域,学习、保存和免费提供词嵌入是很常见的。

例如,GloVe 方法背后的研究人员在他们的网站上提供了一套预训练的词嵌入,并在公共领域许可下发布。看:

GloVe:单词表示的全局向量
嵌入的最小包为 822Mb,称为“glove.6B.zip”。它在 10 亿个标记(单词)的数据集上进行了训练,词汇量为 40 万个单词。有几种不同的嵌入向量大小,包括 50、100、200 和 300 维。

您可以下载此嵌入集合,我们可以使用来自训练数据集中单词的预训练嵌入的权重为 Keras 嵌入层播种。

这个例子的灵感来自 Keras 项目中的一个例子:pretrained_word_embeddings.py。

下载解压后会看到几个文件,其中一个是“glove.6B.100d.txt”,里面包含了一个100维版本的embedding。

如果您查看文件内部,您将在每行看到一个标记(单词),然后是权重(100 个数字)。例如,下面是嵌入 ASCII 文本文件的第一行,显示了“the”的嵌入。

 
the -0.038194 -0.24487 0.72812 -0.39961 0.083172 0.043953 -0.39141 0.3344 -0.57545 0.087459 0.28787 -0.06731 0.30906 -0.26384 -0.13231 -0.20757 0.33395 -0.33848 -0.31743 -0.48336 0.1464 -0.37304 0.34577 0.052041 0.44946 -0.46971 0.02628 -0.54155 -0.15518 -0.14107 -0.039722 0.28277 0.14393 0.23464 -0.31021 0.086173 0.20397 0.52624 0.17164 -0.082378 -0.71787 -0.41531 0.20335 -0.12763 0.41367 0.55187 0.57908 -0.33477 -0.36559 -0.54857 -0.062892 0.26584 0.30205 0.99775 -0.80481 -3.0243 0.01254 -0.36942 2.2167 0.72201 -0.24978 0.92136 0.034514 0.46745 1.1079 -0.19358 -0.074575 0.23353 -0.052062 -0.22044 0.057162 -0.15806 -0.30798 -0.41625 0.37972 0.15006 -0.53212 -0.2055 -1.2526 0.071624 0.70565 0.49744 -0.42063 0.26148 -1.538 -0.30223 -0.073438 -0.28312 0.37104 -0.25217 0.016215 -0.017099 -0.38984 0.87424 -0.72569 -0.51058 -0.52028 -0.1459 0.8278 0.27062

与上一节一样,第一步是定义示例,将它们编码为整数,然后将序列填充为相同的长度。

在这种情况下,我们需要能够将单词映射到整数以及将整数映射到单词。

Keras 提供了一个适合训练数据的 Tokenizer 类,可以通过调用 Tokenizer 类的 texts_to_sequences() 方法将文本一致地转换为序列,并提供对 word_index 属性中单词到整数的字典映射的访问。

# define documents
docs = ['Well done!',
		'Good work',
		'Great effort',
		'nice work',
		'Excellent!',
		'Weak',
		'Poor effort!',
		'not good',
		'poor work',
		'Could have done better.']
# define class labels
labels = array([1,1,1,1,1,0,0,0,0,0])
# prepare tokenizer
t = Tokenizer()
t.fit_on_texts(docs)
vocab_size = len(t.word_index) + 1
# integer encode the documents
encoded_docs = t.texts_to_sequences(docs)
print(encoded_docs)
# pad documents to a max length of 4 words
max_length = 4
padded_docs = pad_sequences(encoded_docs, maxlen=max_length, padding='post')
print(padded_docs)

接下来,我们需要将整个 GloVe 词嵌入文件加载到内存中,作为词到嵌入数组的字典。

# load the whole embedding into memory
embeddings_index = dict()
f = open('glove.6B.100d.txt')
for line in f:
	values = line.split()
	word = values[0]
	coefs = asarray(values[1:], dtype='float32')
	embeddings_index[word] = coefs
f.close()
print('Loaded %s word vectors.' % len(embeddings_index))

这很慢。 过滤训练数据中唯一单词的嵌入可能会更好。

接下来,我们需要为训练数据集中的每个单词创建一个嵌入矩阵。 我们可以通过枚举 Tokenizer.word_index 中的所有唯一词并从加载的 GloVe 嵌入中定位嵌入权重向量来做到这一点。

结果是一个权重矩阵,仅适用于我们将在训练期间看到的单词。

# create a weight matrix for words in training docs
embedding_matrix = zeros((vocab_size, 100))
for word, i in t.word_index.items():
	embedding_vector = embeddings_index.get(word)
	if embedding_vector is not None:
		embedding_matrix[i] = embedding_vector

现在我们可以像以前一样定义、拟合和评估模型了。

关键区别在于嵌入层可以使用 GloVe 词嵌入权重作为种子。 我们选择了 100 维的版本,因此 Embedding 层必须定义 output_dim 设置为 100。最后,我们不想更新该模型中的学习词权重,因此我们将模型的 trainable 属性设置为 False .

e = Embedding(vocab_size, 100, weights=[embedding_matrix], input_length=4, trainable=False)

下面列出了完整的代码示例。

from numpy import array
from numpy import asarray
from numpy import zeros
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers import Embedding
# define documents
docs = ['Well done!',
		'Good work',
		'Great effort',
		'nice work',
		'Excellent!',
		'Weak',
		'Poor effort!',
		'not good',
		'poor work',
		'Could have done better.']
# define class labels
labels = array([1,1,1,1,1,0,0,0,0,0])
# prepare tokenizer
t = Tokenizer()
t.fit_on_texts(docs)
vocab_size = len(t.word_index) + 1
# integer encode the documents
encoded_docs = t.texts_to_sequences(docs)
print(encoded_docs)
# pad documents to a max length of 4 words
max_length = 4
padded_docs = pad_sequences(encoded_docs, maxlen=max_length, padding='post')
print(padded_docs)
# load the whole embedding into memory
embeddings_index = dict()
f = open('../glove_data/glove.6B/glove.6B.100d.txt')
for line in f:
	values = line.split()
	word = values[0]
	coefs = asarray(values[1:], dtype='float32')
	embeddings_index[word] = coefs
f.close()
print('Loaded %s word vectors.' % len(embeddings_index))
# create a weight matrix for words in training docs
embedding_matrix = zeros((vocab_size, 100))
for word, i in t.word_index.items():
	embedding_vector = embeddings_index.get(word)
	if embedding_vector is not None:
		embedding_matrix[i] = embedding_vector
# define model
model = Sequential()
e = Embedding(vocab_size, 100, weights=[embedding_matrix], input_length=4, trainable=False)
model.add(e)
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
# compile the model
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# summarize the model
print(model.summary())
# fit the model
model.fit(padded_docs, labels, epochs=50, verbose=0)
# evaluate the model
loss, accuracy = model.evaluate(padded_docs, labels, verbose=0)
print('Accuracy: %f' % (accuracy*100))

注意:您的结果可能会因算法或评估过程的随机性或数值精度的差异而有所不同。 考虑运行该示例几次并比较平均结果。

运行该示例可能需要更长的时间,但随后证明它同样能够解决这个简单的问题。

[[6, 2], [3, 1], [7, 4], [8, 1], [9], [10], [5, 4], [11, 3], [5, 1], [12, 13, 2, 14]]
 
[[ 6  2  0  0]
 [ 3  1  0  0]
 [ 7  4  0  0]
 [ 8  1  0  0]
 [ 9  0  0  0]
 [10  0  0  0]
 [ 5  4  0  0]
 [11  3  0  0]
 [ 5  1  0  0]
 [12 13  2 14]]
 
Loaded 400000 word vectors.
 
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
embedding_1 (Embedding)      (None, 4, 100)            1500
_________________________________________________________________
flatten_1 (Flatten)          (None, 400)               0
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 401
=================================================================
Total params: 1,901
Trainable params: 401
Non-trainable params: 1,500
_________________________________________________________________
 
 
Accuracy: 100.000000

在实践中,我鼓励您尝试使用固定的预训练嵌入来学习词嵌入,并尝试在预训练嵌入之上执行学习。

看看什么最适合您的特定问题。

总结
在本教程中,您了解了如何通过 Keras 在 Python 中使用词嵌入进行深度学习。

具体来说,您了解到:

关于词嵌入以及 Keras 通过嵌入层支持词嵌入。
如何在拟合神经网络的同时学习词嵌入。
如何在神经网络中使用预训练的词嵌入。

作者 east
深度学习 4月 12,2022

Jaccard 相似度 – NLP 中的文本相似度度量

Jaccard 相似度也称为 Jaccard 指数和联合交集。用于确定两个文本文档之间的相似性的 Jaccard 相似度矩阵是指两个文本文档在上下文方面彼此接近的程度,即在总词中存在多少常用词。

在自然语言处理中,我们经常需要估计文本文档之间的文本相似度。存在许多文本相似度矩阵,例如余弦相似度、Jaccard 相似度和欧几里得距离测量。所有这些文本相似度指标都有不同的行为。

在本教程中,您将通过示例详细了解 Jaccard 相似度矩阵。您还可以参考本教程来探索余弦相似度指标。

Jaccard 相似度定义为两个文档的交集除以这两个文档的并集,这两个文档指的是总单词数中的常用单词数。在这里,我们将使用单词集来查找文档的交集和并集。

Jaccard 相似度的数学表示为:

Jaccard Similarity mathematical equation

Jaccard Similarity 得分在 0 到 1 的范围内。如果两个文档相同,则 Jaccard Similarity 为 1。如果两个文档之间没有共同词,则 Jaccard 相似度得分为 0。

让我们看一下 Jaccard Similarity 如何工作的示例?

doc_1 = "Data is the new oil of the digital economy"
doc_2 = "Data is a new oil"

让我们为每个文档获取一组唯一的单词。

words_doc1 = {'data', 'is', 'the', 'new', 'oil', 'of', 'digital', 'economy'}
words_doc2 = {'data', 'is', 'a', 'new', 'oil'}

现在,我们将计算这两组词的交集和并集,并测量 doc_1 和 doc_2 之间的 Jaccard 相似度。

Calculate the Jaccard similarity example
Jaccard similarity visual example

查找 Jaccard 相似性的 Python 代码

让我们为 Jaccard Similarity 编写 Python 代码。

def Jaccard_Similarity(doc1, doc2): 
    
    # List the unique words in a document
    words_doc1 = set(doc1.lower().split()) 
    words_doc2 = set(doc2.lower().split())
    
    # Find the intersection of words list of doc1 & doc2
    intersection = words_doc1.intersection(words_doc2)

    # Find the union of words list of doc1 & doc2
    union = words_doc1.union(words_doc2)
        
    # Calculate Jaccard similarity score 
    # using length of intersection set divided by length of union set
    return float(len(intersection)) / len(union)
doc_1 = "Data is the new oil of the digital economy" doc_2 = "Data is a new oil" Jaccard_Similarity(doc_1,doc_2)
0.44444

doc_1 和 doc_2 之间的 Jaccard 相似度为 0.444

作者 east
python, Tensorflow 4月 11,2022

tensorflow的tf.matmul()用法详解

matmul的用法是2个矩阵相乘, 将前面矩阵的每一行分别与后面矩阵的列相乘,作为结果矩阵的行列

import tensorflow as tf
import math
import matplotlib.pyplot as plt
A = [[1,2,3],[0,1,1],[2,0,0]]
B = [[0,1,2,0],[4,3,0,0],[0,1,0,0]]
tf.compat.v1.disable_eager_execution()
sess = tf.compat.v1.InteractiveSession()
print(sess.run(tf.matmul(A,B)))

运行结果:

[[ 8 10  2  0]  
[ 4 4 0 0]
[ 0 2 4 0]]
作者 east
Tensorflow, 人工智能 4月 5,2022

解决在kaggle等在线平台运行报错module ‘tensorflow’ has no attribute ‘InteractiveSession’

学习tensorflow,除了本地安装一个外,更喜欢去在线平台玩,特别是kaggle这种带有数据集的。看书仿照下面的例子,没想到运行出错了。

# 进入一个交互式 TensorFlow 会话.
import tensorflow as tf

sess = tf.InteractiveSession()

x = tf.Variable([1.0, 2.0])
a = tf.constant([3.0, 3.0])

# 使用初始化器 initializer op 的 run() 方法初始化 'x' 
x.initializer.run()

# 增加一个减法 sub op, 从 'x' 减去 'a'. 运行减法 op, 输出结果 
sub = tf.subtract(x, a)
print(sub.eval())

运行报下面错误:

--------------------------------------------------------------------------- AttributeError                            Traceback (most recent call last) /tmp/ipykernel_33/152899263.py in <module>      
2 import tensorflow as tf
3 ---->
4 sess = tf.InteractiveSession()
5 #tf.compat.v1.disable_eager_execution()
6 #sess = tf.compat.v1.InteractiveSession()
AttributeError: module 'tensorflow' has no attribute 'InteractiveSession'

由于版本问题,要用下面的语句替代

使用 sess = tf.compat.v1.InteractiveSession()

解决了这个问题,又出现新的问题:
AttributeError: ‘NoneType’ object has no attribute ‘run’ ,
这需要在sess之前添加tf.compat.v1.disable_eager_execution()

新的完整代码如下:

# 进入一个交互式 TensorFlow 会话.
import tensorflow as tf

tf.compat.v1.disable_eager_execution()
sess = tf.compat.v1.InteractiveSession()
x = tf.Variable([1.0, 2.0])
a = tf.constant([3.0, 3.0])

# 使用初始化器 initializer op 的 run() 方法初始化 'x' 
x.initializer.run()

# 增加一个减法 sub op, 从 'x' 减去 'a'. 运行减法 op, 输出结果 
sub = tf.subtract(x, a)
print(sub.eval())
作者 east

上一 1 … 3 4 5 6 下一个

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 如何在Chrome中设置启动时自动打开多个默认网页
  • spark内存溢出怎样区分是软件还是代码原因
  • MQTT完全解析和实践
  • 解决运行Selenium报错:self.driver = webdriver.Chrome(service=service) TypeError: __init__() got an unexpected keyword argument ‘service’
  • python 3.6使用mysql-connector-python报错:SyntaxError: future feature annotations is not defined
  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?

文章归档

  • 2025年7月
  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (45)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (5)
  • 大数据开发 (491)
    • CDH (6)
    • datax (4)
    • doris (31)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (41)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (100)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (71)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (7)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.