Я пытаюсь часами выяснить, как вычислить сходство между двумя строками с весовым коэффициентом сходства косинусов по tf idf:
s1 = bob s2 = rob
Мой сплитУсловия будут б, о и р.Таким образом, я получаю следующий термин Frequencys (конкретный термин в документе / все термины в документе):
TF(s1, b) = 2/3
TF(s1, o) = 1/3
TF(s1, r) = 0/3
TF(s2, b) = 1/3
TF(s2, o) = 1/3
TF(s2, r) = 1/3
Теперь IDF (количество всех документов / количество документов с термином в нем) будет:
IDF(b) = log(2/2) = 0
IDF(o) = log(2/2) = 0
IDF(r) = log(2/1) = 0,3010
Это приводит меня к if-idf (if * idf):
TF-IDF(s1, b) = 0
TF-IDF(s1, o) = 0
TF-IDF(s1, r) = 0
TF-IDF(s2, b) = 0
TF-IDF(s2, o) = 0
TF-IDF(s2, r) = 1/3 * 0.3010 = 0.1
Так что мои Vecors выглядят так: sx (b, o, r) s1 (0,0,0) s2 (0,0,0.1)
Так что теперь, если я использую формулу косинусного сходства, она возвращает сходство 0.
На мой вопрос: TF-IDF можно использовать только для нескольких документов?Является ли косинус-сходство с весом в TF-IDF только для больших терминов, таких как слова?Что насчет биграмм, могу ли я использовать биграммы для лучшего результата?Даже когда я пытаюсь сравнить строки «Мистер Смит» и «Мистер Смит», разделенные на «Термины слова» (также называемые атомарной строкой), я просто получаю результаты с мусором.
Я имею в виду некоторые статьи, в которыхиспользуйте Cosine вместе с IF-IDF для сходства строк: Соответствие заголовка Например
Спасибо