如何实现一个简单的“看图说话”?

释放双眼,带上耳机,听听看~!
了解如何通过开源模型实现一个简单的“看图说话”功能,包括使用开源模型识别图片内容并生成文本描述,以及通过大语言模型生成简短小故事。

目前最热门的“闭源”人工智能是OpenAI,称得上是如日中天(遥遥领先?这个词最近听得太多,总感觉像是讽刺,对于真正的王者来说),然而其很多功能却没那么容易体验到,如多模态,暂时就无法通过API调用。

那么要实现一个简单的“看图说话”,要如何做呢?可以分两步:

  1. 通过开源的模型,让开源模型识别图片的内容,生成一句话文本描述;
  2. 让大语言模型针对文本描述生成一个简短的小故事。

提到开源模型,那就不能不提Hugging Face:huggingface.co/

Hugging Face是一个专注于自然语言处理(NLP)的人工智能研究组织,一个生气勃勃的开源AI社区。他们以其开源库Transformers 而闻名,该库为各种任务(如文本分类、翻译、摘要等)提供了先进的 NLP模型和工具。

我们先去Hugging Face上找图片到文本的模型:
如何实现一个简单的“看图说话”?

我们这次用”Salesforce/blip-image-captioning-large“这个模型根据图片生成一句文本描述。不过这个模型有点大(1.8G),如果只是简单测试,也可以找小一点的模型,不然光下载模型都要花比较长的时间。

这些模型统称pretrained model,就是预先训练好了,不再需要训练,下载下来就可以直接使用。

生成图片描述

from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())  # read local .env file

from IPython.display import Image
from transformers import pipeline

pipe = pipeline("image-to-text",
                model="Salesforce/blip-image-captioning-large")

def caption(input):
    output = pipe(input)
    return output[0]['generated_text']

image_url = "https://free-images.com/md/ac01/cherries_fruits_sweet_cherry.jpg"

display(Image(url=image_url))

image_caption = caption(image_url)
print(image_caption)

要先安装transformers等库: !pip install --upgrade transformers

有了 transformers 库,要使用Salesforce/blip-image-captioning-large模型,只需要这一句:

pipe = pipeline(“image-to-text”,
model=”Salesforce/blip-image-captioning-large”) (第一次执行会下载1.8G的模型)

transformers的pipeline达到了“大巧不工”的境界,极大简化了我们使用模型的难度:不管什么模型,到了pipeline,就都是简单的输入输出了。

我们去free-images.com 找了这幅图,通过Salesforce/blip-image-captioning-large模型得到的文本是:there is a basket of cherries and a plate of cherries on a table (嗯,言简意不赅,还是漏掉好些内容)

如何实现一个简单的“看图说话”?

图片来自:free-images.com/md/ac01/che…

使用LangChain调用LLM生成小故事

我们接下来用调用大语言模型来根据图片的描述生成一个小故事,但是我们不会直接使用大模型服务商的接口,而是通过LangChain调用大语言模型。LangChain提供了很好的抽象,我们想换大语言模型就可以切换,不需要大规模修改我们的代码。

不过要注意的是,不管是大模型还是LangChain,都还在快速发展,LangChain目前的版本还是0.0.336,离稳定使用还有一段距离。

关于LangChain的具体使用,建议阅读专栏:juejin.cn/column/7290…

使用GPT4生成小故事

from langchain import PromptTemplate, LLMChain
from langchain.chat_models import AzureChatOpenAI

prompt_template = "你是一位小说作家,请根据用户的输入({input}),用中文写一篇小故事(大约200字)。"

llm = AzureChatOpenAI(deployment_name="GPT-4",
                      temperature=0.7, max_tokens=1500)  # 通过Azure的OpenAI服务
llm_chain = LLMChain(
    llm=llm,
    prompt=PromptTemplate.from_template(prompt_template)
)
story = llm_chain.run(image_caption)
print(story)

运行代码,得到的小故事还很温馨,虽然逻辑也“感人”(正常人谁会去摘了一篮子的樱桃还去买樱桃?):

在一座静谧的小山村,一张简朴的木质桌子上,放着一篮子鲜红的樱桃和一个盘子里的樱桃。这是老人家为孙子准备的,那孩子最喜欢吃这甜甜的樱桃。

篮子里的樱桃是老人早晨去山上摘的,每一颗都是日头照射下熠熠生辉,晶莹剔透。盘子里的樱桃则是从市场上买回来的。老人家曾对孙子说过,自己亲手摘下的樱桃和市场上买的味道是不同的,那是大自然的馈赠和人们劳作的结晶。

孙子每次回到家,第一件事就是跑到桌子前,盯着那篮子和盘子里的樱桃。他总是先吃一颗市场买来的,再吃一颗山上摘的。他告诉老人,这样可以让他尝出两种樱桃的不同。

老人微笑着看着孙子,虽然他们生活的环境简朴,但这份甜蜜的味道,却是他们生活中最珍贵的记忆。那篮子的樱桃,那盘子的樱桃,它们不仅仅是果实,更是老人与孙子的情感纽带,是他们生活的甜蜜和幸福。

上面使用微软Azure的GPT-4模型来生成小故事。相对于OpenAI的接口,Azure的接口还是比较容易开通的。

可能还是有些同学觉得不容易,那我们换成国内百川的大模型来生成。

使用百川大模型生成小故事

from langchain import PromptTemplate, LLMChain
from langchain.chat_models import ChatBaichuan

prompt_template = "你是一位小说作家,请根据用户的输入({input}),用中文写一篇小故事(大约200字)。"

llm = ChatBaichuan(temperature=0.7)  
llm_chain = LLMChain(
    llm=llm,
    prompt=PromptTemplate.from_template(prompt_template)
)
story = llm_chain.run(image_caption)
print(story)

可以看到,使用LangChain,我们只需要改掉导入的模型:从AzureChatOpenAI改成ChatBaichuan,其他基本不用改,代码就可以正常运行。这个也是LangChain很大的一个优点:不用被具体的模型锁定,开发和生产环境可以用不同的模型。LangChain可以说是AI时代的Hibernate?

百川大模型生成的故事如下:

在一个宁静的午后,阳光透过窗户洒在一张古老的餐桌上。这张桌子上摆放着一只竹编的篮子,里面装满了鲜红的樱桃。这些樱桃如同宝石般闪闪发光,让人垂涎欲滴。

在桌子的另一端,放着一只瓷盘,上面也铺满了樱桃。这些樱桃虽然不如篮子里那般新鲜,但依旧诱人。它们已经被精心地去核、切片,整齐地摆放在盘子里,仿佛在等待着什么。

突然,门被轻轻推开,一位年轻的女子走进房间。她的眼中闪过一丝惊喜,嘴角勾起一抹微笑。她走到桌子前,拿起一颗樱桃放入口中,细细品味着这份甜蜜。

原来,这位年轻女子是这间房子的主人,她的祖父曾经是一个著名的厨师。祖父去世后,她将祖父留下的食谱整理成了一本书,希望将祖父的美食传承下去。而这一盘去核切块的樱桃,正是她在尝试祖父的一道经典甜品——樱桃慕斯。

在这个阳光明媚的下午,年轻女子一边品尝着樱桃,一边翻阅着祖父的食谱,心中充满了感慨。她决定要将祖父的美食技艺发扬光大,让更多的人品尝到这份美味。

不知道是否巧合,两个大模型都写了亲情的故事,只是一个写爷爷和孙子,一个写祖父和孙女。就这次生成的故事,感觉百川生成的还更好一点?

希望国内的大模型能脚踏实地,一步步跟上,也不用一天到晚的说对标GPT-3.5、GPT-4.0,有优点大家也能看得到。即便暂时不能如李白一飞冲天,如果能如高适日拱一卒,不原地踏步,终有龙翔九天的时候。

莫愁前路无知己,天下谁人不识君!

注:腾讯云的向量数据库和百川一起做了个 AGI 启航计划,赠送向量数据库实例及 Baichuan2 大模型 400 万的 Tokens:cloud.tencent.com/act/pro/agi

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

深度学习项目中的数据集管理

2023-11-24 19:06:14

AI教程

百度商业AI技术创新大赛:探索AIGC商业应用的未来

2023-11-24 19:15:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索