Значением по умолчанию smartirs
является None, но если вы следуете коду, оно равно ntc .
Но как?
Во-первых, когда вы вызываете model = TfidfModel(corpus)
, он вычисляет IDF корпуса с помощью функции wglobal
, которая объясняется в документах как:
wglobal
- функция глобального взвешивания, значение по умолчанию: df2idf()
.df2idf
- это функция, которая вычисляет IDF для термина с заданной периодичностью документа.Аргумент и формула по умолчанию для df2idf
:
df2idf(docfreq, totaldocs, log_base=2.0, add=0.0)
, который реализован как:
idfs = add + np.log(float(totaldocs) / docfreq) / np.log(log_base)
Один изsmartirs определяется: взвешивание частоты документа обратно-частота документа или idf
.
wlocals
по умолчанию identity
функция,Термин частота корпусов прошел через функцию идентификации, которой ничего не произошло, и сам корпус вернулся.Следовательно, другой параметр умнее, термин частота взвешивания, является естественным или n
.Теперь, когда у нас есть термин «частота» и «частота обратного документа», мы можем вычислить tfidf:
normalize
по умолчанию true, что означает, что после вычисления TfIDF он нормализует векторы tfidf.Нормализация выполняется с помощью l2-norm
(евклидова единичная норма), что означает, что нашим последним умом является косинус или c
.Эта часть реализована следующим образом:
# vec(term_id, value) is tfidf result
length = 1.0 * math.sqrt(sum(val ** 2 for _, val in vec))
normalize_by_length = [(termid, val / length) for termid, val in vec]
При вызове model[corpus]
или model.__getitem__()
происходят следующие вещи:
__getitem__
имеет аргумент eps
, который является пороговым значением, которое удалит все записи, значения tfidf которых меньше eps
.По умолчанию это значение равно 1e-12.В результате при печати векторов появлялись только некоторые из них.