本周末用Python可以完成的五个AI项目

2024-10-09 05:10:32 英文原文

作者:Shaw Talebi

从初学者友好到高级

Shaw Talebi

Towards Data Science

提升您的AI技能的最佳方式是通过构建项目然而,弄清楚要建造什么如果你刚刚开始可能会觉得有些困难。在这里,我分享了五个你可以快速构建的AI项目,并按三个不同的复杂程度来介绍。我会分解每个项目的实施步骤以及所需的Python库。

来自Canva的图片。

The 排名第一的错误初学者在思考项目想法时的一个常见错误是从问题开始。如何使用这项新技术?虽然这是一种学习新工具的好方法,但有更好的方式。

好的项目想法始于一个问题,我能够解决什么问题?这不仅在与潜在雇主分享时是一个很好的故事,而且解决问题就是你提升自己的方式。将技术技能转化为价值.

以下所有项目都采用了这种以问题为导向的方法。你可以直接实施这些想法,或者(更好的是)将它们作为解决你个人面临的问题的灵感来源。

找工作的过程中一个有效但耗时的部分是根据不同的职位描述调整你的简历。虽然几年前自动化这项任务会是一个高级项目,但在今天的大规模语言模型的帮助下,这变得简单得就像……API调用.

这里是一步步实现此类自动化的分解说明。

  1. 创建你简历的Markdown版本(注意:ChatGPT可以为你做到这一点。)
  2. 尝试不同的提示模板,这些模板可以将你的Markdown格式简历和工作描述作为输入,并生成一个新的Markdown格式的简历。
  3. 使用OpenAI的Python API动态地提示GPT-4o-mini重写你的简历。
  4. 将 Markdown 文件转换为 HTML,然后再转换为 PDF 的方法是:Markdown以及PDFKit各自的库。

图书馆: 开放AI, Markdown, pdfkit

虽然我们可以轻松地使用ChatGPT来完成这个任务,但用Python实现的好处是可以轻松扩展该过程。这里是步骤3的一些初始代码。

导入openai
openai.api_key = "你的sk"

# 提示(假设md_resume和job_description已经定义)
提示 = f""""
我有一份用Markdown格式编写的简历和一份工作描述。
请根据职位要求调整我的简历以更好地与岗位需求对齐的同时 \
保持专业语气。根据我的技能、经验和 \
成就突出与职位最相关的要点。
确保我的简历仍然反映了我的独特资格和优势
但强调与职位描述相匹配的技能和经验。

这是我的简历,用Markdown编写:
{md_resume}

### 以下是职位描述:
{工作描述}

请修改简历为:
使用职位描述中的关键词和短语。
调整每个角色下的项目符号,以强调相关的技能和成就。
确保我的经历以符合要求资质的方式呈现。
保持清晰、简洁和专业。

返回更新后的简历(格式为Markdown)。

"""

# 发起 API 请求
response = 开放AI聊天完成创建(
model="gpt-4o-mini",
消息列表=[
{"role": "system", "content": "你是一个乐于助人的助手。”}
{"role": "用户", "content": 提示}
],
温度 = 0.25
)

# 提取响应
简历 = 响应.choices[0].message.content

注意:ChatGPT对于编写此类简短的代码片段(和提示)非常有帮助。如果遇到困难,可以在第4步尝试使用它。

虽然我喜欢将技术讲座添加到我的YouTube“稍后观看”播放列表中,但我可能要过一段时间才会去看它们(如果我有时间的话 😅)。一个可以帮助解决这个问题的项目是一个能够为我观看视频并生成简洁摘要和关键点的工具。

这里有一种方法可以做到这一点:

  1. 使用正则表达式从视频链接中提取YouTube视频ID
  2. 使用视频ID提取字幕を使用するにはYouTube字幕API
  3. 尝试使用不同的ChatGPT提示词来有效地总结对话记录
  4. 使用OpenAI的Python API来自动化流程

图书馆: 开放人工智能(OpenAI), YouTube字幕API

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

这里有一些启动代码。

导入 re 模块
从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)

如果匹配:
返回 match.group(1)
否则:
返回None

提取字幕
text_list = [ transcript[i]['文本'] for i in range(len(transcript)) ]
transcript_text = '\n'.join(text_list)

我的稍后观看播放列表并不是我囤积技术信息的唯一地方。另一个存储信息的地方是我的桌面,上面有(118)篇研究论文。由于手动查阅这些论文会非常耗时,让我们看看人工智能能提供什么帮助。

可以创建一个工具,分析我桌面上每个PDF的内容,并根据主题将其分类整理到不同的文件夹中。文本嵌入Vectors可以将每篇论文转换为密集的向量表示,然后使用传统的机器学习算法(如KMeans)对相似的文章进行聚类。

以下是更详细的分解:

  1. 阅读每篇研究论文的摘要 USINGPyMuPDF
  2. 使用该sentence-transformers用于将摘要转换为文本嵌入并将其存储在Pandas DataFrame中的库
  3. 使用您最喜欢的来自sklearn的聚类算法根据相似性对嵌入进行分组
  4. 为每个集群创建文件夹,并将文件移动到相应的文件夹中。

图书馆: PyMuPDF, 句子变换器, 熊猫, sklearn

该项目的关键步骤是生成文本嵌入这里是一个使用sentence_transformers进行该操作的代码片段。

从sentence_transformers导入SentenceTransformer

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

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

计算嵌入向量
embeddings = model.encode(摘要列表)

几个月前,我帮助一家公司创建了一个基本的RAG(检索增强生成)一个技术报告集的系统。搜索此类报告的一个挑战是关键信息往往以图表而非文字.

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

这里是一个基本的分解:

  1. 给定一个PDF,将其分成若干部分并提取图像使用PyMuPDF
  2. 使用多模态嵌入模型(例如:)nomic-ai/nomic-嵌入文本-v1.5用密集向量表示分块和图像,并将它们存储在数据框中
  3. 对于知识库中的所有PDF重复上述操作
  4. 给定一个用户查询,通过与知识库相同的嵌入模型进行处理
  5. 计算查询嵌入与知识库中每个项目之间的余弦相似度得分
  6. 返回 top k 结果

图书馆: PyMuPDF, 转换器, pandas, sklearn

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

这里有一些基本的样板代码来完成这个任务(由ChatGPT提供)。如果你遇到困难,试着让它提取图片。

导入 fitz  # PyMuPDF

def 提取文本块(pdf路径, 块大小, 重叠大小):
打开PDF文件
pdf_document = fitz.open(pdf_path)
chunks = []

# 遍历PDF中的每一页
对于页码page_num在pdf_document长度范围内的遍历:
页面 = pdf文档[页码]
page_text = page.get_text()

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

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

返回chunks

# 提取参数
pdf_path = "你的文件.pdf"
chunk_size = 1000 # 每个文本块的字符数大小
overlap_size = 200 # 字符重叠大小

text_chunks = extract_text_chunks_with_page_numbers(pdf_path, chunk_size, overlap_size)

显示带有页码的块
对于 i, (页码, 块) 在枚举(text_chunks):
打印(f"块 {i + 1}(页面 {page_number}):\n{ chunk }\n{'-' * 50}")

在过去的一年里,我帮助近100家企业和个人建立了AI项目。其中,最多的是一项最常见的项目相关问题是一个文档问答系统。在之前的项目基础上,我们可以以一种简单直接的方式实现这一系统。

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

以下是步骤:

  1. 在知识库(如项目4中创建的知识库)上执行搜索
  2. 将用户查询与顶级搜索结果结合,并将其传递给一个多模态模型。
  3. 为问答系统创建一个简单的Gradio用户界面。

图书馆: PyMuPDF, 变换器, pandas, sklearn, 一起/开放人工智能(OpenAI), Gradio

注意:通过Together AI的API,Llama 3.2 Vision在2025年之前是免费的

这个项目本质上结合了项目2和项目4。然而,它包括了一个用户界面的必要组件。为此,我们可以使用一个仪表板工具如Gradio,哪一位允许我们用几行代码创建一个聊天界面.

这里是根据Gradio改编的一个示例代码片段:文档为了做到这一点。

导入gradio作为gr模块
导入时间模块

定义生成响应函数(message,历史记录):
"""
你的生成响应的代码
"""
返回响应

demo = gr.ChatInterface(
fn=生成响应,
例子=[{"文本": "Hello", "文件": []}]
title="回声机器人"
multimodal=True)

demo.launch()

得益于像ChatGPT这样的工具和光标, 构建AI项目从未如此轻松过快速的几年前曾经让我困扰几个小时(甚至几天)的问题,现在可以用先进的编码助手在几分钟内解决了。

我的建议是利用这些工具来学得更快大胆一点在你的项目选择中。对于项目,找出问题并将实施时间限制在一个周末内。

在评论区提出你的问题吧 :))

关于《本周末用Python可以完成的五个AI项目》
暂无评论

摘要

从入门到高级 开发您的AI技能的最佳方式是通过构建项目。初学者在思考项目想法时最常见的错误是从“如何使用这项新技术?”这个问题开始。寻找工作时最有效但耗时的部分是将简历适应不同的职位描述。以下是步骤: 在知识库(如在项目4中创建的)上进行搜索 结合用户查询和前k个搜索结果,并将其传递给一个多模态模型。 ChatInterface( fn=generate_response, examples=[{"text": "Hello", "files": []}], title="Echo Bot", multimodal=True) demo.launch() 得益于像ChatGPT和Cursor这样的工具,构建AI项目从未如此快速便捷。