Cách xây dựng tìm kiếm ngữ nghĩa cho một miền nhất định


19

Có một vấn đề chúng tôi đang cố gắng giải quyết nơi chúng tôi muốn thực hiện tìm kiếm ngữ nghĩa trên bộ dữ liệu của mình, tức là chúng tôi có dữ liệu cụ thể theo miền (ví dụ: câu nói về ô tô)

Dữ liệu của chúng tôi chỉ là một loạt các câu và điều chúng tôi muốn là đưa ra một cụm từ và lấy lại các câu đó là:

  1. Tương tự với cụm từ đó
  2. Có một phần của câu tương tự như cụm từ
  3. Một câu có ý nghĩa tương tự theo ngữ cảnh


Hãy để tôi thử cho bạn một ví dụ giả sử tôi tìm kiếm cụm từ "Mua kinh nghiệm", tôi sẽ nhận được các câu như:

  • Tôi không bao giờ nghĩ rằng mua xe có thể mất ít hơn 30 phút để ký và mua.
  • Tôi tìm thấy một chiếc xe mà tôi thích và quá trình mua rất
    đơn giản và dễ dàng

  • Tôi hoàn toàn ghét đi mua sắm xe hơi, nhưng hôm nay tôi rất vui vì đã làm


Tôi muốn nhấn mạnh vào thực tế rằng chúng ta đang tìm kiếm sự tương đồng theo ngữ cảnh và không chỉ là một tìm kiếm từ ngữ vũ phu.

Nếu câu sử dụng các từ khác nhau thì nó cũng có thể tìm thấy nó.

Những điều mà chúng tôi đã thử:

  1. Tìm kiếm ngữ nghĩa mở , vấn đề chúng ta gặp phải ở đây là tạo ra bản thể học từ dữ liệu chúng ta có hoặc vì mục đích tìm kiếm bản thể học có sẵn từ các lĩnh vực khác nhau mà chúng ta quan tâm.

  2. Tìm kiếm đàn hồi (BM25 + vectơ (tf-idf)), chúng tôi đã thử điều này khi nó đưa ra một vài câu nhưng độ chính xác không phải là tuyệt vời. Độ chính xác là xấu. Chúng tôi đã cố gắng chống lại một bộ dữ liệu do con người quản lý, nó chỉ có thể nhận được khoảng 10% số câu.

  3. Chúng tôi đã thử các cách nhúng khác nhau như đã từng được đề cập trong các máy biến áp câu và cũng đã xem qua ví dụ và thử đánh giá theo tập hợp con người của chúng tôi và điều đó cũng có độ chính xác rất thấp.

  4. Chúng tôi đã thử ELMO . Điều này tốt hơn nhưng vẫn có độ chính xác thấp hơn chúng tôi dự kiến ​​và có một tải nhận thức để quyết định giá trị cosin dưới đây mà chúng ta không nên xem xét các câu. Điều này thậm chí áp dụng cho điểm 3.

Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn rất nhiều vì sự giúp đỡ trước


Câu hỏi được viết tốt - bạn có thể thêm 5 ví dụ về thuật ngữ tìm kiếm không? Có phải chúng luôn luôn là một đến ba cụm từ hoặc cụm từ tìm kiếm có thể dài hơn không? Bạn đang đi đúng hướng
Adnan S

Xin chào Adnan, cụm từ tìm kiếm sẽ luôn là cụm từ một đến ba từ. Vd: kinh nghiệm mua hàng, sự thoải mái khi lái xe, hệ thống thông tin giải trí, nội thất, quãng đường, hiệu suất, sự thoải mái khi ngồi, hành vi của nhân viên.
Jickson

Bài viết này có thể thú vị với trường hợp của bạn: thun.co / blog / Sự (gợi ý: đòn bẩy word2vec)
Val

@Val Điều này thực sự thú vị khi tôi sẽ đề cập đến cùng một bài viết mà bạn đã đề cập và sau đó thấy bình luận của bạn. Tôi nghĩ phương pháp này sẽ giúp bạn đến gần hơn với những gì bạn muốn.
nima

bạn có thể muốn nhìn vào sự tương tự cosine. Như được giải thích dưới đây, nó liên quan đến việc chuyển đổi các chuỗi thành các vectơ có thể được biểu diễn trong không gian 2D. Góc cosin của 2 vectơ đó được tính toán. Góc này đại diện cho "sự tương đồng" giữa 2 chuỗi. Đây là một bài viết hay trên nó Medium.com/swlh/playing-with-word-vector-308ab2faa519
sagar1025

Câu trả lời:


5

Tôi đặc biệt khuyên bạn nên xem bài giảng của Trey Grainger về cách xây dựng hệ thống tìm kiếm ngữ nghĩa => https://www.youtube.com/watch?v=4fMZnunTRF8 . Ông nói về giải phẫu của một hệ thống tìm kiếm ngữ nghĩa và từng mảnh được sử dụng để khớp với nhau để đưa ra một giải pháp cuối cùng.

Một ví dụ tuyệt vời về sự tương đồng theo ngữ cảnh là công cụ tìm kiếm của Bing: nhập mô tả hình ảnh ở đây

Truy vấn ban đầu có các thuật ngữ {soda đóng hộp} và kết quả tìm kiếm của bing có thể đề cập đến {soda ăn kiêng đóng hộp}, {nước ngọt}, {nhiệt độ phòng chưa mở pop} hoặc {đồ uống có ga}. Làm thế nào mà bing làm điều này?

Chà, những từ có ý nghĩa tương tự có các vectơ tương tự và sau đó những vectơ này có thể được chiếu lên biểu đồ 2 chiều để dễ dàng hình dung. Các vectơ này được đào tạo bằng cách đảm bảo các từ có ý nghĩa tương tự gần nhau về mặt vật lý. Bạn có thể đào tạo mô hình dựa trên vector của riêng mình bằng cách đào tạo mô hình GloVenhập mô tả hình ảnh ở đây

Khoảng cách của các vectơ càng gần nhau càng tốt. Bây giờ bạn có thể tìm kiếm các truy vấn lân cận gần nhất dựa trên khoảng cách của vectơ của chúng. Ví dụ: đối với truy vấn {cách ngăn động vật phá hủy khu vườn của tôi}, người hàng xóm gần nhất đưa ra các kết quả sau:

nhập mô tả hình ảnh ở đây

Bạn có thể tìm hiểu thêm về nó ở đây. Đối với trường hợp của bạn, bạn có thể tìm thấy một ngưỡng cho khoảng cách tối đa một vectơ của câu có thể từ truy vấn tìm kiếm ban đầu để xem xét một câu tương tự theo ngữ cảnh.

Sự tương đồng theo ngữ cảnh cũng có thể được thực hiện bằng cách giảm kích thước từ vựng bằng cách sử dụng cái gì đó như LSI (Lập chỉ mục ngữ nghĩa tiềm ẩn). Để thực hiện điều này trong Python, tôi khuyên bạn nên kiểm tra thư viện genism cho python: https://radimrehurek.com/gensim/about.html .


1

Bạn có thể quan tâm đến việc tìm hiểu về Weaviate để giúp bạn giải quyết vấn đề này. Nó là một biểu đồ thông minh dựa trên vector hóa các đối tượng dữ liệu .

Nếu bạn có ngôn ngữ dành riêng cho tên miền (ví dụ: viết tắt), bạn có thể mở rộng Weaviate với các khái niệm tùy chỉnh .

Bạn có thể giải quyết vấn đề của mình bằng các tính năng tìm kiếm ngữ nghĩa (nghĩa là Explore{}) hoặc các tính năng phân loại tự động.

Khám phá chức năng

Vì tất cả các đối tượng dữ liệu được vector hóa, bạn có thể thực hiện tìm kiếm ngữ nghĩa như sau (ví dụ này xuất phát từ các tài liệu , bạn có thể dùng thử ở đây bằng GraphQL):

{
  Get{
    Things{
      Publication(
        explore: {
          concepts: ["fashion"],
          certainty: 0.7,
          moveAwayFrom: {
            concepts: ["finance"],
            force: 0.45
          },
          moveTo: {
            concepts: ["haute couture"],
            force: 0.85
          }
        }
      ){
        name
      }
    }
  }
}

Nếu bạn cấu trúc lược đồ đồ thị của mình dựa trên -cho ví dụ- tên lớp "Câu", một truy vấn tương tự có thể trông giống như thế này:

{
  Get{
    Things{
      Sentence(
        # Explore (i.e., semantically) for "Buying Experience"
        explore: {
          concepts: ["Buying Experience"]
        }
        # Result must include the word "car" 
        where: {
          operator: Like
          path: ["content"]
          valueString: "*car*"
        }
      ){
        content
      }
    }
  }
}

Lưu ý:
Bạn cũng có thể khám phá toàn bộ biểu đồ .

Phân loại tự động

Một sự thay thế có thể đang làm việc với các tính năng phân loại theo ngữ cảnh hoặc KNN .

Trong trường hợp của bạn, bạn có thể sử dụng lớp Câu và liên kết chúng với một lớp có tên là Trải nghiệm, có thuộc tính: buying(tất nhiên có nhiều cấu hình và chiến lược khác bạn có thể chọn).

PS:
Video này cung cấp thêm một chút bối cảnh nếu bạn thích.


0

Theo như tôi biết, tôi không nghĩ có bất kỳ mô hình lý thuyết nào tồn tại để xây dựng một công cụ tìm kiếm ngữ nghĩa. Tuy nhiên, tôi tin rằng một công cụ tìm kiếm ngữ nghĩa nên được thiết kế để phục vụ các yêu cầu cụ thể trong tay. Phải nói rằng, bất kỳ công cụ tìm kiếm ngữ nghĩa nào có thể hiểu thành công ý định của người dùng cũng như bối cảnh của thuật ngữ tìm kiếm, cần phải làm việc với xử lý ngôn ngữ tự nhiên (NLP) và học máy như các khối xây dựng.

Mặc dù các công cụ tìm kiếm hoạt động khác với các công cụ tìm kiếm, bạn có thể tham khảo các công cụ tìm kiếm doanh nghiệp để có ý tưởng về mô hình tìm kiếm ngữ nghĩa hoạt động. Các nền tảng thời đại mới như 3RDi Search hoạt động dựa trên các nguyên tắc tìm kiếm ngữ nghĩa và đã được chứng minh là giải pháp lý tưởng cho dữ liệu phi cấu trúc mà doanh nghiệp phải xử lý. Google rất có thể đang làm việc trên một mô hình để giới thiệu ngữ nghĩa nâng cao trong công cụ tìm kiếm.

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.