แชร์ผ่าน


ใช้การวิเคราะห์ข้อความ Azure AI Language ใน Fabric ด้วย REST API และ SynapseML (พรีวิว)

สําคัญ

คุณลักษณะนี้อยู่ใน แสดงตัวอย่าง

Azure AI Language เป็น บริการ Azure AI ที่ช่วยให้คุณสามารถทําเหมืองข้อความและการวิเคราะห์ข้อความด้วยคุณสมบัติการประมวลผลภาษาธรรมชาติ (NLP)

ในบทความนี้ คุณจะได้เรียนรู้วิธีใช้บริการ Azure AI Language โดยตรงใน Microsoft Fabric เพื่อวิเคราะห์ข้อความ ในตอนท้ายของบทความนี้ คุณจะสามารถ:

  • ตรวจหาป้ายกํากับความรู้สึกในระดับประโยคหรือเอกสาร
  • ระบุภาษาสําหรับการป้อนข้อความที่กําหนด
  • แยกวลีสําคัญจากข้อความ
  • ระบุเอนทิตีต่างๆ ในข้อความและจัดหมวดหมู่เป็นคลาสหรือประเภทที่กําหนดไว้ล่วงหน้า

ข้อกําหนดเบื้องต้น

  • สร้าง สมุดบันทึกใหม่
  • แนบสมุดบันทึกของคุณเข้ากับเลคเฮ้าส์ ทางด้านซ้ายของสมุดบันทึกของคุณ ให้เลือก เพิ่ม เพื่อเพิ่มเลคเฮ้าส์ที่มีอยู่แล้ว หรือสร้างขึ้นใหม่

หมายเหตุ

บทความนี้ใช้บริการ AI ที่สร้างไว้ล่วงหน้าในตัวของ Microsoft Fabric ซึ่งจัดการการรับรองความถูกต้องโดยอัตโนมัติ คุณไม่จําเป็นต้องขอรับคีย์บริการ Azure AI แยกต่างหาก - การรับรองความถูกต้องได้รับการจัดการผ่านพื้นที่ทํางาน Fabric ของคุณ สําหรับข้อมูลเพิ่มเติม โปรดดู โมเดล AI ที่สร้างไว้ล่วงหน้าใน Fabric (พรีวิว)

ตัวอย่างรหัสในบทความนี้ใช้ไลบรารีที่ติดตั้งไว้ล่วงหน้าในสมุดบันทึก Microsoft Fabric:

  • SynapseML: ติดตั้งไว้ล่วงหน้าในโน้ตบุ๊ก Fabric สําหรับความสามารถของแมชชีนเลิร์นนิง
  • PySpark: พร้อมใช้งานตามค่าเริ่มต้นในการประมวลผล Fabric Spark
  • ไลบรารี Python มาตรฐาน: jsonเป็นส่วนหนึ่งของ uuid ไลบรารีมาตรฐาน Python

หมายเหตุ

โน้ตบุ๊ก Microsoft Fabric มาพร้อมกับไลบรารีทั่วไปที่ติดตั้งไว้ล่วงหน้ามากมาย ไลบรารี SynapseML ซึ่งให้การรวม MLflow และความสามารถในการวิเคราะห์ข้อความ จะพร้อมใช้งานโดยอัตโนมัติในสภาพแวดล้อม Spark

เลือกแนวทางของคุณ

บทความนี้มีสองวิธีในการใช้บริการภาษา Azure AI ใน Fabric:

  • แนวทาง REST API: การเรียก HTTP โดยตรงไปยังบริการ (แนะนําสําหรับผู้เริ่มต้น)
  • แนวทาง SynapseML: การใช้ Spark DataFrames สําหรับการประมวลผลขนาดใหญ่ขึ้น

เคล็ดลับ

ผู้ใช้ใหม่ควรเริ่มต้นด้วยแนวทาง REST API เนื่องจากเข้าใจและแก้ไขข้อบกพร่องได้ง่ายกว่า แนวทาง SynapseML ดีกว่าสําหรับการประมวลผลชุดข้อมูลขนาดใหญ่ด้วย Spark

ตั้งค่าการรับรองความถูกต้องและปลายทาง

คัดลอกและวางรหัสนี้ลงในเซลล์แรกของสมุดบันทึก Fabric ของคุณเพื่อตั้งค่าการเชื่อมต่อกับบริการ Azure AI Language:

หมายเหตุ

รหัสนี้ใช้การรับรองความถูกต้องในตัวของ Fabric ฟังก์ชันนี้จะ get_fabric_env_config ดึงข้อมูลประจําตัวพื้นที่ทํางานของคุณโดยอัตโนมัติและเชื่อมต่อกับบริการ AI ที่สร้างไว้ล่วงหน้า ไม่จําเป็นต้องใช้คีย์ API

# Get workload endpoints and access token
from synapse.ml.fabric.service_discovery import get_fabric_env_config
from synapse.ml.fabric.token_utils import TokenUtils
import json
import requests

fabric_env_config = get_fabric_env_config().fabric_env_config
auth_header = TokenUtils().get_openai_auth_header()

# Make a RESful request to AI service
prebuilt_AI_base_host = fabric_env_config.ml_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"
print("Service URL: \n" + service_url)

auth_headers = {
    "Authorization" : auth_header
}

def print_response(response):
    if response.status_code == 200:
        print(json.dumps(response.json(), indent=2))
    else:
        print(f"Error: {response.status_code}, {response.content}")

การวิเคราะห์ความคิดเห็น

คุณลักษณะการวิเคราะห์ความคิดเห็นเป็นวิธีในการตรวจจับป้ายกํากับความคิดเห็น (เช่น "เชิงลบ" "เป็นกลาง" และ "เชิงบวก") และคะแนนความเชื่อมั่นในระดับประโยคและเอกสาร คุณลักษณะนี้ยังส่งคืนคะแนนความเชื่อมั่นระหว่าง 0 ถึง 1 สําหรับแต่ละเอกสารและประโยคภายในสําหรับความรู้สึกเชิงบวก เป็นกลาง และเชิงลบ ดูการสนับสนุนภาษาการวิเคราะห์ความคิดเห็น และการขุดความคิดเห็น สําหรับรายการของภาษาที่เปิดใช้งาน

วิเคราะห์ความรู้สึกของข้อความ

คัดลอกรหัสนี้ลงในเซลล์ใหม่ในสมุดบันทึกของคุณเพื่อวิเคราะห์ความรู้สึกของข้อความตัวอย่าง:

payload = {
    "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."
            }
        ]
    }
} 

response = requests.post(service_url, json=payload, headers=auth_headers)


# Output all information of the request process
print_response(response)

เคล็ดลับ

คุณสามารถแทนที่ข้อความในช่อง "ข้อความ" ด้วยเนื้อหาของคุณเองเพื่อวิเคราะห์ บริการจะส่งคืนคะแนนความคิดเห็นและระบุว่าส่วนใดของข้อความเป็นบวก เชิงลบ หรือเป็นกลาง

ผลผลิตที่คาดหวัง

เมื่อคุณเรียกใช้รหัสต่อไปนี้สําเร็จ คุณจะเห็นผลลัพธ์ที่คล้ายกับนี้:

{
  "kind": "SentimentAnalysisResults",
  "results": {
    "documents": [
      {
        "id": "1",
        "sentiment": "negative",
        "confidenceScores": {
          "positive": 0.0,
          "neutral": 0.0,
          "negative": 1.0
        },
        "sentences": [
          {
            "sentiment": "negative",
            "confidenceScores": {
              "positive": 0.0,
              "neutral": 0.0,
              "negative": 1.0
            },
            "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": "neutral",
            "confidenceScores": {
              "positive": 0.22,
              "neutral": 0.75,
              "negative": 0.04
            },
            "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": "2025-01-01"
  }
}

ตัวตรวจหาภาษา

ตัวตรวจหาภาษาจะประเมินการป้อนข้อความสําหรับแต่ละเอกสาร และส่งกลับตัวระบุภาษาที่มีคะแนนที่ระบุความเข้มของการวิเคราะห์ ความสามารถนี้มีประโยชน์สําหรับร้านค้าเนื้อหาที่รวบรวมข้อความตามอําเภอใจที่ไม่รู้จักภาษา ดู ภาษาที่รองรับสําหรับการตรวจหาภาษา สําหรับรายการของภาษาที่เปิดใช้งาน

payload = {
    "kind": "LanguageDetection",
    "parameters": {
        "modelVersion": "latest"
    },
    "analysisInput":{
        "documents":[
            {
                "id":"1",
                "text": "This is a document written in English."
            }
        ]
    }
}

response = requests.post(service_url, json=payload, headers=auth_headers)

# Output all information of the request process
print_response(response)

ผลิตภัณฑ์

{
  "kind": "LanguageDetectionResults",
  "results": {
    "documents": [
      {
        "id": "1",
        "warnings": [],
        "detectedLanguage": {
          "name": "English",
          "iso6391Name": "en",
          "confidenceScore": 0.95
        }
      }
    ],
    "errors": [],
    "modelVersion": "2024-11-01"
  }
}

ตัวแยกวลีหลัก

การแยกวลีหลักจะประเมินข้อความที่ไม่มีโครงสร้างและส่งกลับรายการของวลีหลัก ความสามารถนี้มีประโยชน์ถ้าคุณต้องการระบุจุดหลักในคอลเลกชันของเอกสารอย่างรวดเร็ว ดู ภาษาที่รองรับสําหรับการแยกวลีหลัก สําหรับรายการของภาษาที่เปิดใช้งาน

payload = {
    "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."
            }
        ]
    }
}

response = requests.post(service_url, json=payload, headers=auth_headers)

# Output all information of the request process
print_response(response)

ผลิตภัณฑ์

{
  "kind": "KeyPhraseExtractionResults",
  "results": {
    "documents": [
      {
        "id": "1",
        "keyPhrases": [
          "modern medical office",
          "Dr. Smith",
          "great staff"
        ],
        "warnings": []
      }
    ],
    "errors": [],
    "modelVersion": "2022-10-01"
  }
}

การจดจําเอนทิตีที่มีชื่อ (NER)

การรู้จําเอนทิตี้ที่มีชื่อ (NER) คือความสามารถในการระบุเอนทิตี้ที่แตกต่างกันในข้อความและจัดประเภทลงในคลาสหรือประเภทที่กําหนดไว้ล่วงหน้า เช่น บุคคล ตําแหน่งที่ตั้ง เหตุการณ์ ผลิตภัณฑ์ และองค์กร ดูภาษา NER รองรับ สําหรับรายการของภาษาที่เปิดใช้งาน

payload = {
    "kind": "EntityRecognition",
    "parameters": {
        "modelVersion": "latest"
    },
    "analysisInput":{
        "documents":[
            {
                "id":"1",
                "language": "en",
                "text": "I had a wonderful trip to Seattle last week."
            }
        ]
    }
}

response = requests.post(service_url, json=payload, headers=auth_headers)

# Output all information of the request process
print_response(response)

ผลิตภัณฑ์

{
  "kind": "EntityRecognitionResults",
  "results": {
    "documents": [
      {
        "id": "1",
        "entities": [
          {
            "text": "trip",
            "category": "Event",
            "offset": 18,
            "length": 4,
            "confidenceScore": 0.66
          },
          {
            "text": "Seattle",
            "category": "Location",
            "subcategory": "City",
            "offset": 26,
            "length": 7,
            "confidenceScore": 1.0
          },
          {
            "text": "last week",
            "category": "DateTime",
            "subcategory": "DateRange",
            "offset": 34,
            "length": 9,
            "confidenceScore": 1.0
          }
        ],
        "warnings": []
      }
    ],
    "errors": [],
    "modelVersion": "2025-02-01"
  }
}


การเชื่อมโยงเอนทิตี

ไม่มีขั้นตอนสําหรับ REST API ในส่วนนี้