前言
ONE-PEACE是一個圖文音三模態通用表征模型,在語義分割、音文檢索、音頻分類和視覺定位幾個任務都達到了新SOTA表現,在視頻分類、圖像分類圖文檢索、以及多模態經典benchmark也都取得了比較領先的結果。 另外,模型展現出來新的zeroshot能力,即實現了新的模態對齊,比如音頻和圖像的對齊,或者音頻+文字和圖像的對齊,而這類數據并沒有出現在我們的預訓練數據集里。
下面這張圖展示了ONE-PEACE的模型架構和預訓練任務。借助于擴展友好的架構和模態無關的任務,ONE-PEACE具備擴展到無限模態的潛力
作為一個4B規模的通用表征模型,ONE-PEACE在一系列視覺、語音和多模態任務上取得領先的結果。 此外,ONE-PEACE還具備強大的多模態檢索能力,能夠完成圖文音三模態之間的互相檢索。如下圖所示,我們通過case展示了ONE-PEACE的音搜圖,音+圖搜圖,以及音+文搜圖的能力。
模型局限:模型主要使用開源的英文數據進行訓練,因此中文的表征能力可能不太理想
模型概覽
模型中文名 | 模型英文名 | 數據類型 | 向量維度 |
ONE-PEACE通用表征模型 | multimodal-embedding-one-peace-v1 | float(32) | 1536 |
SDK使用
前提條件
調用示例
需要使用您的API-KEY替換示例中的 YOUR_DASHSCOPE_API_KEY,代碼才能正常運行。
設置API-KEY
export DASHSCOPE_API_KEY=YOUR_DASHSCOPE_API_KEY
代碼示例
生成圖片embedding示例
單獨輸入1張圖片
from dashscope import MultiModalEmbedding
def image_embedding():
input = [{'image': 'https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png'},
]
result = MultiModalEmbedding.call(model=MultiModalEmbedding.Models.multimodal_embedding_one_peace_v1,
input=input,
auto_truncation=True)
print(result)
if __name__ == '__main__':
image_embedding()
// Copyright (c) Alibaba, Inc. and its affiliates.
import com.alibaba.dashscope.embeddings.MultiModalEmbedding;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingItemImage;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingParam;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import java.util.Arrays;
public class Main {
public static void imageEmbedding() throws ApiException, NoApiKeyException, UploadFileException {
MultiModalEmbedding embedding = new MultiModalEmbedding();
MultiModalEmbeddingItemImage image =
new MultiModalEmbeddingItemImage(
"https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png");
MultiModalEmbeddingParam param =
MultiModalEmbeddingParam.builder()
.model(MultiModalEmbedding.Models.MULTIMODAL_EMBEDDING_ONE_PEACE_V1)
.contents(Arrays.asList(image))
.build();
MultiModalEmbeddingResult result = embedding.call(param);
System.out.print(result);
}
public static void main(String[] args){
try {
imageEmbedding();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
圖片&語音embedding示例
結合圖片和語音,生成Embedding。
from dashscope import MultiModalEmbedding
def image_audio_embedding():
input = [{'audio': 'https://dashscope.oss-cn-beijing.aliyuncs.com/audios/cow.flac'},
{'image': 'https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png'}]
result = MultiModalEmbedding.call(model=MultiModalEmbedding.Models.multimodal_embedding_one_peace_v1,
input=input,
auto_truncation=True)
print(result)
if __name__ == '__main__':
image_audio_embedding()
// Copyright (c) Alibaba, Inc. and its affiliates.
import com.alibaba.dashscope.embeddings.MultiModalEmbedding;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingItemAudio;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingItemImage;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingParam;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import java.util.Arrays;
public class Main {
public static void imageAndAudioEmbedding() throws ApiException, NoApiKeyException, UploadFileException {
MultiModalEmbedding embedding = new MultiModalEmbedding();
MultiModalEmbeddingItemImage image =
new MultiModalEmbeddingItemImage(
"https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png");
MultiModalEmbeddingItemAudio audio = new MultiModalEmbeddingItemAudio("https://dashscope.oss-cn-beijing.aliyuncs.com/audios/cow.flac");
MultiModalEmbeddingParam param =
MultiModalEmbeddingParam.builder()
.model(MultiModalEmbedding.Models.MULTIMODAL_EMBEDDING_ONE_PEACE_V1)
.contents(Arrays.asList(audio, image))
.build();
MultiModalEmbeddingResult result = embedding.call(param);
System.out.print(result);
}
public static void main(String[] args){
try {
imageAndAudioEmbedding();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
多模態混合embedding示例
如果您需要混合使用多種模態的數據來產生多模態的向量表征Embedding,也可以通過配置多種模態數據,并在必要的時候配置不同的表征權重,來生成綜合向量Embedding。 這里示例為文本,圖像和語音的混合模態示例,并且對于每個item都配置了不同的權重。值得注意的是,每條item中權重的數值均可單獨配置,不填寫時默認為1。
from dashscope import MultiModalEmbedding
def multimodal_with_factor_embedding():
input = [{'factor': 1, 'text': '你好'},
{'factor': 2, 'audio': 'https://dashscope.oss-cn-beijing.aliyuncs.com/audios/cow.flac'},
{'factor': 3, 'image': 'https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png'}]
result = MultiModalEmbedding.call(model=MultiModalEmbedding.Models.multimodal_embedding_one_peace_v1,
input=input,
auto_truncation=True)
print(result)
if __name__ == '__main__':
multimodal_with_factor_embedding()
// Copyright (c) Alibaba, Inc. and its affiliates.
import com.alibaba.dashscope.embeddings.MultiModalEmbedding;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingItemAudio;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingItemImage;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingItemText;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingParam;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import java.util.Arrays;
public class Main {
public static void multiModalWithFactorEmbedding() throws ApiException, NoApiKeyException, UploadFileException {
MultiModalEmbedding embedding = new MultiModalEmbedding();
MultiModalEmbeddingItemText text =
MultiModalEmbeddingItemText.builder()
.text("冬雪")
.factor(2.0)
.build();
MultiModalEmbeddingItemImage image =
new MultiModalEmbeddingItemImage(
"https://dashscope.oss-cn-beijing.aliyuncs.com/images/256_1.png",
1.0);
MultiModalEmbeddingItemAudio audio =
new MultiModalEmbeddingItemAudio("https://dashscope.oss-cn-beijing.aliyuncs.com/audios/cow.flac",
1.0);
MultiModalEmbeddingParam param =
MultiModalEmbeddingParam.builder()
.model(MultiModalEmbedding.Models.MULTIMODAL_EMBEDDING_ONE_PEACE_V1)
.contents(Arrays.asList(audio, image, text))
.build();
MultiModalEmbeddingResult result = embedding.call(param);
System.out.print(result);
}
public static void main(String[] args){
try {
multiModalWithFactorEmbedding();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
本地文件調用
您也可以通過本地文件調用接口,示例如下,您需要按照示例所示文件路徑格式輸入。
from dashscope import MultiModalEmbedding
def call_with_local_file():
"""Sample of use local file.
linux&mac file format: file:///home/images/test.png
windows file format: file://D:/images/abc.png
"""
# file path must absolute path
input = [{'image': 'file://absolute_local_path'},
{'image': 'file://absolute_local_path2'}]
result = MultiModalEmbedding.call(
model=MultiModalEmbedding.Models.
multimodal_embedding_one_peace_v1,
input=input,
auto_truncation=True)
print(result)
if __name__ == '__main__':
call_with_local_file()
// Copyright (c) Alibaba, Inc. and its affiliates.
import com.alibaba.dashscope.embeddings.MultiModalEmbedding;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingItemImage;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingItemText;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingParam;
import com.alibaba.dashscope.embeddings.MultiModalEmbeddingResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import java.util.Arrays;
public class Main {
/*
* sample of use local file
* Windows file format: file:///D:/test/images/test.png
* Linux & Mac format: file://The_absolute_local_path
*
*/
public static void callWithLocalFile() throws ApiException, NoApiKeyException, UploadFileException {
MultiModalEmbedding embedding = new MultiModalEmbedding();
MultiModalEmbeddingItemText text = MultiModalEmbeddingItemText.builder().text("冬雪").build();
String localFilePath = "file:///home/tests/image.png";
String localFilePath2 = "file:///home/tests/image.png";
MultiModalEmbeddingItemImage image = new MultiModalEmbeddingItemImage(localFilePath);
MultiModalEmbeddingItemImage image2 = new MultiModalEmbeddingItemImage(localFilePath2);
MultiModalEmbeddingParam param = MultiModalEmbeddingParam.builder()
.model(MultiModalEmbedding.Models.MULTIMODAL_EMBEDDING_ONE_PEACE_V1)
.contents(Arrays.asList(image, image2, text))
.build();
MultiModalEmbeddingResult result = embedding.call(param);
System.out.print(result);
}
public static void main(String[] args) {
try {
callWithLocalFile();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
輸出示例
{
"status_code": 200,
"request_id": "the_request_Id",
"code": "",
"message": "",
"output": {
"embedding": [
-0.0200169887393713,
0.041749317198991776
... ...
]
},
"usage": {
"image": {
"measure": 1,
"weight": 1
},
"total_usage": 4,
"audio": {
"measure": 1,
"weight": 2
},
"text": {
"measure": 1,
"weight": 1
}
}
}
參數詳解
請求參數
參數名稱
必選
示例值
描述
model
是
multimodal-embedding-one-peace-v1
取值:該值是固定值,無需更改
說明:代表模型的英文名稱
input
是
[{'factor': 1, 'text': '你好'}, {'factor': 2, 'audio': 'https://data-generator-idst.oss-cn-shanghai.aliyuncs.com/dashscope/image/multi_embedding/audio/cow.flac'},
{'factor': 3, 'image': 'https://data-generator-idst.oss-cn-shanghai.aliyuncs.com/dashscope/image/multi_embedding/image/256_1.png'}]
取值:為多模態輸入列表,目前支持三種模態,格式為
{"模態": "輸入字符串或圖像音頻url", "factor": "數值,該部分權重"}
模態對應[text|image|audio]
image
圖像格式目前支持:bmp, jpg, jpeg, png 和 tiff;文件大小不超過5M。
audio
當前支持最大音頻時長為15s,超出該時長的音頻內容在 auto-truncation 功能打開的情況下會被截斷繼續計算向量,auto-truncation 功能關閉的時候本次請求會報錯返回;語音格式目前支持 wav, mp3 和 flac;文件大小不超過5M。
text
當前支持最大文本長度為70 字,超出該長度的文本內容在 auto-truncation 功能打開的情況下會被截斷繼續計算向量,auto-truncation 功能關閉的時候本次請求會報錯返回;
auto_truncation
否
自動截斷
取值:true|false
是否自動截斷輸入種過長的文本(70字符),如果為否,則輸入過長,結果會報錯,否則截斷字符串,返回embedding,默認為false,過長輸入會報錯。
默認為false
響應參數
字段
類型
描述
示例值
status_code
Integer
本次結果http相應碼,200對應請求成功。
code
String
請求失敗,為簡短錯誤碼。
message
String
詳細錯誤信息。
output.embedding
Array
本次請求的算法輸出內容,是一個由結構組成的數組,每一個數組中包含一個對應的輸入內容的算法向量表征輸出內容.java sdk統一轉換為Double,參考模型輸出類型,進行比較的數據類型轉換。
"embedding": [
-0.006929283495992422,
-0.005336422007530928,
... 省略
]
usage.[text|image|audio]
dict
對應各模態計量信息。
12
usage.weight
Integer
計量權重,計算規則,total_usage=text.measure*text.weight + audio.measure*audio.weight + image.measure*image.weight
usage.total_usage
Integer
對應總的計量信息
request_id
String
本次請求的系統唯一碼
7574ee8f-38a3-4b1e-9280-11c33ab46e51
HTTP調用
本模型還可通過HTTP的方式進行調用,以適用更靈活的業務開發,下面是HTTP同步調用接口的接口詳情。
作業提交接口調用
POST https://dashscope.aliyuncs.com/api/v1/services/embeddings/multimodal-embedding/multimodal-embedding
參數詳解
請求參數
傳參方式 | 字段 | 類型 | 必選 | 描述 | 示例值 |
Header | Content-Type | String | 是 | 請求類型:application/json 或者text/event-stream(開啟 SSE 響應) | application/json |
Authorization | String | 是 | API-Key,例如:Bearer d1**2a | Bearer d1**2a | |
X-DashScope-WorkSpace | String | 否 | 指明本次調用需要使用的workspace;需要注意的是,對于子賬號Apikey調用,此參數為必選項,子賬號必須歸屬于某個workspace才能調用;對于主賬號Apikey此項為可選項,添加則使用對應的workspace身份,不添加則使用主賬號身份。 | ws_QTggmeAxxxxx | |
Body | model | String | 是 | 指明需要調用的模型,此處使用multimodal-embedding-one-peace-v1 | multimodal-embedding-one-peace-v1 |
input.contents[list] | Array | 是 | contents 列表中包含本次需要進行向量計算的所有內容列表,每一個列表可以分別是圖像(image),文本(text)或者音頻(audio)。 | 哪個公園距離我更近 | |
input.contents[x].image | String | 至少包含一項,可以包含多項并重復 | 本次需要進行向量計算中的圖像內容的 url 鏈接;算法內部會將每張圖像縮放為256x256分辨率。圖像格式目前支持:bmp, jpg, jpeg, png 和 tiff;文件大小不超過5M。 | "contents": [ { "image": "http://a/a.jpg", "factor": "5.0" }, { "text": "公園", "factor": "0.5" }, { "audio": "http://b/b.wav"} ] | |
input.contents[x].audio | String | 本次需要進行向量計算中的音頻內容的 url 鏈接;當前支持最大音頻時長為15s,超出該時長的音頻內容在 auto-truncation 功能打開的情況下會被截斷繼續計算向量,auto-truncation 功能關閉的時候本次請求會報錯返回;語音格式目前支持 wav, mp3 和 flac;文件大小不超過5M。 | |||
input.contents[x].text | String | 本次需要進行向量計算中的文本內容;當前支持最大文本長度為70 字,超出該長度的文本內容在 auto-truncation 功能打開的情況下會被截斷繼續計算向量,auto-truncation 功能關閉的時候本次請求會報錯返回; | |||
input.contents[x].factor | Float | 否 | 本條多模態信息的權重系數,必須為大于 0 的正浮點數,如果不設置默認為1.0,整體按照加權平均計算 | ||
parameters.auto_truncation | Bool | 否 | 在輸入的音頻內容超過 15 秒或者文字內容超出 70 字的情況下,是截斷輸入音頻或者文字繼續計算向量,還是終止計算報錯返回。默認為 false: 過長的輸入會導致請求報錯。 | "parameters": { "auto_truncation": true } |
響應參數
字段 | 類型 | 描述 | 示例值 |
output.embedding[] | Array | 本次請求的算法輸出內容。 | [-0.006929283495992422,-0.005336422007530928, ...] |
usage.audio.measure | Integer | 本次請求輸入語音的計量條數。 | "usage":{ "audio":{ "measure":1, "weight":2 }, "image":{ "measure":1, "weight":1 }, "text":{ "measure":1, "weight":1 }, "total_usage":4 } |
usage.audio.weight | Integer | 本次請求輸入語音的計量權重。 | |
usage.image.measure | Integer | 本次請求輸入圖像的計量條數。 | |
usage.image.weight | Integer | 本次請求輸入圖像的計量權重。 | |
usage.text.measure | Integer | 本次請求輸入文本的計量條數。 | |
usage.text.weight | Integer | 本次請求輸入文本的計量權重。 | |
usage.total_usage | Integer | 本次請求語音、圖像和文本加權計量后的總計消耗值。 | |
request_id | String | 本次請求的系統唯一碼 | 7574ee8f-38a3-4b1e-9280-11c33ab46e51 |
Curl示例
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/embeddings/multimodal-embedding/multimodal-embedding' \
--header 'Authorization: Bearer <your_api_key>' \
--header 'Content-Type: application/json' \
--data '{
"model": "multimodal-embedding-one-peace-v1",
"input": {
"contents": [
{
"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/the_starry_night.jpg",
"factor": "5"
},
{
"text": "what is your name",
"factor": "0.5"
},
{
"audio": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/cow.flac"
}
]
},
"parameters": {
"auto_truncation": true
}
}'
響應示例
調用成功示例
{
"output":{
"embedding": [-0.006929283495992422,-0.005336422007530928, ...]
},
"usage": {
"audio": {
"measure":1, #音頻條數
"weight":2 #音頻權重
},
"image": {
"measure":1, #圖像張數
"weight":1 #圖像權重
},
"text": {
"measure":1, #文本條數
"weight":1 #文本權重
},
"total_usage":4 #加權消耗總數: 音頻(1*2) + 圖像(1*1) + 文本(1*1) = 4
}
}
"request_id":"d89c06fb-46a1-47b6-acb9-bfb17f814969"
}
調用異常示例
在訪問請求出錯的情況下,輸出的結果中會通過 code 和 message 指明出錯原因。
{
"code":"InvalidApiKey",
"message":"Invalid API-key provided.",
"request_id":"fb53c4ec-1c12-4fc4-a580-cdb7c3261fc1"
}
狀態碼說明
大模型服務平臺通用狀態碼請查閱:狀態碼說明