/
AbstractiveSummarization.java
79 lines (73 loc) · 4.72 KB
/
AbstractiveSummarization.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
package com.azure.ai.textanalytics.lro;
import com.azure.ai.textanalytics.TextAnalyticsClient;
import com.azure.ai.textanalytics.TextAnalyticsClientBuilder;
import com.azure.ai.textanalytics.models.AbstractiveSummaryOperationDetail;
import com.azure.ai.textanalytics.models.AbstractiveSummaryOptions;
import com.azure.ai.textanalytics.models.AbstractiveSummaryResult;
import com.azure.ai.textanalytics.models.AbstractiveSummary;
import com.azure.ai.textanalytics.models.AbstractiveSummaryContext;
import com.azure.ai.textanalytics.util.AbstractiveSummaryPagedIterable;
import com.azure.core.credential.AzureKeyCredential;
import com.azure.core.util.polling.SyncPoller;
import java.util.ArrayList;
import java.util.List;
/**
* Sample demonstrates how to synchronously execute an "Abstractive Summarization" in a batch of documents.
*/
public class AbstractiveSummarization {
/**
* Main method to invoke this demo about how to analyze an "Abstractive Summarization".
*
* @param args Unused arguments to the program.
*/
public static void main(String[] args) {
TextAnalyticsClient client = new TextAnalyticsClientBuilder()
.credential(new AzureKeyCredential("{key}"))
.endpoint("{endpoint}")
.buildClient();
List<String> documents = new ArrayList<>();
documents.add(
"At Microsoft, we have been on a quest to advance AI beyond existing techniques, by taking a more holistic,"
+ " human-centric approach to learning and understanding. As Chief Technology Officer of Azure AI"
+ " Cognitive Services, I have been working with a team of amazing scientists and engineers to turn "
+ "this quest into a reality. In my role, I enjoy a unique perspective in viewing the relationship"
+ " among three attributes of human cognition: monolingual text (X), audio or visual sensory signals,"
+ " (Y) and multilingual (Z). At the intersection of all three, there’s magic—what we call XYZ-code"
+ " as illustrated in Figure 1—a joint representation to create more powerful AI that can speak, hear,"
+ " see, and understand humans better. We believe XYZ-code will enable us to fulfill our long-term"
+ " vision: cross-domain transfer learning, spanning modalities and languages. The goal is to have"
+ " pretrained models that can jointly learn representations to support a broad range of downstream"
+ " AI tasks, much in the way humans do today. Over the past five years, we have achieved human"
+ " performance on benchmarks in conversational speech recognition, machine translation, "
+ "conversational question answering, machine reading comprehension, and image captioning. These"
+ " five breakthroughs provided us with strong signals toward our more ambitious aspiration to"
+ " produce a leap in AI capabilities, achieving multisensory and multilingual learning that "
+ "is closer in line with how humans learn and understand. I believe the joint XYZ-code is a "
+ "foundational component of this aspiration, if grounded with external knowledge sources in "
+ "the downstream AI tasks.");
SyncPoller<AbstractiveSummaryOperationDetail, AbstractiveSummaryPagedIterable> syncPoller =
client.beginAbstractSummary(documents,
"en",
new AbstractiveSummaryOptions().setDisplayName("{tasks_display_name}").setSentenceCount(3));
syncPoller.waitForCompletion();
syncPoller.getFinalResult().forEach(resultCollection -> {
for (AbstractiveSummaryResult documentResult : resultCollection) {
if (!documentResult.isError()) {
System.out.println("\tAbstractive summary sentences:");
for (AbstractiveSummary summarySentence : documentResult.getSummaries()) {
System.out.printf("\t\t Summary text: %s.%n", summarySentence.getText());
for (AbstractiveSummaryContext abstractiveSummaryContext : summarySentence.getContexts()) {
System.out.printf("\t\t offset: %d, length: %d%n",
abstractiveSummaryContext.getOffset(), abstractiveSummaryContext.getLength());
}
}
} else {
System.out.printf("\tCannot get abstractive summary. Error: %s%n",
documentResult.getError().getMessage());
}
}
});
}
}