17611538698
webmaster@21cto.com

这个周末,你可以用 Python 实现的 5 个 AI 项目

人工智能 0 784 2024-10-13 11:31:36

开发 AI 技术的最佳方式就是开发、构建与实践项目

但是,如果我们是刚刚起步,要先弄清楚要构建什么可能会遇到困难。在这里,我分享了 5 个可以在适度复杂程度上快速构建的 AI 项目。

以下,我们将分解实现每个想法所需的步骤与所需要的 Python 扩展库。

图片

当初学者在思考项目创意时,最常犯的错误就是从“我该如何使用这项新技术? ”这个问题开始。

这确实是一种学习新工具的好方法,但还有更好的方法。

其实好的项目创意始于这样一个问题:“我能解决什么问题?”这不仅可以在与潜在雇主分享时成为一个好故事,而且解决问题,也是你将技术技能转化为价值的方式。

以下项目都采用了这种问题优先的方法。这些想法可以直接用,也可以将它们作为解决碎片问题的灵感。

1)简历优化(初级)

求职过程中一个有效,但耗时的部分是将简历调整为适合不同的职位描述。

在几年前,自动化任务是一个高级项目,但借助当今的大语言模型,它就像API 调用一样简单。

以下是如何实现这种自动化的分步说明。

  1. 创建简历的 markdown 版本(注意:ChatGPT 可以完成此操作)。

  2. 尝试使用不同的提示模板,这些模板采用您的 markdown 简历和职位描述,并以 markdown 格式输出新的简历。

  3. 使用 OpenAI 的 Python API 提示 GPT-4o-mini 动态重写你的简历。

  4. 分别使用:

    markdown(https://pypi.org/project/Markdown/)

    pdfkit(https://pypi.org/project/pdfkit/)

    将 markdown 文件转换为 HTML,然后转换为 PDF 。

其它相关扩展库openaimarkdownpdfkit,均在pypi中。

虽然,这些功能我们可以轻松使用 ChatGPT 来实现这,但是使用 Python 来实现的优势是,还可以轻松将该过程扩展。

以下,是步骤 3 的一些初始代码。

import openai 
openai.api_key = "your_sk"

# prompt(假设 md_resume 和 job_desciption 已经定义)
prompt = f"""
我有一份 Markdown 格式的简历和一份职位描述。\
请调整我的简历以更好地符合职位要求,同时
保持专业的语气。定制我的技能、经验和\
成就,以突出与职位最相关的要点。\
确保我的简历仍然反映我独特的资历和优势\
但强调与职位描述相匹配的技能和经验。

### 这是我的 Markdown 简历:
{md_resume}

### 这是职位描述:
{job_desciption}

请修改简历以:
- 使用职位描述中的关键字和短语。
- 调整每个职位下的要点,以强调相关技能和成就。
- 确保我的经历以与所需资格相匹配的方式呈现。
- 自始至终保持清晰、简洁和专业。

以 Markdown 格式返回更新后的简历。

"""


# 进行 api 调用
response = openai.chat.completions.create(
model= "gpt-4o-mini" ,
messages=[
{ "role" : "system" , "content" : "你是一个很有助益的助手。" },
{ "role" : "user" , "content" : prompt}
],
temperature = 0.25
)

# 提取响应内容
resume = response.choices[ 0 ].message.content

注意:ChatGPT 对于编写此类简短代码片段(和提示语)非常有帮助 。

2)YouTube 视频总结(初学者)

一个可以帮助我实现此功能的项目,是一个可以帮我观看视频并生成包含要点的简明摘要的工具。

以下是一种方法:

  1. 使用正则表达式从视频链接中提取 YouTube 视频 ID

  2. 使用视频 ID 通过youtube-transcript-api提取

  3. 尝试使用不同的 ChatGPT 提示语来有效地总结文字记录

  4. 使用 OpenAI 的 Python API 来自动化该过程

扩展库openaiyoutube-transcript-api

从技术角度来看,这与第一个项目非常相似。然而一个关键的区别是,我们需要自动提取视频记录,并将其输入到大语言模型中。

以下是启动代码。


youtube_transcript_api导入YouTubeTranscriptApi

youtube_url = "视频链接"

# 使用正则表达式提取视频 ID
video_id_regex = r'(?:v=|\/)([0-9A-Za-z_-]{11}).*'
match = re.search(video_id_regex, youtube_url)

if match :
return match .group( 1 )
else :
return None

# 提取成绩单
text_list = [transcript[i][ 'text' ] for i in range ( len (transcript))]
transcript_text = '\n' .join(text_list)

3)自动组织 PDF(中级)

我的“稍后观看”播放列表,并不是我储存技术信息的唯一地方。另一个储存空间是我的桌面,上面堆满了 (118) 篇研究论文。

由于手动审阅这些论文会 (非常) 耗时,让我们看看人工智能可以如何提供帮助。

我们可以构建一个工具来分析我桌面上每个 PDF 的内容,并根据主题将它们组织到文件夹中。文本嵌入可以将每篇论文转化为密集的向量表示,然后可以使用 K-Means 等传统机器学习算法对类似的文章进行聚类。

以下是更详细的分类:

  1. 使用PyMuPDF阅读每篇研究文章的摘要;

  2. 使用sentence-transformers库将摘要转换为文本嵌入并将其存储在 Pandas DataFrame 中;

  3. 使用你最喜欢的 sklearn 聚类算法,根据相似性对嵌入进行分组;

  4. 为每个集群创建文件夹并将文件移动到适当的文件夹中。

扩展库列表PyMuPDF sentence_transformerspandassklearn

该项目的关键步骤是生成文本嵌入。以下是使用 sentence_transformers 执行此操作的代码片段。

从 sentence_transformers 导入 SentenceTransformer 

# 加载嵌入模型
model = SentenceTransformer( "all-MiniLM-L6-v2" )

# 将摘要存储在列表中
abstract_list = [ "abstract 1" , "abstract 2" ]

# 计算嵌入
embeddings = model.encode(abstract_list)

4)多模式搜索(中级)

几个月前,我帮助一家公司为一系列技术报告创建了一个基本的RAG系统。

搜索此类报告的挑战之一是关键信息通常以图表,而不是文本的形式呈现。

将这些视觉信息纳入搜索过程的一种方法是使用多模态嵌入模型在共享空间中表示文本和图像。

基本分类如下:

  1. 给定一个 PDF,将其分成几部分,然后使用PyMuPDF提取图像;

  2. 使用多模态嵌入模型(例如nomic-ai/nomic-embed-text-v1.5)将块和图像表示为密集向量,并将它们存储在数据框中;

  3. 对知识库中的所有 PDF 重复此操作;

  4. 给定一个用户查询,将其传递给与知识库相同的嵌入模型;

  5. 计算查询嵌入和知识库中每个项目之间的余弦相似度得分;

  6. 返回前 k 个结果。

扩展库PyMuPDFtransformerspandassklearn

该项目最重要的部分是如何对 PDF 进行分块。最简单的方法是使用固定字符数,并在各块之间进行一些重叠。捕获每个块的元数据(例如文件名和页码)也会很有帮助。

以下是一些基本的样板代码(由 ChatGPT 提供)。如果遇到困难,请尝试让它提取图像。

import fitz   # PyMuPDF 

def extract_text_chunks ( pdf_path, chunk_size, overlap_size ):
# 打开 PDF 文件
pdf_document = fitz。open (pdf_path)
chunks = []

# 遍历 PDF 中的每一页
for page_num in range ( len (pdf_document)):
page = pdf_document[page_num]
page_text = page.get_text()

# 将当前页面的文本拆分为具有重叠的块
start = 0
while start < len (page_text):
end = start + chunk_size
chunk = page_text[start:end]

# 将页码与块一起存储
chunks.append((page_num + 1 , chunk))
# 移动到下一个具有重叠的块
start += chunk_size - override_size

return chunks

# 提取参数
pdf_path = "your_file.pdf"
chunk_size = 1000 # 每个文本块的大小(以字符为单位)
override_size = 200 # 重叠大小(以

字符为单位) text_chunks = extract_text_chunks_with_page_numbers(pdf_path, chunk_size, override_size)

# 显示带有页码的块
for i, (page_number, chunk) in enumeration(text_chunks):
打印f“块{i + 1 }第{page_number}页):\n {chunk} \n { '-' * 50 }

5)知识库问答(高级)

在过去的一年里,我帮助了近 100 家企业和个人建立 AI 项目。

到目前为止,人们最常问的项目是文档问答系统。在之前项目的基础上,我们可以直接实现它。

如果我们已经将文档分块并存储在 DataFrame 中,我们可以将多模式搜索工具转换为多模式 RAG 系统。

步骤如下:

  1. 对知识库进行搜索(例如在项目 4 中创建的搜索)

  2. 结合用户查询与前 k 个搜索结果并将其传递给多模式模型。

  3. 为 QA 系统创建一个简单的 Gradio 用户界面。

扩展库 PyMuPDFtransformerspandassklearn together / openaiGradio

注意:Llama 3.2 Vision 通过 Together AI 的 API 可免费使用至 2025 年。

该项目本质上结合了项目 2 和 4。但是,它包含用户界面的基本组件。为此,我们可以使用Gradio之类的仪表板工具,它允许我们用几行代码创建聊天 UI

这是根据 Gradio 的文档改编的一个示例片段。

import gradio as gr 
import time

def generate_response ( message, history ):
"""
用于生成响应的代码
"""

return response

demo = gr.ChatInterface(
fn=generate_response,
examples=[{ "text" : "Hello" , "files" : []}],
title= "Echo Bot" ,
multimodal= True )

demo.launch()

下一步是什么?

当我们借助 ChatGPT 和Cursor等工具时,快速构建 AI 项目就变得简单

几年前,一些问题会让我困扰数小时(甚至数天),而现在,借助高级编码助手,这些问题只需几分钟即可解决。

我最后的建议是,可以使用这些工具来更快地学习,并大胆选择项目。对于项目,找到问题并将实施时间限制在周末时间最佳。


作者:聆听世界的鱼

评论