[toc]
我们生活在一个快速发展的社会中,每个人都在奔跑!我们似乎总是没有时间阅读、了解自己和享受一些高质量的内容。在这种氛围中,我们只能希望有什么东西能帮上忙,而这个东西可以是人工智能。
构建聊天界面以汇总文本和 PDF,我们可以快速利用我们的 python 知识来实现和部署文本摘要聊天机器人,使用预训练的 AI 模型和前端框架 gradio。
1.实现模型加载
首先,我们在 python 脚本中导入pipeline
,负责加载和调用 AI 模型:
from transformers import pipeline
model_checkpoint = "FalconsAI/text_summarization"
summarizer = pipeline("summarization", model=model_checkpoint)
我们选择了一个相对较小的模型。
2.定义预处理函数
如果它们被批量上传,则合并 pdf......
def merge_pdfs(pdfs: list):
merger = PdfMerger()
for pdf in pdfs:
merger.append(pdf)
merger.write(f"{pdfs[-1].split('.')[0]}_results.pdf")
merger.close()
return f"{pdfs[-1].split('.')[0]}_results.pdf"
将合并的 pdf 转换为大小合适的文本字符串:
def pdf2string(pdfpath):
loader = PyPDFLoader(pdfpath)
documents = loader.load()
### Split the documents into smaller chunks for processing
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)
fulltext = ""
for text in texts:
fulltext += text.page_content+"\n\n\n"
return fulltext
现在我们已经实现了预处理功能,让我们用 Gradio 设计我们的聊天机器人。
3.构建对话机器人
我们想要一个管理聊天记录的函数,将文本消息与pdf文档分开,代码如下:
def add_message(history, message):
if len(message["files"]) > 0:
history.append((message["files"], None))
if message["text"] is not None and message["text"] != "":
history.append((message["text"], None))
return history, gr.MultimodalTextbox(value=None, interactive=False)
返回history包含如下内容:
- 上传文件的路径元组(如下所示:“/path/to/file1.pdf”、“path/to/file2.pdf...”))和 None(表示来自聊天机器人的消息,尚未写入)
- 包含我们消息的文本字符串(例如:“In this article, we will see why cats are so overwhelmingly cute...”)和None(代表来自聊天机器人的消息,尚未编写)
让我们看看如何使用历史记录来生成文本:
def bot(history):
global histr
if not history is None:
if type(history[-1][0]) != tuple:
text = history[-1][0]
response = summarizer(text, max_length=int(len(text.split(" "))*0.5), min_length=int(len(text.split(" "))*0.05), do_sample=False)[0]
response = response["summary_text"]
history[-1][1] = ""
for character in response:
history[-1][1] += character
time.sleep(0.05)
yield history
if type(history[-1][0]) == tuple:
filelist = []
for i in history[-1][0]:
filelist.append(i)
finalpdf = merge_pdfs(filelist)
text = pdf2string(finalpdf)
response = summarizer(text, max_length=int(len(text.split(" "))*0.5), min_length=int(len(text.split(" "))*0.05), do_sample=False)[0]
response = response["summary_text"]
history[-1][1] = ""
for character in response:
history[-1][1] += character
time.sleep(0.05)
yield history
else:
history = histr
bot(history)
正如你所看到的,我们检查历史中最后一个元组的第一个元素(history[-1][0])是否是一个元组:
- 如果它是一个元组,我们将所有 pdf 合并到其中,将它们转换为字符串,并将文本通过管道传递到摘要器,作为输出,返回一个文本,其中包含原始文档中少于 50% 但超过 5% 的单词
- 如果是文本字符串,我们直接汇总该字符串。
我们将输出摘要流式传输为聊天机器人响应
现在构建多模态聊天机器人:
with gr.Blocks() as demo:
chatbot = gr.Chatbot(
[[None, "Hi, I'm **ai-summarizer**, your personal summarization assistant"]],
label="ai-summarizer",
elem_id="chatbot",
bubble_full_width=False,
)
chat_input = gr.MultimodalTextbox(interactive=True, file_types=["pdf"], placeholder="Enter message or upload file...", show_label=False)
chat_msg = chat_input.submit(add_message, [chatbot, chat_input], [chatbot, chat_input])
bot_msg = chat_msg.then(bot, chatbot, chatbot, api_name="bot_response")
bot_msg.then(lambda: gr.MultimodalTextbox(interactive=True), None, [chat_input])
启动函数
demo.queue()
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", share=False)
执行app.py
python3 app.py
模型加载完毕之后,在 localhost:7860
上能够看到聊天机器人,现在我们的摘要助手正在工作了,我们可以通过它来总结我们的文档了!
小结
本节我们学习了基于AI对PDF文件学习汇总,希望对初学者有所帮助。
小编是一名热爱人工智能的专栏作者,致力于分享人工智能领域的最新知识、技术和趋势。这里,你将能够了解到人工智能的最新应用和创新,探讨人工智能对未来社会的影响,以及探索人工智能背后的科学原理和技术实现。欢迎大家点赞,评论,收藏,让我们一起探索人工智能的奥秘,共同见证科技的进步!