paint-brush
ChatGPT İçeriğini Bulmak için Semantik ve Anahtar Kelime Aramaile@tsg
2,404 okumalar
2,404 okumalar

ChatGPT İçeriğini Bulmak için Semantik ve Anahtar Kelime Arama

ile Tudor Golubenco8m2023/03/15
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

Geçen hafta, [belgelerimiz]deki soruları yanıtlayan bir Soru-Cevap botu ekledik. Bu, Xata belgelerindeki soruları yanıtlamak için ChatGPT teknolojisinden yararlanır. Bunu yapma şeklimiz Simon Willison'un önerdiği yaklaşımı kullanmaktır. Aynı yaklaşım bir OpenAI yemek kitabında da bulunabilir.
featured image - ChatGPT İçeriğini Bulmak için Semantik ve Anahtar Kelime Arama
Tudor Golubenco HackerNoon profile picture
0-item
1-item


Geçen hafta belgelerimizdeki soruları yanıtlayan bir Soru-Cevap botu ekledik. Bu, OpenAI GPT modeli hiçbir zaman Xata belgelerinde eğitilmemiş olsa da, Xata belgelerindeki soruları yanıtlamak için ChatGPT teknolojisinden yararlanır.


Bunu yapma şeklimiz Simon Willison'un bu blog yazısında önerdiği yaklaşımı kullanmaktır. Aynı yaklaşım bir OpenAI yemek kitabında da bulunabilir. Fikir şudur:


  1. Kullanıcının sorduğu soruyla en alakalı içeriği bulmak için belgelerde metin araması yapın.

  2. Bu genel formla bir bilgi istemi oluşturun:

     With these rules: {rules} And this text: {context} Given the above text, answer the question: {question} Answer:
  3. İstemi ChatGPT API'sine gönderin ve modelin yanıtı tamamlamasına izin verin.


Bunun oldukça iyi çalıştığını ve nispeten düşük bir model sıcaklığıyla (sıcaklık kavramı bu blog yazısında açıklanmıştır) birleştiğinde, yanıt burada bulunabildiği sürece bunun doğru sonuçlar ve kod parçacıkları üretme eğiliminde olduğunu öğrendik. belgeler.


Bu yaklaşımın en önemli sınırlaması, yukarıdaki ikinci adımda oluşturduğunuz istemin maksimum 4000 jetona (~3000 kelime) sahip olmasının gerekmesidir. Bu, ilk adım olan en alakalı belgeleri seçmek için metin aramanın gerçekten önemli hale geldiği anlamına gelir. Arama adımı iyi bir iş çıkarırsa ve doğru bağlamı sağlarsa ChatGPT, doğru ve konuya odaklı bir sonuç üretme konusunda da iyi bir iş çıkarma eğilimindedir.


Peki belgelerdeki en alakalı içerik parçalarını bulmanın en iyi yolu nedir? OpenAI yemek kitabı ve Simon'un blogu anlamsal arama adı verilen yöntemi kullanıyor. Anlamsal arama, hem soru hem de içerik için yerleştirmeler oluşturmak amacıyla dil modelinden yararlanır. Gömmeler, metni çeşitli boyutlarda temsil eden sayı dizileridir. Benzer yerleştirmelere sahip metin parçaları benzer bir anlama sahiptir. Bu, soru yerleştirmelerine en çok benzeyen içerik parçalarını bulmak için iyi bir strateji olduğu anlamına gelir.


Daha klasik anahtar kelime aramaya dayanan başka bir olası strateji şuna benzer:


  • Aşağıdaki gibi bir istemle ChatGPT'den sorudaki anahtar kelimeleri çıkarmasını isteyin:

     Extract keywords for a search query from the text provided. Add synonyms for words where a more common one exists.
  • Serbest metin araması yapmak ve en iyi sonuçları seçmek için sağlanan anahtar kelimeleri kullanın


Tek bir şemaya koyarsak, iki yöntem şöyle görünür:

Her iki belgemizi de denedik ve bazı artıları ve eksileri fark ettik.


Birkaç sonucu karşılaştırarak başlayalım. Her ikisi de aynı veritabanında çalıştırılıyor ve ikisi de ChatGPT gpt-3.5-turbo modelini kullanıyor. Rastgelelik söz konusu olduğundan, her soruyu 2-3 kez çalıştırdım ve bana en iyi sonuç gibi görüneni seçtim.

Soru: Xata CLI'yi nasıl kurarım?

Vektör aramasıyla cevap:

Anahtar kelime aramasıyla cevap verin:

Karar : Her iki versiyon da doğru cevabı verdi, ancak vektör araması biraz daha tamamlandı. Her ikisi de bunun için doğru dokümanlar sayfasını buldular, ancak bence öne çıkanlara dayalı buluşsal yöntemimiz, anahtar kelime stratejisi durumunda daha kısa bir metin parçası seçti.


Kazanan: vektör arama.

Skor: 1-0

Soru: Xata'yı Deno ile nasıl kullanıyorsunuz?

Vektör aramasıyla cevap:

Anahtar kelime aramasıyla cevap verin:

Karar: Bir şekilde belgelerimizdeki özel Deno sayfasını kaçıran vektör araması için hayal kırıklığı yaratan sonuç. Deno ile ilgili başka içerik buldu ancak çok yararlı örneği içeren sayfayı bulamadı.


Kazanan: anahtar kelime araması.

Skor: 1-1

Soru: Özel sütun türlerine sahip bir CSV dosyasını nasıl içe aktarabilirim?

Vektör aramayla:

Anahtar kelime aramasıyla:

Karar: Her ikisi de doğru sayfayı buldu ("CSV dosyasını içe aktar"), ancak anahtar kelime arama sürümü daha eksiksiz bir yanıt almayı başardı. Bunun bir tesadüf olmadığından emin olmak için bunu defalarca çalıştırdım. Farkın metin parçasının nasıl seçildiğinden kaynaklandığını düşünüyorum (anahtar kelime araması durumunda anahtar kelimelere komşu, vektör araması durumunda sayfanın başından itibaren).


Kazanan: anahtar kelime araması.

Skor: 1-2

Soru: Kullanıcılar adlı bir tabloyu e-posta sütununa göre nasıl filtreleyebilirim?

Vektör aramayla:

Anahtar kelime aramasıyla:

Karar: Vektör araması bu konuda daha iyi sonuç verdi çünkü ChatGPT'nin yanıtı oluşturmak için kullanabileceği daha fazla örneğin bulunduğu "Filtreleme" sayfasını buldu. Anahtar kelime arama yanıtı, yöntem adı için "filtre" yerine "sorgu" kullandığından incelikli bir şekilde bozuldu.


Kazanan: vektör arama.

Skor: 2-2

Soru: Xata nedir?

Vektör aramayla:

Anahtar kelime aramasıyla:

Karar: Bu bir berabere çünkü her iki cevap da oldukça iyi. İkisi bir cevapta özetlemek için farklı sayfalar seçtiler, ancak ikisi de iyi iş çıkardı ve kazananı seçemiyorum.


Skor: 3-3

Yapılandırma ve ayarlama

Bu, anahtar kelime araması için kullanılan örnek bir Xata isteğidir:

 // POST https://workspace-id.eu-west-1.xata.sh/db/docs:main/tables/search/ask { "question": "What is Xata?", "rules": [ "Do not answer questions about pricing or the free tier. Respond that Xata has several options available, please check https://xata.io/pricing for more information.", "If the user asks a how-to question, provide a code snippet in the language they asked for with TypeScript as the default.", "Only answer questions that are relating to the defined context or are general technical questions. If asked about a question outside of the context, you can respond with \"It doesn't look like I have enough information to answer that. Check the documentation or contact support.\"", "Results should be relevant to the context provided and match what is expected for a cloud database.", "If the question doesn't appear to be answerable from the context provided, but seems to be a question about TypeScript, Javascript, or REST APIs, you may answer from outside of the provided context.", "If you answer with Markdown snippets, prefer the GitHub flavour.", "Your name is DanGPT" ], "searchType": "keyword", "search": { "fuzziness": 1, "target": [ "slug", { "column": "title", "weight": 4 }, "content", "section", { "column": "keywords", "weight": 4 } ], "boosters": [ { "valueBooster": { "column": "section", "value": "guide", "factor": 18 } } ] } }


Ve vektör araması için kullandığımız şey bu:

 // POST https://workspace-id.eu-west-1.xata.sh/db/docs:main/tables/search/ask { "question": "How do I get a record by id?", "rules": [ "Do not answer questions about pricing or the free tier. Respond that Xata has several options available, please check https://xata.io/pricing for more information.", "If the user asks a how-to question, provide a code snippet in the language they asked for with TypeScript as the default.", "Only answer questions that are relating to the defined context or are general technical questions. If asked about a question outside of the context, you can respond with \"It doesn't look like I have enough information to answer that. Check the documentation or contact support.\"", "Results should be relevant to the context provided and match what is expected for a cloud database.", "If the question doesn't appear to be answerable from the context provided, but seems to be a question about TypeScript, Javascript, or REST APIs, you may answer from outside of the provided context.", "Your name is DanGPT" ], "searchType": "vector", "vectorSearch": { "column": "embeddings", "contentColumn": "content", "filter": { "section": "guide" } } }

Gördüğünüz gibi, anahtar kelime arama sürümü bulanıklığı, güçlendiricileri ve sütun ağırlıklarını yapılandıran daha fazla ayara sahiptir. Vektör araması yalnızca bir filtre kullanır. Ben bunu anahtar kelime araması için bir artı olarak adlandırabilirim: aramayı ayarlamak için daha fazla aramanız var ve bu nedenle daha iyi yanıtlar alıyorsunuz. Ancak bu aynı zamanda daha fazla çalışma gerektirir ve vektör arama sonuçları bu ayarlama olmadan oldukça iyidir.


Bizim durumumuzda, anahtar kelime aramasını doküman arama işlevimiz için zaten ayarladık. Yani bu fazladan bir iş değildi ve ChatGPT ile oynarken belgelerimizde ve aramalarımızda da iyileştirmeler olduğunu keşfettik. Ayrıca, Xata'nın anahtar kelime aramanızı ayarlamak için çok hoş bir kullanıcı arayüzü var, bu nedenle işe başlamak zor olmadı (bununla ilgili ayrı bir blog yazısı planlamak).


Vektör aramanın aynı zamanda güçlendiricilere, sütun ağırlıklarına ve benzerlerine sahip olmaması için hiçbir neden yok, ancak Xata'da henüz buna sahip değiliz ve bunu anahtar kelime yapmak kadar kolaylaştıran başka bir çözüm bilmiyorum. Arama ayarı. Ve genel olarak, anahtar kelime arama konusunda daha önceki teknikler vardır, ancak vektör aramanın da buna yetişmesi oldukça olasıdır.


Şimdilik, anahtar kelime aramanın kazananı diyeceğim

Skor: 3-4

Kolaylık

Belgelerimizde zaten Xata'yı besleyen bir arama fonksiyonu vardı, dolayısıyla bunu bir sohbet botuna genişletmek oldukça basitti. Xata artık vektör aramayı yerel olarak da destekliyor ancak bunu kullanmak, tüm belge sayfaları için yerleştirmeler eklemeyi ve iyi bir parçalama stratejisi bulmayı gerektiriyordu. Minimum maliyetle metin yerleştirmeleri üretmek için OpenAI yerleştirme API'sini kullandık.


Kazanan: Anahtar kelime arama

Skor 3-5

Gecikme

Anahtar kelime arama yaklaşımı, ChatGPT API'sine fazladan bir gidiş-dönüş gerektirir. Bu, kullanıcı arayüzünde yayınlanmaya başlayan sonuca gecikme açısından katkıda bulunur. Benim ölçümlerime göre bu, yaklaşık 1,8 saniyelik ekstra süre ekliyor.


Vektör aramayla:

Anahtar kelime aramasıyla:

Not: Buradaki toplam ve içerik indirme süreleri önemli değildir çünkü bunlar çoğunlukla oluşturulan yanıtın ne kadar uzun olduğuna bağlıdır. Karşılaştırmak için “Sunucu yanıtı bekleniyor” çubuğuna (yeşil olan) bakın.


Kazanan: Vektör arama

Skor: 4-5

Maliyet

Anahtar kelime arama sürümünün ChatGPT API'sine ekstra bir API çağrısı yapması gerekirken, vektör arama sürümünün veritabanındaki tüm belgeler artı soru için yerleştirmeler üretmesi gerekir.


Çok fazla belgeden bahsetmediğimiz sürece buna kravat diyeceğim.


Skor: 5-6

Çözüm

Skor çok sıkı! Bizim durumumuzda, şimdilik anahtar kelime aramayı kullanmayı tercih ettik, bunun nedeni çoğunlukla onu ayarlamanın daha fazla yoluna sahip olmamız ve bunun sonucunda test sorularımız için biraz daha iyi yanıtlar üretmesidir. Ayrıca, aramada yaptığımız iyileştirmeler hem arama hem de sohbet kullanım durumlarına otomatik olarak fayda sağlar. Daha fazla ayarlama seçeneğiyle vektör arama yeteneklerimizi geliştirirken gelecekte vektör aramaya veya hibrit bir yaklaşıma geçiş yapabiliriz.


Kendi belgeleriniz veya herhangi bir bilgi tabanınız için benzer bir sohbet botu oluşturmak istiyorsanız Xata ask uç noktasını kullanarak yukarıdakileri kolayca uygulayabilirsiniz. Ücretsiz bir hesap oluşturun ve Discord'da bize katılın. Sistemi kurmanıza ve çalıştırmanıza kişisel olarak yardımcı olmaktan memnuniyet duyarım!