NLP/ TF-IDF: Ошибка значения: Значение истинности массива, содержащего более одного элемента, неоднозначно. Используйте.any() или. all()

#python #pandas #numpy #nlp #tf-idf

Вопрос:

Я использую TF-IDF для создания системы рекомендаций на основе контента, я получаю эту ошибку при попытке реализовать функцию для вывода фактических рекомендаций модели TF-IDF, которую я построил. Приношу извинения за форматирование, я новичок в этом:

 
# Build a 1-dimensional array with book titles
titles = new_df['Movie Title']
indices = pd.Series(new_df.index, index=new_df['Movie Title'])

# Function that takes in movie title as input and outputs most similar movies
def get_recommendations(title):
    
    # Get the index of the movie that matches the title
    idx = indices[title]

    # Get the pairwsie similarity scores of all movies with that movie
    sim_scores = list(enumerate(cosine_sim[idx]))

    # Sort the movies based on the similarity scores
    sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)

    # Get the scores of the 10 most similar movies
    sim_scores = sim_scores[1:11]

    # Get the movie indices
    movie_indices = [i[0] for i in sim_scores]

    # Return the top 10 most similar movies
    return new_df['Movie Title'].iloc[movie_indices]

Next code block:

 get_recommendations('The Hangover')

 get_recommendations.head(10)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-23-4e788498ba09> in <module>
----> 1 get_recommendations('The Hangover')
      2 get_recommendations.head(10)

<ipython-input-22-98000fdd3df8> in get_recommendations(title)
     13 
     14     # Sort the movies based on the similarity scores
---> 15     sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
     16 
     17     # Get the scores of the 10 most similar movies

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

 

Комментарии:

1. Возможно, вам потребуется проверить значение x[1] . В этой статье в блоге есть хорошее объяснение: akashmittal.com/valueerror-truth-value-array-ambiguous

2. У него возникают проблемы при < сравнении типов значений, которые вы пытаетесь отсортировать. На что это sim_scores похоже, или вы предпочитаете indices серию, из которой она получена?

Ответ №1:

Эта ошибка может быть, когда есть одно и то же название фильма с разным индексом, то есть, допустим, название фильма «Крестный отец», поэтому возможно, что у него есть :

 movie  title          index
The    Godfather      0
The    Godfather      1
The    Godfather      2
 

Поэтому, чтобы преодолеть эту проблему, удалите повторяющиеся значения из фрейма данных, а затем запустите программу, которую он должен запустить.

 new_df.drop_duplicates(subset=['Movie Title'])