ใช้การวิเคราะห์ข้อความจัดทําสําเร็จใน Fabric กับ REST API และ SynapseML (ตัวอย่าง)
สำคัญ
คุณลักษณะนี้อยู่ในตัวอย่าง
การวิเคราะห์ ข้อความคือ บริการ Azure AI ที่ช่วยให้คุณสามารถดําเนินการขุดข้อความและการวิเคราะห์ข้อความด้วยคุณลักษณะการประมวลผลภาษาธรรมชาติ (NLP)
บทช่วยสอนนี้สาธิตโดยใช้การวิเคราะห์ข้อความใน Fabric ด้วย RESTful API เพื่อ:
- ตรวจหาป้ายชื่อความคิดเห็นในระดับประโยคหรือเอกสาร
- ระบุภาษาสําหรับการป้อนข้อความที่กําหนด
- แยกระยะคีย์ออกจากข้อความ
- ระบุเอนทิตี้อื่นในข้อความและจัดประเภทเอนทิตี้ลงในคลาสหรือประเภทที่กําหนดไว้ล่วงหน้า
ข้อกำหนดเบื้องต้น
# Get workload endpoints and access token
from synapse.ml.mlflow import get_mlflow_env_config
import json
mlflow_env_configs = get_mlflow_env_config()
access_token = access_token = mlflow_env_configs.driver_aad_token
prebuilt_AI_base_host = mlflow_env_configs.workload_endpoint + "cognitive/textanalytics/"
print("Workload endpoint for AI service: \n" + prebuilt_AI_base_host)
service_url = prebuilt_AI_base_host + "language/:analyze-text?api-version=2022-05-01"
# Make a RESful request to AI service
post_headers = {
"Content-Type" : "application/json",
"Authorization" : "Bearer {}".format(access_token)
}
def printresponse(response):
print(f"HTTP {response.status_code}")
if response.status_code == 200:
try:
result = response.json()
print(json.dumps(result, indent=2, ensure_ascii=False))
except:
print(f"pasre error {response.content}")
else:
print(response.headers)
print(f"error message: {response.content}")
การวิเคราะห์ความคิดเห็น
คุณลักษณะการวิเคราะห์ความคิดเห็นมีวิธีในการตรวจหาป้ายชื่อความคิดเห็น (เช่น "ลบ", "กลาง" และ "บวก") และคะแนนความเชื่อมั่นที่ประโยคและระดับเอกสาร คุณลักษณะนี้ยังส่งกลับคะแนนความเชื่อมั่นระหว่าง 0 และ 1 สําหรับแต่ละเอกสารและประโยคที่อยู่ภายในสําหรับความคิดเห็นที่เป็นบวก กลาง และลบ ดูการสนับสนุนภาษาการขุดวิเคราะห์ความคิดเห็นและความคิดเห็นสําหรับรายการของภาษาที่เปิดใช้งาน
import requests
from pprint import pprint
import uuid
post_body = {
"kind": "SentimentAnalysis",
"parameters": {
"modelVersion": "latest",
"opinionMining": "True"
},
"analysisInput":{
"documents":[
{
"id":"1",
"language":"en",
"text": "The food and service were unacceptable. The concierge was nice, however."
}
]
}
}
post_headers["x-ms-workload-resource-moniker"] = str(uuid.uuid1())
response = requests.post(service_url, json=post_body, headers=post_headers)
# Output all information of the request process
printresponse(response)
เอาท์พุท
HTTP 200
{
"kind": "SentimentAnalysisResults",
"results": {
"documents": [
{
"id": "1",
"sentiment": "mixed",
"confidenceScores": {
"positive": 0.43,
"neutral": 0.04,
"negative": 0.53
},
"sentences": [
{
"sentiment": "negative",
"confidenceScores": {
"positive": 0.0,
"neutral": 0.01,
"negative": 0.99
},
"offset": 0,
"length": 40,
"text": "The food and service were unacceptable. ",
"targets": [
{
"sentiment": "negative",
"confidenceScores": {
"positive": 0.01,
"negative": 0.99
},
"offset": 4,
"length": 4,
"text": "food",
"relations": [
{
"relationType": "assessment",
"ref": "#/documents/0/sentences/0/assessments/0"
}
]
},
{
"sentiment": "negative",
"confidenceScores": {
"positive": 0.01,
"negative": 0.99
},
"offset": 13,
"length": 7,
"text": "service",
"relations": [
{
"relationType": "assessment",
"ref": "#/documents/0/sentences/0/assessments/0"
}
]
}
],
"assessments": [
{
"sentiment": "negative",
"confidenceScores": {
"positive": 0.01,
"negative": 0.99
},
"offset": 26,
"length": 12,
"text": "unacceptable",
"isNegated": false
}
]
},
{
"sentiment": "positive",
"confidenceScores": {
"positive": 0.86,
"neutral": 0.08,
"negative": 0.07
},
"offset": 40,
"length": 32,
"text": "The concierge was nice, however.",
"targets": [
{
"sentiment": "positive",
"confidenceScores": {
"positive": 1.0,
"negative": 0.0
},
"offset": 44,
"length": 9,
"text": "concierge",
"relations": [
{
"relationType": "assessment",
"ref": "#/documents/0/sentences/1/assessments/0"
}
]
}
],
"assessments": [
{
"sentiment": "positive",
"confidenceScores": {
"positive": 1.0,
"negative": 0.0
},
"offset": 58,
"length": 4,
"text": "nice",
"isNegated": false
}
]
}
],
"warnings": []
}
],
"errors": [],
"modelVersion": "2022-11-01"
}
}
ตัวตรวจหาภาษา
ตัวตรวจหาภาษาจะประเมินการป้อนข้อความสําหรับแต่ละเอกสาร และส่งกลับตัวระบุภาษาที่มีคะแนนที่ระบุความเข้มของการวิเคราะห์ ความสามารถนี้มีประโยชน์สําหรับร้านค้าเนื้อหาที่รวบรวมข้อความตามอําเภอใจที่ไม่รู้จักภาษา ดูภาษาที่รองรับสําหรับการตรวจหาภาษาสําหรับรายการของภาษาที่เปิดใช้งาน
post_body = {
"kind": "LanguageDetection",
"parameters": {
"modelVersion": "latest"
},
"analysisInput":{
"documents":[
{
"id":"1",
"text": "This is a document written in English."
}
]
}
}
post_headers["x-ms-workload-resource-moniker"] = str(uuid.uuid1())
response = requests.post(service_url, json=post_body, headers=post_headers)
# Output all information of the request process
printresponse(response)
เอาท์พุท
HTTP 200
{
"kind": "LanguageDetectionResults",
"results": {
"documents": [
{
"id": "1",
"detectedLanguage": {
"name": "English",
"iso6391Name": "en",
"confidenceScore": 0.99
},
"warnings": []
}
],
"errors": [],
"modelVersion": "2022-10-01"
}
}
ตัวแยกวลีหลัก
การแยกวลีหลักจะประเมินข้อความที่ไม่มีโครงสร้างและส่งกลับรายการของวลีหลัก ความสามารถนี้มีประโยชน์ถ้าคุณต้องการระบุจุดหลักในคอลเลกชันของเอกสารอย่างรวดเร็ว ดูภาษาที่สนับสนุนสําหรับการแยกวลีหลักสําหรับรายการของภาษาที่เปิดใช้งาน
post_body = {
"kind": "KeyPhraseExtraction",
"parameters": {
"modelVersion": "latest"
},
"analysisInput":{
"documents":[
{
"id":"1",
"language":"en",
"text": "Dr. Smith has a very modern medical office, and she has great staff."
}
]
}
}
post_headers["x-ms-workload-resource-moniker"] = str(uuid.uuid1())
response = requests.post(service_url, json=post_body, headers=post_headers)
# Output all information of the request process
printresponse(response)
เอาท์พุท
HTTP 200
{
"kind": "KeyPhraseExtractionResults",
"results": {
"documents": [
{
"id": "1",
"keyPhrases": [
"modern medical office",
"Dr. Smith",
"great staff"
],
"warnings": []
}
],
"errors": [],
"modelVersion": "2022-10-01"
}
}
การจดจําเอนทิตีที่มีชื่อ (NER)
การรู้จําเอนทิตี้ที่มีชื่อ (NER) คือความสามารถในการระบุเอนทิตี้ที่แตกต่างกันในข้อความและจัดประเภทลงในคลาสหรือประเภทที่กําหนดไว้ล่วงหน้า เช่น บุคคล ตําแหน่งที่ตั้ง เหตุการณ์ ผลิตภัณฑ์ และองค์กร ดูการสนับสนุน ภาษา NER สําหรับรายการภาษาที่เปิดใช้งาน
post_body = {
"kind": "EntityRecognition",
"parameters": {
"modelVersion": "latest"
},
"analysisInput":{
"documents":[
{
"id":"1",
"language": "en",
"text": "I had a wonderful trip to Seattle last week."
}
]
}
}
post_headers["x-ms-workload-resource-moniker"] = str(uuid.uuid1())
response = requests.post(service_url, json=post_body, headers=post_headers)
# Output all information of the request process
printresponse(response)
เอาท์พุท
HTTP 200
{
"kind": "EntityRecognitionResults",
"results": {
"documents": [
{
"id": "1",
"entities": [
{
"text": "trip",
"category": "Event",
"offset": 18,
"length": 4,
"confidenceScore": 0.74
},
{
"text": "Seattle",
"category": "Location",
"subcategory": "GPE",
"offset": 26,
"length": 7,
"confidenceScore": 1.0
},
{
"text": "last week",
"category": "DateTime",
"subcategory": "DateRange",
"offset": 34,
"length": 9,
"confidenceScore": 0.8
}
],
"warnings": []
}
],
"errors": [],
"modelVersion": "2021-06-01"
}
}
การเชื่อมโยงเอนทิตี
เนื้อหาที่เกี่ยวข้อง
- ใช้การวิเคราะห์ข้อความจัดทําสําเร็จใน Fabric ด้วย SynapseML
- ใช้ตัวแปลภาษา Azure AI จัดทําสําเร็จใน Fabric กับ REST API
- ใช้ตัวแปลภาษา Azure AI จัดทําสําเร็จใน Fabric with SynapseML
- ใช้ Azure OpenAI ที่สร้างไว้ล่วงหน้าใน Fabric ด้วย REST API
- ใช้ Azure OpenAI ที่สร้างไว้ล่วงหน้าในผ้าด้วย Python SDK
- ใช้ Azure OpenAI ที่สร้างไว้ล่วงหน้าใน Fabric ด้วย SynapseML