Membentuk data untuk proyeksi ke dalam penyimpanan pengetahuan

Di Pencarian Azure AI, "membentuk data" menjelaskan langkah dalam alur kerja penyimpanan pengetahuan yang membuat representasi data konten yang ingin Anda proyeksikan ke dalam tabel, objek, dan file di Azure Storage.

Saat keterampilan dijalankan, output ditulis ke pohon pengayaan dalam hierarki simpul, dan sementara Anda mungkin ingin melihat dan mengonsumsi pohon pengayaan secara keseluruhan, kemungkinan besar Anda akan menginginkan butir yang lebih halus, membuat subset simpul untuk skenario yang berbeda, seperti menempatkan simpul yang terkait dengan teks yang diterjemahkan atau entitas yang diekstrak dalam tabel tertentu.

Dengan sendirinya, pohon pengayaan tidak menyertakan logika yang akan menginformasikan bagaimana kontennya diwakili di penyimpanan pengetahuan. Bentuk data mengisi celah ini dengan menyediakan segala skema yang masuk ke setiap tabel, objek, dan proyeksi file. Anda dapat menganggap bentuk data sebagai definisi atau tampilan kustom dari data yang diperkaya. Anda dapat membuat bentuk sebanyak yang Anda butuhkan, lalu menetapkannya ke proyeksi dalam definisi penyimpanan pengetahuan.

Pendekatan untuk membuat bentuk

Terdapat dua cara untuk membentuk konten yang diperkaya sehingga dapat diproyeksikan ke penyimpanan pengetahuan:

  • Gunakan keterampilan Shaper untuk membuat simpul di pohon pengayaan yang digunakan untuk proyeksi secara langsung. Sebagian besar keterampilan membuat konten baru. Sebaliknya, keterampilan Shaper bekerja dengan simpul yang ada, umumnya untuk mengkonsolidasikan beberapa simpul menjadi satu objek kompleks. Ini berguna untuk tabel di mana Anda ingin output dari beberapa simpul dinyatakan secara fisik sebagai kolom dalam tabel.

  • Gunakan proyeksi yang sebaris dalam definisi proyeksi itu sendiri.

Menggunakan keterampilan Shaper mengeksternalisasi bentuk sehingga dapat digunakan oleh beberapa proyeksi atau bahkan keterampilan lainnya. Keterampilan Shaper memastikan bahwa semua mutasi pohon pengayaan terkandung dalam keterampilan dan bahwa outputnya adalah objek yang dapat digunakan kembali. Sebaliknya, pembentukan sebaris memungkinkan Anda membuat bentuk yang Anda butuhkan, tetapi merupakan objek anonim dan hanya tersedia untuk proyeksi yang ditentukan.

Pendekatan dapat digunakan bersama-sama atau secara terpisah. Artikel ini menunjukkan keduanya: keterampilan Shaper untuk proyeksi tabel, dan membentuk proyeksi yang sebaris dengan proyeksi tabel frasa kunci.

Menggunakan keterampilan Shaper

Keterampilan Shaper biasanya ditempatkan di akhir skillset, menciptakan pandangan dari data yang ingin Anda sampaikan ke proyeksi. Contoh ini menciptakan bentuk yang disebut "tableprojection" yang berisi simpul berikut: "reviews_text", "reviews_title", "AzureSearch_DocumentKey", dan skor sentimen dan frase kunci dari ulasan halaman.

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "name": "#5",
    "description": null,
    "context": "/document",
    "inputs": [        
        {
            "name": "reviews_text",
            "source": "/document/reviews_text",
            "sourceContext": null,
            "inputs": []
        },
        {
            "name": "reviews_title",
            "source": "/document/reviews_title",
            "sourceContext": null,
            "inputs": []
        },
        {
            "name": "AzureSearch_DocumentKey",
            "source": "/document/AzureSearch_DocumentKey",
            "sourceContext": null,
            "inputs": []
        },  
        {
            "name": "pages",
            "source": null,
            "sourceContext": "/document/reviews_text/pages/*",
            "inputs": [
                {
                    "name": "Sentiment",
                    "source": "/document/reviews_text/pages/*/Sentiment",
                    "sourceContext": null,
                    "inputs": []
                },
                {
                    "name": "LanguageCode",
                    "source": "/document/Language",
                    "sourceContext": null,
                    "inputs": []
                },
                {
                    "name": "Page",
                    "source": "/document/reviews_text/pages/*",
                    "sourceContext": null,
                    "inputs": []
                },
                {
                    "name": "keyphrase",
                    "sourceContext": "/document/reviews_text/pages/*/Keyphrases/*",
                    "inputs": [
                        {
                            "source": "/document/reviews_text/pages/*/Keyphrases/*",
                            "name": "Keyphrases"
                        }
                    ]
                }
            ]
        }
    ],
    "outputs": [
        {
            "name": "output",
            "targetName": "tableprojection"
        }
    ]
}

Properti SourceContext

Dengan kemampuan Shaper, input mendapatkan elemen sourceContext. Properti yang sama ini juga dapat digunakan dalam bentuk yang sebaris dalam proyeksi.

sourceContext Digunakan untuk membangun multi-level, objek bersarang dalam alur pengayaan. Jika input berada pada konteks yang berbeda dari konteks keterampilan, gunakan sourceContext. SourceContext mengharuskan Anda untuk menentukan input bertumpuk dengan elemen tertentu yang ditangani sebagai sumber.

Dalam contoh di atas, analisis sentimen dan ekstraksi frase kunci dilakukan pada teks yang dibagi menjadi halaman untuk analisis yang lebih efisien. Dengan asumsi Anda ingin skor dan frasa diproyeksikan ke dalam tabel, Anda sekarang perlu mengatur konteks ke input berlapis yang menyediakan skor dan frasa.

Memproyeksikan bentuk ke dalam beberapa tabel

Dengan simpul tableprojection yang ditentukan di bagian outputs di atas, Anda dapat memotong bagian-bagian simpul tableprojection ke tabel individual yang terkait:

"projections": [
    {
        "tables": [
            {
                "tableName": "hotelReviewsDocument",
                "generatedKeyName": "Documentid",
                "source": "/document/tableprojection"
            },
            {
                "tableName": "hotelReviewsPages",
                "generatedKeyName": "Pagesid",
                "source": "/document/tableprojection/pages/*"
            },
            {
                "tableName": "hotelReviewsKeyPhrases",
                "generatedKeyName": "KeyPhrasesid",
                "source": "/document/tableprojection/pages/*/keyphrase/*"
            }
        ]
    }
]

Bentuk barisan untuk proyeksi tabel

Pembentukan sebaris adalah kemampuan untuk membentuk bentuk baru dalam definisi proyeksi itu sendiri. Pembentukan sebaris memiliki karakteristik berikut:

  • Bentuk hanya dapat digunakan oleh proyeksi yang berisi hal tersebut.
  • Bentuk dapat identik dengan apa yang akan dihasilkan oleh keterampilan Shaper.

Bentuk sebaris dibuat menggunakan sourceContext dan inputs.

Properti Deskripsi
sourceContext Menetapkan akar proyeksi.
input Setiap input adalah kolom dalam tabel. Nama adalah nama kolom. Sumber adalah simpul pengayaan yang memberikan nilai.

Untuk memproyeksikan data yang sama seperti contoh sebelumnya, opsi proyeksi sebaris akan terlihat seperti ini:

"projections": [
    {
        "tables": [
            {
                "tableName": "hotelReviewsInlineDocument",
                "generatedKeyName": "Documentid",
                "sourceContext": "/document",     
                "inputs": [
                    {
                        "name": "reviews_text",
                        "source": "/document/reviews_text"
                    },
                    {
                        "name": "reviews_title",
                        "source": "/document/reviews_title"
                    },
                    {
                        "name": "AzureSearch_DocumentKey",
                        "source": "/document/AzureSearch_DocumentKey"
                    }                             
                ]
            },
            {
                "tableName": "hotelReviewsInlinePages",
                "generatedKeyName": "Pagesid",
                "sourceContext": "/document/reviews_text/pages/*",
                "inputs": [
                        {
                    "name": "Sentiment",
                    "source": "/document/reviews_text/pages/*/Sentiment"
                    },
                    {
                        "name": "LanguageCode",
                        "source": "/document/Language"
                    },
                    {
                        "name": "Page",
                        "source": "/document/reviews_text/pages/*"
                    }
                ]
            },
            {
                "tableName": "hotelReviewsInlineKeyPhrases",
                "generatedKeyName": "KeyPhraseId",
                "sourceContext": "/document/reviews_text/pages/*/Keyphrases/*",
                "inputs": [
                    {
                        "name": "Keyphrases",
                        "source": "/document/reviews_text/pages/*/Keyphrases/*"
                    }
                ]
            }
        ]
    }
]

Salah satu pengamatan dari kedua pendekatan adalah bagaimana nilai “Keyphrases” diproyeksikan menggunakan “sourceContext”. Simpul “Keyphrases”, yang berisi kumpulan untai (karakter), adalah anak dari teks halaman itu sendiri. Namun, karena proyeksi memerlukan objek JSON dan halaman adalah primitif (untai), “sourceContext” yang digunakan untuk menutup frasa kunci menjadi objek dengan properti bernama. Teknik ini memungkinkan bahkan primitif untuk diproyeksikan secara independen.

Bentuk barisan untuk proyeksi objek

Anda dapat menghasilkan bentuk baru menggunakan keterampilan Shaper atau menggunakan pembentukan sebaris dari proyeksi objek. Sementara contoh tabel menunjukkan pendekatan pembuatan bentuk dan pembelahan, contoh ini menunjukkan penggunaan pembentukan sebaris.

Pembentukan sebaris adalah kemampuan untuk membuat bentuk baru dengan definisi input ke proyeksi. Pembentukan barisan menciptakan objek anonim yang identik dengan apa yang akan dihasilkan oleh keterampilan Shaper (dalam kasus ini, projectionShape). Pembentukan sebaris berguna jika Anda menentukan bentuk yang tidak Anda rencanakan untuk digunakan kembali.

Properti proyeksi adalah larik. Contoh ini menambahkan instans proyeksi baru ke larik, di mana definisi knowledgeStore berisi proyeksi sebaris. Saat menggunakan proyeksi barisan, Anda dapat menghilangkan keterampilan Shaper.

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
            {
            "tables": [ ],
            "objects": [
                {
                    "storageContainer": "sampleobject",
                    "source": null,
                    "generatedKeyName": "myobject",
                    "sourceContext": "/document",
                    "inputs": [
                        {
                            "name": "metadata_storage_name",
                            "source": "/document/metadata_storage_name"
                        },
                        {
                            "name": "metadata_storage_path",
                            "source": "/document/metadata_storage_path"
                        },
                        {
                            "name": "content",
                            "source": "/document/content"
                        },
                        {
                            "name": "keyPhrases",
                            "source": "/document/merged_content/keyphrases/*"
                        },
                        {
                            "name": "entities",
                            "source": "/document/merged_content/entities/*/name"
                        },
                        {
                            "name": "ocrText",
                            "source": "/document/normalized_images/*/text"
                        },
                        {
                            "name": "ocrLayoutText",
                            "source": "/document/normalized_images/*/layoutText"
                        }
                    ]

                }
            ],
            "files": []
        }
    ]
}

Langkah berikutnya

Artikel ini menjelaskan konsep dan prinsip bentuk proyeksi. Sebagai langkah selanjutnya, lihat bagaimana hal ini diterapkan dalam pola untuk proyeksi tabel, objek, dan file.