|
""" |
|
This file computes the scores of the generated sentences |
|
""" |
|
import numpy as np |
|
from numpy import dot |
|
from numpy.linalg import norm |
|
from textblob import TextBlob |
|
|
|
|
|
def calculate_cosine_similarity_n_gram(all_generated_lyrics, all_original_lyrics, n, word2vec): |
|
""" |
|
This function computes the similarity between 'n' words that are adjacent to each other. |
|
:param all_generated_lyrics: list of all generated lyrics |
|
:param all_original_lyrics: list of all original lyrics |
|
:param n: size of grams |
|
:param word2vec: a dictionary between word and index |
|
:return: mean similarity between the all_generated_lyrics and all_original_lyrics |
|
""" |
|
cos_sim_list = [] |
|
for song_original_lyrics, song_generated_lyrics in zip(all_original_lyrics, all_generated_lyrics): |
|
if len(song_original_lyrics) != len(song_generated_lyrics): |
|
raise Exception('The vectors are not equal') |
|
cos_sim_song_list = [] |
|
for i in range(len(song_original_lyrics) - n + 1): |
|
starting_index = i |
|
ending_index = i + n |
|
n_gram_original = song_original_lyrics[starting_index:ending_index] |
|
n_gram_generated = song_generated_lyrics[starting_index:ending_index] |
|
original_vector = np.mean([word2vec[word] for word in n_gram_original], axis=0) |
|
generated_vector = np.mean([word2vec[word] for word in n_gram_generated], axis=0) |
|
cos_sim = dot(original_vector, generated_vector) / (norm(original_vector) * norm(generated_vector)) |
|
cos_sim_song_list.append(cos_sim) |
|
cos_sim_song = np.mean(cos_sim_song_list) |
|
cos_sim_list.append(cos_sim_song) |
|
return np.mean(cos_sim_list) |
|
|
|
|
|
def calculate_cosine_similarity(all_generated_lyrics, all_original_lyrics, word2vec): |
|
|
|
cos_sim_list = [] |
|
for song_original_lyrics, song_generated_lyrics in zip(all_original_lyrics, all_generated_lyrics): |
|
original_vector = np.mean([word2vec[word] for word in song_original_lyrics], axis=0) |
|
generated_vector = np.mean([word2vec[word] for word in song_generated_lyrics], axis=0) |
|
cos_sim = dot(original_vector, generated_vector) / (norm(original_vector) * norm(generated_vector)) |
|
cos_sim_list.append(cos_sim) |
|
return np.mean(cos_sim_list) |
|
|
|
|
|
def get_polarity_diff(all_generated_lyrics, all_original_lyrics): |
|
|
|
pol_diff_list = [] |
|
for song_original_lyrics, song_generated_lyrics in zip(all_original_lyrics, all_generated_lyrics): |
|
generated_lyrics = ' '.join(song_original_lyrics) |
|
generated_blob = TextBlob(generated_lyrics) |
|
original_lyrics = ' '.join(song_generated_lyrics) |
|
original_blob = TextBlob(original_lyrics) |
|
pol_diff = abs(generated_blob.sentiment.polarity - original_blob.sentiment.polarity) |
|
pol_diff_list.append(pol_diff) |
|
return np.mean(pol_diff_list) |
|
|
|
|
|
def get_subjectivity_diff(all_generated_lyrics, all_original_lyrics): |
|
|
|
pol_diff_list = [] |
|
for song_original_lyrics, song_generated_lyrics in zip(all_original_lyrics, all_generated_lyrics): |
|
generated_lyrics = ' '.join(song_original_lyrics) |
|
generated_blob = TextBlob(generated_lyrics) |
|
original_lyrics = ' '.join(song_generated_lyrics) |
|
original_blob = TextBlob(original_lyrics) |
|
pol_diff = abs(generated_blob.sentiment.subjectivity - original_blob.sentiment.subjectivity) |
|
pol_diff_list.append(pol_diff) |
|
return np.mean(pol_diff_list) |
|
|
|
|
|
print("Loaded Successfully") |
|
|