2016-09-26 21 views
3

я искал в Интернете о нормализации оценки Tf на случаи, когда длины документов, очень разные (например, имеющие длины документов варьируются от 500 слов до 2500 слов)тс-IDF документов различной длины

единственная нормализация, которую я нашел, говорит о делении частоты термина в длине документа, и, следовательно, длина документа не имеет никакого значения.

Этот метод, хотя и является очень плохим для нормализации tf. если таковые имеются, это приводит к тому, что оценки tf для каждого документа имеют очень большое смещение (если все документы не составлены из почти одного и того же словаря, что не является случаем при использовании tf-idf)

, например, позволяет взять 2 документы - один из 100 уникальных слов, а другой из 1000 уникальных слов. каждое слово в doc1 будет иметь ТФ 0,01 в то время как в doc2 каждое слово будет иметь ТФ 0,001

это приводит к ТФ-IDF классов автоматически будет больше при сопоставлении слов с doc1 чем doc2

у кого-нибудь есть какой-либо стимулирование более подходящей нормализующей формулы?

спасибо

редактировать я также видел способ о том, что мы должны разделить термин частоту максимального члена частоты дока для каждого дока это также разве решение моей проблемы

что я думал, вычисляет максимальную частоту диапазона из всех документов, а затем нормализует все термины путем деления каждой термической частоты на максимум

с нетерпением будут знать, что вы думаете

ответ

1

Какова цель вашего анализа?

Если ваша конечная цель - сравнить сходство между документами (et simila), вы не должны беспокоиться о длине документа на этапе вычисления tfidf. Вот почему.

tfidf представляет ваши документы в общем векторном пространстве. Если вы затем вычислите подобие косинуса между этими векторами, то подобие косинуса компенсирует влияние длины разных документов. Причина в том, что сходство косинусов оценивает ориентацию векторов, а не их величину. Я могу показать вам точку с питоном: Рассмотрим следующие (тупые) документы

document1 = "apple apple banana" 
document2 = "apple apple apple apple banana banana" 

documents = (
    document1, 
    document2) 

Длина этих документов различна, но их содержание идентично. Точнее, относительные распределения членов в двух документах идентичны, но абсолютные термы не являются.

Теперь мы используем tfidf, чтобы представить эти документы в общем векторном пространстве:

from sklearn.feature_extraction.text import TfidfVectorizer 
tfidf_vectorizer = TfidfVectorizer() 
tfidf_matrix = tfidf_vectorizer.fit_transform(documents) 

И мы используем косинус сходства оценить сходство этих векторизованных документов, глядя только на своих направлениях (или ориентации), не заботясь об их величинах (то есть их длине). Я оцениваю косинус сходства между документом и одним документом два:

from sklearn.metrics.pairwise import cosine_similarity 
cosine_similarity(tfidf_matrix[0], tfidf_matrix[1]) 

Результатом 1. Помните, что сходство косинусов между двумя векторами равно 1, когда два вектора имеют точно такую ​​же ориентацию, 0, когда они ортогональны и -1, когда векторы имеют противоположную ориентацию.

В этом случае вы можете видеть, что на подобие косинуса не влияет длина документов и фиксируется тот факт, что относительное распределение терминов в ваших оригинальных документах идентично! Если вы хотите, чтобы выразить эту информацию как «расстояние» между документами, то вы можете просто сделать:

1 - cosine_similarity(tfidf_matrix[0], tfidf_matrix[1]) 

Это значение будет стремиться к 0, когда документы аналогичны (вне зависимости от их длины) и 1, когда они отличаются друг от друга.