AI
基本概念
AIGC 和 AGI
AIGC(AI生成内容): 接下来是AIGC,既AI Generated Content。这就是利用AI技术生成的内容。比如:Chat GPT
- 文本生成:新闻报道、广告文案、产品描述等.
- 图像生成:图像素材、艺术创作、设计等.
- 音频生成:音乐、电台广播等.
- 视频生成:视频剪辑、电影预告片等.
AGI(通用人工智能): Artificial General Intelligence,AGI的目标是创造能想人一样可以思考、学习、执行多种任务的系统。
大模型分类
按照输入数据类型的不同,大模型可以分为以下三类:
- 语言大模型: 是指再自然语言处理(Natural Language Processing,NLP)领域中的一类大模型,通常用于处理文本数据和理解自然语言。
- 视觉大模型: 是指再
计算机视觉(Computer Vision,CV)领域中使用的大模型,通常用于图像处理和分析。 - 多模态大模型: 是指能够处理多种不同类型数据的大模型,例如文本、图像、音频等多模态数据。这类模型结合了NLP和CV的能力。
Transformer
目前新版的语言模型都是基于Transformer架构训练的。
Transformer是一种深度学习架构,它的核心思想是:通过注意力机制(Attention)捕捉序列中不同部分之间的关系,而不是想以前的模型(如RNN)那样一步步按顺序处理。
特点:
- 并行计算:不想RNN需要一步步计算,可以同时处理所有输入。
- 捕捉长距离依赖:通过注意力机制,可以捕捉序列中相隔很远的部分之间的关系。
- 扩展性强:可以堆叠很多层,形成超大的模型。
自注意力机制
Self-Attention(自注意力)是一种用于处理序列数据的机制,特别是在深度学习中 的Transformer模型中被广泛使用。它的直白解释如下:
- 关注自身的能力: Self-Attention允许模型在处理输入序列时关注序列中各个位置之间的关系,而不是简单地按顺序逐个处理。
- 自注意力权重: 对于每个输入位置,Self-Attention会计算一个与其他位置的关联程度,称为自注意力权重。这些权重表示了每个位置在整个序列中的重要性。
- 信息汇聚: 通过将每个位置的自注意力权重与相应位置的特征向量相乘,并将结果进行加权求和,可以汇聚输入序列的信息,产生新的表示。
- 并行计算: Self-Attention可以并行地计算每个位置的自注意力权重,因此在实践中往往具有较高的效率。
总的来说,Self-Attention允许模型在处理序列数据时同时关注不同位置的信息,并根据位置之间的关系来提取和汇聚输入序列的信息,从而更好地理解序列数据并改善模型性能。
熟悉各种大模型接口调用
Open Al 的API为开发者提供了强大的工具来构建智能应用程序。无论是AI领域的新人还是经验手富的开发者,掌握如何使用Python调用Open Al 库都是一项必备技能。 使用 Open Al 库连接国产大模型已经在多个领域得到了广泛应用,包括:千问,智普,百川,文心一言等等。 在开始编写代码之前,确保已经安装新版Python环境(3.11及以上),并且已经安装了Open AI库。你可以通过
pip install openaiEmbeddings模型
Embeddings(嵌入)在自然语言处理(NLP)中起重要作用,其目的是将高维、离散的文本数据(如单词或短语)转换为低维、连续的向量表示。这些向量不仅编码了词本身的含义,还捕捉到了词语之间的语义和句法关系。通过embeddings,原本难以直接处理的文本数据可以被机器学习模型理解和操作。每个公司都有自己的Embeddings模型 它就是将「不可计算」「非结构化」的词转化为「可计算」「结构化」的向量。
如果一个单词在一些上下文中经常与另一个单词一起出现,那么这两个单词的嵌入向量在向量空间中就会有相似的位置,这意味着它们有相似的含义和语义。例如queen和king接近、man和woman接近。
案例:利用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']]
# 清洗数据
df = df.dropna() # 删除NaN,NaT的数据
df['Text_content'] = 'Summary:' + df.Summary.str.strip() + "; Text:" + df.Text.str.strip()
client = OpenAI(base_url="", api_key="")
def text_to_embedding(text, model):
return client.embeddings.create(input=text, model=model).data[0].embedding
# 把Text_content字段的文本值,转化为向量,存放到新字段'embedding'
df['embedding'] = df.Text_content.apply(lambda x: text_to_embedding(x, 'embedding_model'))
df.to_csv('datas/output.csv')余弦相似度
余弦相似度是一个衡量两个非零向量之间夹角的度量,它给出的是这两个向量在多大程 度上指向相同的方向。余弦相似度的值域是[-1,1],其中1表示两个向量完全相同方向,-1表示完全相反方向,而0则表示两个向量正交(即不相关)。 具体来说,公式: $$ \cos\theta = \frac{\vec{A} \cdot \vec{B}}{|\vec{A}| \times |\vec{B}|} $$
其中:
- A・B 是向量A和向量B的点积(dot product),通过
np.dot(a, b)来计算。 - ||A||和||B||分别是向量A和向量B的L2范数(欧几里得长度),通过
np.linalg.norm(a)和np.linalg.norm(b)来计算。
案例:给一个关键词/一句话,去检索相似的用户评论
client = OpenAI(
base_url='https://open.bigmodel.cn/api/paas/v4',
api_key='5a8d2ab8074b459f93f7404df0b8cd22.zcwMrP6OWnJkR0nR',
)
# 指定模型将指定字符串变为向量
def text_to_embedding(text, model):
return client.embeddings.create(input=text, model=model).data[0].embedding
# 计算余弦相似度
def cosine_distance(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
"""给一个关键词/一句话,去检索相似的用户评论"""
def search_similar_text(df, search_keywords, top_n = 3):
# literal_eval 解释/计算一个字符串
# 把str变成矩阵
df['embedding_vector'] = df['embedding'].apply(ast.literal_eval)
input_vector = text_to_embedding(search_keywords,'embedding_model')
df['similarity'] = df.embedding_vector.apply(lambda vector: cosine_distance(vector,input_vector))
res = (df.sort_values('similarity', ascending=False)
.head(top_n)
.combined.str.replace('Summary:', '')
.str.replace('; Text:', '')
)
for r in res:
print(r)
print('-'*30)
if __name__ == '__main__':
df = pd.read_csv('./data/output.csv')
search_similar_text(df, "你好")通过代码与ChatGPT对话
client = OpenAI(
base_url='https://open.bigmodel.cn/api/paas/v4',
api_key='5a8d2ab8074b459f93f7404df0b8cd22.zcwMrP6OWnJkR0nR',
)
completion = client.chat.completions.create(
model="gpt-40-mini",
messages=[
{"role": "system", "content": "你是一个快乐的助手"},
{"role": "user", "content": "帮我生成一个两百字的家长会心的。"}
]
)
print(completion)
print(completion.choices[0].message)OpenAI的参数
- model:必选参数,大模型的名称
- messages:必选参数,提示词;(里面可以指定角色)
- max_tokens: 可选参数,代表返回结果的token数量;
- temperature: 可选参数,取值范围为0-2,默认值为1。参数代表采样温度,数值越小 则模型会倾向于选择概率较高的词汇,生成的文本会更加保守;而当temperature值较高 时,模型会更多地选择概率较低的词汇,生成的文本会更加多样;
- top_p:可选参数,取值范围为0-1,默认值为1,和temperature作用类似,用于控制输 出文本的随机性,数值越趋近与1,输出文本随机性越强,越趋近于0文本随机性越弱;通 常来说若要调节文本随机性,top_p和temperature两个参数选择一个进行调整即可;这里 更推荐使用temperature参数进行文本随机性调整;
- n:可选参数,默认值为1,表示一个提示返回几个Completion;
- stream: 可选参数,默认值为False,表示回复响应的方式,当为False时,模型会等待返 回结果全部生成后一次性返回全部结果,而为True时,则会逐个字进行返回;
- stop:可选参数,默认为nul,该参数接受一个或多个字符串,用于指定生成文本的停止 信号。当模型生成的文本遇到这些字符串中的任何一个时,会立即停止生成。这可以用来 控制模型的输出长度或格式; 分别用于控制生成文本中新单词的出现频率和单词的重复频率,可以避免生成的文本过于重复或单调。
- presence_penalty:可选参数,默认为0,取值范围为[-2,2],该参数用于调整模型生成新 内容(例如新的概念或主题)的倾向性。较高的值会使模型更倾向于生成新内容,而较低 的值则会使模型更倾向于坚持已有的内容,当返回结果篇幅较大并且存在前后主题重复 时,可以提高该参数的取值;
- frequency_penalty:可选参数,默认为0,取值范围为[-2,2],该参数用于调整模型重复 自身的倾向性。较高的值会使模型更倾向于避免重复,而较低的值则会使模型更可能重复 自身;当返回结果篇幅较大并且存在前后语言重复时,可以提高该参数的取值;
- tools:可以调用的函数;
- tool choice:调用函数的策略
生成文本时,建议温度值≥1,如果做逻辑推理和数学推理建议<0.5
