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模型中被广泛使用。它的直白解释如下:
- 关注自身的能力: Self-Attention允许模型在处理输入序列时关注序列中各个位置之间的关系,而不是简单地按顺序逐个处理。
- 自注意力权重: 对于每个输入位置,Self-Attention会计算一个与其他位置的关联程度,称为自注意力权重。这些权重表示了每个位置在整个序列中的重要性。
- 信息汇聚: 通过将每个位置的自注意力权重与相应位置的特征向量相乘,并将结果进行加权求和,可以汇聚输入序列的信息,产生新的表示。
- 并行计算: Self-Attention可以并行地计算每个位置的自注意力权重,因此在实践中往往具有较高的效率。
总的来说,Self-Attention允许模型在处理序列数据时同时关注不同位置的信息,并根据位置之间的关系来提取和汇聚输入序列的信息,从而更好地理解序列数据并改善模型性能。
Embeddings模型
Embeddings(嵌入)在自然语言处理(NLP)中起重要作用,其目的是将高维、离散的文本数据(如单词或短语)转换为低维、连续的向量表示。这些向量不仅编码了词本身的含义,还捕捉到了词语之间的语义和句法关系。通过embeddings,原本难以直接处理的文本数据可以被机器学习模型理解和操作。每个公司都有自己的Embeddings模型
将非结构化文本转化为可计算的向量,保留语义信息。
如果一个单词在一些上下文中经常与另一个单词一起出现,那么这两个单词的嵌入向量在向量空间中就会有相似的位置,这意味着它们有相似的含义和语义。例如queen和king接近、man和woman接近。
余弦相似度
余弦相似度是一个衡量两个非零向量之间夹角的度量,它给出的是这两个向量在多大程 度上指向相同的方向。余弦相似度的值域是[-1,1],其中:
- 1:完全同向(高度相似)
- 0:正交(无关)
- -1:完全反向
公式:
其中:
- 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库。你可以通过以下命令来安装。
pip install openaiOpenAI的参数
| 参数 | 类型 | 说明 |
|---|---|---|
model | str | 必填,指定模型名称(如 gpt-4o, glm-4) |
messages | list | 必填,对话历史,含 role(system/user/assistant)和 content |
max_tokens | int | 控制输出长度(token 数) |
temperature | float (0–2) | 控制随机性: • 低值(<0.5):确定性强,适合逻辑/数学 • 高值(≥1):创意性强,适合写作 |
top_p | float (0–1) | 另一种随机性控制(通常与 temperature 二选一) |
n | int | 返回几个独立回答(默认 1) |
stream | bool | 是否流式输出(逐字返回) |
stop | str/list | 遇到指定字符串时停止生成 |
presence_penalty | float [-2,2] | 鼓励引入新话题(防重复主题) |
frequency_penalty | float [-2,2] | 抑制重复词句(防啰嗦) |
tools / tool_choice | dict | 支持函数调用(Function Calling) |
💡 建议:
- 创意写作 →
temperature=1.0~1.5 - 逻辑推理/代码 →
temperature=0.2~0.5
通过代码与ChatGPT对话
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字段,需要将摘要与内容进行向量化。
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')案例:给一个关键词/一句话,去检索相似的用户评论
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)