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 sourceContext
sarmalanı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/projectionShape
ile 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:
Bilgi deposunun
storageConnectionString
özelliğini geçerli bir V2 genel amaçlı depolama hesabı bağlantı dizesi olarak ayarlayın.PUT isteğini vererek beceri kümesini güncelleştirin.
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 Entities
bö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ı hotels
bir 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ı myImages
bir 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:
- Her belge için bir satır içeren bir tablo oluşturun.
- Her anahtar tümceciği bu tabloda satır olarak tanımlanan belge tablosuyla ilgili bir tablo oluşturun.
- Bu tabloda satır olarak tanımlanan her varlıkla belge tablosuyla ilgili bir tablo oluşturun.
- Her resim için düzen metniyle bir nesne projeksiyonu oluşturun.
- Ayıklanan her görüntüyü yansıtan bir dosya projeksiyonu oluşturun.
- 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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin