Öbekleriniz için eklemeleri oluşturduktan sonra, sonraki adım vektör veritabanında dizini oluşturmak ve gerçekleştirilecek en uygun aramaları belirlemek için deneme yapmaktır. Bilgi alma denemeleri yaparken, arama dizini yapılandırma seçenekleri, gerçekleştirmeniz gereken arama türleri ve yeniden boyutlandırma stratejiniz dahil olmak üzere göz önünde bulundurmanız gereken birkaç alan vardır. Bu makalede bu üç konu ele alınır.
Bu makale, bir serinin bir parçasıdır. Tanıtımı okuyun.
Arama dizini
Not
Azure AI Search birinci taraf bir Azure arama hizmetidir. Bu bölümde yapay zeka araması ile ilgili bazı ayrıntılardan bahsedilecektir. Farklı bir depo kullanıyorsanız, bu hizmetin anahtar yapılandırmasını bulmak için belgelere bakın.
Mağazanızdaki arama dizininde, verilerinizdeki her alan için bir sütun bulunur. Arama depoları genellikle dize, Boole, tamsayı, tek, çift, tarih saat gibi seçici olmayan veri türleri ve Collection(single) gibi koleksiyonlar ve Collection(single) gibi vektör veri türleri için destek sağlar. Her sütun için, alanın filtrelenebilir, alınabilir ve/veya aranabilir olup olmadığı gibi veri türü gibi bilgileri yapılandırmanız gerekir.
Vektör alanlarına uygulanan vektör arama yapılandırması için yapmanız gereken bazı önemli kararlar aşağıdadır:
- Vektör arama algoritması - Göreli eşleşmeleri aramak için kullanılan algoritma. Azure AI Search,kapsamlı KNN adı verilen vektör alanının tamamını tarayan bir deneme yanılma algoritması seçeneğine ve Hiyerarşik Gezinilebilir Küçük Dünya (HNSW) adlı yaklaşık en yakın komşu (ANN) araması gerçekleştiren daha performanslı bir algoritma seçeneğine sahiptir.
- metric - Bu yapılandırma, algoritma tarafından yakınlığı hesaplamak için kullanılan benzerlik ölçümüdür. Azure AI Search'teki seçenekler kosinüs, dotProduct ve Öklid şeklindedir. Azure OpenAI ekleme modellerini kullanıyorsanız öğesini seçin
cosine
. - efConstruction - Dizin oluşturma sırasında bir vektöre bağlı en yakın komşu sayısını ayarlayan Hiyerarşik Gezinilebilir Küçük Dünyalar (HNSW) dizin oluşturma sırasında kullanılan parametre. Daha büyük bir efConstruction değeri, daha küçük bir sayıdan daha iyi kalitede bir dizine neden olur. Bunun sonucu, daha büyük bir değerin daha fazla zaman, depolama ve işlem gerektirmesidir. efConstruction çok sayıda öbek için daha yüksek ve düşük sayıda öbek için daha düşük olmalıdır. En uygun değeri belirlemek için verilerinizle ve beklenen sorgularla denemeler yapılması gerekir.
- efSearch - Arama sırasında kullanılan en yakın komşu sayısını (benzer öbekler) ayarlamak için sorgu zamanında kullanılan parametre.
- m - Çift yönlü bağlantı sayısı. Aralık 4 ile 10 arasındadır ve daha düşük sayılar sonuçlarda daha az gürültü döndürür.
Azure AI Search'te vektör yapılandırmaları bir vectorSearch
yapılandırmada kapsüllenir. Vektör sütunlarınızı yapılandırırken, bu vektör sütunu için uygun yapılandırmaya başvurur ve boyut sayısını ayarlarsınız. Vektör sütununun boyutlar özniteliği, seçtiğiniz ekleme modeli tarafından oluşturulan boyut sayısını temsil eder. Örneğin, depolama için iyileştirilmiş text-embedding-3-small
model 1.536 boyut oluşturur.
Arama
arama deponuzda istem düzenleyicinizden sorgu yürütürken göz önünde bulundurmanız gereken birçok seçenek vardır. Aşağıdakileri belirlemeniz gerekir:
- Ne tür bir arama gerçekleştireceksiniz: vektör veya anahtar sözcük ya da karma
- Bir veya daha fazla sütuna göre sorgulayıp sorgulamayacağınız
- Anahtar sözcük sorgusu ve vektör araması gibi birden çok sorguyu el ile çalıştırıp çalıştırmayacağınız
- Sorgunun alt sorgulara bölünmesi gerekip gerekmediği
- Sorgularınızda filtrelemenin kullanılıp kullanılmayacağı
İstem düzenleyiciniz, istemdeki bağlam ipuçlarına göre yaklaşımları karıştıran statik bir yaklaşım veya dinamik bir yaklaşım benimseyebilir. Aşağıdaki bölümlerde, iş yükünüz için doğru yaklaşımı bulma denemelerine yardımcı olmak için bu seçenekler ele alınıyor.
Arama türleri
Arama platformları genellikle tam metin ve vektör aramalarını destekler. Azure AI Search gibi bazı platformlar karma aramaları destekler. Çeşitli vektör arama tekliflerinin özelliklerini görmek için Vektör araması için Azure hizmeti seçme konusunu gözden geçirin.
Vektör araması
Vektör aramaları , vektörleştirilmiş sorgu (istem) ve vektör alanları arasındaki benzerlikle eşleşir.
Önemli
Sorguyu eklemeden önce öbekler üzerinde gerçekleştirdiğiniz temizleme işlemlerinin aynısını gerçekleştirmeniz gerekir. Örneğin, eklenmiş öbeklerinizdeki her sözcüğü küçük harfle yazdıysanız, eklemeden önce sorgudaki her sözcüğü küçük harfle yazmanız gerekir.
Not
Aynı sorgudaki birden çok vektör alanında vektör araması yapabilirsiniz. Azure AI Search'te bu teknik olarak karma bir aramadır. Daha fazla bilgi için bu bölüme bakın.
embedding = embedding_model.generate_embedding(
chunk=str(pre_process.preprocess(query))
)
vector = RawVectorQuery(
k=retrieve_num_of_documents,
fields="contentVector",
vector=embedding,
)
results = client.search(
search_text=None,
vector_queries=[vector],
top=retrieve_num_of_documents,
select=["title", "content", "summary"],
)
Örnek kod, alana karşı contentVector
bir vektör araması gerçekleştirir. Sorguyu ekleyen kodun önce sorguyu önceden işlediğini unutmayın. Bu ön işlem, eklemeden önce öbekleri önceden işleyen kodla aynı olmalıdır. Ekleme modeli, öbekleri ekleyen ekleme modeliyle aynı olmalıdır.
Tam metin araması
Tam metin aramaları , dizinde depolanan düz metinle eşleşir. Sorgudan anahtar sözcükleri ayıklamak ve ayıklanan anahtar sözcükleri bir veya daha fazla dizinlenmiş sütunda tam metin aramasında kullanmak yaygın bir uygulamadır. Tam metin aramaları, tüm terimlerin veya tüm terimlerin eşleştiği eşleşmeleri döndürecek şekilde yapılandırılabilir.
Tam metin aramalarını çalıştırmak için hangi alanların etkili olduğunu belirlemek için denemeler yapsanız iyi olacak. Zenginleştirme aşamasında açıklandığı gibi, anahtar sözcük ve varlık meta veri alanları, içeriğin benzer anlam ifadelerine sahip olduğu, ancak varlıkların veya anahtar sözcüklerin farklı olduğu senaryolarda tam metin araması için dikkate alınması gereken iyi adaylardır. Tam metin araması için dikkate alınması gereken diğer yaygın alanlar başlık, özet ve öbek metnidir.
formatted_search_results = []
results = client.search(
search_text=query,
top=retrieve_num_of_documents,
select=["title", "content", "summary"],
)
formatted_search_results = format_results(results)
Örnek kod başlık, içerik ve özet alanlarında tam metin araması gerçekleştirir.
Karma arama
Azure AI Search, sorgunuzun bir veya daha fazla metin araması ve bir veya daha fazla vektör araması içerebileceği Karma sorguları destekler. Platform her sorguyu gerçekleştirir, ara sonuçları alır, Karşılıklı Rank Fusion (RRF) kullanarak sonuçları yeniden oluşturur ve en iyi N sonuçlarını döndürür.
embedding = embedding_model.generate_embedding(
chunk=str(pre_process.preprocess(query))
)
vector1 = RawVectorQuery(
k=retrieve_num_of_documents,
fields="contentVector",
vector=embedding,
)
vector2 = RawVectorQuery(
k=retrieve_num_of_documents,
fields="questionVector",
vector=embedding,
)
results = client.search(
search_text=query,
vector_queries=[vector1, vector2],
top=retrieve_num_of_documents,
select=["title", "content", "summary"],
)
Örnek kod, başlık, içerik ve özet alanlarında tam metin araması ve contentVector ve questionVector alanlarına karşı vektör aramaları gerçekleştirir. Azure AI Search platformu tüm sorguları paralel olarak çalıştırır, sonuçları yeniden oluşturur ve en retrieve_num_of_documents belgeleri döndürür.
El ile kat
Elbette vektör araması ve anahtar sözcük tam metin araması gibi birden çok sorguyu el ile çalıştırabilirsiniz. Sonuçları toplar, sonuçları el ile yeniden oluşturur ve en iyi sonuçları döndürürsün. El ile çoklu kullanım örnekleri şunlardır:
- Karma aramaları desteklemeyen bir arama platformu kullanıyorsunuz. Kendi karma aramanızı gerçekleştirmek için bu seçeneği izlersiniz.
- Farklı sorgularda tam metin aramaları çalıştırmak istiyorsunuz. Örneğin, sorgudan anahtar sözcükleri ayıklayabilir ve anahtar sözcüklerinizin meta veri alanında tam metin araması çalıştırabilirsiniz. Daha sonra varlıkları ayıklayabilir ve varlıklar meta veri alanında bir sorgu çalıştırabilirsiniz.
- Yeniden boyutlandırma işlemini kendiniz denetlemek istiyorsunuz.
- Sorgu, birden çok kaynaktan topraklama verilerini almak için birden çok alt sorgunun çalıştırılmasını gerektirir.
Birden çok alt sorgu
Bazı istemler karmaşıktır ve modeli temel almak için birden fazla veri koleksiyonu gerektirir. Örneğin, "Elektrikli otomobiller nasıl çalışır ve ICE araçlarıyla karşılaştırmaları nasıldır?" sorgusu büyük olasılıkla birden çok kaynaktan topraklama verileri gerektirir.
Herhangi bir aramayı çalıştırmadan önce sorgunun birden çok arama gerekip gerekmediğini belirlemek iyi bir uygulamadır. Birden çok alt sorgunun gerekli olduğunu düşünüyorsanız, tüm sorgular için el ile birden çok sorgu çalıştırabilirsiniz. Birden çok alt sorgu gerekip gerekmediğini belirlemek için büyük bir dil modeli kullanın. Aşağıdaki istem, birden çok sorgu gerektiren karmaşık bir sorguyu basit veya karmaşık olarak kategorilere ayırmak için kullanılan RAG Deneme Hızlandırıcısı GitHub deposundan alınmıştır:
Consider the given question to analyze and determine if it falls into one of these categories:
1. Simple, factual question
a. The question is asking for a straightforward fact or piece of information
b. The answer could likely be found stated directly in a single passage of a relevant document
c. Breaking the question down further is unlikely to be beneficial
Examples: "What year did World War 2 end?", "What is the capital of France?, "What is the features of productX?"
2. Complex, multi-part question
a. The question has multiple distinct components or is asking for information about several related topics
b. Different parts of the question would likely need to be answered by separate passages or documents
c. Breaking the question down into sub-questions for each component would allow for better results
d. The question is open-ended and likely to have a complex or nuanced answer
e. Answering it may require synthesizing information from multiple sources
f. The question may not have a single definitive answer and could warrant analysis from multiple angles
Examples: "What were the key causes, major battles, and outcomes of the American Revolutionary War?", "How do electric cars work and how do they compare to gas-powered vehicles?"
Based on this rubric, does the given question fall under category 1 (simple) or category 2 (complex)? The output should be in strict JSON format. Ensure that the generated JSON is 100 percent structurally correct, with proper nesting, comma placement, and quotation marks. There should not be any comma after last element in the JSON.
Example output:
{
"category": "simple"
}
Karmaşık bir sorgudan alt sorguları ayıklamak için büyük bir dil modeli de kullanılabilir. Aşağıdaki istem, karmaşık bir sorguyu birden çok alt sorguya dönüştüren RAG Deneme Hızlandırıcısı GitHub deposundan alınmıştır.
Your task is to take a question as input and generate maximum 3 sub-questions that cover all aspects of the original question. The output should be in strict JSON format, with the sub-questions contained in an array.
Here are the requirements:
1. Analyze the original question and identify the key aspects or components.
2. Generate sub-questions that address each aspect of the original question.
3. Ensure that the sub-questions collectively cover the entire scope of the original question.
4. Format the output as a JSON object with a single key "questions" that contains an array of the generated sub-questions.
5. Each sub-question should be a string within the "questions" array.
6. The JSON output should be valid and strictly formatted.
7. Ensure that the generated JSON is 100 percent structurally correct, with proper nesting, comma placement, and quotation marks. The JSON should be formatted with proper indentation for readability.
8. There should not be any comma after last element in the array.
Example input question:
What are the main causes of deforestation, and how can it be mitigated?
Example output:
{
"questions": [
"What are the primary human activities that contribute to deforestation?",
"How does agriculture play a role in deforestation?",
"What is the impact of logging and timber harvesting on deforestation?",
"How do urbanization and infrastructure development contribute to deforestation?",
"What are the environmental consequences of deforestation?",
"What are some effective strategies for reducing deforestation?",
"How can reforestation and afforestation help mitigate the effects of deforestation?",
"What role can governments and policies play in preventing deforestation?",
"How can individuals and communities contribute to reducing deforestation?"
]
}
Sorgulara görüntü geçirme
GPT-4V ve GPT-4o gibi bazı çok modüllü modeller görüntüleri yorumlayabilir. Bu modelleri kullanıyorsanız, görüntülerinizi öbeklemekten kaçınmak isteyip istemediğinizi seçebilir ve istemin bir parçası olarak görüntüyü çok modüllü modele geçirebilirsiniz. Ek bağlam geçirmeden ve ile görüntüleri öbeklemeyle karşılaştırıldığında bu yaklaşımın nasıl performans göstereceğini belirlemek için denemeler yapmalısınız. Ayrıca yaklaşımlar arasındaki maliyet farkını karşılaştırmalı ve maliyet-avantaj analizi yapmalısınız.
Filtreleme
Arama deposunda filtrelenebilir olarak yapılandırılan alanlar, sorguları filtrelemek için kullanılabilir. Sonucu daraltmaya yardımcı olması için bu alanları kullanan sorgular için anahtar sözcüklere ve varlıklara filtre uygulamayı göz önünde bulundurun. Filtreleme, ilgisiz verileri ortadan kaldırarak yalnızca belirli koşulları karşılayan verileri dizinden almanıza olanak tanır. Bu, sorgunun genel performansını daha ilgili sonuçlarla geliştirir. Her kararda olduğu gibi, deneme yapmak ve test etmek de önemlidir. Sorgularda anahtar sözcükler veya yanlış anahtar sözcükler, kısaltmalar veya kısaltmalar olmayabilir. Bu durumları dikkate almanız gerekir.
Yeniden boyutlandırma
Yeniden boyutlandırma, bir veya daha fazla sorgu çalıştırmanıza, sonuçları toplamanıza ve bu sonuçları sıralamanıza olanak tanır. Arama sonuçlarınızı yeniden ayarlamak için aşağıdaki nedenleri göz önünde bulundurun:
- El ile birden çok arama gerçekleştirdiniz ve sonuçları toplamak ve sıralamak istiyorsunuz.
- Vektör ve anahtar sözcük aramaları her zaman doğru değildir. Aramanızdan döndürülen belgelerin sayısını artırabilir, aksi takdirde yoksayılacak bazı geçerli sonuçları içerebilir ve sonuçları değerlendirmek için yeniden boyutlandırmayı kullanabilirsiniz.
Yeniden boyutlandırma gerçekleştirmek için büyük bir dil modeli veya çapraz kodlayıcı kullanabilirsiniz. Azure AI Search gibi bazı platformların sonuçları yeniden kırpmak için özel yöntemleri vardır. Senaryonuz için en uygun olanı belirlemek üzere verileriniz için bu seçenekleri değerlendirebilirsiniz. Aşağıdaki bölümlerde bu yöntemlerle ilgili ayrıntılar sağlanır.
Büyük dil modelini yeniden boyutlandırma
Aşağıda, SONUÇLARı yeniden oluşturan RAG deneme hızlandırıcısından örnek bir büyük dil modeli istemi verilmiştir.
A list of documents is shown below. Each document has a number next to it along with a summary of the document. A question is also provided.
Respond with the numbers of the documents you should consult to answer the question, in order of relevance, as well as the relevance score as json string based on json format as shown in the schema section. The relevance score is a number from 1–10 based on how relevant you think the document is to the question. The relevance score can be repetitive. Don't output any additional text or explanation or metadata apart from json string. Just output the json string and strip rest every other text. Strictly remove any last comma from the nested json elements if it's present.
Don't include any documents that are not relevant to the question. There should exactly be one documents element.
Example format:
Document 1:
content of document 1
Document 2:
content of document 2
Document 3:
content of document 3
Document 4:
content of document 4
Document 5:
content of document 5
Document 6:
content of document 6
Question: user defined question
schema:
{
"documents": {
"document_1": "Relevance",
"document_2": "Relevance"
}
}
Çapraz kodlayıcı yeniden boyutlandırma
RAG Deneme Hızlandırıcısı GitHub deposundaki aşağıdaki örnekte, Roberta modelini yüklemek için Hugging Face tarafından sağlanan CrossEncoder kullanılmaktadır. Ardından her öbek üzerinde yinelenir ve benzerliği hesaplamak için modeli kullanarak bir değer verir. Sonuçları sıralar ve ilk N değerini döndürüriz.
from sentence_transformers import CrossEncoder
...
model_name = 'cross-encoder/stsb-roberta-base'
model = CrossEncoder(model_name)
cross_scores_ques = model.predict(
[[user_prompt, item] for item in documents],
apply_softmax=True,
convert_to_numpy=True,
)
top_indices_ques = cross_scores_ques.argsort()[-k:][::-1]
sub_context = []
for idx in list(top_indices_ques):
sub_context.append(documents[idx])
Anlamsal derecelendirme
Azure AI Search semantik derecelendirme olarak adlandırılan özel bir özelliğe sahiptir. Bu özellik, Microsoft Bing'den uyarlanmış ve en önemli sonuçları teşvik eden derin öğrenme modellerini kullanır. Semantik dereceleyicinin nasıl çalıştığını görmek için aşağıdakileri okuyun.
Arama kılavuzu
Arama çözümünüzü uygularken aşağıdaki genel yönergeleri göz önünde bulundurun:
- Başlık, özet, kaynak ve ham içerik (temizlenmemiş) aramadan geri dönmek için iyi alanlardır.
- Bir sorguyu alt sorgulara ayırmanın gerekip gerekmediğini önden belirleyin.
- Genel olarak, hem vektör hem de metin sorguları olmak üzere birden çok alanda sorgu çalıştırmak iyi bir uygulamadır. Sorgu aldığınızda, vektör araması mı yoksa metin araması mı daha iyi olduğunu bilmezsiniz. Vektör aramasının veya anahtar sözcük aramasının arama için en uygun olduğu alanları da bilmiyorsunuz. Birden çok alanda arama yapabilir, birden çok sorguyla arama yapabilir, sonuçları yeniden düzenleyebilir ve sonuçları en yüksek puanla döndürebilirsiniz.
- Anahtar sözcükler ve varlık alanları filtrelemeyi göz önünde bulundurmak için iyi adaylardır.
- Vektör aramalarıyla birlikte anahtar sözcükleri kullanmak iyi bir uygulamadır. Anahtar sözcükler sonuçları daha küçük bir alt kümeye göre filtreler. Vektör deposu, en iyi eşleşmeleri bulmak için bu alt küme üzerinde çalışır.
Arama değerlendirmesi
Hazırlık aşamasında, test belgesi bilgileriyle birlikte test sorguları toplamış olmanız gerekir. Arama sonuçlarınızı değerlendirmek için bu aşamada topladığınız aşağıdaki bilgileri kullanabilirsiniz:
- Sorgu - Örnek sorgu
- Bağlam - Örnek sorguyu ele alan test belgelerindeki tüm metinlerin koleksiyonu
Aşağıda, arama çözümünüzü değerlendirmek için kullanabileceğiniz üç iyi oluşturulmuş alma değerlendirme yöntemi vardır:
- K'de Duyarlık - Toplam arama sonuçlarındaki doğru tanımlanmış ilgili öğelerin yüzdesi. Bu ölçüm, arama sonuçlarınızın doğruluğuna odaklanır.
- K'de geri çağırma - K'de geri çağırma, en üstteki K'deki ilgili öğelerin yüzdesini, olası toplam göreli öğelerin dışında ölçer. Bu ölçüm, arama sonuçları kapsamına odaklanır.
- Ortalama Karşılıklı Derecelendirme (MRR) - MRR, dereceli arama sonuçlarınızdaki ilk ilgili yanıtın karşılıklı derecelerinin ortalamasını ölçer. Bu ölçüm, arama sonuçlarında ilgili ilk sonucun nerede yer aldığına odaklanır.
Hem pozitif hem de negatif örnekleri test etmelisiniz. Olumlu örnekler için ölçümlerin mümkün olduğunca 1'e yakın olmasını istiyorsunuz. Verilerinizin sorguları ele alamaması gereken negatif örnekler için ölçümlerin mümkün olduğunca 0'a yakın olmasını istiyorsunuz. Tüm test sorgularınızı test etmeli ve arama sonuçlarınızın toplu olarak nasıl çalıştığını anlamak için pozitif sorgu sonuçlarının ve negatif sorgu sonuçlarının ortalamasını almalısınız.