Akinator.com ve Naive Bayes sınıflandırıcı


12

Bağlam: Ben üniversitelerin istatistiklerinde (yarı unutulmuş) bazı deneyimlere sahip bir programcıyım. Son zamanlarda http://akinator.com üzerine tökezledim ve başarısız olmasına çalışmak için biraz zaman geçirdim. Kim değildi? :)

Nasıl çalışabileceğini bulmaya karar verdim. İlgili blog gönderilerini okuduktan ve okuduktan ve bazı (sınırlı) bilgilerimi ortaya çıkan karışıma ekledikten sonra aşağıdaki modelle geliyorum (Yanlış gösterimi kullanacağımdan eminim, lütfen bunun için beni öldürmeyin):

Konular (S) ve Sorular (Q) vardır. Kestirimcinin amacı, kullanıcının şimdiye kadar topladığı sorular ve cevaplar verildiği düşünülen konu olma olasılığı en yüksek olan S konusunu seçmektir.

Oyun G'nin bir dizi soru ve cevaplar kümesi olmasına izin verin: .{q1,a1},{q2,a2}...{qn,an}

Ardından yordayıcı arar .P(S|G)=P(G|S)P(S)P(G)

Konular için önceden ( ) sadece konunun tahmin edilme sayısının toplam oyun sayısına bölünmesi olabilirdi.P(S)

Tüm cevapların bağımsız olduğu varsayımıyla, G oyunu verilen S konusunun olasılığını şu şekilde hesaplayabiliriz:

P(G|S)=i=1..nP({qi,ai}|S)

Kullanılan belirli bir konu olsa da hangi soruların ve cevapların verildiğini takip edersek hesaplayabiliriz :P({qi,ai}|S)

P(q,bir|S)=birnswer bir wbirs gbenven tÖ questbenÖn q benn the gbirme when S wbirs the subjectnumber Öf tbenmes q wbirs birsked benn the gbirmes bennvÖlvbenng S

Şimdi, denekler üzerinde bir olasılık dağılımı tanımlamaktadır ve bir sonraki soruyu seçmemiz gerektiğinde, bu dağılımın entropisinde beklenen değişikliğin maksimum olduğu soruyu seçmemiz gerekmektedir:P(S|G,)

birrgmbirxj('H[P(S|G,)]-Σbir=yes,nÖ,mbirybe...'H[P(S|G,{qj,bir})]

Bunu uygulamaya çalıştım ve işe yarıyor. Ancak, açık bir şekilde, konu sayısı her hareketten sonra nin yeniden hesaplanması ve güncellenmiş dağıtım hesaplanması ihtiyacı nedeniyle performans düşer . soru seçimi.P ( S | G { q j , a } )P(S|G,)P(S|G,{qj,bir})

Bilgilerimin sınırlarıyla kısıtlanmış olarak, sadece yanlış modeli seçtiğimden şüpheleniyorum. Ya da, belki matematikte bir hata vardır. Lütfen beni aydınlatın: milyonlarca konu ve binlerce soru ile başa çıkabilmek için kendimi nelere tanıtalım veya öngörücüyü nasıl değiştirmeliyim?


4
Bir Naif Bayes olduğundan şüpheliyim, her birini tanımadığında karar ağacı uzatıldı.

1
Böyle bir karar ağacı güncellenemeyecek kadar zor olmaz mı? Ayrıca, yanlışlıkla yanlış / dürüst hata cevaplarını açıklamanın kolay bir yolunu göremiyorum ve yine de karar ağacı ile doğru
anladım

5
Şimdi 20q.net yirmi yaşındaki 20 soru tahmin reenkarnasyon gibi görünüyor . İşte nasıl çalıştığına dair popüler bir açıklama mentalfloss.com/blogs/archives/13725
Yaroslav Bulatov

5
Affedersiniz, ancak "yapay zeka" ve "sinir ağları" nın herhangi bir bağlam olmadan kullanılmasının açıklama olarak sayıldığını düşünüyorum. Ve bu tür bir şey için sinir ağını nasıl kullanabileceğini göremiyorum - örneğin çıktı işlevi ne olurdu?
ADEpt

Merhaba @ADEpt, Sorunun sorulmasından bu yana bir süre geçti, ancak oradaki uygulama için kaynak kodunu paylaşabilir misiniz?
prikha

Yanıtlar:


10

Bu oyun , içerik oluşturucunun raporlarının sinir ağına dayandığı http://20q.net adresindeki 20 soruya benzer . Burada, Kavram açıklama vektörlerinde ve 20 soru oyununda açıklanan sinir ağına benzer bir ağ yapılandırmanın bir yolu var .

Olurdu

  1. Bazı sorular "son" soru olarak işaretlenmiş sabit sayıda soru.
  2. Soru başına cevabı 0/1temsil eden bir girdi birimi no/yes. Başlangıçta0.5
  3. Soru başına bir çıkış birimi, sigmoid 0..1 aralığına girdi
  4. Tüm giriş birimlerini tüm çıkış birimlerine bağlayan gizli katman.

Cevaplanan sorular için girdi birimleri 0 veya 1 olarak ayarlanmıştır ve varsayım, sinir ağının mevcut bir dizi cevap verildiğinde "Evet" yanıtı olan sorular için çıktı birimlerinin çıktı değerlerini 1'e yakın hale getirecek şekilde eğitilmiş olduğu varsayımıdır.

Her aşamada NN, karşılık gelen çıkış biriminin yakın olduğundan en az emin olan soruyu seçersiniz, soruyu 0.5sorar ve cevaba karşılık gelen giriş birimini ayarlarsınız. Son aşamada "son soru" listesinden en yakın değere sahip bir çıktı birimi seçersiniz 1.

20 sorudan oluşan her oyun, NNağırlıklarını geri yayılım ile güncellemek için kullanabileceğiniz 20 veri noktası verir ; yani, mevcut sinir ağının çıktılarını, sorulan tüm önceki sorulara verilen gerçek yanıtla eşleştirmek için ağırlıkları güncellersiniz.


7

Bunun gerçekten bir sınıflandırma sorunu olduğunu düşünmüyorum. 20 soru genellikle bir sıkıştırma problemi olarak nitelendirilir . Bu aslında sorunuzun entropi hakkında konuştuğunuz son kısmı ile daha iyi eşleşir.

Bkz. Bölüm 5.7 ( Google kitaplar )

Cover, TM and Joy, AT (2006) Bilgi Teorisinin Unsurları

ve ayrıca Huffman kodlaması . ArXiv'de bulduğum bu yazı da ilgi çekici olabilir.

Gill, JT ve Wu, W. (2010) "Yirmi Soru Oyunları Her Zaman Evet İle Biter" http://arxiv.org/abs/1002.4907

Basitlik için evet / hayır soruları varsayalım (akinator.com izin verir belki izin verir, bilmiyorum). Her olası konunun (akinator.com'un bildikleri) evet / hayır soruları ve cevapları dizisi ile özdeş olarak tanımlanabileceğini varsayın - esasen bir ikili vektör.

Sorulan sorular (ve cevapları) konuların özyinelemesinin özyinelemeli bölümlenmesini tanımlar. Bu bölümleme aynı zamanda bir ağaç yapısına da karşılık gelir. Ağacın iç köşeleri sorulara karşılık gelir ve yapraklar deneklere karşılık gelir. Yaprakların derinliği tam olarak konuyu benzersiz bir şekilde tanımlamak için gereken soru sayısıdır. Olası her soruyu sorarak bilinen her konuyu (önemsiz bir şekilde) tanımlayabilirsiniz. Bu ilginç değil çünkü potansiyel olarak yüzlerce soru var.

Huffman kodlaması ile bağlantı, ağacın ortalama derinliğin (neredeyse) minimum olmasını sağlayacak şekilde yapılandırılması için (belirli bir olasılık modelinde) optimal bir yol vermesidir. Başka bir deyişle, soru dizisini nasıl ayarlayacağınızı (bir ağaç oluşturacağınız) anlatır, böylece sormanız gereken soru sayısı ortalama olarak azdır. Açgözlü bir yaklaşım kullanır.

Elbette, akinator.com'da bundan daha fazlası var, ancak temel fikir, problemi bir ağaç açısından düşünebilir ve yapraklarının ortalama derinliğini en aza indirmeye çalışabilirsiniz.


Bu iyi bir başlangıç, ama bence sorunun daha fazlası var. Örneğin: soruların cevaplarını nasıl alırlar? Muhtemelen önceki oyuncular tarafından verilen cevapları kullanırlar (bir takviye öğrenme problemi), bu durumda (a) mevcut oyuncu için problemi çözen ve (b) gelecekteki oyuncular için bilgi sağlayan bir soru seçme geleneğiyle karşı karşıya kalırız.
Simon Byrne

İlk bakışta, 20 soru ile Huffman kodlaması arasında benzerlik çizme yeteneği, "menzil soruları" sorma yeteneğine bağlıdır. "Karakteriniz hiç uzaya gittiniz mi?" "Hiç uzaya gitti mi, erkek mi, kel mi, yoksa bir filmdeydi ya da ... (100500 diğer seçenek)?" gibi "battaniye" soruları soruyoruz. Haklı mıyım? Eğer öyleyse, o zaman muhtemelen "tek tek sor" çeşitliliği ile ilgilendiğimi açıklığa kavuşturmak için sorumu düzenlemeliyim
ADEpt

ben0

@vqv: Re: "Bunun gerçekten bir sınıflandırma sorunu olduğunu düşünmüyorum. 20 soru genellikle bir sıkıştırma sorunu olarak nitelendiriliyor." İstatistiksel çıkarım ve bilgi sıkıştırması doğrudan ilişkili değil mi / aynı sorun mu?
Yang

@Yang Jorma Rissannen'in argümanından mı bahsediyorsunuz? İstatistiksel çıkarım ve bilgi sıkıştırma, belirsizliği tanımlamak için olasılıksal modeller kullanır, ancak bakış açıları ve bu alanlardaki araştırmacıların genellikle çok farklı olması. Yukarıda söylemek istediğim, 20 sorunun bir sınıflandırma probleminden ziyade bir sıkıştırma (spesifik olarak kaynak kodlama) problemi olarak daha doğal olarak formüle edilebilmesidir. … Aşağıda devam etti
vqv
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.