Hướng dẫn semantic similarity between sentences python - sự giống nhau về ngữ nghĩa giữa các câu python

Trong xử lý ngôn ngữ tự nhiên, hiểu ý nghĩa (ngữ nghĩa) của một kho văn bản (văn bản) là điều cần thiết. Nhưng làm thế nào máy tính có thể có được ý nghĩa từ văn bản nếu máy tính có thể đọc được? Làm thế nào họ có thể tìm thấy những câu có số liệu tương tự tương tự nếu chúng, một lần nữa, có thể đọc được không?

Hoàn thành sự tương đồng về ngữ nghĩa giữa các câu được mã hóa trong Python ở phía dưới

Ngữ nghĩa có nghĩa là gì trong khoa học máy tính

Ngữ nghĩa trong khoa học máy tính là lý do toán học đằng sau một chuỗi pháp lý được xác định bởi một ngôn ngữ lập trình. Đây là đối nghịch của cú pháp, các quy tắc quản lý chương trình của bạn. Nó dễ dàng nhất để nghĩ về cú pháp như cấu trúc và ngữ nghĩa là ý nghĩa.

Sự khác biệt giữa cú pháp và ngữ nghĩa là gì

Hiểu được sự khác biệt giữa cú pháp và ngữ nghĩa là dễ dàng nhất để xem với một ví dụ.

Đây là một chức năng mà cú pháp là hoàn hảo nhưng về mặt ngữ nghĩa không có ý nghĩa gì.

Hướng dẫn semantic similarity between sentences python - sự giống nhau về ngữ nghĩa giữa các câu python

Tại sao bạn lại trả lại mức tối thiểu trong bối cảnh này? Là chức năng có tên sai? Thuật toán có sai không?

Đây là một chức năng mà về mặt ngữ nghĩa có ý nghĩa hoàn hảo nhưng về mặt cú pháp là sai.

Hướng dẫn semantic similarity between sentences python - sự giống nhau về ngữ nghĩa giữa các câu python

Như chúng ta có thể thấy, ngữ nghĩa (trong khoa học máy tính) chỉ quan tâm đến ý nghĩa thực tế đằng sau mã.

Mặc dù bạn có thể tuân theo tất cả các quy tắc của ngôn ngữ lập trình cụ thể của mình (Python trong ví dụ này), chương trình của bạn không có ý nghĩa hoặc sai.

Và trái với ví dụ trước, mã của bạn có thể có ý nghĩa hoàn hảo, nhưng không tuân theo cú pháp (cấu trúc) được ủy quyền bởi trình biên dịch của bạn, bạn sẽ không bao giờ có thể có mã hoạt động.

Xử lý ngôn ngữ tự nhiên là gì

Xử lý ngôn ngữ tự nhiên là một nhánh của khoa học máy tính cho phép máy tính uống, so sánh và lấy ý nghĩa từ ngôn ngữ con người. Ngôn ngữ tự nhiên dựa vào các lĩnh vực ngôn ngữ học và khoa học máy tính để tạo ra các mô hình từ văn bản và lời nói.

Hướng dẫn semantic similarity between sentences python - sự giống nhau về ngữ nghĩa giữa các câu python

Chúng ta lấy dữ liệu để xử lý ngôn ngữ tự nhiên ở đâu

Một trong những cách tốt nhất để đạt được các mô hình NLP giống như con người (xử lý ngôn ngữ tự nhiên) là sử dụng dữ liệu văn bản từ phương tiện truyền thông xã hội. Điều này là do con người gõ một cách tình cờ hơn và tự nhiên trên các nền tảng truyền thông xã hội. Các mô hình như GPT-3 cũng đã tận dụng Wikipedia và các nguồn khác.

Sự tương đồng ngữ nghĩa được đo lường như thế nào trong một câu?

Sự tương đồng về ngữ nghĩa được đo trong một câu bằng khoảng cách cosin giữa hai vectơ nhúng. Mặc dù nhiều người nghĩ rằng tính toán này rất phức tạp, việc tạo ra từ hoặc câu nhúng phức tạp hơn nhiều so với tính toán cosin.

Trong khi nhiều người (sai) tin rằng khoảng cách Euclide và sự tương tự cosine là như nhau, nhưng họ đã tính toán hai điều khác nhau.

Nó dễ dàng nhất để xem với một bức ảnh đáng kinh ngạc mà tôi đã vẽ trong PowerPoint.

Hãy nghĩ về mỗi câu như một vector được ánh xạ vào một số không gian con.

Hướng dẫn semantic similarity between sentences python - sự giống nhau về ngữ nghĩa giữa các câu python

Mặc dù các vectơ này cường độ (hoặc chiều dài) này có thể phát triển đến vô số hoặc đảm nhận bất kỳ giá trị nào lớn hơn 0, sự tương đồng cosin của chúng sẽ không thay đổi.

Điều này thật ý nghĩa; Nếu một câu sử dụng từ chó con chó 15 lần và câu còn lại chỉ sử dụng nó hai lần, những câu này vẫn có liên quan đến từ chó con chó.

Sự tương đồng về cosine cũng tận dụng thực tế là các tài liệu có thể có độ dài khác nhau vì độ dài của các vectơ không quan trọng sau khi bình thường hóa.

Tuy nhiên, khi chiều dài của bạn tăng lên, khoảng cách Euclide của bạn sẽ thay đổi.

Điều này cũng có ý nghĩa; Chúng ta có thể bình thường hóa mọi vectơ trong những thứ như phân loại văn bản, vì có thông tin quan trọng thu được từ việc biết nếu có một cái gì đó được đề cập năm hoặc ba lần.

Sự tương đồng về văn bản là gì?

Sự tương đồng về văn bản là một thành phần của xử lý ngôn ngữ tự nhiên giúp chúng ta tìm thấy các đoạn văn bản tương tự, ngay cả khi kho văn bản (câu) có các từ khác nhau. Mọi người có thể thể hiện cùng một khái niệm theo nhiều cách khác nhau và sự tương đồng về văn bản cho phép chúng ta tìm thấy mối quan hệ chặt chẽ giữa các câu này vẫn còn.

Hãy suy nghĩ về hai câu sau:

“Các chuyến tàu rời đi sau khi 12”

“Chúng tôi khởi hành vào khoảng 10 sau 12”

Mặc dù những câu này hầu như không sử dụng các từ chính xác, nhưng chúng rất giống nhau về mặt ngữ nghĩa, trong khi sự tương đồng từ vựng của chúng gần như không tồn tại.

Từ nhúng là gì?

Phần quan trọng nhất của xử lý ngôn ngữ tự nhiên là vector nhúng. Cách chúng tôi tính toán các vectơ từ và vectơ câu của chúng tôi là rất quan trọng đối với độ chính xác của các mô hình của chúng tôi.

Word2Vec và Word nhúng

Word2VEC là một mô hình học máy tạo ra các từ nhúng. Đưa ra từ này, chúng ta có thể xây dựng các vectơ đại diện (một mảng số) sẽ đại diện cho từ này.

May mắn cho chúng tôi, Word2VEC được đào tạo trước trên dữ liệu của Google News.

Mặc dù bạn có thể đào tạo các bản nhúng Word2VEC của mình, bạn sẽ có thời gian tốt hơn khi sử dụng những cái được đào tạo trước.


# load a word2vec model in python using gensim, load their spec
import gensim.downloader as api

word2vec = api.load('word2vec-google-news-300')

word2vec['dog']

Hướng dẫn semantic similarity between sentences python - sự giống nhau về ngữ nghĩa giữa các câu python

Mặc dù chúng ta có nhiều hơn về những nhược điểm của Word2VEC trong bài viết này, việc tạo ra các bản nhúng ở cấp từ để lại một vấn đề đơn giản để hiểu.

Hãy xem các cặp câu ở đây:

Nhà động vật học thích học dơibats

Cầu thủ bóng chày rất buồn, anh ấy tiếp tục phá vỡ những con dơi của mìnhbats

Bạn chỉ mất 1-2 giây để nhận ra những câu này không nói về điều tương tự, và mặc dù dơi là cùng một từ, nhưng nó có hai ý nghĩa khác nhau.bats are the same word, it has two different meanings.

Vì vậy, tạo ra các vectơ này chỉ từ các từ riêng lẻ không phải là câu trả lời; Cách chúng ta có thể cải thiện ý tưởng nhúng từ là gì?

Nhúng câu là gì?

Việc nhúng câu là quá trình đại diện cho một câu dưới dạng vector. Việc nhúng câu có nhiều khái niệm từ việc nhúng từ và biểu diễn vectơ, nhưng thay vì nhìn vào mỗi từ bị cô lập, nó nhìn vào từng từ trong bối cảnh của mỗi câu.

Trong ví dụ trên, tất cả những gì chúng ta đã xem xét là mỗi từ tự bị cô lập để có được một không gian nhúng cho nó.

Ý tưởng sử dụng toàn bộ câu sẽ cho phép truy xuất thông tin tốt hơn?

Sự sụp đổ của tần số tài liệu-ngược tần số (TF-IDF)

Tần số tần số- Tần số tài liệu nghịch đảo (TF-IDF) kết hợp hai chủ đề khác nhau. Điều này kết hợp tần số thuật ngữ, số lần từ xuất hiện trong một tài liệu và ý tưởng đằng sau tần số tài liệu, đếm số lượng tài liệu có từ đó.

Một cái gì đó gây nhầm lẫn cho nhiều người là giá trị TFIDF cho một từ cụ thể là cụ thể cho một tài liệu d.

Trong khi giá trị IDF (tần số tài liệu nghịch đảo) là giá trị cho toàn bộ kho văn bản.

Mặc dù toán học khá phức tạp khá nhanh, TF-IDF thường có thể trả lời câu hỏi, nhưng chủ đề này quan trọng như thế nào từ kho văn bản của tôi tại D1 so với D2.

Trong khi điều này sẽ khiến chúng ta gần gũi với sự tương đồng về văn bản, nó đặt ra một số vấn đề.

Sử dụng ý tưởng đằng sau tf-idf, hai câu

DOC1: Con cáo nâu nhanh đang đói và nhảy qua hàng rào.

DOC2: Con cáo nâu nhanh, trong khi trốn thoát, nhảy qua hàng rào.

Nếu bạn đã tính toán TF-IDF cho Fox Fox cho mỗi câu này, thì Fox Fox có liên quan như nhau cho cả tài liệu 1 và tài liệu 2.

Hướng dẫn semantic similarity between sentences python - sự giống nhau về ngữ nghĩa giữa các câu python

Mặc dù điều này giúp với điểm số tương tự giữa hai tài liệu (câu) này, nhưng họ không thảo luận về điều tương tự.

Trong một kịch bản, con cáo đã cố gắng ăn và nhảy qua hàng rào.

Trong câu khác, con cáo bỏ chạy khi nó nhảy qua hàng rào.

Mặc dù chúng tôi đang tiến gần đến sự tương đồng về ngữ nghĩa, nhưng chúng tôi vẫn chưa có.

Tạo câu nhúng với Bert

Bert là một thuật toán NLP được đào tạo trước hiện đại. Bert (các biểu diễn bộ mã hóa hai chiều từ Transformers) tận dụng cả hai bối cảnh đọc và đọc bên phải trong tất cả các lớp mô hình. Điều này tạo ra một mô hình có thể trở nên chính xác cao chỉ với một lớp đầu ra ở giữa.

Mặc dù bạn có thể dạy cả một lớp về Bert và những cải tiến của nó (theo nghĩa đen) mọi thứ trong lĩnh vực này, nhưng nó dễ dàng hơn nhiều khi đọc bài báo của họ.

Nhược điểm của Bert trong câu tương tự

Trong khi Bert đạt được hiệu suất hiện đại trên tất cả các tác vụ cặp câu, cả hai câu phải được đưa vào mạng. Chi phí tính toán của điều này là cực đoan. Tìm kiếm một cặp câu tương tự ngữ nghĩa nhất trong tài liệu 10.000 câu sẽ mất khoảng 65 giờ.

Hướng dẫn semantic similarity between sentences python - sự giống nhau về ngữ nghĩa giữa các câu python

Vì vậy, bây giờ chúng tôi có độ chính xác và mô hình hiện đại, nhưng chúng tôi thiếu tốc độ.

Chúng tôi rõ ràng có thể dành 65 giờ cho một tài liệu 10.000 câu.

Chúng ta làm gì?

Những cải tiến được thực hiện bởi câu-Bert

Câu-Bert (SBERT) tận dụng hiệu suất hiện đại từ Bert, với một kiến ​​trúc khác. Điều này cho phép những thứ như tương tự cosine được tìm thấy nhanh hơn nhiều. Ví dụ, tìm kiếm tương tự câu 65 giờ ở Bert sẽ mất 5 giây với Sbert.

Trong khi tôi chỉ giới thiệu một chút về bạn về chủ đề này, Sbert là một bài báo phải đọc khác. Bạn có thể tìm thấy tờ giấy đó ở đây.

Bây giờ chúng ta có độ chính xác, mô hình hiện đại và tốc độ.

Chúng tôi chỉ cần mã!

Làm thế nào để bạn so sánh sự giống nhau câu giữa hai câu trong Python?


# comparing the two sentences using SBERT and Cosine Similarity

# here's the install command
#!pip install -U sentence-transformers
import pandas as pd
from sentence_transformers import SentenceTransformer, util


# load our Sentence Transformers model pre trained!!
model = SentenceTransformer('all-MiniLM-L6-v2')


# as always, we will get sentences from a 
# public kaggle dataset
# https://www.kaggle.com/datasets/columbine/imdb-dataset-sentiment-analysis-in-csv-format?resource=download
df = pd.read_csv('imbd_train_dataset.csv')

# while this data has lots of good info, we just need the reviews
# let's grab 2000

# in real-life, you should not clean data like this
# since this wasn't a data cleaning tutorial I didn't want to bloat
# the code

# this is not production ready data!!
sentences = [sentence.lower()\
             .replace('br','')\
             .replace('<',"")\ .replace(">","")\
             .replace('\\',"")\
             .replace('\/',"")\
             for sentence in df.text.sample(n=2000)]

#see a sentence, and our length
print(sentences[5:6], f'\n\nLength Of Data {len(sentences)}')

Hướng dẫn semantic similarity between sentences python - sự giống nhau về ngữ nghĩa giữa các câu python


# lets find the semantically closest sentence to a random sentence
# that we come up with, in our dataset

# i like action movies, mission impossible is one of my favorites
our_sentence = 'I really love action movies, huge tom cruise fan!'

# lets embed our sentence
my_embedding = model.encode(our_sentence)

# lets embed the corpus
embeddings = model.encode(sentences)

#Compute cosine similarity between my sentence, and each one in the corpus
cos_sim = util.cos_sim(my_embedding, embeddings)

# lets go through our array and find our best one!
# remember, we want the highest value here (highest cosine similiarity)
winners = []
for arr in cos_sim:
    for i, each_val in enumerate(arr):
        winners.append([sentences[i],each_val])

# lets get the top 2 sentences
final_winners = sorted(winners, key=lambda x: x[1], reverse=True)



for arr in final_winners[0:2]:
    print(f'\nScore : \n\n  {arr[1]}')
    print(f'\nSentence : \n\n {arr[0]}')

Hướng dẫn semantic similarity between sentences python - sự giống nhau về ngữ nghĩa giữa các câu python

Hãy cho tôi biết nếu bạn có bất kỳ ý tưởng những bộ phim này là gì.

Họ nghe như những người tốt!

  • Tác giả
  • Bài viết gần đây

Hướng dẫn semantic similarity between sentences python - sự giống nhau về ngữ nghĩa giữa các câu python

Dylan Kaplan có nhiều năm kinh nghiệm với tư cách là một nhà khoa học dữ liệu cao cấp. Ông thích mã hóa và giảng dạy và đã tạo ra trang web này để làm cho mọi người có thể học máy.

Hướng dẫn semantic similarity between sentences python - sự giống nhau về ngữ nghĩa giữa các câu python

Làm thế nào để bạn tìm thấy sự tương đồng về ngữ nghĩa giữa hai câu?

Cách dễ nhất để ước tính sự tương đồng về ngữ nghĩa giữa một cặp câu là lấy trung bình của từ nhúng của tất cả các từ trong hai câu và tính toán cosin giữa các bản nhúng kết quả.taking the average of the word embeddings of all words in the two sentences, and calculating the cosine between the resulting embeddings.

Làm thế nào để bạn tìm thấy sự giống nhau của hai câu 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.

Làm thế nào để bạn kiểm tra xem một câu có tương tự trong Python không?

Xem cách mã Python hoạt động để tìm sự tương tự câu..
Lấy hai chuỗi làm đầu vào ..
Tạo mã thông báo ra khỏi các chuỗi đó ..
Khởi tạo hai danh sách trống ..
Tạo các vectơ ra khỏi mã thông báo và nối chúng vào danh sách ..
So sánh hai danh sách bằng công thức cosine ..
In kết quả ..

Làm thế nào để bạn tính toán sự tương đồng ngữ nghĩa?

Sự tương đồng ngữ nghĩa được tính toán dựa trên hai vectơ ngữ nghĩa.Một vectơ thứ tự được hình thành cho mỗi câu xem xét sự giống nhau cú pháp giữa các câu.Cuối cùng, độ tương tự ngữ nghĩa được tính toán dựa trên các vectơ ngữ nghĩa và vectơ thứ tự.based on two semantic vectors. An order vector is formed for each sentence which considers the syntactic similarity between the sentences. Finally, semantic similarity is calculated based on semantic vectors and order vectors.