Azure AI Search'te birden çok dil için dizin oluşturma

Birden çok dilde dizeleriniz varsa, dizin oluşturma ve sorgu yürütme sırasında belirli bir dilin dil kurallarını kullanarak dizeleri analiz eden dil çözümleyicileri ekleyebilirsiniz. Dil çözümleyicisi ile karakter varyasyonlarını, noktalama işaretlerini ve sözcük kök formlarını daha iyi ele alırsınız.

Azure AI Search, Microsoft ve Lucene çözümleyicilerini destekler. Varsayılan olarak, arama altyapısı dilden bağımsız olan Standart Lucene'i kullanır. Test, varsayılan çözümleyicinin yetersiz olduğunu gösteriyorsa, bunu bir dil çözümleyicisiyle değiştirin.

Azure AI Search'te birden çok dili desteklemeye yönelik iki desen şunlardır:

  • Tüm alfasayısal içeriğin aynı dilde olduğu ve aranabilir tüm dize alanlarının aynı dil çözümleyicisini kullanacak şekilde ilişkilendirildiği dile özgü dizinler oluşturun.

  • Her alanın dile özgü sürümleriyle (örneğin, description_en, description_fr, description_ko) karma bir dizin oluşturun ve tam metin aramasını sorgu zamanında yalnızca bu alanlarla kısıtlayın. Bu yaklaşım, dil çeşitlemelerinin açıklama gibi yalnızca birkaç alanda gerekli olduğu senaryolar için kullanışlıdır.

Bu makalede, harmanlanmış dizinde dile özgü alanları yapılandırmaya ve sorgulamaya yönelik adımlara ve en iyi yöntemlere odaklanılır:

  • Her dil değişkeni için bir dize alanı tanımlayın.
  • Her alanda bir dil çözümleyicisi ayarlayın.
  • Sorgu isteğinde parametresini searchFields belirli alanlara ayarlayın ve ardından yalnızca uyumlu içeriğe sahip alanları döndürmek için kullanın select .

Not

Büyük dil modellerini artırılmış bir alma modeli (RAG) deseninde kullanıyorsanız, çevrilmiş dizeleri döndürmek için istem üzerinde mühendislik yapabilirsiniz. Bu senaryo bu makalenin kapsamı dışındadır.

Önkoşullar

Dil analizi, türü Edm.Stringsearchableolan ve yerelleştirilmiş metin içeren alanlara uygulanır. Metin çevirisine de ihtiyacınız varsa, yapay zeka zenginleştirmesinin gereksinimlerinizi karşılayıp karşılamadiğini görmek için sonraki bölümü gözden geçirin.

Dize olmayan alanlar ve aranamayan dize alanları sözcük temelli analizden geçirilmez ve belirteç olarak belirtilmez. Bunun yerine depolanır ve ayrıntılı olarak döndürülür.

Metin çevirisi ekleme

Bu makalede, çevrilmiş dizelerin zaten var olduğu varsayılır. Böyle bir durum söz konusu değilse, azure yapay zeka hizmetlerini bir zenginleştirme işlem hattına ekleyebilir ve dizin oluşturma sırasında metin çevirisini çağırabilirsiniz. Metin çevirisi dizin oluşturucu özelliğine ve Azure AI hizmetlerine bağımlıdır, ancak tüm kurulum Azure AI Search'te yapılır.

Metin çevirisi eklemek için şu adımları izleyin:

  1. İçeriğinizin desteklenen bir veri kaynağında olduğunu doğrulayın.

  2. İçeriğinize işaret eden bir veri kaynağı oluşturun.

  3. Metin Çevirisi becerisini içeren bir beceri kümesi oluşturun.

    Metin Çevirisi becerisi giriş olarak tek bir dize alır. Birden çok alanınız varsa, her alan için bir kez olmak üzere Metin Çevirisi'ni birden çok kez çağıran bir beceri kümesi oluşturabilirsiniz. Alternatif olarak, birden çok alanın içeriğini tek bir uzun dizede birleştirmek için Metin Birleştirme becerisini kullanabilirsiniz.

  4. Çevrilmiş dizeler için alanlar içeren bir dizin oluşturun. Bu makalenin çoğu, çok dilli içeriği dizine ekleme ve sorgulamaya yönelik dizin tasarımını ve alan tanımlarını kapsar.

  5. Beceri setinize çok bölgeli bir Azure AI hizmetleri kaynağı ekleyin.

  6. Dizin oluşturucuyu oluşturup çalıştırın ve ardından yalnızca ilgilendiğim alanları sorgulamak için bu makaledeki yönergeleri uygulayın.

İpucu

Metin çevirisi, Verileri içeri aktarma sihirbazında yerleşik olarak bulunur. Çevirmek istediğiniz metinle desteklenen bir veri kaynağınız varsa, herhangi bir kod yazmadan önce dil algılama ve çeviri işlevselliğini denemek için sihirbazda adım adım ilerleyebilirsiniz.

Farklı dillerde içerik için alanlar tanımlama

Azure AI Search'te sorgular tek bir dizini hedefler. Tek bir arama deneyiminde dile özgü dizeler sağlamak isteyen geliştiriciler genellikle değerleri depolamak için ayrılmış alanlar tanımlar: İngilizce dizeler için bir alan, Fransızca için bir alan vb.

analyzer Alan tanımındaki özelliği, dil çözümleyicisini ayarlamak için kullanılır. Hem dizin oluşturma hem de sorgu yürütme için kullanılır.

{
  "name": "hotels-sample-index",
  "fields": [
    {
      "name": "Description",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "en.microsoft"
    },
    {
      "name": "Description_fr",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "fr.microsoft"
    }
  ]
}

Dizin oluşturma ve yükleme

Ara adım, sorguyu formüle etmeden önce dizini oluşturmak ve doldurmaktır. Tamlık için burada bu adımdan bahsedeceğiz. Dizin kullanılabilirliğini belirlemenin bir yolu, portaldaki dizinler listesini denetlemektir.

Sorguyu kısıtlama ve sonuçları kırpma

Sorgudaki parametreler, aramayı belirli alanlarla sınırlamak ve ardından senaryonuz için yararlı olmayan alanların sonuçlarını kırpmak için kullanılır.

Parametreler Purpose
searchFields Tam metin aramasını adlandırılmış alanlar listesiyle sınırlar.
select Yanıtı yalnızca belirttiğiniz alanları içerecek şekilde kırpılır. Varsayılan olarak, tüm alınabilir alanlar döndürülür. parametresi, select hangilerinin döndürüleceğini seçmenize olanak tanır.

Aramayı Fransızca dizeler içeren alanlarla sınırlama hedefi verdiyseniz, sorguyu bu dildeki dizeleri içeren alanlarda hedeflemek için kullanabilirsiniz searchFields .

Sorgu isteğinde çözümleyicinin belirtilmesi gerekli değildir. Alan tanımındaki dil çözümleyicisi, sorgu yürütme sırasında metin analizini belirler. Birden çok alan belirten sorgular için, her farklı dil çözümleyicisini çağıran terimler veya tümcecikler, her alan için atanan çözümleyiciler tarafından eşzamanlı olarak işlenir.

Varsayılan olarak, arama alınabilir olarak işaretlenmiş tüm alanları döndürür. Bu nedenle, sağlamak istediğiniz dile özgü arama deneyimine uygun olmayan alanları dışlamak isteyebilirsiniz. Özellikle, aramayı Fransızca dizeleri olan bir alanla sınırlandırdıysanız, İngilizce dizeleri olan alanları sonuçlarınızdan dışlamak isteyebilirsiniz. Sorgu parametresini select kullanmak, çağıran uygulamaya hangi alanların döndürülecekleri üzerinde denetim sahibi olmanıza neden oluyor.

REST örneği

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30
{
    "search": "animaux acceptés",
    "searchFields": "Tags, Description_fr",
    "select": "HotelName, Description_fr, Address/City, Address/StateProvince, Tags",
    "count": "true"
}

C örneği#

private static void RunQueries(SearchClient srchclient)
{
    SearchOptions options;
    SearchResults<Hotel> response;

    options = new SearchOptions()
    {
        IncludeTotalCount = true,
        Filter = "",
        OrderBy = { "" }
    };

    options.Select.Add("HotelId");
    options.Select.Add("HotelName");
    options.Select.Add("Description_fr");
    options.SearchFields.Add("Tags");
    options.SearchFields.Add("Description_fr");

    response = srchclient.Search<Hotel>("*", options);
    WriteDocuments(response);
}

Dile özgü alanları artırma

Bazen sorguyu veren aracının dili bilinmez ve bu durumda sorgu tüm alanlara aynı anda verilebilir. Belirli bir dildeki sonuçlar için IA tercihi, puanlama profilleri kullanılarak tanımlanabilir. Aşağıdaki örnekte, Fransızca açıklamasında bulunan eşleşmeler, diğer dillerdeki eşleşmelere göre daha yüksek puanlanmıştır:

  "scoringProfiles": [
    {
      "name": "frenchFirst",
      "text": {
        "weights": { "description_fr": 2 }
      }
    }
  ]

Daha sonra puanlama profilini arama isteğine dahil edebilirsiniz:

POST /indexes/hotels/docs/search?api-version=2023-11-01
{
  "search": "pets allowed",
  "searchFields": "Tags, Description_fr",
  "select": "HotelName, Tags, Description_fr",
  "scoringProfile": "frenchFirst",
  "count": "true"
}

Sonraki adımlar