Оценка когерентности 0,4 это хорошо или плохо? - PullRequest
0 голосов
/ 19 февраля 2019

Мне нужно знать, является ли показатель когерентности 0,4 хорошим или плохим?Я использую LDA в качестве алгоритма моделирования темы.

Какова средняя оценка когерентности в этом контексте.

1 Ответ

0 голосов
/ 23 апреля 2019

Когерентность измеряет относительное расстояние между словами в теме.Существует два основных типа C_V, обычно 0

  • .3 плохо

    .4 низко

    .55 нормально

    .65 может бытьхорошо, что он получит

    .7 это хорошо

    .8 маловероятно, а

    .9, вероятно, неправильно

Исправления низкой когерентности:

  • отрегулируйте ваши параметры alpha = .1, beta = .01 или .001, seed = 123, ect

  • получить более точные данные

  • в .4 у вас, вероятно, неверное количество тем, проверьте https://datascienceplus.com/evaluation-of-topic-modeling-topic-coherence/ для того, что известно как метод локтя - он дает вам графикоптимальное количество тем для наибольшей согласованности в вашем наборе данных.Я использую мушкел, у которого довольно хорошая когерентность, вот код для проверки когерентности по разному количеству тем:

def compute_coherence_values(dictionary, corpus, texts, limit, start=2, step=3):
    """
    Compute c_v coherence for various number of topics

    Parameters:
    ----------
    dictionary : Gensim dictionary
    corpus : Gensim corpus
    texts : List of input texts
    limit : Max num of topics

    Returns:
    -------
    model_list : List of LDA topic models
    coherence_values : Coherence values corresponding to the LDA model with respective number of topics
    """
    coherence_values = []
    model_list = []
    for num_topics in range(start, limit, step):
        model = gensim.models.wrappers.LdaMallet(mallet_path, corpus=corpus, num_topics=num_topics, id2word=id2word)
        model_list.append(model)
        coherencemodel = CoherenceModel(model=model, texts=texts, dictionary=dictionary, coherence='c_v')
        coherence_values.append(coherencemodel.get_coherence())

    return model_list, coherence_values
# Can take a long time to run.
model_list, coherence_values = compute_coherence_values(dictionary=id2word, corpus=corpus, texts=data_lemmatized, start=2, limit=40, step=6)
# Show graph
limit=40; start=2; step=6;
x = range(start, limit, step)
plt.plot(x, coherence_values)
plt.xlabel("Num Topics")
plt.ylabel("Coherence score")
plt.legend(("coherence_values"), loc='best')
plt.show()

# Print the coherence scores
for m, cv in zip(x, coherence_values):
    print("Num Topics =", m, " has Coherence Value of", round(cv, 4))
    
# Select the model and print the topics
optimal_model = model_list[3]
model_topics = optimal_model.show_topics(formatted=False)
pprint(optimal_model.print_topics(num_words=10))

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...