Косинус - сходство TF-IDF между двумя строками - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь часами выяснить, как вычислить сходство между двумя строками с весовым коэффициентом сходства косинусов по 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 для сходства строк: Соответствие заголовка Например

Спасибо

...