Phân loại Akinator.com và Naive Bayes


12

Bối cảnh: Tôi là một lập trình viên với một số kinh nghiệm (bị lãng quên một nửa) trong thống kê từ các khóa học của uni. Gần đây tôi tình cờ tìm thấy http://akinator.com và dành thời gian cố gắng để làm cho nó thất bại. Và ai đã không? :)

Tôi đã quyết định tìm hiểu làm thế nào nó có thể hoạt động. Sau khi googling và đọc các bài đăng trên blog có liên quan và thêm một số kiến ​​thức (hạn chế) của tôi vào kết quả, tôi đưa ra mô hình sau (Tôi chắc chắn rằng tôi sẽ sử dụng ký hiệu sai, xin đừng giết tôi vì điều đó):

Có môn (S) và câu hỏi (Q). Mục tiêu của người dự đoán là chọn đối tượng S có xác suất phân cấp lớn nhất là chủ đề mà người dùng đang nghĩ đến, đưa ra các câu hỏi và câu trả lời được thu thập cho đến nay.

Đặt trò chơi G là một tập hợp các câu hỏi và câu trả lời được đưa ra:{q1,một1},{q2,một2}...{qn,mộtn} .

Sau đó, người dự đoán đang tìm kiếmP(S|G)= =P(G|S)*P(S)P(G) .

Ưu tiên cho các đối tượng (P(S) ) có thể chỉ là số lần chủ đề đã được đoán chia cho tổng số trò chơi.

Giả định rằng tất cả các câu trả lời là độc lập, chúng tôi có thể tính toán khả năng chủ đề S đưa ra trò chơi G như vậy:

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

Chúng ta có thể tính nếu chúng ta theo dõi những câu hỏi và câu trả lời nào được đưa ra khi sử dụng có mặc dù chủ đề đã cho:P({qi,ai}|S)

P(q,a|S)=answer a was given to question q in the game when S was the subjectnumber of times q was asked in the games involving S

Bây giờ, xác định phân phối xác suất cho các đối tượng và khi chúng ta cần chọn câu hỏi tiếp theo, chúng ta phải chọn câu hỏi mà sự thay đổi dự kiến ​​trong entropy của phân phối này là tối đa:P(S|G)

mộtrgmmộtxj(H[P(S|G)]-Σmột= =yeS,no,mmộtybe...H[P(S|G{qj,một})]

Tôi đã cố gắng thực hiện điều này và nó hoạt động. Nhưng, rõ ràng, khi số lượng đối tượng tăng lên, hiệu suất giảm do nhu cầu tính toán lại sau mỗi lần di chuyển và tính toán phân phối cập nhật cho lựa chọn câu hỏi.P(S|G)P(S|G{qj,một})

Tôi nghi ngờ rằng tôi chỉ đơn giản là đã chọn sai mô hình, bị hạn chế bởi giới hạn kiến ​​thức của tôi. Hoặc, có thể, có một lỗi trong toán học. Xin hãy soi sáng cho tôi: tôi nên làm quen với điều gì, hoặc làm thế nào để thay đổi người dự đoán để nó có thể đối phó với hàng triệu đối tượng và hàng ngàn câu hỏi?


4
Tôi nghi ngờ đó là một Naive Bayes, thay vào đó một số cây quyết định được mở rộng mỗi khi nó không nhận ra ai đó.

1
Cây quyết định như vậy sẽ không quá khó để cập nhật? Thêm vào đó, tôi thấy không có cách nào dễ dàng để giải thích cho các câu trả lời vô tình sai / trung thực và vẫn hiểu đúng cuối cùng với cây quyết định
ADEpt

5
Trông giống như một tái sinh của người đoán 20 câu hỏi hai mươi tuổi, bây giờ tại 20q.net . Dưới đây là một lời giải thích phổ biến về cách thức hoạt động của psychfloss.com/bloss/archives/13725
Yaroslav Bulatov

5
Xin lỗi, nhưng tôi nghĩ rằng việc sử dụng "trí tuệ nhân tạo" và "mạng lưới thần kinh" mà không có bất kỳ bối cảnh nào được coi là giải thích. Và tôi không thể thấy làm thế nào người ta có thể sử dụng mạng lưới thần kinh cho loại điều này - ví dụ chức năng đầu ra là gì?
QUẢNG CÁO

Xin chào @ADEpt, đã được một thời gian kể từ khi câu hỏi được hỏi, nhưng bạn có thể chia sẻ mã nguồn cho việc triển khai bạn đã quay lại đó không?
Prikha

Câu trả lời:


10

Trò chơi này trông tương tự như 20 câu hỏi tại http://20q.net , mà người tạo báo cáo dựa trên một mạng lưới thần kinh. Đây là một cách để cấu trúc mạng như vậy, tương tự như mạng thần kinh được mô tả trong các vectơ mô tả Khái niệm và trò chơi 20 câu hỏi .

Bạn sẽ có

  1. Một số câu hỏi cố định, với một số câu hỏi được đánh dấu là câu hỏi "cuối cùng".
  2. Một đơn vị đầu vào cho mỗi câu hỏi, trong đó 0/1đại diện cho no/yescâu trả lời. Ban đầu được đặt thành0.5
  3. Một đơn vị đầu ra cho mỗi câu hỏi, sigmoid được chia thành phạm vi 0..1
  4. Lớp ẩn kết nối tất cả các đơn vị đầu vào với tất cả các đơn vị đầu ra.

Các đơn vị đầu vào cho các câu hỏi đã được trả lời được đặt thành 0 hoặc 1 và giả định rằng mạng nơ ron đã được đào tạo để làm cho các giá trị đầu ra của đơn vị đầu ra gần bằng 1 đối với các câu hỏi có câu trả lời "Có" với một bộ câu trả lời hiện có.

Ở mỗi giai đoạn, bạn sẽ chọn câu hỏi NNít chắc chắn nhất, nghĩa là, đơn vị đầu ra tương ứng gần với 0.5, đặt câu hỏi và đặt đơn vị đầu vào tương ứng cho câu trả lời. Ở giai đoạn cuối, bạn chọn một đơn vị đầu ra từ danh sách "câu hỏi cuối cùng" có giá trị gần nhất 1.

Mỗi trò chơi gồm 20 câu hỏi đưa ra 20 điểm dữ liệu mà bạn có thể sử dụng để cập nhật NNtrọng số với lan truyền ngược, tức là bạn cập nhật các trọng số để làm cho kết quả đầu ra của mạng thần kinh hiện tại khớp với câu trả lời đúng cho tất cả các câu hỏi trước đó.


7

Tôi không nghĩ rằng nó thực sự là một vấn đề phân loại. 20 câu hỏi thường được đặc trưng như một vấn đề nén . Điều này thực sự phù hợp hơn với phần cuối của câu hỏi của bạn, nơi bạn nói về entropy.

Xem Chương 5.7 ( sách Google ) của

Bao gồm, TM và Joy, AT (2006) Các yếu tố của lý thuyết thông tin

mã hóa Huffman . Bài báo này tôi tìm thấy trên arXiv cũng có thể được quan tâm.

Gill, JT và Wu, W. (2010) "Hai mươi câu hỏi trò chơi luôn kết thúc với có đúng http://arxiv.org/abs/1002.4907

Để đơn giản, giả sử có / không có câu hỏi (trong khi akinator.com cho phép có thể, không biết). Giả sử rằng mọi chủ đề có thể (những gì akinator.com biết) có thể được xác định duy nhất bằng một chuỗi các câu hỏi có / không và câu trả lời - về cơ bản là một vectơ nhị phân.

Các câu hỏi được (và câu trả lời của họ) được hỏi xác định phân vùng đệ quy không gian của các chủ đề. Phân vùng này cũng tương ứng với một cấu trúc cây. Các đỉnh bên trong của cây tương ứng với các câu hỏi và lá tương ứng với các đối tượng. Độ sâu của lá chính xác là số lượng câu hỏi cần thiết để xác định duy nhất chủ đề. Bạn có thể (tầm thường) xác định mọi chủ đề đã biết bằng cách hỏi mọi câu hỏi có thể. Điều đó không thú vị bởi vì có hàng trăm câu hỏi.

Mối liên hệ với mã hóa Huffman là nó đưa ra một cách tối ưu (theo một mô hình xác suất nhất định) để xây dựng cây sao cho độ sâu trung bình là (gần) tối thiểu. Nói cách khác, nó cho bạn biết cách sắp xếp chuỗi câu hỏi (xây dựng một cái cây) sao cho số lượng câu hỏi bạn cần hỏi trung bình là nhỏ. Nó sử dụng một cách tiếp cận tham lam.

Tất nhiên, có nhiều thứ cho akinator.com hơn thế này, nhưng ý tưởng cơ bản là bạn có thể nghĩ về vấn đề về cây và cố gắng giảm thiểu độ sâu trung bình của lá.


Đó là một khởi đầu tốt, nhưng tôi nghĩ có nhiều vấn đề hơn. Ví dụ: làm thế nào để họ có được câu trả lời cho các câu hỏi? Có lẽ họ sử dụng các câu trả lời được đưa ra bởi những người chơi trước (một vấn đề học tập củng cố), trong trường hợp đó chúng ta phải đối mặt với sự đánh đổi khi chọn một câu hỏi (a) giải quyết vấn đề cho người chơi hiện tại và (b) cung cấp thông tin cho những người chơi trong tương lai.
Simon Byrne

Thoạt nhìn, khả năng rút ra sự tương đồng giữa 20 câu hỏi và Huffman mã hóa bản lề về khả năng hỏi "các câu hỏi phạm vi". Đó là, thay vì "Bạn đã bao giờ nhân vật lên vũ trụ chưa?" chúng tôi đang hỏi những câu hỏi "chăn" như "Anh ấy đã từng đến vũ trụ, hay là một người đàn ông, hay bị hói, hoặc trong một bộ phim, hoặc ... (100500 lựa chọn khác)?" Tôi có đúng không Nếu vậy, thì có lẽ tôi nên chỉnh sửa câu hỏi của mình để làm rõ rằng tôi quan tâm đến việc "hỏi từng người một"
ADEpt

Tôi0

@vqv: Re: "Tôi không nghĩ đó thực sự là một vấn đề phân loại. 20 câu hỏi thường được mô tả là một vấn đề nén." Không suy luận thống kê và nén thông tin liên quan trực tiếp / cùng một vấn đề?
Yang

@Yang Bạn đang đề cập đến lập luận của Jorma Rissannen? Suy luận thống kê và nén thông tin đều sử dụng các mô hình xác suất để mô tả sự không chắc chắn, tuy nhiên quan điểm của họ và những người nếu các nhà nghiên cứu trong các lĩnh vực đó thường rất khác nhau. Điều tôi muốn nói ở trên là 20 câu hỏi có thể được xây dựng một cách tự nhiên hơn như là một vấn đề nén (cụ thể là mã hóa nguồn) chứ không phải là một vấn đề phân loại.
Khoan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.