Документация Spacy для векторного сходства объясняет основную идею этого:
Каждое слово имеет векторное представление, усвоенное с помощью контекстных вложений ( Word2Vec ), которые обучаются на корпусах, как описано в документации.
Теперь вложение слова полного предложения - это просто среднее значение по всем разным словам. Если теперь у вас есть много слов, которые семантически лежат в одной и той же области (как, например, такие слова-наполнители, как «он», «был», «этот», ...), а дополнительный словарь «исключает», то вы может привести к сходству, как видно в вашем случае.
Вопрос по праву в том, что вы можете с этим поделать: с моей точки зрения, вы могли бы придумать более сложную меру подобия. Поскольку search_doc
и main_doc
имеют дополнительную информацию, например, исходное предложение, вы можете изменить векторы с помощью штрафа на разницу в длине или, альтернативно, попытаться сравнить более короткие фрагменты предложения и вычислить попарные сходства (опять же, вопрос будет какие части сравнивать).
Пока что, к сожалению, нет простого способа решить эту проблему.