Hướng dẫn cosine similarity between two images python - sự tương đồng cosine giữa hai hình ảnh python

Một công cụ tuyệt vời để học máy

Ảnh của Nathan Dumlao trên unplash

Tính toán độ tương tự có thể cực kỳ hữu ích khi xây dựng các ứng dụng học máy. Nếu bạn cần phân cụm các tài liệu dựa trên mức độ tương tự của nội dung hoặc nếu bạn đang xây dựng một mô hình để khớp với hình ảnh, bạn sẽ cần một phương thức để xác định những gì và là tương tự. Nó khá dễ dàng để làm điều này bằng cách sử dụng dữ liệu số, nhưng làm thế nào để chúng tôi xác định sự giống nhau của tài liệu hoặc hình ảnh?

Sự tương tự cosine là một phương pháp tính toán sự giống nhau của hai vectơ bằng cách lấy sản phẩm DOT và chia nó cho độ lớn của mỗi vectơ, như thể hiện trong hình minh họa bên dưới: is a method of calculating the similarity of two vectors by taking the dot product and dividing it by the magnitudes of each vector, as shown by the illustration below:

Hình ảnh của tác giả

Sử dụng Python, chúng ta thực sự có thể chuyển đổi văn bản và hình ảnh thành vectơ và áp dụng cùng logic này! Scikit-learn, Pil và Numpy làm cho quá trình này trở nên đơn giản hơn. Trong bài viết này, tôi sẽ chỉ cho bạn một vài ví dụ về cách bạn có thể sử dụng sự tương đồng về cosine và cách tính toán nó bằng Python.

Sự tương đồng về cosine với dữ liệu văn bản

Quá trình chuyển đổi văn bản thành vectơ là rất phổ biến trong xử lý ngôn ngữ tự nhiên. Có nhiều cách khác nhau để vector hóa văn bản và bài viết này thực hiện một công việc tuyệt vời để giải thích một số trong số chúng. Có những ưu và nhược điểm cho từng phương pháp nhưng tất cả chúng về cơ bản đều đạt được cùng một kết quả: chuyển đổi văn bản thành các số.

Hình ảnh của nhóm Edpresso trên giáo dục.io

Hãy để thử nghiệm điều này trong Python - đầu tiên, chúng tôi sẽ cần tải dữ liệu văn bản của mình và sử dụng CountVectorzer văn bản Sklearn, để tạo vectơ này. Ví dụ này, tôi muốn so sánh hai đoạn tương tự vì vậy tôi sẽ sử dụng đoạn đầu tiên của trang Wikipedia Wikipedia và dòng đầu tiên của Bee Movie.

Ảnh chụp màn hình Notebook Jupyter của tác giả

Bây giờ chúng tôi đã có các vectơ văn bản này, chúng tôi có thể so sánh sự tương đồng và khác biệt của từng vectơ bằng cách sử dụng một phép tính được gọi là tần số tần số nghịch đảo (TFIDF). Tôi biết rằng nghe có vẻ rất khó hiểu nhưng về cơ bản, nó là một cách để đo lường mức độ độc đáo của một từ nhất định so với mọi từ khác trong một tài liệu. Điều này được tính toán theo thang điểm từ 0 trận1 với các từ phổ biến nhất tiếp cận 0 và các từ độc đáo nhất đang tiếp cận 1. Ở đây, những gì trông giống như các tài liệu ong của chúng tôi:Term Frequency Inverse Document Frequency (TFIDF). I know that sounds very confusing but it’s basically a way to measure how unique a certain word is relative to every other word in a document. This is calculated on a scale from 0–1 with the most common words approaching 0 and the most unique words approaching 1. Here’s what that looks like for our bee documents:

Khi chúng tôi có khung dữ liệu này, chúng tôi chỉ cần chạy chức năng cosine_similarity và chúng tôi sẽ có kết quả của chúng tôi

Ảnh chụp màn hình Notebook Jupyter của tác giả

Điều này có nghĩa là theo sự tương đồng về cosine, dòng đầu tiên của bộ phim Bee chỉ tương tự 19% so với đoạn đầu tiên của trang Wikipedia của Bee Bee. Điều này có vẻ thấp lúc đầu nhưng hãy so sánh tài liệu đầu tiên với một thứ khác để xem sự khác biệt.

Ảnh chụp màn hình Notebook Jupyter của tác giả

Bây giờ chúng tôi đã có các vectơ văn bản này, chúng tôi có thể so sánh sự tương đồng và khác biệt của từng vectơ bằng cách sử dụng một phép tính được gọi là tần số tần số nghịch đảo (TFIDF). Tôi biết rằng nghe có vẻ rất khó hiểu nhưng về cơ bản, nó là một cách để đo lường mức độ độc đáo của một từ nhất định so với mọi từ khác trong một tài liệu. Điều này được tính toán theo thang điểm từ 0 trận1 với các từ phổ biến nhất tiếp cận 0 và các từ độc đáo nhất đang tiếp cận 1. Ở đây, những gì trông giống như các tài liệu ong của chúng tôi:

Khi chúng tôi có khung dữ liệu này, chúng tôi chỉ cần chạy chức năng cosine_similarity và chúng tôi sẽ có kết quả của chúng tôi

Ảnh chụp màn hình Notebook Jupyter của tác giả

Điều này có nghĩa là theo sự tương đồng về cosine, dòng đầu tiên của bộ phim Bee chỉ tương tự 19% so với đoạn đầu tiên của trang Wikipedia của Bee Bee. Điều này có vẻ thấp lúc đầu nhưng hãy so sánh tài liệu đầu tiên với một thứ khác để xem sự khác biệt.

Hai tài liệu này chỉ tương tự 7,6% có ý nghĩa bởi vì từ Bee Bee, thậm chí không xuất hiện một lần trong tài liệu thứ ba.

Quá trình này có thể dễ dàng được mở rộng quy mô cho các tài liệu lớn hơn sẽ tạo ra ít chỗ cho lỗi thống kê trong tính toán. Nếu hai tài liệu 50 từ tương tự 50% thì có khả năng là do một nửa số từ là, thì đạo văn. Tương tự cosine là vô cùng hữu ích để phân tích văn bản - với tư cách là một nhà khoa học dữ liệu, bạn có thể chọn những gì % được coi là quá giống nhau hoặc không đủ giống nhau và xem việc cắt giảm ảnh hưởng đến kết quả của bạn như thế nào.

Ngoài ra còn có các phương pháp khác để xác định độ tương tự văn bản như chỉ mục Jaccard, rất tiện dụng vì nó không tính đến các từ trùng lặp.

Sự tương đồng về cosine với hình ảnh

Bạn có thể đoán rằng quá trình này rất giống với quy trình trên. May mắn thay, chúng tôi không phải làm tất cả các công cụ NLP, chúng tôi chỉ cần tải lên hình ảnh và chuyển đổi nó thành một loạt các giá trị RGB. Quá trình này khá dễ dàng nhờ Pil và Numpy! Trong ví dụ này, tôi sẽ so sánh hai hình ảnh của những con chó và sau đó so sánh một con chó với một con ếch để hiển thị sự khác biệt về điểm số.

Hình ảnh của tác giả

Sử dụng Python, chúng ta thực sự có thể chuyển đổi văn bản và hình ảnh thành vectơ và áp dụng cùng logic này! Scikit-learn, Pil và Numpy làm cho quá trình này trở nên đơn giản hơn. Trong bài viết này, tôi sẽ chỉ cho bạn một vài ví dụ về cách bạn có thể sử dụng sự tương đồng về cosine và cách tính toán nó bằng Python.

Ảnh chụp màn hình Notebook Jupyter của tác giả

Điều này có nghĩa là những hình ảnh chó tương tự 81% có ý nghĩa, chỉ bằng cách nhìn vào chúng, bạn có thể nói rằng về cơ bản chúng có cùng một chủ đề và bảng màu. Điều gì sẽ xảy ra nếu chúng ta chụp một hình ảnh hoàn toàn khác và so sánh nó với bức tranh con chó đầu tiên? Một cái gì đó như thế này:

Hình ảnh trái của Bruno Cervera trên pexels, hình ảnh bên phải của Gleb Korovko trên ảnh chụp màn hình Notebook Pexelsjupyter của tác giả

Đúng như dự đoán, hai hình ảnh này ít giống nhau hơn đáng kể so với hai hình ảnh đầu tiên. 30% vẫn còn tương đối cao nhưng đó có thể là kết quả của cả hai đều có các khu vực tối lớn ở phía trên bên trái cùng với một số điểm tương đồng nhỏ màu. Giống như với ví dụ văn bản, bạn có thể xác định mức độ cắt là gì cho một cái gì đó là tương tự đủ, điều này làm cho sự tương đồng về cosine tuyệt vời cho phân cụm và các phương thức sắp xếp khác.

Nó cũng có thể sử dụng các giá trị HSL thay vì RGB hoặc chuyển đổi hình ảnh thành đen và trắng và sau đó so sánh - chúng có thể mang lại kết quả tốt hơn tùy thuộc vào loại hình ảnh mà bạn làm việc. Cho dù bạn đang cố gắng xây dựng một thuật toán phát hiện khuôn mặt hoặc một mô hình sắp xếp chính xác hình ảnh chó từ hình ảnh ếch, sự tương tự cosine là một tính toán tiện dụng có thể thực sự cải thiện kết quả của bạn!

Sự kết luận

Tôi hy vọng bài viết này đã được giới thiệu tốt về sự tương tự cosine và một vài cách bạn có thể sử dụng nó để so sánh dữ liệu. Là các nhà khoa học dữ liệu, đôi khi chúng ta có thể quên tầm quan trọng của toán học vì vậy tôi tin rằng nó luôn luôn tốt để tìm hiểu một số lý thuyết và hiểu cách thức và lý do tại sao mã của chúng ta hoạt động. Hy vọng, bạn có thể lấy một số khái niệm từ các ví dụ này và thực hiện các dự án tuyệt vời của riêng bạn!

Nếu bạn quan tâm đến việc tìm hiểu thêm về sự tương tự cosine, tôi rất khuyến khích video YouTube này. Hoặc nếu bạn muốn tìm hiểu thêm về quy trình ngôn ngữ tự nhiên, bạn có thể xem bài viết của tôi về phân tích tình cảm. Tôi cũng rất vui khi đề cập đến nhiều chủ đề như thế này trong tương lai, hãy cho tôi biết nếu bạn có hứng thú tìm hiểu thêm về một chức năng, phương pháp hoặc khái niệm nhất định.

Cảm ơn bạn đã đọc!

Làm thế nào để bạn tìm thấy sự tương đồng giữa hai hình ảnh trong Python?

Đo điểm tương đồng trong hai hình ảnh bằng Python..
Lỗi bình phương trung bình (MSE).
Lỗi bình phương trung bình gốc (RMSE).
Tỷ lệ tín hiệu-nhiễu cực đại (PSNR).
Chỉ số tương tự cấu trúc (SSIM).
Chỉ số hình ảnh chất lượng phổ quát (UQI).
Chỉ số tương tự cấu trúc đa quy mô (MS-SSIM).
Erreur tương đối globale adimensionnelle de synthèse (ergas).

Làm thế nào để bạn mã hóa sự tương đồng về cosine trong Python?

Sự tương tự cosine là thước đo sự tương đồng giữa hai vectơ khác không của không gian sản phẩm bên trong đo cosin của góc giữa chúng. Sự tương đồng = (A.B) / (|| a ||. || b ||) trong đó a và b là vectơ.Similarity = (A.B) / (||A||. ||B||) where A and B are vectors.

Sự tương đồng về cosine cho hình ảnh là gì?

Sự tương tự cosine đo lường sự giống nhau giữa hai vectơ của không gian sản phẩm bên trong.Nó được đo bằng cosin của góc giữa hai vectơ và xác định xem hai vectơ có chỉ theo cùng một hướng hay không.measures the similarity between two vectors of an inner product space. It is measured by the cosine of the angle between two vectors and determines whether two vectors are pointing in roughly the same direction.

Làm thế nào để bạn tìm thấy sự tương đồng cosine giữa hai vectơ trong Python?

Sử dụng Scipy ...
vector1 = [1, 2, 3].
vector2 = [3, 2, 1].
cosine_similarity = 1 - không gian.khoảng cách.Cosine (Vector1, Vector2).