Первое и третье значение в значениях строкового массива аналогично, за исключением слова Трентон, но косинусное сходство равно 0.
Точно так же 1-я, 3-я и 4-я строки - это одно и то же пространство между ЗЕЛЕНЫМ и ЧИЛИ, а косинусное сходство равно нулю разве это не странно?
Это не так странно, как вы думаете. Вы получите ненулевое сходство косинусов, только если у вас есть точные совпадения слов между сравниваемыми строками. Я постараюсь объяснить, что происходит:
Когда векторизатор TF-IDF создает векторы из вашего списка строк, он начинает с составления списка всех встречающихся слов.
Итак, в вашем случае список будет выглядеть так:
GREENCHILLI
TRENTON
GREEN
CHILLI
Теперь каждое слово становится осью в системе координат, которую использует алгоритм. Все оси перпендикулярны друг другу.
Таким образом, когда вы сравниваете «GREENCHILLI TRENTON» с «GREEN CHILLI», алгоритм создает два вектора. Один из 'GREENCHILLI TRENTON', который имеет компонент, параллельный 'GREENCHILLI', и компонент, параллельный 'TRENTON'. Вектор из строки 'GREEN CHILI' содержит компоненты в направлении 'GREEN' и 'CHILLI' вашей системы координат. Когда вы вычисляете скалярное произведение между двумя, вы получите ноль. Таким образом, косинусное сходство также равно нулю.
Таким образом, разрыв в «GREEN CHILLI» имеет все значение, если сравнивать его с «GREENCHILLI». Буквы больше не имеют значения, когда векторизатор создал свою систему координат на основе всех слов, найденных в вашем списке, потому что он идентифицирует «GREENCHILLI», «GREEN» и «CHILLI» как разные слова и превращает их в перпендикулярные оси в его эталонная система координат.
Надеюсь, это прояснит ситуацию. Я предлагаю прочитать следующую серию статей для более глубокого понимания происходящего:
http://blog.christianperone.com/2011/09/machine-learning-text-feature-extraction-tf-idf-part-i/