# store data in dataframe df = pd.DataFrame(video_data_list) # Load the model model = SentenceTransformer("all-mpnet-base-v2") # Encode all titles embeddings = model.encode(df['title'].to_list()) # compute similarities similarities = model.similarity(embeddings, embeddings) # match least JDs least similar to positive match as the negative match similarities_argsorted = np.argsort(similarities.numpy(), axis=1) negative_pair_index_list = [] for i in range(len(similarities)): # Start with the smallest similarity index for the current row j = 0 index = int(similarities_argsorted[i][j]) # Ensure the index is unique while index in negative_pair_index_list: j += 1 # Move to the next smallest index index = int(similarities_argsorted[i][j]) # Fetch next smallest index negative_pair_index_list.append(index) # add negative pairs to df df['title_neg'] = df['title'].iloc[negative_pair_index_list].values