0

Bu daha belirsiz/genel bir sorudur, bu yüzden önceden özür dilerim. Twilio entegrasyonu ile kullanıcıların "nasılsınız" gibi mesajlar göndermesine ve "İyi, kendinle ilgili, John?" Gibi bir uygulamayla yarı-akıllı bir yanıt almasını sağlayan basit bir Rails uygulaması yapıyorum.Ruby/Rails'deki Yapay Zeka veya Bot

Herşeyin kablolu ve çalışır durumda olmasına karşın, Ruby'nin bu "bot" u daha akıllı hale getirecek bir algoritma yazmanın doğru yönünü gösterdiğimi merak ediyordum. Şu anda yükü ayrıştırmak ve uygun yanıt vermek için oldukça düz bir if/elsif/else zinciri kullanıyorum ancak 5-10 anahtar kelimeyi geçtikten sonra bu bakım devam etmiyor.

Bir vaka bildirimi (en azından okunabilirlik için) ile daha iyi olur muyuz yoksa anahtar kelimelerle eşleştirmeme ve belirli bir yanıt vermeme yardımcı olacak daha iyi bir OOP tasarım deseni var mı?

+0

Sen https://wit.ai/getting-started –

+2

ile başlayabilir, bir sonraki mantıklı adım etmektir Bunları bir veritabanında saklayın (SQLite bunun için iyi). Ardından, yanıtları biraz rastgele hale getirmenize olanak tanıyacak anahtar kelime başına birden fazla olası yanıt alabilirsiniz. – JLB

+0

Son zamanlarda wit.ai için bir mücevher yaptım, (@MaximFilippov bunu denemeyi önerdi) [wit_bot] (http://bensites.com/wit_bot/) olarak adlandırılan harici bir nlp servisi. Kutunun dışında botlar için destek var. –

cevap

2

Bu, bağlıdır. Gerçek bir sohbet botu yazmak istiyorsanız, nöral ağlarda 5+ yıllık okuma kağıtları hazırlayın. Belki de şimdi pes etmeyin :)

Ancak, gereksinimlerinizi azalttığınızda (her biri için önceden tanımlanmış yanıt (lar) olmak üzere yalnızca birkaç anahtar kelimeyi tanıyın), basit bir sözlük yaklaşımı yeterli olabilir.

Haklısınız, sözlüğün kodda saklanması ölçeklendirilemez. Bilgiyi bir veri dosyasında (YAML, JSON ya da ne isterseniz) veya bir veritabanında saklamak daha iyidir. Ardından kodunuz dosyayı yükleyecek ve yanıtları anahtar kelimelere göre arayabilecek. Böyle

şey: Eğer basit anahtar kelime/yanıt çiftleri ile şu anda rahat bir şekilde

def reply(input) 
    # you load this from a storage, so that when you add new keywords, 
    # your code doesn't have to be touched. 
    knowledge = [ 
    { keyword: 'how are you', response: 'Good, how about yourself, %{name}?' }, 
    { keyword: 'bye', response: 'Ciao!' }, 
    ] 

    response = knowledge.detect do |pair| 
    input.downcase.include?(pair[:keyword].downcase) 
    end 

    response && response[:response] 
end 

reply('How are you doing, machine?') # => "Good, how about yourself, %{name}?" 
reply('gotta go, bye') # => "Ciao!" 
+0

Sinir ağları için iyi bir nokta – Aetherus

+0

Şüphelendiğim şeyi onayladığınız için teşekkür ederiz. Bu, uygulamanıza biraz zeka eklemem için daha fazla bir denemedir. YAML veya DB'de K/V çiftlerini (anahtar kelimeler/cevaplar) ısrar etmenin muhtemelen en iyi hamle olabileceğini düşünüyorum. Aksi takdirde sınıf, devasa bir canavarlık olacak ve sürdürülemeyecek. Bu konuda tavsiyelerinizi ve rehberliğinizi takdir ediyorum. – nulltek