标签归档:算法

gpt-2如何使用?gpt-2和BERT的区别是?

gpt-2如何使用?

gpt2 模型:https://github.com/openai/gpt-2

GPT-2是一个非常强大的语言生成模型,可以用于各种自然语言处理任务,如文本生成、语言理解、机器翻译、情感分析等等。下面是一些使用GPT-2的基本步骤:

  1. 安装GPT-2模型:在使用GPT-2之前,您需要下载和安装模型。您可以从OpenAI官方网站下载模型,或使用一些已经封装好的Python库来获取模型。
  2. 准备数据:在使用GPT-2生成文本之前,您需要准备一个语料库。这个语料库可以是您自己的文本数据集,也可以是从互联网上抓取的数据集。
  3. 运行GPT-2:一旦您准备好了数据和模型,您就可以开始运行GPT-2了。根据您的任务,您可能需要微调模型或使用不同的超参数来优化生成的文本。
  4. 生成文本:一旦您的模型已经训练好了,您可以使用它来生成文本。您可以通过调用模型的API或使用一些现成的工具来生成文本。

需要注意的是,由于GPT-2是一个非常大的模型,它需要大量的计算资源来训练和使用。因此,在使用GPT-2之前,您需要确保您的计算资源足够,并且您具备足够的技术知识来正确地配置和运行模型。

gpt-2和BERT的区别是?

BERT模型:https://github.com/google-research/bert

GPT-2和BERT是两个基于深度学习的自然语言处理模型,它们在许多方面都有所不同。下面是一些主要的区别:

  1. 任务类型:GPT-2是一个生成式模型,它可以生成连续的文本序列,比如文章、故事或对话。而BERT是一个判别式模型,它可以对输入的文本进行分类、回归等任务。
  2. 输入方式:GPT-2的输入是一个上下文序列,模型会根据这个序列生成一个下一个单词或词组,可以被用于语言模型、文本生成等任务。BERT的输入则是一个完整的文本,模型会输出这个文本的某种特征表示,可以被用于文本分类、情感分析等任务。
  3. 训练数据:GPT-2使用的训练数据是从互联网上采集的大量文本数据,而BERT使用的是一些特定的任务数据集,例如阅读理解、问答等任务。
  4. 架构:GPT-2采用的是自回归架构(Autoregressive Architecture),即模型会根据之前的输入生成下一个单词,一步步生成整个文本序列。BERT采用的是编码器-解码器架构(Encoder-Decoder Architecture),即模型会将输入编码成一个表示,然后解码为输出。
  5. 预训练目标:GPT-2的预训练目标是使用未来的单词来预测当前的单词,这被称为掩码语言建模(Masked Language Modeling)。BERT的预训练目标则包括两种任务:掩码语言建模和下一句预测(Next Sentence Prediction)。

总之,GPT-2和BERT在任务类型、输入方式、训练数据、架构和预训练目标等方面都有所不同,具体使用哪个模型取决于您的任务和数据。

Python 全自动解密解码神器 — Ciphey

Ciphey 是一个使用自然语言处理和人工智能的全自动解密/解码/破解工具。

简单地来讲,你只需要输入加密文本,它就能给你返回解密文本。就是这么牛逼。

有了Ciphey,你根本不需要知道你的密文是哪种类型的加密,你只知道它是加密的,那么Ciphey就能在3秒甚至更短的时间内给你解密,返回你想要的大部分密文的答案。

下面就给大家介绍 Ciphey 的实战使用教程

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),输入命令安装依赖:

pip install -U ciphey

2.Ciphey 基本使用

有3种方法可以运行 Ciphey:

1. 文件输入:

ciphey -f encrypted.txt
# 或
python -m ciphey -f encrypted.txt

2.不规范的方法:

ciphey -- "Encrypted input"
# 或
python -m ciphey -- "Encrypted input"

3.正常方式

ciphey -t "Encrypted input"
# 或
python -m ciphey -t "Encrypted input"

如下图所示:

要去除进度条、概率表和所有噪音,请使用安静模式:

ciphey -t "encrypted text here" -q

3.在Python中调用Ciphey

如果你需要在Python中使用Ciphey,请这样使用:

# Python实用宝典
# 2021/07/19
from ciphey.__main__ import main, main_decrypt, make_default_config
main_decrypt(make_default_config("SGVsbG8gbXkgbmFtZSBpcyBiZWUgYW5kIEkgbGlrZSBkb2cgYW5kIGFwcGxlIGFuZCB0cmVl"))
# >> Hello my name is bee and I like dog and apple and tree

运行后会输出如下的结果:

效果还是相当不错的,如果你不想输出概率表,只想要解密内容,代码需要这么写:

# Python实用宝典
# 2021/07/19
from ciphey.__main__ import main, main_decrypt, make_default_config
config = make_default_config("SGVsbG8gbXkgbmFtZSBpcyBiZWUgYW5kIEkgbGlrZSBkb2cgYW5kIGFwcGxlIGFuZCB0cmVl")
config["grep"] = True
main_decrypt(config)
# >> Hello my name is bee and I like dog and apple and tree

非常Nice,你根本无需知道这是什么编码。

Ciphey 支持解密的密文和编码多达51种,下面列出一些基本的选项

基本密码:

  • Caesar Cipher
  • ROT47 (up to ROT94 with the ROT47 alphabet)
  • ASCII shift (up to ROT127 with the full ASCII alphabet)
  • Vigenère Cipher
  • Affine Cipher
  • Binary Substitution Cipher (XY-Cipher)
  • Baconian Cipher (both variants)
  • Soundex
  • Transposition Cipher
  • Pig Latin

现代密码学:

  • Repeating-key XOR
  • Single XOR

编码:

  • Base32
  • Base64
  • Z85 (release candidate stage)
  • Base65536 (release candidate stage)
  • ASCII
  • Reversed text
  • Morse Code
  • DNA codons (release candidate stage)
  • Atbash
  • Standard Galactic Alphabet (aka Minecraft Enchanting Language)
  • Leetspeak
  • Baudot ITA2
  • URL encoding
  • SMS Multi-tap
  • DMTF (release candidate stage)
  • UUencode
  • Braille (Grade 1)
  • ……

Ciphey 的功能不仅于本文介绍的这些,本文所介绍的只是冰山一角,它还可以添加属于你自己的解码器:

https://github.com/Ciphey/Ciphey/wiki/Adding-your-own-ciphers

如果要进一步的学习,你可以在上述 Ciphey 的 Github Wiki 介绍中,查阅到更多的资料,进行更深层次的学习。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

给作者打赏,选择打赏金额
¥1¥5¥10¥20¥50¥100¥200 自定义

​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python 画图深入理解递归

效果图,理解本程序递归的时候请盯死它。这篇文章可以说是雪花第三弹了。

当然,这次重点不在于画画,而是在于理解好递归。即便你不会python,在我的注释的帮助下你也可以看懂这个代码(是看懂不是理解)。另外有python的同学可以打进去试试,观察完整绘画过程更有利于理解。

import turtle
def tree(branchLen,t):
#定义一个画画的函数,下面是重点,需要大家自行理解。
    if branchLen > 6:
        t.forward(branchLen)
        #前进branchLen长度
        t.right(20)
        #右转20°
        tree(branchLen-15,t)
        #递归
        t.left(40)
        tree(branchLen-15,t)
        t.right(20)
        t.backward(branchLen)
        #后退branchLen长度
t = turtle.Turtle()
#创造画笔
mytree = turtle.Screen()
#显示可视化窗口
t.left(90)
#转到垂直向上
t.up()
#提起画笔,为了后面调整位置
t.backward(100)
#调整位置
t.down()
#画笔落下
t.color("blue")
#调整画笔颜色
tree(90,t)
#开始画画
mytree.exitonclick()
#防止一画完就自动退出

可能最难理解的部分:

def tree(branchLen,t):
    #定义一个画画的函数,这是个重点,需要大家自行理解。
    if branchLen > 6:
        t.forward(branchLen)
        t.right(20)
        tree(branchLen-15,t)
        t.left(40)
        tree(branchLen-15,t)
        t.right(20)
        t.backward(branchLen)

实际上通过语言形象地把递归讲好是有点难度的,这里我只能尽量解释。首先如果我们设定长度为90.那么第一个递归语句(需要说明的是,第一个递归语句是最后结束的):

        tree(branchLen-15,t)
        t.left(40)

它一共要递归7次,只不过第七次当branchLen = 15 的时候刚好为0不满足条件。我们从这里开始。

此时的位置:

到这里为止,向左转40°

t.left(40)

就是想要画出那个分叉口,但是由于此时的branchLen = 15,当它执行第二个递归语句的时候

tree(branchLen-15,t)

发现无法满足条件,因此又右转20°并返回到原来开始画分叉的那个结点(就是第五个转方向的地点)。

这个小小小小小递归结束,回到branchLen = 30,这时候就能够执行

        t.left(40)
        tree(branchLen-15,t)
        t.right(20)
        t.backward(branchLen)

没错,这里又进行了一次递归。因此它顺利画出分叉:

然后返回到长度为30的那一个结点,如图

此时回到上一层递归,branchLen = 45.又开始一个新的递归,然后这个新的递归里又产生了一个新递归,这个新递归又调用一次递归,最终这个递归无法满足条件回到上一个递归画出了叉口,再返回上一次递归branchLen = 60.然后又开始一个新的递归……

请记住,回归结点的时候从这几行代码开始:        

        t.left(40)
        tree(branchLen-15,t)
        t.right(20)
        t.backward(branchLen)

如果你想很好地理解递归,你可以从这个程序开始。因为它很形象。

欢迎关注微信公众号:Python实用宝典