Aracılığıyla paylaş


Bilgi deposundaki şekillerin ve projeksiyonların ayrıntılı örneği

Bu makalede, bir bilgi deposundaki zengin beceri kümesinin çıktısını tam olarak ifade etmek için gereken şekillendirme ve projeksiyon adımlarında size yol göstererek üst düzey kavramları ve söz dizimi tabanlı makaleleri destekleyen ayrıntılı bir örnek sağlanmaktadır.

Uygulama gereksinimleriniz birden çok beceri ve projeksiyona çağrıda bulunursa, bu örnek şekillerin ve projeksiyonların nasıl kesiştiği hakkında size daha iyi bir fikir verebilir.

Örnek verileri ayarlama

Örnek belgeler Projeksiyonlar koleksiyonuna dahil değildir, ancak yapay zeka zenginleştirme tanıtım veri dosyaları , bu örnekte açıklanan projeksiyonlarla çalışan metinler ve görüntüler içerir.

Azure Depolama'de bir blob kapsayıcısı oluşturun ve 14 öğenin tümünü karşıya yükleyin.

Azure Depolama'dayken bir bağlantı dizesi kopyalayın.

Bu makaledeki projections.rest örnekleri çalıştırmak için dosyasını kullanabilirsiniz.

Örnek beceri kümesi

Şekiller ve projeksiyonlar arasındaki bağımlılığı anlamak için zenginleştirilmiş içerik oluşturan aşağıdaki beceri kümesini gözden geçirin. Bu beceri kümesi hem ham görüntüleri hem de metni işler ve şekiller ve projeksiyonlarda başvurulacak çıkışlar üretir.

Beceri çıkışlarına (targetNames) çok dikkat edin. Zenginleştirilmiş belge ağacına yazılan çıkışlara projeksiyonlarda ve şekillerde (Shaper becerileri aracılığıyla) başvurulur.

{
    "name": "projections-demo-ss",
    "description": "Skillset that enriches blob data found in "merged_content". The enrichment granularity is a document.",
    "skills": [
        {
            "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
            "name": "#1",
            "description": null,
            "context": "/document/merged_content",
            "categories": [
                "Person",
                "Quantity",
                "Organization",
                "URL",
                "Email",
                "Location",
                "DateTime"
            ],
            "defaultLanguageCode": "en",
            "minimumPrecision": null,
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/merged_content"
                },
                {
                    "name": "languageCode",
                    "source": "/document/language"
                }
            ],
            "outputs": [
                {
                    "name": "persons",
                    "targetName": "people"
                },
                {
                    "name": "organizations",
                    "targetName": "organizations"
                },
                {
                    "name": "locations",
                    "targetName": "locations"
                }
            ]
        },
        {
            "@odata.type": "#Microsoft.Skills.Text.KeyPhraseExtractionSkill",
            "name": "#2",
            "description": null,
            "context": "/document/merged_content",
            "defaultLanguageCode": "en",
            "maxKeyPhraseCount": null,
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/merged_content"
                },
                {
                    "name": "languageCode",
                    "source": "/document/language"
                }
            ],
            "outputs": [
                {
                    "name": "keyPhrases",
                    "targetName": "keyphrases"
                }
            ]
        },
        {
            "@odata.type": "#Microsoft.Skills.Text.LanguageDetectionSkill",
            "name": "#3",
            "description": null,
            "context": "/document",
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/merged_content"
                }
            ],
            "outputs": [
                {
                    "name": "languageCode",
                    "targetName": "language"
                }
            ]
        },
        {
            "@odata.type": "#Microsoft.Skills.Text.MergeSkill",
            "name": "#4",
            "description": null,
            "context": "/document",
            "insertPreTag": " ",
            "insertPostTag": " ",
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/content"
                },
                {
                    "name": "itemsToInsert",
                    "source": "/document/normalized_images/*/text"
                },
                {
                    "name": "offsets",
                    "source": "/document/normalized_images/*/contentOffset"
                }
            ],
            "outputs": [
                {
                    "name": "mergedText",
                    "targetName": "merged_content"
                }
            ]
        },
        {
            "@odata.type": "#Microsoft.Skills.Vision.OcrSkill",
            "name": "#5",
            "description": null,
            "context": "/document/normalized_images/*",
            "textExtractionAlgorithm": "printed",
            "lineEnding": "Space",
            "defaultLanguageCode": "en",
            "detectOrientation": true,
            "inputs": [
                {
                    "name": "image",
                    "source": "/document/normalized_images/*"
                }
            ],
            "outputs": [
                {
                    "name": "text",
                    "targetName": "text"
                },
                {
                    "name": "layoutText",
                    "targetName": "layoutText"
                }
            ]
        }
    ],
    "cognitiveServices": {
        "@odata.type": "#Microsoft.Azure.Search.CognitiveServicesByKey",
        "description": "An Azure AI services resource in the same region as Search.",
        "key": "<Azure AI services All-in-ONE KEY>"
    },
    "knowledgeStore": null
}

Örnek Şekillendirici becerisi

Shaper becerisi, yeni zenginleştirilmiş içerik oluşturmak yerine mevcut zenginleştirilmiş içerikle çalışmaya yönelik bir yardımcı programdır. Beceri kümesine Bir Şekillendirici eklemek, tabloya veya blob depolamaya yansıtabileceğiniz özel bir şekil oluşturmanıza olanak tanır. Özel bir şekil olmadan projeksiyonlar, tablolar için uygun olmayan tek bir düğüme (çıkış başına bir projeksiyon) başvurmakla sınırlıdır. Özel şekil oluşturmak, çeşitli öğeleri tek bir tablo olarak yansıtabileceğiniz veya bir tablo koleksiyonuna dilimlenip dağıtabileceğiniz yeni bir mantıksal bütün halinde toplar.

Bu örnekte, özel şekil blob meta verilerini ve tanımlanan varlıkları ve anahtar tümcecikleri birleştirir. Özel şekil çağrılır projectionShape ve altında /documentüst öğe olarak adlandırılır.

Şekillendirmenin bir amacı, tüm zenginleştirme düğümlerinin bilgi deposuna yansıtmak için gereken iyi biçimlendirilmiş JSON ile ifade edilmesini sağlamaktır. Bu, özellikle zenginleştirme ağacı iyi biçimlendirilmiş JSON olmayan düğümler içerdiğinde (örneğin, bir zenginleştirme bir dize gibi ilkel bir öğeye sahip olduğunda) geçerlidir.

Son iki düğüme KeyPhrases ve Entitiesöğesine dikkat edin. Bunlar ile geçerli bir JSON nesnesine sourceContextsarmalanır. Bu, ve olarak gereklidir keyphrases ve entities ilkel öğelerdeki zenginleştirmelerdir ve yansıtılmadan önce geçerli JSON'a dönüştürülmeleri gerekir.

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "name": "ShaperForTables",
    "description": null,
    "context": "/document",
    "inputs": [
        {
            "name": "metadata_storage_content_type",
            "source": "/document/metadata_storage_content_type",
            "sourceContext": null,
            "inputs": []
        },
        {
            "name": "metadata_storage_name",
            "source": "/document/metadata_storage_name",
            "sourceContext": null,
            "inputs": []
        },
        {
            "name": "metadata_storage_path",
            "source": "/document/metadata_storage_path",
            "sourceContext": null,
            "inputs": []
        },
        {
            "name": "metadata_content_type",
            "source": "/document/metadata_content_type",
            "sourceContext": null,
            "inputs": []
        },
        {
            "name": "keyPhrases",
            "source": null,
            "sourceContext": "/document/merged_content/keyphrases/*",
            "inputs": [
                {
                    "name": "KeyPhrases",
                    "source": "/document/merged_content/keyphrases/*"
                }

            ]
        },
        {
            "name": "Entities",
            "source": null,
            "sourceContext": "/document/merged_content/entities/*",
            "inputs": [
                {
                    "name": "Entities",
                    "source": "/document/merged_content/entities/*/name"
                }

            ]
        }
    ],
    "outputs": [
        {
            "name": "output",
            "targetName": "projectionShape"
        }
    ]
}

Beceri kümesine Şekillendirici ekleme

Bu makalenin başında sunulan örnek beceri kümesiNde Shaper becerisi yoktu, ancak Shaper becerileri bir beceri kümesine aittir ve genellikle sona doğru yerleştirilir.

Bir beceri kümesinde Bir Şekillendirici becerisi aşağıdaki gibi görünebilir:

{
    "name": "projections-demo-ss",
    "skills": [
        {
            <Shaper skill goes here>
            }
        ],
    "cognitiveServices":  "A key goes here",
    "knowledgeStore": []
}  

Tablolara yansıtma

Yukarıdaki örneklerin üzerine çizerek, tablo projeksiyonlarında başvurulabilecek bilinen miktarda zenginleştirme ve veri şekli vardır. Aşağıdaki tablo projeksiyonunda, source ve generatedKeyName özellikleri ayarlanarak tableNameüç tablo tanımlanır.

Bu tabloların üçü de oluşturulan anahtarlar ve paylaşılan üst /document/projectionShapeile ilişkilendirilir.

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
        {
            "tables": [
                {
                    "tableName": "tblDocument",
                    "generatedKeyName": "Documentid",
                    "source": "/document/projectionShape"
                },
                {
                    "tableName": "tblKeyPhrases",
                    "generatedKeyName": "KeyPhraseid",
                    "source": "/document/projectionShape/keyPhrases/*"
                },
                {
                    "tableName": "tblEntities",
                    "generatedKeyName": "Entityid",
                    "source": "/document/projectionShape/Entities/*"
                }
            ],
            "objects": [],
            "files": []
        }
    ]
}

Çalışmanızı test edin

Aşağıdaki adımları izleyerek projeksiyon tanımlarını de kontrol edebilirsiniz:

  1. Bilgi deposunun storageConnectionString özelliğini geçerli bir V2 genel amaçlı depolama hesabı bağlantı dizesi olarak ayarlayın.

  2. PUT isteğini vererek beceri kümesini güncelleştirin.

  3. Beceri kümesini güncelleştirdikten sonra dizin oluşturucuyu çalıştırın.

Artık üç tabloyla çalışan bir projeksiyona sahipsiniz. Bu tabloları Power BI'a aktarmak, Power BI'ın ilişkileri bulmasına neden olmalıdır.

Sonraki örniğe geçmeden önce, dilimleme ve verilerle ilgili mekanikleri anlamak için tablo projeksiyonunun yönlerini yeniden gözden geçirelim.

Tabloyu birden çok alt tabloya dilimleme

Dilimleme, birleştirilmiş bir şeklin tamamını bileşenlere bölen bir tekniktir. Sonuç, tek tek çalışabileceğiniz ayrı ama ilişkili tablolardan oluşur.

Örnekte, projectionShape birleştirilmiş şekil (veya zenginleştirme düğümü) şeklindedir. Projeksiyon tanımında, projectionShape şeklin keyPhrases ve Entitiesbölümlerini çekmenizi sağlayan ek tablolar halinde dilimlenmiş olur. Power BI'da bu, her belgeyle birden çok varlık ve keyPhras'ın ilişkilendirildiği için yararlıdır ve varlıkları ve keyPhrases'i kategorilere ayrılmış veri olarak görüyorsanız daha fazla içgörü elde edersiniz.

Dilimleme, üst ve alt tablolar arasında örtük olarak bir ilişki oluşturur ve üst tablodaki öğesini kullanarak generatedKeyName alt tabloda aynı ada sahip bir sütun oluşturur.

İlişkileri adlandırma

generatedKeyName ve referenceKeyName özellikleri, verileri tablolar arasında ve hatta projeksiyon türleri arasında ilişkilendirmek için kullanılır. Alt tablodaki her satırın üst öğeyi işaret eden bir özelliği vardır. Alt öğedeki sütunun veya özelliğin adı üst öğeden gelen addır referenceKeyName . referenceKeyName sağlanmayan hizmet varsayılan olarak generatedKeyName üst öğeden öğesini seçer.

Power BI, tablolardaki ilişkileri bulmak için bu oluşturulan anahtarlara dayanır. Alt tabloda farklı adlı bir sütuna ihtiyacınız varsa, üst tabloda özelliğini ayarlayın referenceKeyName . Bunun bir örneği, tblDocument tablosunda kimlik olarak ve referenceKeyName DocumentID olarak ayarlamaktırgeneratedKeyName. Bu, tblEntities ve tblKeyPhrases tablolarında belge kimliğini içeren sütunun DocumentID olarak adlandırılmasıyla sonuçlanır.

Blob belgelerini yansıtma

Nesne projeksiyonları, herhangi bir düğümden kaynaklanabilen zenginleştirme ağacının JSON gösterimleridir. Tablo projeksiyonlarına kıyasla nesne projeksiyonlarının tanımlanması daha kolaydır ve tüm belgeler yansıtılırken kullanılır. Nesne projeksiyonları kapsayıcıdaki tek bir projeksiyonla sınırlıdır ve dilimlenemez.

Bir nesne projeksiyonu tanımlamak için projeksiyonlar özelliğindeki diziyi kullanın objects .

Kaynak, projeksiyonun kökü olan zenginleştirme ağacı düğümünün yoludur. Gerekli olmasa da düğüm yolu genellikle Bir Shaper becerisinin çıktısı olur. Bunun nedeni, çoğu becerinin kendi başına geçerli JSON nesnelerinin çıkışını almamasıdır ve bu da bir tür şekillendirmenin gerekli olduğu anlamına gelir. Çoğu durumda, bir tablo projeksiyonu oluşturan aynı Şekillendirici becerisi, nesne projeksiyonu oluşturmak için kullanılabilir. Alternatif olarak, kaynak, yapıyı sağlamak için satır içi şekillendirmeye sahip bir düğüme de ayarlanabilir.

Hedef her zaman bir blob kapsayıcısıdır.

Aşağıdaki örnek, blob başına bir otel belgesi olan tek tek otel belgelerini adlı hotelsbir kapsayıcıya projeler.

"knowledgeStore": {
  "storageConnectionString": "an Azure storage connection string",
  "projections" : [
    {
      "tables": [ ]
    },
    {
      "objects": [
        {
        "storageContainer": "hotels",
        "source": "/document/objectprojection",
        }
      ]
    },
    {
        "files": [ ]
    }
  ]
}

Kaynak, adlı "objectprojection"bir Shaper becerisinin çıktısıdır. Her blob, her alan girişinin bir JSON gösterimine sahip olur.

    {
      "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
      "name": "#3",
      "description": null,
      "context": "/document",
      "inputs": [
        {
          "name": "HotelId",
          "source": "/document/HotelId"
        },
        {
          "name": "HotelName",
          "source": "/document/HotelName"
        },
        {
          "name": "Category",
          "source": "/document/Category"
        },
        {
          "name": "keyPhrases",
          "source": "/document/HotelId/keyphrases/*"
        },
      ],
      "outputs": [
        {
          "name": "output",
          "targetName": "objectprojection"
        }
      ]
    }

Görüntü dosyasını yansıtma

Dosya projeksiyonları her zaman ikili, normalleştirilmiş görüntülerdir; burada normalleştirme beceri kümesi yürütmesinde kullanılmak üzere olası yeniden boyutlandırma ve döndürme anlamına gelir. Nesne projeksiyonlarına benzer şekilde dosya projeksiyonları, Azure Depolama'de blob olarak oluşturulur ve görüntüyü içerir.

Bir dosya projeksiyonu tanımlamak için projeksiyonlar özelliğindeki diziyi kullanın files .

Kaynak her zaman /document/normalized_images/*şeklindedir. Dosya projeksiyonları yalnızca koleksiyon üzerinde normalized_images işlem gösterir. Dizin oluşturucular veya beceri kümesi özgün normalleştirilmemiş görüntüden geçmez.

Hedef her zaman belge kimliğinin base64 kodlanmış değerinin klasör ön ekine sahip bir blob kapsayıcıdır. Dosya projeksiyonları, nesne projeksiyonlarıyla aynı kapsayıcıyı paylaşamaz ve farklı bir kapsayıcıya yansıtılması gerekir.

Aşağıdaki örnek, zenginleştirilmiş bir belgenin belge düğümünden ayıklanan tüm normalleştirilmiş görüntüleri adlı myImagesbir kapsayıcıya projeler.

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
        {
            "tables": [ ],
            "objects": [ ],
            "files": [
                {
                    "storageContainer": "myImages",
                    "source": "/document/normalized_images/*"
                }
            ]
        }
    ]
}

Birden çok türe yansıtma

Daha karmaşık bir senaryo, projeksiyon türleri arasında içerik yansıtmanızı gerektirebilir. Örneğin, anahtar ifadeleri ve varlıkları tablolara yansıtma, metin ve düzen metninin OCR sonuçlarını nesne olarak kaydetme ve ardından görüntüleri dosya olarak yansıtma.

Birden çok projeksiyon türü için adımlar:

  1. Her belge için bir satır içeren bir tablo oluşturun.
  2. Her anahtar tümceciği bu tabloda satır olarak tanımlanan belge tablosuyla ilgili bir tablo oluşturun.
  3. Bu tabloda satır olarak tanımlanan her varlıkla belge tablosuyla ilgili bir tablo oluşturun.
  4. Her resim için düzen metniyle bir nesne projeksiyonu oluşturun.
  5. Ayıklanan her görüntüyü yansıtan bir dosya projeksiyonu oluşturun.
  6. Belge tablosuna başvuruları, düzen metniyle nesne projeksiyonunu ve dosya projeksiyonunu içeren bir çapraz başvuru tablosu oluşturun.

Çapraz yansıtma için verileri şekillendirme

Bu projeksiyonlar için gereken şekilleri almak için, adlı crossProjectionşekillendirilmiş bir nesne oluşturan yeni bir Shaper becerisi ekleyerek işe başlayın.

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "name": "ShaperForCrossProjection",
    "description": null,
    "context": "/document",
    "inputs": [
        {
            "name": "metadata_storage_name",
            "source": "/document/metadata_storage_name",
            "sourceContext": null,
            "inputs": []
        },
        {
            "name": "keyPhrases",
            "source": null,
            "sourceContext": "/document/merged_content/keyphrases/*",
            "inputs": [
                {
                    "name": "KeyPhrases",
                    "source": "/document/merged_content/keyphrases/*"
                }

            ]
        },
        {
            "name": "entities",
            "source": null,
            "sourceContext": "/document/merged_content/entities/*",
            "inputs": [
                {
                    "name": "Entities",
                    "source": "/document/merged_content/entities/*/name"
                }

            ]
        },
        {
            "name": "images",
            "source": null,
            "sourceContext": "/document/normalized_images/*",
            "inputs": [
                {
                    "name": "image",
                    "source": "/document/normalized_images/*"
                },
                {
                    "name": "layoutText",
                    "source": "/document/normalized_images/*/layoutText"
                },
                {
                    "name": "ocrText",
                    "source": "/document/normalized_images/*/text"
                }
                ]
        }
 
    ],
    "outputs": [
        {
            "name": "output",
            "targetName": "crossProjection"
        }
    ]
}

Tablo, nesne ve dosya projeksiyonları tanımlama

Birleştirilmiş crossProjection nesnesinden, nesneyi birden çok tabloya dilimleyin, OCR çıkışını blob olarak yakalayın ve görüntüyü dosya olarak kaydedin (Blob depolamada da).

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
            {
            "tables": [
                {
                    "tableName": "crossDocument",
                    "generatedKeyName": "Id",
                    "source": "/document/crossProjection"
                },
                {
                    "tableName": "crossEntities",
                    "generatedKeyName": "EntityId",
                    "source": "/document/crossProjection/entities/*"
                },
                {
                    "tableName": "crossKeyPhrases",
                    "generatedKeyName": "KeyPhraseId",
                    "source": "/document/crossProjection/keyPhrases/*"
                },
                {
                    "tableName": "crossReference",
                    "generatedKeyName": "CrossId",
                    "source": "/document/crossProjection/images/*"
                }
                    
            ],
            "objects": [
                {
                    "storageContainer": "crossobject",
                    "generatedKeyName": "crosslayout",
                    "source": null,
                    "sourceContext": "/document/crossProjection/images/*/layoutText",
                    "inputs": [
                        {
                            "name": "OcrLayoutText",
                            "source": "/document/crossProjection/images/*/layoutText"
                        }
                    ]
                }
            ],
            "files": [
                {
                    "storageContainer": "crossimages",
                    "generatedKeyName": "crossimages",
                    "source": "/document/crossProjection/images/*/image"
                }
            ]
        }
    ]
}

Nesne projeksiyonları her projeksiyon için bir kapsayıcı adı gerektirir. Nesne projeksiyonları ve dosya projeksiyonları bir kapsayıcıyı paylaşamaz.

Tablo, nesne ve dosya projeksiyonları arasındaki ilişkiler

Bu örnekte projeksiyonların başka bir özelliği de vurgulanır. Aynı projeksiyon nesnesi içinde birden çok projeksiyon türü tanımlanarak, farklı türler (tablolar, nesneler, dosyalar) içinde ve farklı türlerde ifade edilen bir ilişki vardır. Bu, bir belgenin tablo satırıyla başlamanıza ve nesne projeksiyonunda söz konusu belgedeki görüntülere ilişkin tüm OCR metnini bulmanıza olanak tanır.

Verilerin ilişkili olmasını istemiyorsanız projeksiyonları farklı projeksiyon gruplarında tanımlayın. Örneğin, aşağıdaki kod parçacığı tabloların ilişkili olmasına, ancak tablolar ile nesne (OCR metni) projeksiyonları arasındaki ilişkilere neden olmaz.

Projeksiyon grupları, aynı verileri farklı ihtiyaçlar için farklı şekillerde yansıtmak istediğinizde kullanışlıdır. Örneğin, Power BI panosu için bir projeksiyon grubu ve özel beceriyle sarmalanmış bir makine öğrenmesi modelini eğitmek için kullanılan verileri yakalamaya yönelik başka bir projeksiyon grubu.

Farklı türlerdeki projeksiyonlar oluşturulurken, önce dosya ve nesne projeksiyonları oluşturulur ve yollar tablolara eklenir.

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
        {
            "tables": [
                {
                    "tableName": "unrelatedDocument",
                    "generatedKeyName": "Documentid",
                    "source": "/document/projectionShape"
                },
                {
                    "tableName": "unrelatedKeyPhrases",
                    "generatedKeyName": "KeyPhraseid",
                    "source": "/document/projectionShape/keyPhrases"
                }
            ],
            "objects": [
                
            ],
            "files": []
        }, 
        {
            "tables": [],
            "objects": [
                {
                    "storageContainer": "unrelatedocrtext",
                    "source": null,
                    "sourceContext": "/document/normalized_images/*/text",
                    "inputs": [
                        {
                            "name": "ocrText",
                            "source": "/document/normalized_images/*/text"
                        }
                    ]
                },
                {
                    "storageContainer": "unrelatedocrlayout",
                    "source": null,
                    "sourceContext": "/document/normalized_images/*/layoutText",
                    "inputs": [
                        {
                            "name": "ocrLayoutText",
                            "source": "/document/normalized_images/*/layoutText"
                        }
                    ]
                }
            ],
            "files": []
        }
    ]
}

Sonraki adımlar

Bu makaledeki örnekte projeksiyon oluşturmayla ilgili yaygın desenler gösterilmektedir. Artık kavramları iyi anladığınıza göre, kendi senaryonuza yönelik projeksiyonlar oluşturmak için daha iyi bir donanıma sahipsiniz.