Làm thế nào là máy học kết hợp vào thiết kế công cụ tìm kiếm?


15

Tôi hiện đang xây dựng một công cụ tìm kiếm nhỏ trong nhà dựa trên Apache Lucene. Mục đích của nó rất đơn giản - dựa trên một số từ khóa, nó sẽ gợi ý một số bài viết được viết trong nội bộ công ty chúng tôi. Tôi đang sử dụng cách tính điểm TF-IDF khá chuẩn làm chỉ số cơ bản và xây dựng cơ chế tính điểm của riêng mình trên đầu trang. Tất cả những thứ này dường như đang hoạt động xuất sắc ngoại trừ một số trường hợp góc mà bảng xếp hạng dường như bị rối tung.

Vì vậy, những gì tôi dự định làm là thêm một liên kết nhỏ Có liên quan / Không liên quan vào trang kết quả tìm kiếm để người dùng có thể nhấp vào một trong những tùy thuộc vào nhận thức của họ về việc liệu kết quả đó có nên được đưa vào vị trí đầu tiên hay không.

Ý kiến ​​của tôi

  1. Hãy coi những thứ này có liên quan / Không liên quan như nhãn và tạo dữ liệu đào tạo.
  2. Sử dụng dữ liệu này để huấn luyện bộ phân loại (như SVM)
  3. Kết hợp mô hình này vào công cụ tìm kiếm, tức là mọi kết quả mới sẽ đi qua bộ phân loại và sẽ được gán nhãn cho dù nó có liên quan hay không.

Cách tiếp cận này có vẻ trực quan với tôi nhưng không chắc liệu nó có hoạt động trong thực tế hay không. Tôi có hai câu hỏi cụ thể:

  1. Những gì tất cả các tính năng tôi nên trích xuất?
  2. Có cách nào tốt hơn để tích hợp thành phần máy học vào công cụ tìm kiếm không? Mục tiêu cuối cùng của tôi là "tìm hiểu" chức năng xếp hạng dựa trên cả logic kinh doanh cũng như phản hồi của người dùng.

4
Tôi đã làm một cái gì đó như thế này một lần và người dùng ghét nó vì vậy tôi tắt nó đi. Vấn đề là hành vi người dùng. Người dùng thích nghi với các điểm yếu trong kết quả tìm kiếm bằng cách thay đổi thuật ngữ của họ và sau đó họ sẽ tiếp tục sử dụng lại các thuật ngữ đó. Hệ thống đã trả lời điều chỉnh thứ hạng của các mặt hàng và những điều khoản được ưa thích bắt đầu tạo ra kết quả khác nhau. Điều này khiến người dùng bỏ qua. Học không có nghĩa là nó thông minh hơn;)
Phản ứng

Đây là một thực hiện sử dụng elasticsearch và angularjs - cũng chứa những lời giải thích bạn cần - machinelearningblogs.com/2016/12/12/...
Vivek Kalyanarangan

Câu trả lời:


15

(1) Tôi nên trích xuất tất cả các tính năng?

Đầu tiên, nhận ra rằng bạn không phân loại tài liệu. Bạn đang phân loại các cặp (tài liệu, truy vấn), vì vậy bạn nên trích xuất các tính năng thể hiện mức độ phù hợp của chúng.

Cách tiếp cận tiêu chuẩn trong việc học xếp hạng là chạy truy vấn đối với các thiết lập công cụ tìm kiếm khác nhau (ví dụ: tf-idf, BM-25, v.v.) và sau đó huấn luyện một mô hình về điểm số tương tự, nhưng đối với SE nhỏ, cụ thể theo miền, bạn có thể có các tính năng như

  • Đối với mỗi thuật ngữ, một boolean cho biết liệu thuật ngữ đó có xảy ra trong cả truy vấn và tài liệu hay không. Hoặc có thể không phải là boolean, nhưng trọng số tf-idf của các thuật ngữ truy vấn đó thực sự xảy ra trong tài liệu.
  • Các số liệu chồng chéo khác nhau như Jaccard hoặc Tanimoto.

(2) Có cách nào tốt hơn để tích hợp thành phần máy học vào công cụ tìm kiếm không? Mục tiêu cuối cùng của tôi là "tìm hiểu" chức năng xếp hạng dựa trên cả logic kinh doanh cũng như phản hồi của người dùng.

Đây là một câu hỏi rất rộng và câu trả lời phụ thuộc vào mức độ bạn muốn bỏ ra. Cải tiến đầu tiên bạn nghĩ đến là bạn không nên sử dụng các phán đoán liên quan nhị phân từ phân loại, mà là chức năng quyết định có giá trị thực của nó, để bạn thực sự có thể thực hiện xếp hạng thay vì chỉ lọc. Đối với một SVM, hàm quyết định là khoảng cách đã ký với siêu phẳng. Các gói học máy tốt có một giao diện để nhận được giá trị của điều đó.

Ngoài ra, hãy nhìn vào cặp đôi và lắng nghe học tập để xếp hạng; những gì bạn đang đề xuất là cái gọi là phương pháp tiếp cận theo chiều. IIRC, cặp đôi hoạt động tốt hơn rất nhiều trong thực tế. Lý do là với xếp hạng theo cặp, bạn cần ít lần nhấp hơn: thay vì người dùng gắn nhãn tài liệu là có liên quan / không liên quan, bạn chỉ cung cấp cho họ nút "có liên quan". Sau đó, bạn tìm hiểu một trình phân loại nhị phân trên bộ ba (document1, document2, truy vấn) cho biết liệu document1 có liên quan đến truy vấn hơn document2 hay ngược lại. Khi một nhãn người dùng, giả sử, tài liệu 4 trong bảng xếp hạng có liên quan, sẽ cung cấp cho bạn sáu mẫu để học hỏi:

  • tài liệu4> tài liệu3
  • tài liệu4> tài liệu2
  • tài liệu4> tài liệu1
  • tài liệu1 <tài liệu4
  • tài liệu2 <tài liệu4
  • tài liệu3 <tài liệu4

để bạn có được những tiêu cực miễn phí.

(Đây chỉ là những gợi ý, tôi chưa từng thử bất kỳ thứ gì trong số này. Tôi tình cờ làm việc trong một nhóm nghiên cứu nơi mọi người điều tra việc học để xếp hạng. Tôi đã từng trình bày bài báo của người khác cho một nhóm đọc, có thể là slide có thể giúp đỡ.)


+1 Cảm ơn bạn. Đây là lần thứ hai bạn giúp tôi ra ngoài! Hãy để tôi mất một vài giờ để tiêu hóa này. :)
Truyền thuyết

4
Đó là một câu trả lời tuyệt vời, tôi chỉ muốn đề xuất một điều chỉnh nhỏ. Từ góc độ ux, nhiều khả năng bạn sẽ khiến người dùng ghi được kết quả bằng cách sử dụng nút "không liên quan" hơn là nút "có liên quan". Ai dính xung quanh để ghi kết quả khi họ tìm thấy thứ họ đang tìm kiếm? Họ có nhiều khả năng nhấn một nút trông giống như "cơ hội để phàn nàn" khi họ không tìm thấy những gì họ muốn, bởi vì việc cải thiện hệ thống tại thời điểm đó thực sự phù hợp với mục tiêu hiện tại của họ.
Racheet

4
tl; dr Nếu bạn sẽ chỉ sử dụng một đầu vào, làm cho nó "không liên quan", mọi người có nhiều khả năng nhấp vào nó khi họ thất vọng.
Racheet

Điều gì sẽ là cách tiếp cận "listwise"? Ngoài ra, bạn có nghĩa là 3 hoặc 6 ví dụ miễn phí? (3 cuối cùng dường như chỉ là sự lặp lại của 3 đầu tiên?)
tối đa
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.