Cách xếp hạng một triệu hình ảnh bằng cách sắp xếp nguồn lực cộng đồng


83

Tôi muốn xếp hạng một bộ sưu tập các hình ảnh phong cảnh bằng cách tạo một trò chơi theo đó khách truy cập trang web có thể xếp hạng chúng, để tìm ra những hình ảnh mà mọi người thấy hấp dẫn nhất.

Một phương pháp tốt để làm điều đó sẽ là gì?

  • Phong cách Nóng hay Không ? Tức là hiển thị một hình ảnh duy nhất, yêu cầu người dùng xếp hạng nó từ 1-10. Như tôi thấy, điều này cho phép tôi tính trung bình điểm và tôi chỉ cần đảm bảo rằng tôi nhận được sự phân bổ đồng đều các phiếu bầu trên tất cả các hình ảnh. Khá đơn giản để thực hiện.
  • Chọn A-hoặc-B ? Tức là hiển thị hai hình ảnh, yêu cầu người dùng chọn hình ảnh tốt hơn. Điều này hấp dẫn vì không có xếp hạng số, nó chỉ là một so sánh. Nhưng tôi sẽ thực hiện nó như thế nào? Ý nghĩ đầu tiên của tôi là làm nó như một cách nhanh chóng, với các phép toán so sánh được cung cấp bởi con người và sau khi hoàn thành, chỉ cần lặp lại sắp xếp ad-infinitum.

Làm thế nào sẽ bạn làm điều đó?

Nếu bạn cần những con số, tôi đang nói về một triệu hình ảnh, trên một trang web có 20.000 lượt truy cập hàng ngày. Tôi tưởng tượng một tỷ lệ nhỏ có thể chơi trò chơi này, vì lợi ích của lập luận, giả sử tôi có thể tạo ra 2.000 hoạt động sắp xếp của con người mỗi ngày! Đó là một trang web phi lợi nhuận và những người tò mò cuối cùng sẽ tìm thấy nó qua hồ sơ của tôi :)


1
Tôi đã viết một ứng dụng đồ chơi sử dụng GAE có chức năng như sau: rank.appspot.com . Nó sử dụng khái niệm động lượng cho mỗi mục mà tôi nghi ngờ biến thể thành một biến thể của ELO, mặc dù tôi đã phát triển nó một cách độc lập. Rất vui được chia sẻ src python.
freespace

@freespace Tôi muốn xem nguồn Python cho thuật toán của bạn.
akaihola

Có thể, với dự án này, bạn nên cố gắng thiết lập một mạng nơ-ron (tất nhiên chỉ để giải trí) và sử dụng đầu vào Pick A-or-B để đào tạo mạng. Có thể bạn mạng nơ-ron sẽ chọn được cái đẹp nhất, sau rất nhiều lần luyện tập.
Martijn Courteaux

Câu trả lời:


96

Như những người khác đã nói, xếp hạng 1-10 không hoạt động tốt vì mọi người có cấp độ khác nhau.

Vấn đề với phương pháp Pick A-or-B là nó không đảm bảo cho hệ thống có tính bắc cầu (A có thể đánh bại B, nhưng B đánh bại C và C đánh bại A). Việc có các toán tử so sánh không chuyển dịch sẽ phá vỡ các thuật toán sắp xếp . Với quicksort, đối với ví dụ này, các chữ cái không được chọn làm trục xoay sẽ được xếp hạng không chính xác với nhau.

Tại bất kỳ thời điểm nào, bạn muốn có thứ hạng tuyệt đối của tất cả các bức ảnh (ngay cả khi một số / tất cả chúng đều bị ràng buộc). Bạn cũng muốn thứ hạng của mình không thay đổi trừ khi ai đó bỏ phiếu .

Tôi sẽ sử dụng phương pháp Chọn A-hoặc-B (hoặc hòa) , nhưng xác định xếp hạng tương tự như hệ thống xếp hạng Elo được sử dụng để xếp hạng trong trò chơi 2 người chơi (ban đầu là cờ vua):

Hệ thống xếp hạng người chơi Elo so sánh thành tích trận đấu của người chơi với thành tích trận đấu của đối thủ và xác định xác suất người chơi thắng trận đấu. Yếu tố xác suất này xác định điểm xếp hạng của người chơi tăng lên hoặc giảm xuống dựa trên kết quả của mỗi trận đấu. Khi một người chơi đánh bại một đối thủ có xếp hạng cao hơn, xếp hạng của người chơi sẽ tăng lên nhiều hơn so với khi người đó đánh bại một người chơi có xếp hạng thấp hơn (vì người chơi phải đánh bại đối thủ có xếp hạng thấp hơn).

Hệ thống Elo:

  1. Tất cả người chơi mới đều bắt đầu với xếp hạng cơ bản là 1600
  2. WinProbability = 1 / (10 ^ ((Xếp hạng hiện tại của đối thủ – Xếp hạng hiện tại của người chơi) / 400) + 1)
  3. ScoringPt = 1 điểm nếu họ thắng trận đấu, 0 nếu họ thua và 0,5 cho một trận hòa.
  4. Xếp hạng mới của người chơi = Xếp hạng cũ của người chơi + (Giá trị K * (ScoringPt – Xác suất thắng của người chơi))

Thay thế "trình phát" bằng hình ảnh và bạn có một cách đơn giản để điều chỉnh xếp hạng của cả hai hình ảnh dựa trên một công thức. Sau đó, bạn có thể thực hiện xếp hạng bằng cách sử dụng các điểm số đó. (K-Value ở đây là "Cấp độ" của giải đấu. Nó là 8-16 đối với các giải đấu địa phương nhỏ và 24-32 đối với các giải đấu / khu vực lớn hơn. Bạn chỉ có thể sử dụng một hằng số như 20).

Với phương pháp này, bạn chỉ cần giữ một số cho mỗi bức ảnh mà sẽ ít tốn bộ nhớ hơn rất nhiều so với việc giữ các thứ tự riêng lẻ của từng bức ảnh với từng bức ảnh khác.

CHỈNH SỬA: Đã thêm một ít thịt hơn dựa trên nhận xét.


3
Độ nhạy không thành vấn đề. Bạn chỉ muốn tổng hợp ý kiến ​​của mọi người và bạn sẽ mong đợi họ không đồng ý về xếp hạng. Con người là một nguồn dữ liệu ồn ào và không nhất quán.
Owen

4
quan điểm của tôi là nếu bạn có A> B> C> A, thì chỉ cần sử dụng ">" làm phép so sánh là một vấn đề vì sắp xếp của bạn sẽ không bao giờ kết thúc (chính xác) và danh sách của bạn sẽ ở trạng thái không đổi ngay cả khi không có thêm người nào đang bỏ phiếu. Câu trả lời của tôi cung cấp một giải pháp cho vấn đề này.
Laplie Anderson

1
Tôi đánh dấu đây là câu trả lời được chấp nhận vì nó chọn ra những khúc mắc từ gợi ý của tôi để sử dụng quicksort và kèm theo một hình minh họa đẹp về Elo.
Paul Dixon

6
Hệ thống elo chắc chắn là cách để xếp hạng phương pháp A / B. Tuy nhiên, bạn cũng có thể sử dụng một phương pháp tốt hơn phương pháp tăng dần ở trên. Hãy xem Bayeselo: Rem.coulom.free.fr/Bayesian-Elo
Fantius

sau khi googling của một giờ có sự hiểu biết rõ ràng về hệ số elo :)
daksh21ubuntu

40

Hầu hết các cách tiếp cận vấn đề ngây thơ đều có một số vấn đề nghiêm trọng. Điều tồi tệ nhất là cách bash.orgqdb.us hiển thị báo giá - người dùng có thể bình chọn báo giá lên (+1) hoặc giảm (-1) và danh sách các trích dẫn tốt nhất được sắp xếp theo tổng điểm thực. Điều này gây ra sự thiên vị về thời gian kinh khủng - những câu trích dẫn cũ hơn đã tích lũy được số lượng lớn phiếu bầu tích cực thông qua tuổi thọ đơn giản ngay cả khi chúng chỉ hơi hài hước. Thuật toán này có thể có ý nghĩa nếu những câu chuyện cười trở nên hài hước hơn khi chúng già đi nhưng - tin tôi đi - chúng không.

Có nhiều nỗ lực khác nhau để khắc phục điều này - xem xét số lượng phiếu bầu tích cực trong mỗi khoảng thời gian, tính trọng số phiếu bầu gần đây hơn, thực hiện hệ thống phân rã đối với các phiếu bầu cũ hơn, tính toán tỷ lệ phiếu bầu thuận lợi, v.v.

Giải pháp tốt nhất - tôi nghĩ - là giải pháp mà các trang web The Funniest The Cutest , The FairestBest Thing sử dụng - một hệ thống bỏ phiếu Condorcet đã được sửa đổi :

Hệ thống cung cấp cho mỗi người một con số dựa trên những thứ mà nó phải đối mặt, tỷ lệ phần trăm của chúng mà nó thường đánh bại. Vì vậy, mỗi người sẽ nhận được điểm phần trăm NumberOfThingsIBeat / (NumberOfThingsIBeat + NumberOfThingsThatBeatMe). Ngoài ra, mọi thứ bị cấm khỏi danh sách hàng đầu cho đến khi chúng được so sánh với một tỷ lệ phần trăm hợp lý của tập hợp.

Nếu có một người chiến thắng Condorcet trong tập hợp, phương pháp này sẽ tìm thấy nó. Vì điều đó khó xảy ra, dựa trên bản chất thống kê, nên nó tìm thấy kết quả "gần nhất" với việc trở thành người chiến thắng Condorcet.

Để biết thêm thông tin về việc triển khai các hệ thống như vậy, trang Wikipedia về Các cặp được xếp hạng sẽ hữu ích.

Thuật toán yêu cầu mọi người so sánh hai đối tượng (tùy chọn Pick-A-or-B của bạn), nhưng thành thật mà nói, đó là một điều tốt. Tôi tin rằng nó rất được chấp nhận trong lý thuyết quyết định rằng con người rất giỏi trong việc so sánh hai đối tượng hơn là xếp hạng trừu tượng. Hàng triệu năm tiến hóa khiến chúng ta giỏi trong việc hái quả táo ngon nhất khỏi cây, nhưng lại tệ hại trong việc quyết định xem quả táo chúng ta hái có giống quả táo thật sự hay không (Nhân tiện, đây là lý do tại sao Quy trình phân tích thứ bậc rất tiện lợi ... nhưng điều đó hơi lạc đề.)

Một điểm cuối cùng cần làm là SO sử dụng một thuật toán để tìm câu trả lời tốt nhất, rất giống với thuật toán của bash.org để tìm câu trích dẫn tốt nhất. Nó hoạt động tốt ở đây, nhưng không thành công ở đó - phần lớn là do một câu trả lời cũ, được đánh giá cao, nhưng hiện đã lỗi thời ở đây có khả năng bị chỉnh sửa. bash.org không cho phép chỉnh sửa và không rõ bạn thậm chí còn chỉnh sửa những câu chuyện cười hàng thập kỷ về các meme trên internet ngày nay như thế nào ngay cả khi bạn có thể ... Trong mọi trường hợp, quan điểm của tôi là thuật toán phù hợp thường phụ thuộc vào các chi tiết của vấn đề của bạn. :-)


Cảm ơn bạn đã tham khảo các hệ thống bỏ phiếu Condorcet, dòng yêu cầu đó cho tôi đến trang wikipedia hữu ích này en.wikipedia.org/wiki/Ranked_Pairs
Paul Dixon

Các trang web này cho biết chúng đã bị "hỏng" và từ đó bị bỏ hoang. Tôi không biết liệu thuật toán có lỗi hay chỉ là cách triển khai.
endolith

11

Tôi biết câu hỏi này khá cũ nhưng tôi nghĩ mình sẽ đóng góp

Tôi sẽ xem xét hệ thống TrueSkill được phát triển tại Microsoft Research. Nó giống như ELO nhưng có thời gian hội tụ nhanh hơn nhiều (trông theo cấp số nhân so với tuyến tính), vì vậy bạn sẽ nhận được nhiều hơn từ mỗi phiếu bầu. Tuy nhiên, nó phức tạp hơn về mặt toán học.

http://en.wikipedia.org/wiki/TrueSkill


Các khái niệm của TrueSkill cung cấp rất nhiều khả năng để xếp hạng mọi thứ dựa trên "các trận đấu". Các khái niệm tương tự được Bing sử dụng để phân phát các quảng cáo có liên quan. Tôi đã viết rất nhiều về các chi tiết của TrueSkill tại moserware.com/2010/03/computing-your-skill.html
Jeff Moser

8

Tôi không thích phong cách Hot-or-Not . Những người khác nhau sẽ chọn các số khác nhau ngay cả khi họ đều thích hình ảnh giống hệt nhau. Ngoài ra, tôi ghét đánh giá những thứ trên 10, tôi không bao giờ biết con số nào để chọn.

Chọn A-hoặc-B đơn giản và thú vị hơn nhiều. Bạn có thể thấy hai hình ảnh và so sánh được thực hiện giữa các hình ảnh trên trang web.


5

Các phương trình này từ Wikipedia giúp việc tính toán xếp hạng Elo trở nên đơn giản / hiệu quả hơn, thuật toán cho hình ảnh A và B sẽ đơn giản:

  • Nhận Ne, mA, mB và xếp hạng RA, RB từ cơ sở dữ liệu của bạn.
  • Tính KA, KB, QA, QB bằng cách sử dụng số lần so sánh được thực hiện (Ne) và số lần hình ảnh đó được so sánh (m) và xếp hạng hiện tại:

K

QA

QB

  • Tính EA và EB.

EA

EB

  • Cho điểm S của người chiến thắng: người thắng là 1, thua là 0 và nếu bạn có kết quả hòa là 0,5,
  • Tính toán xếp hạng mới cho cả hai bằng cách sử dụng: Xếp hạng mới

  • Cập nhật xếp hạng mới RA, RB và đếm mA, mB trong cơ sở dữ liệu.


4

Bạn có thể muốn đi với sự kết hợp.

Giai đoạn đầu: Phong cách nóng hoặc không (mặc dù tôi sẽ bỏ phiếu 3 lựa chọn: Sucks, Meh / OK. Tuyệt!)

Khi bạn đã sắp xếp tập hợp thành 3 nhóm, sau đó tôi sẽ chọn hai hình ảnh từ cùng một nhóm và chọn "Cái nào đẹp hơn"

Sau đó, bạn có thể sử dụng hệ thống thăng hạng và cách chức của English Soccer để chuyển một số "Sucks" hàng đầu vào khu vực Meh / OK, nhằm tinh chỉnh các trường hợp cạnh tranh.


4

Xếp hạng 1-10 sẽ không hoạt động, mọi người đều có các cấp độ khác nhau. Một người luôn cho 3-7 xếp hạng sẽ khiến thứ hạng của anh ta bị lu mờ bởi những người luôn cho 1 hoặc 10.

a-hoặc-b khả thi hơn.


Tôi đánh giá cao điều đó, nhưng tôi đã nghĩ rằng nếu tôi đảm bảo mỗi hình ảnh nhận được số phiếu bình chọn bằng nhau, thì nó sẽ đạt trung bình. Vấn đề là, tôi nghĩ rằng tôi sẽ cần khoảng 10 phiếu bầu cho mỗi hình ảnh, dựa trên những con số ở trên sẽ khiến tôi mất 13 năm. Đến lúc đó tôi có thêm 5 triệu hình ảnh nữa :)
Paul Dixon.

1
Vì mọi người có xu hướng đi theo mức trung bình hoặc cao / thấp, nếu bạn quyết định làm điều đó, tôi khuyên bạn nên giảm xuống 1-5 thay vì 1-10.
Bill K

3

Chà, tôi đến muộn trong trò chơi.

Tôi rất thích hệ thống ELO, nhưng như Owen nói với tôi, dường như bạn đang chậm xây dựng bất kỳ kết quả quan trọng nào.

Tôi tin rằng con người có khả năng lớn hơn nhiều so với việc chỉ so sánh hai hình ảnh, nhưng bạn muốn giữ các tương tác ở mức tối thiểu.

Vậy thì sao về việc bạn hiển thị n hình ảnh (n là bất kỳ số nào bạn có thể hiển thị trực quan trên màn hình, con số này có thể là 10, 20, 30 tùy thuộc vào sở thích của người dùng) và yêu cầu họ chọn hình ảnh họ cho là tốt nhất trong lô đó. Bây giờ trở lại ELO. Bạn cần phải sửa đổi hệ thống xếp hạng của mình, nhưng vẫn giữ nguyên tinh thần. Trên thực tế, bạn đã so sánh một hình ảnh với n-1 hình ảnh khác. Vì vậy, bạn thực hiện xếp hạng ELO của mình n-1 lần, nhưng bạn nên chia sự thay đổi xếp hạng cho n-1 để phù hợp (để các kết quả với các giá trị khác nhau của n được thống nhất với nhau).

Bạn đã hoàn tất. Bây giờ bạn đã có những gì tốt nhất của tất cả các thế giới. Một hệ thống đánh giá đơn giản hoạt động với nhiều hình ảnh trong một cú nhấp chuột.


3

Nếu bạn thích sử dụng chiến lược Chọn A hoặc B, tôi sẽ giới thiệu bài báo này: http://research.microsoft.com/en-us/um/people/horvitz/crowd_pairwise.pdf

Chen, X., Bennett, PN, Collins-Thompson, K., & Horvitz, E. (2013, tháng 2). Tổng hợp xếp hạng theo cặp trong một cài đặt có nguồn lực từ cộng đồng. Trong Kỷ yếu hội nghị quốc tế ACM lần thứ sáu về tìm kiếm trên Web và khai thác dữ liệu (trang 193-202). ACM.

Bài báo kể về mô hình Crowd-BT mở rộng mô hình so sánh theo cặp Bradley-Terry nổi tiếng vào cài đặt nguồn lực đám đông. Nó cũng đưa ra một thuật toán học tập thích ứng để nâng cao hiệu quả về thời gian và không gian của mô hình. Bạn có thể tìm thấy một triển khai Matlab của thuật toán trên Github (nhưng tôi không chắc liệu nó có hoạt động hay không).



1

Chọn A-hoặc-B là cách đơn giản nhất và ít bị sai lệch hơn, tuy nhiên ở mỗi lần tương tác giữa người với người, nó cung cấp cho bạn ít thông tin hơn đáng kể. Tôi nghĩ vì giảm sự thiên vị, Pick vượt trội hơn và trong giới hạn nó cung cấp cho bạn thông tin tương tự.

Một sơ đồ tính điểm rất đơn giản là đếm cho mỗi bức tranh. Khi ai đó đưa ra một so sánh tích cực sẽ tăng số lượng, khi ai đó đưa ra một so sánh tiêu cực, hãy giảm số lượng.

Việc sắp xếp danh sách 1 triệu số nguyên rất nhanh chóng và chỉ mất chưa đầy một giây trên máy tính hiện đại.

Điều đó nói lên rằng, vấn đề là khá sai lầm - Bạn sẽ mất 50 ngày để hiển thị mỗi hình ảnh chỉ một lần.

Tôi cá rằng bạn quan tâm hơn đến những hình ảnh được xếp hạng cao nhất? Vì vậy, bạn có thể muốn thiên vị việc truy xuất hình ảnh của mình theo thứ hạng dự đoán - vì vậy, bạn có nhiều khả năng hiển thị những hình ảnh đã đạt được một vài so sánh tích cực. Bằng cách này, bạn sẽ nhanh chóng bắt đầu hiển thị những hình ảnh 'thú vị'.


Tôi có thể xem xếp hạng ban đầu với lượt xem trang, điều này cũng có thể hữu ích.
Paul Dixon

mà nên nói "hạt giống", không phải "nhìn thấy"!
Paul Dixon

nó có thể là "chọn tốt nhất trong số 4" và sau đó nó được tính là 3 xếp hạng theo cặp cho mỗi phiếu bầu
endolith

1

Tôi thích tùy chọn sắp xếp nhanh nhưng tôi sẽ thực hiện một vài tweet:

  • Giữ kết quả "so sánh" trong DB và sau đó tính trung bình chúng.
  • Nhận nhiều hơn một so sánh cho mỗi lần xem bằng cách cung cấp cho người dùng 4-6 hình ảnh và yêu cầu họ sắp xếp chúng.
  • Chọn những hình ảnh để hiển thị bằng cách chạy qsort và ghi lại và cắt bất kỳ thứ gì mà bạn không có đủ dữ liệu. Sau đó, khi bạn đã ghi đủ các mục, hãy nhổ ra một trang.

Một lựa chọn thú vị khác là sử dụng đám đông để dạy mạng thần kinh.

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.