Skip to content

AI

基本概念

AIGC 和 AGI

AIGC(AI-Generated Content,AI生成内容) 指利用人工智能技术自动生成各类内容,典型应用包括:

  • 文本生成:新闻报道、广告文案、产品描述等.
  • 图像生成:图像素材、艺术创作、设计等.
  • 音频生成:音乐、电台广播等.
  • 视频生成:视频剪辑、电影预告片等.

示例:ChatGPT、Grok、元宝、千问等均为 AIGC 工具。

AGI(Artificial General Intelligence,通用人工智能) 目标是创造能想人一样可以思考、学习、执行多种任务的系统。 目前还没有实现

大模型分类(按输入模态)

类型说明典型任务
语言大模型基于 NLP,处理文本对话、写作、翻译
视觉大模型基于 CV,处理图像图像识别、目标检测、图像生成
多模态大模型同时处理文本、图像、音频等图文理解、视频描述、跨模态检索

Transformer架构

现代大模型(如 GPT、BERT、Qwen)均基于 Transformer 架构。

Transformer是一种深度学习架构,它的核心思想是:通过注意力机制(Attention)捕捉序列中不同部分之间的关系,而不是想以前的模型(如RNN)那样一步步按顺序处理。

特点:

  • 并行计算:不想RNN需要一步步计算,可以同时处理所有输入。
  • 捕捉长距离依赖:通过注意力机制,可以捕捉序列中相隔很远的部分之间的关系。
  • 扩展性强:可以堆叠很多层,形成超大的模型。

自注意力机制

Self-Attention(自注意力)是一种用于处理序列数据的机制,特别是在深度学习中 的Transformer模型中被广泛使用。它的直白解释如下:

  1. 关注自身的能力: Self-Attention允许模型在处理输入序列时关注序列中各个位置之间的关系,而不是简单地按顺序逐个处理。
  2. 自注意力权重: 对于每个输入位置,Self-Attention会计算一个与其他位置的关联程度,称为自注意力权重。这些权重表示了每个位置在整个序列中的重要性。
  3. 信息汇聚: 通过将每个位置的自注意力权重与相应位置的特征向量相乘,并将结果进行加权求和,可以汇聚输入序列的信息,产生新的表示。
  4. 并行计算: Self-Attention可以并行地计算每个位置的自注意力权重,因此在实践中往往具有较高的效率。

总的来说,Self-Attention允许模型在处理序列数据时同时关注不同位置的信息,并根据位置之间的关系来提取和汇聚输入序列的信息,从而更好地理解序列数据并改善模型性能。

Embeddings模型

Embeddings(嵌入)在自然语言处理(NLP)中起重要作用,其目的是将高维、离散的文本数据(如单词或短语)转换为低维、连续的向量表示。这些向量不仅编码了词本身的含义,还捕捉到了词语之间的语义和句法关系。通过embeddings,原本难以直接处理的文本数据可以被机器学习模型理解和操作。每个公司都有自己的Embeddings模型

非结构化文本转化为可计算的向量,保留语义信息。

如果一个单词在一些上下文中经常与另一个单词一起出现,那么这两个单词的嵌入向量在向量空间中就会有相似的位置,这意味着它们有相似的含义和语义。例如queen和king接近、man和woman接近。

余弦相似度

余弦相似度是一个衡量两个非零向量之间夹角的度量,它给出的是这两个向量在多大程 度上指向相同的方向。余弦相似度的值域是[-1,1],其中:

  • 1:完全同向(高度相似)
  • 0:正交(无关)
  • -1:完全反向

公式:

cosθ=ABA×B

其中:

  • A・B 是向量A和向量B的点积(dot product),通过np.dot(a, b)来计算。
  • ||A||和||B||分别是向量A和向量B的L2范数(欧几里得长度),通过np.linalg.norm(a)np.linalg.norm(b)来计算。

熟悉各种大模型接口调用

Open Al 的API为开发者提供了强大的工具来构建智能应用程序。无论是AI领域的新人还是经验手富的开发者,掌握如何使用Python调用Open Al 库都是一项必备技能。 使用 Open Al 库连接国产大模型已经在多个领域得到了广泛应用,包括:千问,智普,百川,文心一言等等。 在开始编写代码之前,确保已经安装新版Python环境(3.11及以上),并且已经安装了Open AI库。你可以通过以下命令来安装。

shell
pip install openai

OpenAI的参数

参数类型说明
modelstr必填,指定模型名称(如 gpt-4o, glm-4
messageslist必填,对话历史,含 role(system/user/assistant)和 content
max_tokensint控制输出长度(token 数)
temperaturefloat (0–2)控制随机性: • 低值(<0.5):确定性强,适合逻辑/数学 • 高值(≥1):创意性强,适合写作
top_pfloat (0–1)另一种随机性控制(通常与 temperature 二选一)
nint返回几个独立回答(默认 1)
streambool是否流式输出(逐字返回)
stopstr/list遇到指定字符串时停止生成
presence_penaltyfloat [-2,2]鼓励引入新话题(防重复主题)
frequency_penaltyfloat [-2,2]抑制重复词句(防啰嗦)
tools / tool_choicedict支持函数调用(Function Calling)

💡 建议

  • 创意写作 → temperature=1.0~1.5
  • 逻辑推理/代码 → temperature=0.2~0.5

通过代码与ChatGPT对话

python
client = OpenAI(
 base_url='',
 api_key='your_apikey',
)

completion = client.chat.completions.create(
	model="gpt-40-mini",
	messages=[
		{"role": "system", "content": "你是一个智能的助手"},
		{"role": "user", "content": "帮我生成一个两百字的家长会心的。"}
	]
)

print(completion.choices[0].message)

案例:利用Embeddings将指定信息向量化

需求:有一个评论的csv文件,有id,time,userId,goodId,Score,Summary,Text字段,需要将摘要与内容进行向量化。

python
from openai import OpenAI
import pandas as pd

# 读取数据
df = pd.read_csv('datas/file.csv', index_col=0)
df = df[['Time', 'UserId', 'Score', 'Summary', 'Text']].dropna()
df['Text_content'] = 'Summary:' + df['Summary'].str.strip() + "; Text:" + df['Text'].str.strip()

# 初始化客户端
client = OpenAI(base_url="https://open.bigmodel.cn/api/paas/v4", api_key="your_api_key")

# 文本转 Embedding
def text_to_embedding(text, model="embedding_model"):
 return client.embeddings.create(input=text, model=model).data[0].embedding

df['embedding'] = df['Text_content'].apply(lambda x: text_to_embedding(x))
df.to_csv('datas/output.csv')

案例:给一个关键词/一句话,去检索相似的用户评论

python
import numpy as np
import ast

def cosine_similarity(a, b):
 return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

def search_similar_text(df, query, top_n=3):
 # 将字符串 embedding 转为向量
 df['embedding_vector'] = df['embedding'].apply(ast.literal_eval)
 query_vec = text_to_embedding(query)

 # 计算相似度
 df['similarity'] = df['embedding_vector'].apply(
  lambda v: cosine_similarity(v, query_vec)
 )

 # 返回最相似的 top_n 条评论
 results = (df.sort_values('similarity', ascending=False)
   .head(top_n)['Text_content'])
 
 for r in results:
  print(r.replace('Summary:', '').replace('; Text:', ''))
  print('-' * 30)

Released under the MIT License.