最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

神奇植物在哪里?文心大模型助力一秒讀懂花草的“前世今生”

2023-11-29 12:00 作者:飛槳PaddlePaddle  | 我要投稿

本期文心開發(fā)者說邀請到飛槳開發(fā)者技術(shù)專家謝杰航老師,分享如何利用AI技術(shù)構(gòu)建風(fēng)景園林行業(yè)的植物知識科普系統(tǒng),接著還介紹了大模型應(yīng)用的基本技術(shù)流程框架,多模態(tài)特征提取以及使用向量數(shù)據(jù)庫的優(yōu)勢,使用飛槳星河社區(qū)運(yùn)行向量數(shù)據(jù)庫的方法,以及創(chuàng)建向量數(shù)據(jù)庫、數(shù)據(jù)表和embedding操作的過程等。此外,老師還介紹了文心大模型的重要任務(wù),即為不同用戶群體生成個(gè)性化版本的內(nèi)容輸出。

大模型與植物相遇

創(chuàng)新植物科普路徑

所有的應(yīng)用都值得用大模型進(jìn)行重構(gòu),但是在實(shí)際過程中,大模型落地可能會存在成本問題。如何去評估大模型,以及這個(gè)應(yīng)用是否值得用大模型去做,我們要認(rèn)識到大模型能夠?yàn)閼?yīng)用帶來什么樣的創(chuàng)新點(diǎn),能夠帶來什么樣的價(jià)值。所以我們在做植物識別科普應(yīng)用的時(shí)候,便對應(yīng)用市場上的植物識別App做了調(diào)研。我們發(fā)現(xiàn)目前的同類App都有兩個(gè)問題,一是只包含了很簡單的識別功能,用戶掃一下某種植物,App只會輸出是哪個(gè)品種,沒有對識別結(jié)果進(jìn)一步介紹;還有另外一類App,對植物的解釋是簡單地生搬硬套教科書,專業(yè)術(shù)語眾多,內(nèi)容缺乏趣味性。 關(guān)于植物的教科書內(nèi)容包含大量專業(yè)術(shù)語,例如玄參科植物,大部分非植物專業(yè)的人群是不知道這些術(shù)語的。為了增強(qiáng)內(nèi)容的趣味性,達(dá)到科普的目的,我們使用文心大模型對輸出結(jié)果進(jìn)行重寫,讓輸出的植物介紹更加口語化,適應(yīng)不同群體的閱讀需求,吸引大家關(guān)注植物、了解植物,讓用戶產(chǎn)生對植物知識的學(xué)習(xí)興趣,這就是我們做這個(gè)應(yīng)用的出發(fā)點(diǎn)。如果你是其他行業(yè)的,也可能會面臨同樣的問題。比如產(chǎn)品的說明書,現(xiàn)在很多產(chǎn)品說明書大多晦澀難懂,或者用戶提問的時(shí)候,客服常常答非所問。這種情況就符合大模型的應(yīng)用場景,可以根據(jù)不同的用戶畫像,給用戶回答的時(shí)候,讓這個(gè)回答更加的自然、更加的流暢、更加的口語化,讓用戶容易理解接受。

識別植物不簡單

大模型應(yīng)用的基本技術(shù)流程框架

下圖是語言大模型應(yīng)用的基本技術(shù)流程框架。

首先,用戶拿手機(jī)拍下植物,輸入一張植物的圖像,我們需要對這個(gè)圖像進(jìn)行一個(gè)特征提取。特征提取就是把圖像變成一個(gè)高維向量。我們把這個(gè)植物特征輸入向量數(shù)據(jù)庫里面做向量比對計(jì)算。如果數(shù)據(jù)庫里面已經(jīng)有相似的植物向量,就把植物名和植物知識直接給到文心大模型做文本重寫最后輸出文本。 如果輸入植物圖像是全新的圖片,其特征在數(shù)據(jù)庫中未有相似結(jié)果,我們把這個(gè)圖像輸入到公版的分類模型,或者輸入到自己訓(xùn)練的分類模型做植物圖像識別,然后將特征向量和識別結(jié)果插入數(shù)據(jù)庫。下次用戶上傳相似圖片的時(shí)候,植物特征與前面用戶的圖像特征具有一定相似度的,那么就可以不通過分類模型,直接通過向量比對的方法確定植物種類。這個(gè)方案不需要重復(fù)調(diào)用分類模型接口,推理整體耗時(shí)得到大幅降低。 文心大模型的主要任務(wù)是將復(fù)雜、專業(yè)或書面化的知識轉(zhuǎn)化為易于理解,同時(shí)能引起用戶閱讀興趣的內(nèi)容。文心大模型生成植物科普內(nèi)容后,我們通過向量數(shù)據(jù)庫構(gòu)建緩存,以便在用戶下次讀取類似圖片時(shí),通過特征抽取和向量對比,快速找到并輸出相同的內(nèi)容,而無需再次調(diào)用文心大模型。整個(gè)技術(shù)架構(gòu)核心由向量數(shù)據(jù)庫、知識庫和文心大模型構(gòu)成。因此,如果我們要開發(fā)一個(gè)大模型應(yīng)用,只要做好這三個(gè)技術(shù)版塊,那么應(yīng)用的后端也就基本完成了。下面就對每個(gè)部分進(jìn)行詳細(xì)講解。

特征提取

首先是特征提取,我們使用了PaddleNLP中內(nèi)置的CLIP多模態(tài)模型提取圖像特征向量,提取后的特征向量既可用于相似度比較做圖像分類,也可用于如圖文搜索、圖像二次創(chuàng)作生成等其他多模態(tài)應(yīng)用。如果用小模型,比如ResNet50也可以做特征提取,但是它提取的向量只能做單一的任務(wù),不能做其他跨模態(tài)任務(wù)。所以在軟硬件成本條件允許的情況下,比較推薦大家盡可能用一些多模態(tài)模型來做特征提取,這能為之后的應(yīng)用開發(fā)提供數(shù)據(jù)基礎(chǔ)。 這一步可以簡單通過調(diào)用paddlenlp.transformers的CLIPProcessor類,對圖片進(jìn)行特征向量提取,提取后得到一組由浮點(diǎn)數(shù)組成的特征向量。

特征提取

from?PIL?import?Image import?requests from?paddlenlp.transformers?import?CLIPProcessor,?CLIPVisionModelWithProjection model?=?CLIPVisionModelWithProjection.from_pretrained("openai/clip-vit-base-patch32") processor?=?CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32") def?extractFeatures(image:?Image.Image): ????inputs?=?processor(images=image,?return_tensors="pd") ????outputs?=?model(**inputs) ????imageEmbeds?=?outputs.image_embeds ????imageEmbedding?=?imageEmbeds.numpy()? ????return?imageEmbedding

向量數(shù)據(jù)庫解決方案

在本項(xiàng)目中,我們選擇Milvus作為向量數(shù)據(jù)庫。Milvus是用Go語言編寫的,它天然支持分布式和高并發(fā)的特性,在這方面相比其他數(shù)據(jù)庫具有一定優(yōu)越性。此外,它與飛槳的融合度也很高,星河社區(qū)中已經(jīng)有一些使用Milvus的案例可供我們更好地學(xué)習(xí)和上手實(shí)踐。

為什么我們要使用向量數(shù)據(jù)庫而不是直接使用分類模型來進(jìn)行植物識別呢? 它的第一個(gè)好處是向量數(shù)據(jù)庫可以存儲、管理和檢索特征向量。特征向量除了可以用于相似度比較之外,還能為文—圖搜索、圖—圖搜索、圖文生成,圖像生成等多模態(tài)應(yīng)用提供數(shù)據(jù)基礎(chǔ)。 第二個(gè)好處在于其速度快。深度學(xué)習(xí)模型推理過程較為耗費(fèi)GPU資源。在一般情況下,采用相似度計(jì)算的方法得到圖片分類,計(jì)算速度會更快,并且可以全程使用CPU進(jìn)行計(jì)算,而無需依賴GPU,從而節(jié)約了成本。 第三個(gè)優(yōu)勢在于具有較強(qiáng)的泛化能力。在面對識別準(zhǔn)確率下降和罕見樣本的情況時(shí),基于深度學(xué)習(xí)模型的解決方案通常需要重新訓(xùn)練或微調(diào)模型,需要較高的時(shí)間和算力成本。相比之下,采用向量數(shù)據(jù)庫的方案,可以通過添加若干正例圖片到數(shù)據(jù)庫中,從而快速有效地提高識別精度。

創(chuàng)建向量數(shù)據(jù)庫

接著介紹Milvus向量數(shù)據(jù)庫的創(chuàng)建操作。下面將用milvus輕量化版本做部署演示。首先引入milvus.default_server將它啟動,連接到數(shù)據(jù)庫后,打印數(shù)據(jù)庫的版本確定啟動成功后,創(chuàng)建一個(gè)命名為plant的數(shù)據(jù)庫以及同名的集合(數(shù)據(jù)表在Milvus里面被稱為集合)。plant的集合里包含了plant_id自增字段,記錄數(shù)據(jù)庫內(nèi)的數(shù)據(jù)量。plant_name是植物名稱字段,plant_info是對植物的介紹信息字段,字符串類型數(shù)據(jù)通過向量數(shù)據(jù)庫存儲,可以免去跨多個(gè)數(shù)據(jù)庫操作的過程。embeddings向量存儲字段,它的數(shù)據(jù)維度是512。最后通過CollectionSchema將fileds封裝起來,通過調(diào)用Collection函數(shù)創(chuàng)建集合。

啟動并創(chuàng)建數(shù)據(jù)庫

from?milvus?import?default_server from?pymilvus?import?connections,?utility,?db 啟動向量數(shù)據(jù)庫 default_server.start() 檢查是否連接成功 connections.connect(host='127.0.0.1',?port=default_server.listen_port) print("Milvus?version:",?utility.get_server_version()) 創(chuàng)建數(shù)據(jù)庫 database?=?db.create_database("plant") db.using_database("plant")

創(chuàng)建數(shù)據(jù)庫(集合)

from?pymilvus?import?Collection,?CollectionSchema,?FieldSchema,?DataType #?定義集合名 collection_name?=?"plant" #?定義數(shù)據(jù)列 plantId?=?FieldSchema( ??name?=?"plant_id", ??dtype?=?DataType.INT64, ??is_primary?=?True, ??auto_id?=?True, ) plantName?=?FieldSchema( ??name?=?"plant_name", ??dtype?=?DataType.VARCHAR, ??max_length?=?200, ) plantInfo?=?FieldSchema( ??name?=?"plant_info", ??dtype?=?DataType.VARCHAR, ??max_length?=?10000, ) plantEmbeddings?=?FieldSchema( ??name="embeddings", ??dtype=DataType.FLOAT_VECTOR, ??dim=512 ) #?創(chuàng)建schema schema?=?CollectionSchema( ??fields=[plantId,?plantName,?plantInfo,?plantEmbeddings], ??description="plant?embeddings?database", ??enable_dynamic_field=True ) #?創(chuàng)建數(shù)據(jù)集合 collection?=?Collection( ????name=collection_name, ????schema=schema, ????using='default', ????shards_num=2 對圖像的特征向量進(jìn)行相似度計(jì)算,需要對embeddings字段做索引。我們這里用的是L2(歐氏距離計(jì)算方法),索引的類型選擇IVF-FLAT類型。如果是真實(shí)業(yè)務(wù)場景,用戶量、并發(fā)量、數(shù)據(jù)量較大的情況下,建議使用IVFSQ8對向量數(shù)據(jù)進(jìn)行壓縮,它的存儲成本更低,計(jì)算速度更快,內(nèi)存占用更少?!皀list”是聚合的數(shù)量,一般設(shè)置固定,數(shù)量越大,內(nèi)存的消耗成本越高。創(chuàng)建索引后,將集合數(shù)據(jù)加載到內(nèi)存中。

創(chuàng)建索引

index_params?=?{ ??"metric_type":"L2", ??"index_type":"IVF_FLAT", ??"params":{"nlist":1024} } collection?=?Collection("plant") collection.create_index( ??field_name="embeddings",? ??index_params=index_params ) utility.index_building_progress("plant") #?加載集合 collection.load() 下一步是向量檢索,即相似度比對計(jì)算。假設(shè)V1為圖片1的向量,V2是向量數(shù)據(jù)庫內(nèi)的向量,計(jì)算這兩個(gè)向量的相似度,當(dāng)高度相似時(shí)可以直接輸出V2對應(yīng)的plant_name作為V1的識別結(jié)果。具體代碼操作是將V1向量輸入collection.search函數(shù),Milvus自動計(jì)算出與V1相似度最高向量結(jié)果V2,最終輸出植物名、介紹和相似度結(jié)果。

向量檢索(相似度比對)

import?numpy?as?np? search_params?=?{ ????"metric_type":?"L2",? ????"ignore_growing":?False,? ????"params":?{"nprobe":?10} } def?searchDb(embeddings:?np.ndarray): ????results?=?collection.search( ????????????????data=embeddings,? ????????????????anns_field="embeddings",? ????????????????param=search_params, ????????????????limit=1, ????????????????expr=None, ????????????????output_fields=['plant_name',?"plant_info"], ????????????????consistency_level="Strong" ????????????) ????return?results[0][0].entity.get('plant_name'),?results[0][0].entity.get('plant_info'),?results[0].distances[0] 當(dāng)相似度較低時(shí)要借助其他小模型,或者是百度云植物識別的API輔助判斷。此外,有能力的開發(fā)者和機(jī)構(gòu)可以將該模塊替換為私有植物圖像分類模型和植物知識庫。以公版模型接口為例,用戶上傳向日葵的圖片,然后給用戶返回相對應(yīng)的植物名稱和簡介。

圖像識別

from?aip?import?AipImageClassify from?io?import?BytesIO from?PIL?import?Image def?plantRec(image:?Image.Image): ????bytesIO?=?BytesIO() ????img.save(bytesIO,?format='PNG') ????client?=?AipImageClassify(BDAPPID,?BDAK,?BDSK) ????options?=?{ ????????"baike_num":?1 ????} ????result?=?client.plantDetect(bytesIO.getvalue(),?options) ????name?=?result["result"][0]["name"] ????info?=?result["result"][0]["baike_info"]["description"] ????return?name,?info 接下來對這個(gè)模塊進(jìn)行簡單封裝,例如用戶提供04.jpg圖像文件,對輸入圖像進(jìn)行特征提取后得到一組512維的向量。通過前面封裝好的searchDB函數(shù)在數(shù)據(jù)庫中找相似的向量,得到一個(gè)檢索結(jié)果相似度。如果相似度較高,直接返回到plant_name和plant_info。如果數(shù)據(jù)庫沒有相似的向量,則請求公版模型識別,同時(shí)將結(jié)果存入向量數(shù)據(jù)庫中用于日后數(shù)據(jù)比對,節(jié)省下一次相似數(shù)據(jù)請求識別返回的時(shí)間。

個(gè)性化定制植物科普內(nèi)容?

讓不同人群重新認(rèn)識花草

在本項(xiàng)目中文心大模型的任務(wù)是根據(jù)不同的用戶畫像,輸出不同版本的植物介紹,對植物科普內(nèi)容進(jìn)行定制化輸出。這一步驟使用到ERNIE Bot SDK接口,飛槳星河社區(qū)為每位開發(fā)者提供了100萬tokens的免費(fèi)調(diào)用額度。 基本流程如下,引入ERNIE Bot的SDK,配置token,這一步有個(gè)重點(diǎn)概念叫prompt template,即做好的prompt模版。在模板中輸入用戶畫像、需要介紹的植物、語言風(fēng)格要求、參考材料給大模型,文心大模型可以為prompt template生成個(gè)性化定制內(nèi)容,輸出結(jié)果給前端用戶。

文心大模型生成定制化內(nèi)容

import?erniebot erniebot.api_type?=?"aistudio" erniebot.access_token?=?ERNIETOKEN templatePrompts?=?""" ????作為一名植物科普員,你將要寫一份面向{role}的植物科普內(nèi)容,介紹的植物是{plant}。 ????為了讓孩子們更好地了解{plant},請?zhí)峁┮环葺p松明快、通俗易懂的介紹內(nèi)容。 ????你可以從{plant}的外形、生長環(huán)境、果實(shí)特點(diǎn)等方面入手,讓孩子們對這種植物有更深入的了解。 ????同時(shí),你也可以參考一些相關(guān)的圖片、視頻或其他資料,豐富孩子們的知識,提高他們的學(xué)習(xí)興趣。 ????請注意,你的介紹語言生動形象,讓孩子們愿意聽、記得住,并且能夠?qū)plant}產(chǎn)生興趣和好奇心。 ????為了你的內(nèi)容準(zhǔn)確無誤,請參考以下材料:{info}。開頭不要有標(biāo)題,內(nèi)容最后不要出現(xiàn)參考文獻(xiàn)。 """.format(role=role,?plant=plantName,?info=plantInfo) response?=?erniebot.ChatCompletion.create( ????????model="ernie-bot", ????????messages=[{"role":?"user",?"content":?templatePrompts}] ????) print(response.result) 飛槳開發(fā)者技術(shù)專家謝杰航老師,他為大家?guī)砣绾斡梦男拇竽P椭?shí)現(xiàn)植物種類的識別,以及如何用AI技術(shù)構(gòu)建風(fēng)景園林行業(yè)的一個(gè)植物知識科普系統(tǒng)。同時(shí)他也在直播中講解了創(chuàng)作過程當(dāng)中的代碼和步驟,幫助大家更好理解大模型應(yīng)用開發(fā)的相關(guān)知識。 其他領(lǐng)域開發(fā)者也可以根據(jù)不同的行業(yè)特點(diǎn)制作不同的prompt template,應(yīng)用大模型進(jìn)行個(gè)性化定制。希望大家在飛槳星河社區(qū)里面去學(xué)習(xí)更多大模型的知識,制作更多基于大模型的原生應(yīng)用。

神奇植物在哪里?文心大模型助力一秒讀懂花草的“前世今生”的評論 (共 條)

分享到微博請遵守國家法律
泗水县| 专栏| 从化市| 会宁县| 桦南县| 芜湖市| 金平| 柳河县| 钟祥市| 清远市| 原平市| 洛扎县| 叙永县| 阳西县| 陇南市| 洛宁县| 凉山| 陈巴尔虎旗| 班玛县| 望谟县| 竹北市| 海阳市| 汕头市| 榆中县| 桐梓县| 济源市| 盐山县| 黄平县| 育儿| 肇州县| 洞口县| 德安县| 通海县| 哈巴河县| 郸城县| 砀山县| 务川| 二手房| 石渠县| 锡林郭勒盟| 宽城|