本文主要介紹大模型摘要總結AI能力和實現方式。
摘要總結功能是基于通義千問大語言模型,從多維度提煉交流內容。
當前支持:全文摘要、發言總結、問答回顧、思維導圖。
全文摘要:提煉出忠實于原文的摘要,全文摘要通過兩三百字的篇幅將最重要的信息呈現在你的面前。快速了解記錄內容與主旨。
發言總結:在會議中往往有多人的討論。通過聽悟能夠區分不同發言人、幫您總結出每個人不同的觀點。發言總結功能可以把“誰”“表達了什么”清晰的整理、呈現出來。
問答回顧:用以將原文中多人交互場景下,將問題和答案抽取、提煉為更精簡的問答對,便于您快速了解會議中的關鍵問題及答案。
思維導圖:根據音視頻內容進行總結,并生成繪制思維導圖所需的數據結構,您需要將結果傳遞給前端框架,渲染出思維導圖圖片。目前思維導圖最多生成四個層級(樹結構最大深度為四層)。
您可以一次性獲取全部摘要結果,也可以按需獲取其中1個或多個。
請求參數
參數名 | 類型 | 說明 |
SummarizationEnabled | boolean | 默認為false |
Summarization | list[] | 默認為空,您可按需添加需要處理的摘要類型;當前支持:
|
示例設置
{
"Input":{
...
},
"Parameters":{
"SummarizationEnabled":true,
"Summarization":{
"Types":[
"Paragraph",
"Conversational",
"QuestionsAnswering",
"MindMap"
]
}
}
}
代碼示例
#!/usr/bin/env python
#coding=utf-8
import os
import json
import datetime
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from aliyunsdkcore.auth.credentials import AccessKeyCredential
def create_common_request(domain, version, protocolType, method, uri):
request = CommonRequest()
request.set_accept_format('json')
request.set_domain(domain)
request.set_version(version)
request.set_protocol_type(protocolType)
request.set_method(method)
request.set_uri_pattern(uri)
request.add_header('Content-Type', 'application/json')
return request
def init_parameters():
root = dict()
root['AppKey'] = '輸入您在聽悟管控臺創建的Appkey'
# 基本請求參數
input = dict()
input['SourceLanguage'] = 'cn'
input['TaskKey'] = 'task' + datetime.datetime.now().strftime('%Y%m%d%H%M%S')
input['FileUrl'] = '輸入待測試的音頻url鏈接'
root['Input'] = input
# AI相關參數,按需設置即可
parameters = dict()
# 摘要控制相關,包括: 全文摘要、發言總結、問答回顧
parameters['SummarizationEnabled'] = True
summarization = dict()
summarization['Types'] = ['Paragraph', 'Conversational', 'QuestionsAnswering', 'MindMap']
parameters['Summarization'] = summarization
root['Parameters'] = parameters
return root
body = init_parameters()
print(body)
# TODO 請通過環境變量設置您的 AccessKeyId 和 AccessKeySecret
credentials = AccessKeyCredential(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
client = AcsClient(region_id='cn-beijing', credential=credentials)
request = create_common_request('tingwu.cn-beijing.aliyuncs.com', '2023-09-30', 'https', 'PUT', '/openapi/tingwu/v2/tasks')
request.add_query_param('type', 'offline')
request.set_content(json.dumps(body).encode('utf-8'))
response = client.do_action_with_exception(request)
print("response: \n" + json.dumps(json.loads(response), indent=4, ensure_ascii=False))
package com.alibaba.tingwu.client.demo.aitest;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;
import org.junit.Test;
/**
* @author tingwu2023
*/
public class SummarizationTest {
@Test
public void testSummarization() throws ClientException {
CommonRequest request = createCommonRequest("tingwu.cn-beijing.aliyuncs.com", "2023-09-30", ProtocolType.HTTPS, MethodType.PUT, "/openapi/tingwu/v2/tasks");
request.putQueryParameter("type", "offline");
JSONObject root = new JSONObject();
root.put("AppKey", "輸入您在聽悟管控臺創建的Appkey");
JSONObject input = new JSONObject();
input.fluentPut("FileUrl", "輸入待測試的音頻url鏈接")
.fluentPut("SourceLanguage", "cn")
.fluentPut("TaskKey", "task" + System.currentTimeMillis());
root.put("Input", input);
JSONObject parameters = new JSONObject();
parameters.put("SummarizationEnabled", true);
JSONObject summarization = new JSONObject();
// 全文摘要、發言人總結摘要、問答摘要(問答回顧)
JSONArray types = new JSONArray()
.fluentAdd("Paragraph")
.fluentAdd("Conversational")
.fluentAdd("QuestionsAnswering")
.fluentAdd("MindMap");
summarization.put("Types", types);
parameters.put("Summarization", summarization);
root.put("Parameters", parameters);
System.out.println(root.toJSONString());
request.setHttpContent(root.toJSONString().getBytes(), "utf-8", FormatType.JSON);
// TODO 請通過環境變量設置您的AccessKeyId、AccessKeySecret
DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
IAcsClient client = new DefaultAcsClient(profile);
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
}
public static CommonRequest createCommonRequest(String domain, String version, ProtocolType protocolType, MethodType method, String uri) {
// 創建API請求并設置參數
CommonRequest request = new CommonRequest();
request.setSysDomain(domain);
request.setSysVersion(version);
request.setSysProtocol(protocolType);
request.setSysMethod(method);
request.setSysUriPattern(uri);
request.setHttpContentType(FormatType.JSON);
return request;
}
}
示例輸出
{
"Code":"0",
"Data":{
"TaskId":"5a7343ad75e64z3da121ce65********",
"TaskStatus":"COMPLETED",
"Result":{
"AutoChapters":"http://speech-swap-hangzhou.oss-cn-hangzhou.aliyuncs.com/tingwu/output/1503864348104017/5a7343ad75e6493da121ce653f9389eb/5a7343ad75e6493da121ce653f9389eb_AutoChapters_20231029224651.json?Expires=1698677343&OSSAccessKeyId=LTAI4G4u********j6oX8nt5S&Signature=********TYeZfkvr3mgEK%2Bseo1U%3D",
"Transcription":"http://speech-swap-hangzhou.oss-cn-hangzhou.aliyuncs.com/tingwu/output/1503864348104017/5a7343ad75e6493da121ce653f9389eb/5a7343ad75e6493da121ce653f9389eb_Transcription_20231029224625.json?Expires=1698677343&OSSAccessKeyId=LTAI4G*********j6oX8nt5S&Signature=Kliw%2Fp2xCKHpKR06********Y8%3D",
"Summarization":"http://speech-swap-hangzhou.oss-cn-hangzhou.aliyuncs.com/tingwu/output/1503864348104017/5a7343ad75e6493da121ce653f9389eb/5a7343ad75e6493da121ce653f9389eb_Summarization_20231029224656.json?Expires=1698677343&OSSAccessKeyId=LTAI4G*********j6oX8nt5S&Signature=rY5v4CbGjKnh0Nu*********Xhs%3D"
}
},
"Message":"success",
"RequestId":"4EEBD53F-BCC9-1A0E-B17E-C459********"
}
其中Summarization字段對應的即為摘要結果的http url下載鏈接。
協議解析
上述輸出中的大模型摘要結果url中的內容為JSON格式的報文,示例如下所示。
{
"TaskId": "5a7343ad75e6493da121ce65*********",
"Summarization": {
"ParagraphSummary": "介紹了阿里巴巴達摩院的工作和崗位要求。他提到達摩院主要做語音轉文字和文字轉語音的云服務。另外,他還回答了關于不同年級作文批改標準的問題以及多模態項目聽悟的介紹。",
"ConversationalSummary": [
{
"SpeakerId": "1",
"SpeakerName": "發言人1",
"Summary": "介紹了阿里巴巴達摩院的工作和崗位要求,主要是語音的轉文字和文字轉語音相關的云服務。他還提到了達摩院的目標是一個接口的服務,在云上對外進行售賣,并介紹了聽悟產品的功能,包括聲紋識別、議程分割、關鍵詞提取等多模態能力。該產品即將在月底發布,可供用戶訪問。"
},
{
"SpeakerId": "2",
"SpeakerName": "發言人2",
"Summary": "他負責NLP方向的AI能力的生產和業務能力的對接。他介紹了公司的三個項目。他還提到了在批改中遇到的一些難點和解決方案,以及公司未來對多模態項目的嘗試。"
}
],
"QuestionsAnsweringSummary": [
{
"Question": "請問達摩院是什么樣的部門?",
"SentenceIdsOfQuestion": [
207,
208,
209,
210
],
"Answer": "達摩院是阿里巴巴集團下的一個部門,主要負責語音轉寫、文字轉語音、文本翻譯、圖像識別等云服務。",
"SentenceIdsOfAnswer": [
207,
208,
209,
210
]
}
],
"MindMapSummary": [
{
"Title": "阿里巴巴達摩院語音技術與智能設備實地參觀紀要",
"Topic": [
{
"Title": "1. 達摩院介紹",
"Topic": [
{
"Title": "總部位于杭州,分設在全球多個地點(美國、以色列、新加坡等)",
"Topic": []
},
{
"Title": "主要研究領域及成果",
"Topic": [
{
"Title": "未來十大科技趨勢預測",
"Topic": []
},
{
"Title": "持續進行高風險科研項目",
"Topic": []
}
]
}
]
},
{
"Title": "2. 語音技術討論",
"Topic": [
{
"Title": "實驗室環境挑戰",
"Topic": [
{
"Title": "強噪聲、多人交談、多種電器干擾",
"Topic": []
}
]
},
{
"Title": "技術挑戰",
"Topic": [
{
"Title": "目標說話人識別",
"Topic": []
},
{
"Title": "語意理解:同音異義詞的情感區分",
"Topic": []
}
]
},
{
"Title": "應用現狀",
"Topic": [
{
"Title": "Call Center自動化應答",
"Topic": []
},
{
"Title": "會議場景中的語音識別優化",
"Topic": []
}
]
},
{
"Title": "未來展望",
"Topic": [
{
"Title": "AI參與會議,提高決策質量",
"Topic": []
},
{
"Title": "語音技術在各領域的廣泛應用",
"Topic": []
}
]
}
]
}
]
}
]
}
}
具體字段定義如下。
參數名 | 類型 | 說明 |
TaskId | string | 創建任務時生成的TaskId。 |
Summarization | object | 摘要結果對象,可能包含0個或多個不同摘要類型的結果。 |
Summarization.ParagraphSummary | string | 全文摘要結果。 |
Summarization.ConversationalSummary | list[] | 發言總結摘要結果列表。 |
Summarization.ConversationalSummary[i].SpeakerId | string | 發言人id。 |
Summarization.ConversationalSummary[i].SpeakerName | string | 發言人名字。 |
Summarization.ConversationalSummary[i].Summary | string | 該發言人對應的總結。 |
Summarization.QuestionsAnsweringSummary | list[] | 問答回顧摘要結果列表。 |
Summarization.QuestionsAnsweringSummary[i].Question | string | 問題 |
Summarization.QuestionsAnsweringSummary[i].SentenceIdsOfQuestion | list[] | 提煉出該問題對應的原語音轉寫的SentenceId列表。 |
Summarization.QuestionsAnsweringSummary[i].Answer | string | 問題對應的答案。 |
Summarization.QuestionsAnsweringSummary[i].SentenceIdsOfAnswer | list[] | 總結出該答案對應的原語音轉寫的SentenceId列表。 |
Summarization.MindMapSummary | list[] | 思維導圖結果列表。 |
Summarization.MindMapSummary[i].Title | string | 思維導圖單個節點的文本內容。 |
Summarization.MindMapSummary[i].Topic | list[] | 思維導圖單個節點的子節點列表。 |
常見問題
摘要總結功能在什么場景下可以調用?
您可以在創建音視頻文件離線轉寫或創建實時會議時,直接設置;
您也可以在離線轉寫或實時會議結束后,再次發起重跑任務請求(必須基于同一個TaskId)。
為什么我調用后沒有生成摘要總結的結果,或結果為空?
一個可能是調用參數沒有啟用或設置不正確,請您仔細參考開發文檔進行對比并正確設置。
一個可能是您設置的語言模型并不支持生成摘要信息,比如若音視頻文件是日語,目前是不支持的。
另外一個可能是音視頻文件的信息不夠豐富,比如音視頻文件轉寫后的ASR信息太少(可能是背景噪音過多或過差),導致模型無法生成章節信息。此時您可以更換一條涵蓋有效信息更豐富的音視頻文件進行測試。
還有就是您沒有設置摘要類型,或設置了我們不支持的摘要類型,您可以參考本文介紹的類型正確設置。
為什么生成的摘要總結沒有任何結果?
雖然摘要會產生多種類型的結果,但并不保證一定會生成結果,比如轉寫出的有效信息過少時。
如果沒有問答摘要結果,可能是原始音視頻中本身沒有問答信息。
為什么我沒有設置章節速覽參數,在摘要結果里返回了章節速覽的結果?
因為全文摘要的計算除了依賴原始音視頻信息、ASR轉寫結果之外,還額外依賴章節標題信息,因此聽悟會在用戶開啟全文摘要調用時,內部自動觸發對章節速覽功能的調用,并將結果返回給用戶。