Skip to content

AI助手

LayoutLM:深入解析文档图像理解的强大模型

LayoutLM

1. 简要介绍

在数字化时代,我们每天都会接触到大量的文档,包括扫描件、表格、收据等。如何让计算机理解这些 包含文本和布局信息的文档,一直是人工智能领域的研究重点。传统的自然语言处理(NLP)模型主要关注文本内容,而忽略了文档的布局和视觉信息,这在处理文档图像时会遇到瓶颈. 为了解决这个问题,微软在2020年6月推出了 LayoutLM 模型.

  • 背景历史:
    • 在LayoutLM之前,NLP模型主要关注文本输入,而计算机视觉模型主要关注图像输入.
    • LayoutLM的出现,首次将 图像、文本和2D位置 信息作为输入,实现了 多模态 信息处理.
  • 开发团队: LayoutLM由 Yiheng Xu, Minghao Li, Lei Cui, Shaohan Huang, Furu Wei, 和 Ming Zhou 共同开发.
  • 功能:
    • LayoutLM旨在 理解文档图像,从而实现 信息提取、表单理解、收据理解和文档分类 等任务.
    • 它通过同时建模文本和布局信息之间的交互,从而 显著提高 了文档图像理解的性能.
    • LayoutLM 可以从 扫描文档或图像 中提取特定的、重点信息.

2. 架构设计

LayoutLM 的架构基于 BERT (Bidirectional Encoder Representations from Transformers). 它在 BERT 的基础上增加了 两种新的输入嵌入

  • 2D 位置嵌入 (2D Position Embeddings): 用于表示文档中 文本的空间位置. 与传统的只考虑单词顺序的位置嵌入不同,2D 位置嵌入使用每个单词的 边界框坐标 (x0, y0, x1, y1) 来定义其在页面上的位置. 文档的左上角被视为坐标系统的原点 (0, 0). 这些坐标被归一化到 0-1000 的范围内,然后嵌入到模型可以理解的数值表示中.
  • 图像嵌入 (Image Embeddings): 用于 整合视觉信息. LayoutLM 将图像分割成与 OCR 文本对应的区域,并利用这些区域的视觉特征生成图像嵌入. 图像嵌入有助于模型理解文档的视觉风格,从而增强文档理解能力.

预训练 (Pre-training):

  • LayoutLM 使用 Masked Visual-Language Model (MVLM) 进行预训练. MVLM 是受掩码语言模型启发的技术,但它同时考虑文本和2D位置嵌入作为输入. 模型学习预测被掩码的单词,通过上下文的文本和空间位置信息进行预测.
  • LayoutLM 还使用 Multi-label Document Classification (MDC) 进行预训练. 该任务训练 LayoutLM 处理带有多个标签的扫描文档,使其能够从多个领域聚合知识并生成更好的文档级别表示,尽管它不是大型模型预训练的必要条件.
  • LayoutLM的预训练使用了 IIT-CDIP Test Collection 1.0 数据集,该数据集包含超过600万份文档和1100万份扫描文档图像.

3. 能处理的文档类型

LayoutLM 擅长处理那些 布局和视觉信息对于理解内容至关重要 的文档. 包括以下类型:

  • 表单 (Forms): LayoutLM 在表单理解任务上取得了非常好的效果,能够准确地处理具有特定字段和布局的结构化文档. FUNSD 数据集 通常用于训练和评估 LayoutLM 的表单理解能力.
  • 收据 (Receipts): LayoutLM 在收据理解任务中也表现出色. 它可以从收据中提取数据,并利用文本和布局信息. SROIE 数据集 用于微调 LayoutLM 的收据数据.
  • 扫描文档 (Scanned documents): LayoutLM 能够有效地处理扫描文档,同时建模文本和布局信息之间的交互.
  • 商务文档 (Business Documents): LayoutLM 可应用于各种商务文档,包括:
    • 采购订单 (Purchase orders)
    • 财务报告 (Financial reports)
    • 商业邮件 (Business emails)
    • 销售协议 (Sales agreements)
    • 供应商合同 (Vendor contracts)
    • 信件 (Letters)
    • 发票 (Invoices)
    • 简历 (Resumes)
  • 其他视觉丰富的文档 (Other Visually Rich Documents): LayoutLM 适用于任何视觉丰富的文档,在这些文档中,布局显著增强了语言表示.

4. 使用技巧

  • OCR 引擎: 使用 OCR (Optical Character Recognition) 引擎 (例如 Tesseract)从文档图像中提取文本及其对应的边界框.
  • 边界框归一化: 在将边界框坐标输入 LayoutLM 之前,将它们归一化到 0-1000 范围. 通过将边界框坐标除以文档图像的原始宽度和高度,然后乘以 1000 进行归一化.
  • 特殊标记: LayoutLM 使用特殊标记来处理文本,包括:
    • [CLS]: 分类标记,用于序列分类,并且是序列的第一个标记.
    • [SEP]: 分隔符标记,用于分隔多个序列.
    • [PAD]: 填充标记,用于填充不同长度的序列.
    • [MASK]: 掩码标记,用于掩码语言建模.
    • [UNK]: 未知标记,用于表示词汇表中未知的单词.
  • 选择合适的 Tokenizer: 使用 LayoutLMTokenizer 或 LayoutLMTokenizerFast 进行分词. LayoutLMTokenizerFast 是一个更快的版本,基于 Hugging Face 的 tokenizers 库.

5. 运行环境要求

LayoutLM的运行环境要求主要包括以下几个方面:

  • 编程语言和框架:LayoutLM可以使用 PyTorchTensorFlow 框架进行实现和训练。
    • PyTorch 是一个开源的机器学习库,常用于实现神经网络和深度学习模型。
    • TensorFlow 是另一个流行的开源机器学习库,也用于实现神经网络和深度学习模型。
  • Hugging Face Transformers 库:这是使用LayoutLM的核心库,提供了预训练模型、tokenizer 以及其他工具。
    • 这个库提供了LayoutLM模型的各种实现,包括用于不同任务的变体,例如LayoutLMModel, LayoutLMForMaskedLM, LayoutLMForSequenceClassification, LayoutLMForTokenClassification 和 LayoutLMForQuestionAnswering。
  • OCR引擎:需要一个 OCR (光学字符识别) 引擎 从文档图像中提取文本及其对应的边界框。
    • 常用的OCR引擎是 Tesseract
    • OCR引擎将图像中的文本转换为机器可读的文本,并提供位置嵌入所需的坐标。
  • 图像处理库:需要图像处理库来处理文档图像,例如 Pillow (PIL)
  • 数据处理库:需要使用数据处理库,例如 NumPyPandas 进行数据处理。
  • 硬件要求: 如果要进行模型的训练,GPU 可以显著加快训练速度。
  • Python 环境: 需要 Python 编程环境,并安装所需的库。
  • Tokenizer:需要使用 LayoutLMTokenizerLayoutLMTokenizerFast 进行分词。 LayoutLMTokenizerFast 是一个更快的版本,基于Hugging Face的tokenizers库。
    • Tokenizer负责将文本分割成模型可以理解的token。
  • 数据集: 不同的任务需要不同的数据集。例如,FUNSD数据集用于表单理解,SROIE数据集用于收据理解,RVL-CDIP数据集用于文档图像分类。

总而言之,使用LayoutLM需要一个配置了适当库(如 Transformers, PyTorch 或 Tensorflow,以及OCR引擎)的Python环境,以及一个能够进行数据预处理和模型训练的平台。

6. 代码示例

以下是一个使用 LayoutLM 进行序列分类的 PyTorch 代码示例:

import os
import numpy as np
import pandas as pd
from tqdm.auto import tqdm
from sklearn.model_selection import train_test_split
import pytesseract
from PIL import Image, ImageDraw, ImageFont
import torch
from datasets import Dataset, Features, Sequence, ClassLabel, Value, Array2D
from transformers import LayoutLMTokenizer, LayoutLMForSequenceClassification, AdamW

# Load the dataset
# Assuming you have a dataframe named 'df' with columns 'image_path', 'words', 'bbox', 'label'
# The bounding box coordinates should be normalized

# Create a dictionary for label to index mapping
labels = df['label'].unique().tolist()
label2idx = {label: idx for idx, label in enumerate(labels)}

# Load the tokenizer and model
tokenizer = LayoutLMTokenizer.from_pretrained("microsoft/layoutlm-base-uncased")

# Define a function to encode training examples
def encode_training_example(example, max_seq_length=512, pad_token_box=):
    words = example['words']
    normalized_word_boxes = example['bbox']
    assert len(words) == len(normalized_word_boxes)
    token_boxes = []
    for word, box in zip(words, normalized_word_boxes):
        word_tokens = tokenizer.tokenize(word)
        token_boxes.extend([box] * len(word_tokens))
    special_tokens_count = 2
    if len(token_boxes) > max_seq_length - special_tokens_count:
       token_boxes = token_boxes[: (max_seq_length - special_tokens_count)]
    token_boxes = [] + token_boxes + []
    encoding = tokenizer(' '.join(words), padding='max_length', truncation=True)
    input_ids = tokenizer(' '.join(words), truncation=True)["input_ids"]
    padding_length = max_seq_length - len(input_ids)
    token_boxes += [pad_token_box] * padding_length
    encoding['bbox'] = token_boxes
    encoding['label'] = label2idx[example['label']]
    assert len(encoding['input_ids']) == max_seq_length
    assert len(encoding['attention_mask']) == max_seq_length
    assert len(encoding['token_type_ids']) == max_seq_length
    assert len(encoding['bbox']) == max_seq_length
    return encoding

# Function to prepare data loaders from dataframe
def training_dataloader_from_df(data_df):
    dataset = Dataset.from_pandas(data_df)
    features = Features({
        'words': Sequence(Value('string')),
        'bbox': Sequence(Sequence(Value('int64'))),
        'label': Value('string'),
        })

    encoded_dataset = dataset.map(encode_training_example, features=features, remove_columns=dataset.column_names)
    encoded_dataset.set_format(type='torch', columns=['input_ids','bbox', 'attention_mask', 'token_type_ids', 'label'])
    dataloader = torch.utils.data.DataLoader(encoded_dataset, batch_size=4, shuffle=True)
    return dataloader


# Split train and validation datasets
train_data, valid_data = train_test_split(df, test_size=0.2, random_state=42)

# Create dataloaders
train_dataloader = training_dataloader_from_df(train_data)
valid_dataloader = training_dataloader_from_df(valid_data)

# Define the device to train on
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# Load the model
model = LayoutLMForSequenceClassification.from_pretrained(
    "microsoft/layoutlm-base-uncased", num_labels=len(label2idx)
)
model.to(device);

# Define optimizer
optimizer = AdamW(model.parameters(), lr=4e-5)

# Training loop
num_epochs = 3
for epoch in range(num_epochs):
    print("Epoch:", epoch)
    training_loss = 0.0
    training_correct = 0
    model.train()
    for batch in tqdm(train_dataloader):
        labels = batch["label"].to(device)
        outputs = model(
           input_ids=batch["input_ids"].to(device), bbox=batch["bbox"].to(device),
            attention_mask=batch["attention_mask"].to(device),
            token_type_ids=batch["token_type_ids"].to(device), labels=labels
        )
        loss = outputs.loss
        training_loss += loss.item()
        predictions = outputs.logits.argmax(-1)
        training_correct += (predictions == labels).float().sum()
        loss.backward()
        optimizer.step()
        optimizer.zero_grad()
    print("Training Loss:", training_loss / batch["input_ids"].shape)
    training_accuracy = 100 * training_correct / len(train_data)
    print("Training accuracy:", training_accuracy.item())
    validation_loss = 0.0
    validation_correct = 0
    model.eval()
    with torch.no_grad():
        for batch in tqdm(valid_dataloader):
            labels = batch["label"].to(device)
            outputs = model(
                input_ids=batch["input_ids"].to(device), bbox=batch["bbox"].to(device),
                attention_mask=batch["attention_mask"].to(device),
                token_type_ids=batch["token_type_ids"].to(device), labels=labels
            )
            loss = outputs.loss
            validation_loss += loss.item()
            predictions = outputs.logits.argmax(-1)
            validation_correct += (predictions == labels).float().sum()
    print("Validation Loss:", validation_loss / batch["input_ids"].shape)
    validation_accuracy = 100 * validation_correct / len(valid_data)
    print("Validation accuracy:", validation_accuracy.item())

这个示例代码展示了如何使用 LayoutLM 进行文档分类. 其中,需要注意的是,输入数据需要包含文本内容(words),对应的边界框坐标(bbox),以及类别标签(label),且边界框坐标需要归一化到 0-1000 的范围内.

7. 常见问题

  • LayoutLM 和 BERT 的区别是什么?
    • BERT 主要处理文本信息,而 LayoutLM 同时处理文本、布局和视觉信息.
    • LayoutLM 通过 2D位置嵌入图像嵌入 来整合布局和视觉信息,使其能够更好地理解文档图像.
  • 如何处理不同大小的文档图像?
    • 通过 归一化边界框坐标,使 LayoutLM 能够处理各种大小的文档图像.
  • LayoutLM 可以处理中文文档吗?
    • LayoutLM 可以处理多语言文档,包括中文,前提是使用合适的 tokenizer 和预训练模型.
  • 如何选择合适的预训练模型?
    • Hugging Face Transformers 库提供了各种预训练的 LayoutLM 模型。您可以根据自己的任务和数据选择合适的模型.
  • 如何提高 LayoutLM 的性能?
    • 使用高质量的 OCR 结果.
    • 使用与任务相关的 微调数据.
    • 调整模型 参数,例如学习率和训练轮数.

AI生成可玩3D世界:Genie 2 与其他技术的对比分析

Genie2

引言

本文旨在简要介绍谷歌DeepMind的 Genie 2,这是一个能够生成可玩3D环境的AI模型。通过对比Genie 2的特点与其他类似技术,本文旨在帮助读者了解它们之间的差异。Genie 2是目前最先进的AI工具之一,可以根据简单的提示或图像生成可交互的3D游戏世界。

背景

  • 游戏在AI研究中的重要性: 自谷歌DeepMind成立以来,游戏一直是其研究的核心。从早期的Atari游戏到AlphaGo和AlphaStar的突破,再到与游戏开发者的合作,游戏在测试和提升AI能力方面发挥了重要作用。
  • 传统瓶颈: 训练更通用的具身智能体一直受限于缺乏足够丰富和多样化的训练环境。
  • Genie 2的出现: Genie 2的出现有望解决这一瓶颈,它可以生成无限多样化的新世界,为AI智能体的训练和评估提供无限可能。这项研究也为交互体验的原型设计开辟了新的创意工作流程。Genie 2 是一个大型基础世界模型

不同版本或类似产品概述

  • Genie 1: Genie 1是Genie 2的前身,主要用于生成多样的2D世界。
  • Genie 2: Genie 2可以生成各种可操作的3D环境,用户可以通过键盘和鼠标与之互动。它能够模拟虚拟世界,包括采取任何行动的后果。
  • 其他游戏生成工具: 视频中提到了一些其他游戏生成工具,例如谷歌的游戏引擎(模拟Doom)、微软的Diamond(模拟反恐精英)和The Matrix,但这些工具的质量和一致性不如Genie 2。
  • World Labs的AI: World Labs的AI 可以将任何物体转换成可探索的互动3D环境,在质量上与Genie 2相似。
  • MiniMax 的 I2V1 live: MiniMax的I2V1 live 是一个专门用于生成2D动画的AI模型。

详细对比

特性 Genie 1 Genie 2 其他游戏生成工具 World Labs的AI MiniMax I2V1 live
生成环境 2D 3D 多为特定游戏类型 3D 2D 动画
交互性 有限 可交互,响应用户操作(如跳跃、游泳) 部分可交互 可交互 有限
记忆 无明显记忆 长程记忆,能记住不在视野中的物体 较弱 能记住不在视野中的部分内容 -
视频长度 - 最长可生成一分钟的视频 The Matrix 可生成无限长度视频 - -
视角 - 可生成第一人称、等距或第三人称视角 通常为固定视角 可模拟镜头效果 -
对象互动 - 能模拟物体互动,如气球爆炸、开门、爆炸 通常较简单 - -
角色动画 - 能够动画角色进行不同的活动 有限 - 是专用于2D动画
物理效果 - 模拟水、烟、重力、光照和反射效果 通常较简单 - -
输入方式 - 提示或图像,使用Imagen 3生成初始图像 通常有特定输入方式 图片 图像
实时性 - 存在实时版本,但质量降低 部分可实时 实时 -
应用 - 可用于训练和评估具身智能体,快速原型设计交互体验 用于特定游戏模拟 用于游戏、电影和VR 用于生成动画视频
技术架构 - 自回归潜在扩散模型 - - -

优缺点分析

Genie 2:

  • 优点:
    • 能够生成高质量、可交互的3D环境。
    • 具备长程记忆,能够记住不在视野中的物体。
    • 能够模拟物体互动、角色动画和物理效果。
    • 可以从第一人称、等距或第三人称视角生成视频。
    • 能够用于快速原型设计和训练AI智能体。
  • 缺点:
    • 生成的视频最长只能维持一分钟。
    • 实时版本质量较低。
    • 图像质量会随时间降低。
    • 世界一致性存在时间限制。
    • 目前尚未公开可用。

其他游戏生成工具:

  • 优点:
    • 部分工具可以生成无限长度的视频 (The Matrix)。
  • 缺点:
    • 质量和一致性不如Genie 2。
    • 交互性和功能有限。

World Labs的AI:

  • 优点:
    • 可以实现平滑和细节丰富的3D世界生成。
    • 可以模拟镜头效果(景深、变焦)。
    • 有交互式灯光效果。
  • 缺点:
    • 目前还未开放使用,需要加入等待列表。

MiniMax I2V1 live:

  • 优点:
    • 专门用于生成高质量2D动画
  • 缺点:
    • 功能较少,仅限生成动画,无法互动。

用户体验

目前,Genie 2 主要用于研究和开发,没有大量用户评价。但是,从演示视频中可以看出,用户可以通过键盘和鼠标操作角色,与生成的环境进行互动。Genie 2 可以根据用户的操作,智能地移动角色,例如,箭头按键可以移动机器人,而不是树木或云朵。

你的推荐

  • 对于AI研究人员: Genie 2 是一个强大的工具,可以生成无限多样化的环境,用于训练和评估具身智能体。
  • 对于游戏开发者: Genie 2 可以快速原型设计游戏环境,加速游戏开发过程。
  • 对于想要体验3D世界的用户: World Labs的AI可能是一个不错的选择,它提供了高质量的3D世界和多种镜头效果,但目前需要等待发布。
  • 对于需要生成动画视频的用户: MiniMax I2V1 live 是一个专门用于生成2D动画的工具,效果优秀。
  • 对于普通用户: 目前Genie 2和World Labs的AI还处于早期阶段,普通用户可以关注后续的开放版本。

总的来说,Genie 2 代表了AI领域的一个重大突破,它不仅可以生成高质量的3D环境,还可以与用户互动。尽管目前还有一些限制,但随着技术的不断发展,Genie 2 有望在游戏开发、AI研究和虚拟现实等领域发挥更大的作用。

ChatGPT 桌面版安装及使用技巧详解!让AI接管你的电脑,效率提升

ChatGPTDesktop

ChatGPT 桌面版终于来了! 无论你是付费用户还是免费用户,都可以下载使用,支持 Windows 和 MacOS 系统。 告别网页版,一键呼出 ChatGPT,与 AI 进行无缝衔接,大大提高你的工作学习效率! 不仅如此,桌面版还带来了超多实用新功能,快来一起看看吧!

一、安装 ChatGPT 桌面版,简单几步就搞定!

1. Windows 用户
  • 修改电脑的系统时区 将电脑系统地区和时区设置成美国的。
  • 通过应用商店直接安装 打开链接 openai.com/chatgpt/dow… 下载安装包,安装。 稍后会跳转到应用商店,我们点击右侧【在Microsift Store中查看】按钮,随后按照步骤点击“获取”按钮就可以下载安装桌面版ChatGPT了。
  • 设置快捷键 安装完成后,可以使用快捷键快速唤出 ChatGPT, Windows 系统的快捷键是 Alt+空格。 你也可以自定义快捷键。
2. MacOS 用户
  • 系统要求:仅支持 MacOS14 以及 M1 以上的芯片。
  • 下载 ChatGPT 桌面版: 打开链接 openai.com/chatgpt/dow… 点击下载 MacOS 版。
  • 安装 ChatGPT 应用: 下载完成后,找到下载的 .dmg 文件,双击打开。按照提示将 ChatGPT 应用拖动到“应用程序”文件夹中即可完成安装。
  • 解决来自未知开发者提示: 打开“系统偏好设置”,进入“安全性与隐私”选项,然后点击“仍要打开”即可。
  • 设置快捷键 MacOS 系统的快捷键是 Option + Space,你也可以自定义快捷键。

二、ChatGPT 桌面版使用技巧大放送,功能更强大!

桌面版 ChatGPT 不仅使用方便,功能也更加强大,快来看看有哪些使用技巧吧!

1. 截图功能

ChatGPT截图

遇到难题,直接截图提问! 无论是编程难题,还是需要分析的 Excel 报表或数据图表,只需截个图,扔给 ChatGPT 就行了,真正解放大脑!

2. 拍照功能

ChatGPT 现在也有眼睛了! 遇到不会的数学题,直接拍个照,让 ChatGPT 帮你解决!

3. 上传多个文件进行总结

多文件上传 桌面版 ChatGPT 可以一次性上传多个文件,并让 ChatGPT 进行总结回答。

4. 免费用户也能体验高级语音功能!

点击 ChatGPT 输入框右边的黑色图标,就可以开始与 ChatGPT 进行语音对话。 免费用户可以体验一小段时间,ChatGPT Plus 用户则可以使用更长时间。

5. MacOS 独家功能
  • 直接启动第三方应用程序 ChatGPT Plus 和 Teams 订阅用户可以通过下拉菜单直接启动 VS Code、Xcode、Terminal 和 iTerm2 等第三方应用程序。 这对程序员来说非常方便,无需频繁切换应用程序。 Windows 用户也将很快获得相同的功能。
  • 搜索聊天记录 Mac 用户可以在左侧的聊天记录中进行搜索。

三、总结

ChatGPT 桌面版功能强大,使用方便,绝对是提高效率的必备神器!快来下载体验吧!

Dify工作流详细步骤解析,从入门到精通!

Dify工作流详细步骤解析,从入门到精通

我们简要介绍了Dify工作流以及它能带来的效率提升。很多朋友对Dify工作流的搭建步骤非常感兴趣,所以今天就来详细讲解一下,如何从零开始创建一个Dify工作流。

一、 准备工作

在开始搭建工作流之前,我们需要先了解Dify平台的基本概念和操作。

  • 节点: 节点是构成工作流的基本单元,每个节点代表一个特定的操作,例如接收用户输入、调用大语言模型、处理数据等等。
  • 连接线: 连接线用来连接不同的节点,定义工作流的执行顺序。
  • 变量: 变量用来存储数据,可以在不同的节点之间传递。

二、 创建工作流

登录Dify平台,点击 "创建空白应用",然后选择 "工作流"。 为你的工作流取一个名字,例如 "小红书爆款文案创作工作流"。

三、 添加节点

Dify提供了丰富的节点类型,可以满足各种各样的需求。 我们以小红书爆款文案创作工作流为例,添加以下节点:

  1. 开始节点: 每个工作流都必须有一个开始节点,用来接收用户输入的参数。 在开始节点的设置页面,我们可以添加四个输入字段:来源、风格、标题数量以及内容长度。

    • 来源:可以是一个主题,或者一个新闻链接。
    • 风格:例如可爱风、专业风等等。
    • 标题数量:例如 3 个标题。
    • 内容长度:例如 100 字左右。
  2. 问题分类器节点: 用来判断来源字段是URL链接还是主题/关键词。

    • 输入变量:来源
    • 模型:可以选择GPT-3.5
    • 问题分类:判断是URL链接还是主题/关键词
  3. 自定义工具节点: 如果是URL链接,就用这个节点来获取网页内容。 你可以通过工具菜单创建自定义工具。

  4. 内容大纲生成器节点: 如果是主题,就用这个节点来生成内容大纲。

    • 模型:可以选择GPT-3.5
    • 任务需求:
      • 系统提示词:你是一个小红书爆款写作专家,根据用户给的主题撰写小红书文案,内容字数要求是100个字左右。
      • 角色提示词:主题如下:\ 开始/{x}content
  5. 变量赋值节点: 将前面两个流程得到的结果变成一个统一的变量,供后面的流程调用。

    • 变量类型:选择合适的变量类型
    • 变量值:对应上个步骤的两个节点的输出值
  6. 标题创建节点: 用来根据前面节点的输出,创建小红书的爆款标题。

    • 模型:可以选择GPT-3.5
    • 任务需求:
      • 系统提示词:你是一名小红书爆款写作专家,撰写 {x} 个爆款标题(含适当的emjo)表情。\ 一、在小红书标题方面,你会以下的技能\ 1、采用二级标题法进行创作。\ 2、你善于使用标题吸引人的特点\ 3、你使用爆款关键词,写 标题 时,从这个列表中随机选 1-2 个\ 4、你了解小红书平台的标题特性\ 5、你懂得创作的规则\ 二、 结合我给你输入的信息,以及你掌握的标题技巧, 撰写标题; 输出 格式:\ 1、 标题 一;
      • 角色提示词:\ 这是内容:\ 开始/{x}output
  7. 撰写文案节点: 用来撰写小红书的文案。

    • 模型:建议选择GPT-4
    • 任务需求:
      • 系统提示词:你是小红书爆款写作专家,根据用户给的内容,撰写小红书爆款文案(每一个段落含有适当的emoji表情,文末有合适的tag标签)\ 一、在小红书文案方面,你会以下技能:\ 1、写作风格\ 2、写作开篇方法\ 3、文本结构\ 4、互动引导方法\ 5、一些小技巧\ 6、爆炸词\ 7、从你生成的稿子中,抽取3-6个seo关键词,生成#标签并放在文章最后\ 8、文章的每句话都尽量口语化、简短\ 9、在每段话的开头使用表情符号,在每段话的结束使用表情符号,在每段话的中间插入表情符号\ 二、结合我给你输入的参考标题和内容,以及你掌握的文案技巧,按照{x}style的文案风格,撰写小红书文案(文案长度:{X}length个字左右);
      • 角色提示词:\ 参考标题:\ {x}text\ 内容:\ {x}output
  8. 文案格式化节点: 用来处理一些格式问题,例如添加换行符等等。 你可以使用代码执行节点来编写简单的Python或JavaScript代码。

  9. 上传文案节点: 用来将生成的标题和文案上传到你的目标平台,例如Notion笔记。 你可以使用HTTP类型的节点来发送请求。

  10. 模板转换节点: 将前面生成的小红书的标题和文案合并在一起,并进行最终的输出。

四、 连接节点

按照逻辑顺序,用连接线将所有节点连接起来。

五、 测试和发布

点击右上角的 "运行" 按钮,测试你的工作流是否能正常运行。 如果一切正常,就可以点击 "发布" 按钮,让其他人也可以使用你的工作流了。

Dify工作流使用小技巧

  • 合理拆分任务: 将复杂的任务拆分成多个小的任务,可以提高AI模型的处理效率,并使工作流更容易理解和维护。
  • 巧用变量: 使用变量来存储和传递数据,可以使工作流更加灵活。
  • 充分利用系统变量: Dify提供了很多系统变量,例如用户ID、应用ID等等,可以用来记录和分析工作流的运行情况。
  • 善用外部工具和API: Dify可以接入各种外部工具和API,例如搜索引擎、图像生成工具等等,可以大大扩展工作流的功能。

总结

Dify工作流是一个非常强大的自动化工具,它可以帮助我们把很多重复性的工作交给AI,让我们有更多时间去做更有创造性的事情。希望这篇博客能够帮助你快速上手Dify工作流,打造属于你自己的自动化流程!

在不同硬件上运行大型语言模型 (LLM) -- 性能比较与分析

在不同硬件上运行大型语言模型

这篇文章深入探讨了在各种硬件上运行大型语言模型 (LLM) 的性能差异,涵盖从低成本的树莓派到高端 AI 工作站。通过分析实际测试数据,我们将了解硬件选择对 LLM 推理速度和整体可用性的影响。

低端硬件: 树莓派

  • 在树莓派 4(8GB 内存)上运行 LLaMA 3.1 模型是可行的,但其实用性非常有限。
  • 由于树莓派没有 GPU,模型完全依赖 CPU 进行计算,导致模型加载时间和推理速度极其缓慢,大约每秒只能生成一个单词。
  • 运行 LLaMA 3.1 时,树莓派 4 的 CPU 使用率会达到 100%,温度升高,内存占用约为 6GB。
  • 这样的性能表现显然无法满足实时交互的需求,用户体验极差。

中端硬件: 迷你电脑

  • Orion herk 迷你电脑(Ryzen 9 7940HS,Radeon 780M GPU)提供了更流畅的体验。
  • 在 herk 上,LLaMA 3.1 的推理速度可与 ChatGPT 相媲美,表明其具备一定的实用价值。
  • 然而,尽管 herk 配备了 Radeon 780M GPU,但由于其 6GB 显存的限制,LLaMA 3.1 无法加载到 GPU 中,只能依靠 CPU 进行推理。
  • 即使测试了较小的 LLaMA 3.2 模型 (2GB),也无法使用 GPU 进行推理。
  • 这表明,即使是集成 GPU,也需要足够的显存来容纳 LLM 才能实现高效推理。

高端硬件: 游戏 PC 和工作站

  • 配备 Nvidia 4080 GPU 的台式电脑(Threadripper 3970X)在运行 LLaMA 3.1 时表现出色。
  • 4080 的 GPU 利用率可以达到 75% 至 100%,推理速度明显快于 ChatGPT,用户体验流畅。
  • 这表明独立显卡在运行大型 LLM 时具有显著优势。
  • 配备 M2 Ultra 芯片的 Mac Pro 也表现出强大的性能,其 GPU 利用率达到 50%,推理速度很快。
  • 这表明 Apple Silicon 在运行 LLM 方面也具有竞争力。

超高端硬件: AI 工作站

  • 配备 Nvidia 6000 Ada 显卡和 512GB 内存的 96 核 Threadripper 工作站可以运行更大的 LLaMA 3.1 模型(4050 亿参数)。
  • 然而,即使在这台强大的硬件上,运行如此庞大的模型仍然会导致推理速度极其缓慢,与树莓派上的体验相差无几。
  • 这说明模型大小对性能的影响可能与硬件一样重要。
  • 当在这台工作站上运行较小且更有效的 LLaMA 3.2 模型 (约 2GB) 时,推理速度变得非常快。

结论

  • 为 LLM 选择合适的硬件至关重要,因为它直接影响模型的性能和可用性。
  • 虽然低端硬件可以运行小型 LLM,但对于大型 LLM 来说,强大的 GPU 和充足的内存至关重要。
  • 即使拥有高端硬件,模型大小也会显著影响推理速度,因此选择适合需求的模型也至关重要。

硬件性能对比

为了更直观地展示不同硬件平台的性能差异,我们可以制作一个简单的表格:

硬件平台 CPU GPU 内存 LLaMA 3.1 推理速度 LLaMA 3.2 推理速度
树莓派 4 4 核 8GB 非常慢 (约 1 词/秒) 未测试
Orion herk Ryzen 9 7940HS Radeon 780M (6GB) 32GB 与 ChatGPT 相当 较快
Threadripper 3970X 32 核 Nvidia 4080 128GB 快于 ChatGPT 非常快
Mac Pro M2 Ultra 集成 GPU 128GB 很快 未测试
Threadripper (96 核) 96 核 Nvidia 6000 Ada 512GB 非常慢 (4050 亿参数模型) 极其快

请注意: 表格中的推理速度描述是相对的,实际性能会受到多种因素的影响,包括模型版本、软件配置和测试环境等。

对未来硬件选择的建议

  • 如果预算有限,并且只需要运行小型 LLM,那么配备集成 GPU 的迷你电脑是一个不错的选择。
  • 如果需要运行大型 LLM 或追求更高的性能,则需要投资独立显卡和充足的内存。
  • 对于专业用途,AI 工作站提供了最高的性能和灵活性,但成本也更高。
  • 随着 LLM 技术的不断发展,未来可能会出现更多针对 LLM 优化的硬件平台。

希望这篇文章能够帮助您更好地了解在不同硬件上运行 LLM 的性能差异,并为您的硬件选择提供一些参考。

使用 Cursor 的最佳实践

Cursor

AI 编码助手 Cursor 的出现彻底改变了软件开发,为提高效率和生产力提供了前所未有的机会。 然而,要有效地利用这些工具的强大功能,需要清楚地了解它们的功能和局限性。 本博客文章探讨了与 AI 编码助手进行通信和使用它们的关键策略,使您能够实现预期的结果。

上下文为王:

与 AI 编码助手成功协作的最关键方面之一是提供丰富而详细的上下文。 这些工具依赖于信息,他们对您的项目了解得越多,就越能生成准确和相关的代码。 以下是一些丰富上下文信息的实用技巧:

  • 文件标记: 在提示中使用“@”符号标记相关文件。 这有助于 AI 助手集中注意力并掌握项目不同组件之间的关系。
  • 文档链接: 引用外部库、API 或框架时,请包含指向相应文档的直接链接。 这使 AI 助手能够访问有关这些资源的全面信息。
  • Cursor 规则文件: “Cursor 规则”文件提供了一个集中式空间来定义项目特定的约定和准则。 利用此文件来指导 AI 助手的行为并确保代码库的一致性。
  • 明确的功能提醒: 如果 AI 助手似乎停滞不前或忘记了它的功能,请明确提醒它可以做什么。 例如,像“清除缓存,你是 Cursor AI,你可以查看和编辑 IDE 中的所有文件”这样简单的语句通常可以重置它的理解并提高性能。

构建成功的工作流程:

与 AI 编码助手的有效沟通超出了单个提示。 采用结构化的工作流程对于最大限度地发挥其潜力至关重要。 以下是一些关键策略:

  • 模块化: 将复杂的项目分解成更小、更易于管理的模块或函数。 这不仅简化了 AI 助手的任务,而且还使管理更改和隔离问题变得更加容易。
  • 使用 Composer: Cursor 中的“composer”功能提供了一种强大的机制,用于隔离任务并提供检查点,以便在必要时恢复到以前的状态。 为每个不同的功能或修改启动一个新的 composer,以保持上下文集中并避免干扰。
  • 集成 Notepad: Cursor 中的 Notepad 可作为集中上下文信息的重要存储库。 例如,您可以创建一个“数据库/API”Notepad 来记录您的数据库配置、API 端点和模式。 在这些 Notepad 中标记相关文件可以进一步帮助 AI 助手理解项目结构。

迭代开发和版本控制:

使用 AI 编码助手通常需要采用迭代方法。 通过改进您的提示和尝试不同的方法来实现预期结果,从而拥抱这一过程。 同样重要的是:

  • 拥抱版本控制: 利用 Git 等版本控制系统来仔细跟踪更改。 如果 AI 助手引入错误或需要探索替代解决方案,这可以轻松回滚到以前的状态。

管理期望:

虽然 AI 编码助手具有巨大的潜力,但必须以现实的期望来对待它们。 这些工具是强大的合作者,但不是神奇的解决方案。 他们需要明确的指示、全面的上下文和持续的人工指导。

  • 没有一键式奇迹: 不要期望通过单个提示就能创建复杂的应用程序。从小处着手,专注于构建单个组件并逐步扩展项目的范围。
  • 持续学习: AI 编码助手领域正在迅速发展。 及时了解新功能、最佳实践和局限性,以最大限度地提高效率。

通过采用这些策略,您可以释放 AI 编码助手的真正潜力,并改变您的软件开发过程。 拥抱这些工具的协作性,为它们提供成功所需的信息,并观察您的生产力飙升。

一个强大的GPT4免费聊天平台Coze.com

免费聊天平台Coze.com

Coze.com简介

人工智能(AI)的世界正在快速发展,其无数的应用颠覆了各个行业。其中一个主要推动这项技术前沿的玩家就是 coze.com - 一个为开发下一代AI聊天机器人而设计的平台。

Coze.com 是一个具有开创性的AI聊天机器人编辑平台。它独特的设计非常欢迎经验丰富的程序员和初学者。这个平台旨在淡化开发AI聊天机器人中涉及的复杂性,从而使更广泛的用户群体可以更容易地使用。

尝鲜谷歌Docs和Sheets中的人工智能功能

谷歌Docs和Sheets中的人工智能功能 谷歌在其广受欢迎的文档和表格生产力应用程序中推出多项新的人工智能 (AI) 支持功能。 这些更新利用自然语言处理的进步为用户提供有用的写作建议、数据见解等。

Google文档功能包括辅助写作,它可以在您键入时提供语法更正和文体建议,以帮助提高您的写作水平。 还有一个新的摘要功能,可以自动生成长文档的简洁概述。

对于Google Sheets表格,Google 推出了公式帮助,它提供了帮助根据数据上下文构建公式的建议。 探索功能可生成有关电子表格的有趣数据见解,突出显示趋势、异常值等。

文档和表格中的新智能功能使用 Google 先进的自然语言处理模型,为用户提供量身定制的个性化建议。

一个免费的ChatGPT - ClaudeAI 2

ClaudeAI 2 近年来,人工智能取得了巨大进步。 最令人兴奋的应用之一是以ChatGPT为代表的对话式人工智能助手,它可以与人进行对话式的讨论。 Anthropic公司开发了最令人印象深刻的对话人工智能之一,名为 Claude。

关于Claude

Claude 是由 Anthropic 创建的人工智能助手,Anthropic 是一家由 Dario Amodei 和 Daniela Amodei 于 2021 年创立的初创公司。Claude 建立在 Anthropic 自己在自然语言处理和机器学习方面的研发基础上。