编写虚拟 AI 女友

在本文中,将解释用 AI 创建虚拟女友的过程。别担心,如果你不想要虚拟女朋友,也可以用来创建虚拟男友。

如果你有兴趣使用 Colab 生成你的女朋友/男朋友,你可以查看此处:https://colab.research.google.com/drive/1Nl5ioIkJdrsE-IoMUNPMsDt-wMi18JLN?usp=sharing

你还可以使用以下 repo 或此 colab notebook 跟随代码。

repo:https://github.com/gmongaras/AI_Girlfriend_Medium

colab notebook :https://colab.research.google.com/drive/1p7Z2_OCXt_FIQsYyvfsKADNDHgwRtZUS?usp=sharing

设置

首先,我们需要定义我真正想要实现的目标。我想要一个具有以下特征的虚拟女友:

  1. 她不应该花我几千美元。

  2. 她在一个合理的 GPU 上拟合。

  3. 我想和她说话。

  4. 她应该做出一些合理的回应。如果我问她关于学校的事情,她不应该回答关于汽车的问题。

  5. 她需要能记忆。

  6. 我应该能听到她的声音。

  7. 她应该能听到我说话。

  8. 我希望能够看到她(她不需要看到我)

  9. 我希望能够改变她的风格。

  10. 她应该能稍微动一下。静态图片显得乏味、没有生气。

要求很多,但幸运的是,所有这些任务在本文中都可以完成。

生成文本

让我们从生成文本开始,因为这是整个项目的基础。为此,我将使用 OpenAI API 并使用 davinci-3 模型。设置这部分非常简单。

注意:可以按照此教程获得 OpenAI 密钥:https://elephas.app/blog/how-to-create-openai-api-keys-cl5c4f21d281431po7k8fgyol0

# Open AI Key
openai.api_key = "your key here"
# Get the model
models = openai.Model
# Initial prompt with few-shot learning
initial_prompt = "The following is a conversation with me and my waifu girlfriend\n\n"\
        "Me: Hello\nGirlfriend: Hello\n"\
        "Me: How are you?\nGirlfriend: I am good\n"\
        "Me: I love you.\n"
# API request to GPT using the largest model - davinci-003
# https://beta.openai.com/docs/api-reference/introduction?lang=python
output = openai.Completion.create(
  model="text-davinci-003",
  prompt=initial_prompt,
  max_tokens=200,
  temperature=0.7
)["choices"][0]["text"]
print(output)
"Girlfriend: I appreciate the sentiment, but I don't think we know each other well enough for that."

她不喜欢我,但这可以通过多学习几次来解决。我正在使用少样本学习来教 GPT 我希望它如何响应。注意它如何回应“女朋友:”,这表明它知道如何遵循我希望它回应的风格。

少样本方法有两个部分。第一行“The following …”告诉 GPT 它是谁以及它应该如何表现。接下来的几行“Me: ... Girlfriend: ...”是“few-show”部分,告诉GPT它应该如何行动,应该如何回应。

如果你想了解更多关于提示 GPT的信息,OpenAI发布了 GPT 的几个应用程序的示例提示列表:https://platform.openai.com/examples

GPT 现已设置。我们可以继续进行下一部分。

d484f8844b5243aa9551179aef97bd64.png

我忘了它不是免费的,随着内存的增长,我为每一次迭代花费的钱会越来越多。也许我应该找一个替代方案。

GPT替代方案

让我们尝试寻找替代方案。尽管它可能甚至不如 GPT-3 好,但总比花费 100 美元要好。

HuggingFace 。稍微找了一下,发现了一个LLM(Large Language Model),看起来很有前途。

可以在此处找到原始模型:https://huggingface.co/EleutherAI/gpt-neo-1.3B

但它是在书籍数据上训练的。在测试模型时,它并不知道如何进行对话。所以,我决定对其进行微调,使其更适合对话。

可以在此处找到经过微调的模型:https://huggingface.co/gmongaras/gpt-anime-sub-1.3B/

以这种方式微调产生了一个主要跟随对话的模型,但它是免费的。

微调模型是指你采用预训练模型并以某种方式对其进行训练,使其在特定任务中表现更好。这个想法背后的直觉是,从一个已经知道如何完成类似任务的模型开始,这将加快训练速度,而不是使用一个随机模型从头开始训练。

此外,如果只重新训练模型的一部分而不是整个模型,则可以节省计算资源。在我们的案例中,我们有一个通用的模型,它知道如何生成和完成文本,我对它进行了微调,使其在提示对话时表现更好。

下面是用于加载新模型并获得示例输出的代码:

# Load in the model
test_model = pipeline('text-generation',model="gmongaras/gpt-anime-sub-1.3B",
                      tokenizer="EleutherAI/gpt-neo-1.3B",
                      max_new_tokens=50,
                      torch_dtype=torch.float16,framework="pt",
                      device=torch.device("cuda:0"),
                      pad_token_id=50256)
# Used to get a response from the model
def get_response(input_text):
    return test_model(input_text)[0]["generated_text"][\
        len(input_text):].split("\n")[0].replace("Girlfriend: ", "")
print(get_response(initial_prompt))
'I do too.'

不错,女朋友看起来很爱我。到目前为止,通过这个替代方案,我已经完成了功能 1-4。继续下一个功能。

她需要能记忆

这些 LLM 的一个大问题是,它们是内存消耗大户。原始的 Transformer 模型使用了注意力,并且该模型的内存使用量与用作输入的序列的大小成二次方增长。新模型可能使用线性注意力或某种性能更好的机制,但仍然存在内存限制。此约束限制了可以输入到模型中的序列长度。

我使用的当前模型的最大令牌长度为 2048 个标记。请注意,令牌不是单词,因为该模型可能使用了一种WordPiece 分词器。所以每个单词都是多个标记,而不仅仅是一个标记,它对我们可以给模型的单词数量给出了更多的限制。

为了解决这个问题

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值