---
title: TF-IDF
seo:
  title: TF-IDF — Data Scientist
  description: Тема «TF-IDF» для собеседования Data Scientist. Написать TF-IDF функцию. Рассказать про модификацию TF-IDF под названием BM25 как работает?
---

[Все темы Data Scientist](/data-scientist)

## <strong>Написать</strong> <code>TF&#45;IDF</code> <strong>функцию.</strong> [#q-14bee738d69b811d8be4c931bddb7292]

<strong>Решение&#58;</strong>

```python
import math

def tfidf(term, document, corpus):
    # TF (Term Frequency) - частота термина в документе
    tf = document.count(term) / len(document)

    # IDF (Inverse Document Frequency) - обратная частота документа с термином
    num_documents_with_term = sum(1 for doc in corpus if term in doc)
    idf = math.log(len(corpus) / (1 + num_documents_with_term))

    return tf * idf

# Пример использования:
corpus = [
    "This is the first document.",
    "This document is the second document.",
    "And this is the third one.",
    "Is this the first document?",
]

documents = [doc.lower().split() for doc in corpus]

term = "document"
for i, doc in enumerate(documents):
    print(f"TF-IDF for term '{term}' in document {i+1}: {tfidf(term, doc, documents)}")
```

:::note[Ссылки для изучения]

1. [Основы TF-IDF](https://habr.com/ru/companies/otus/articles/755772/)
   :::

---

## <strong>Рассказать про модификацию</strong> <code>TF&#45;IDF</code> <strong>под названием</strong> <code>BM25</code> <strong>как работает?</strong> [#q-14bee738d69b81a2bbefe7475c8a9c29]

<code>BM25 &#40;Best Matching 25&#41;</code> - это улучшенная версия
<code>TF&#45;IDF</code>, разработанная для оценки релевантности документов в
поисковых системах. Вот как это работает&#58;

1. <strong>Оценка частотности термина</strong> <code>&#40;TF&#41;</code>&#58; В
   отличие от обычного <code>TF&#45;IDF</code>, <code>BM25</code> использует
   модель оценки частотности термина, которая более чувствительна к различиям в
   частоте терминов. Она определяется как&#58;

$$
TF(q, d) = \frac{f(q, d) \cdot (k_1 + 1)}{f(q, d) + k_1 \cdot \left(1 - b + b \cdot \frac{|d|}{avgdl}\right)}
$$

где&#58;

- <InlineMath tex={"f(q, d)"} /> - частота термина <InlineMath tex={"q"} /> в
  документе <InlineMath tex={"d"} />.

- <InlineMath tex={"|d|"} /> - длина документа <InlineMath tex={"d"} />.

- <InlineMath tex={"avgdl"} /> - средняя длина документа в корпусе.

- <InlineMath tex={"k_1"} /> и <InlineMath tex={"b"} /> - настраиваемые
  параметры.

1. <strong>Оценка обратной частотности документа</strong>
   <code>&#40;IDF&#41;</code>&#58; <code>IDF</code> в <code>BM25</code>
   оценивает важность термина в контексте всего корпуса документов, как и в
   TF-IDF.

1. <strong>Расчет релевантности</strong>&#58; Релевантность документа для
   запроса вычисляется как сумма <code>IDF</code>-взвешенных значений
   <code>TF</code> для всех терминов запроса&#58;

$$
\text{BM25}(q, d) = \sum_{q_i \in q} \text{IDF}(q_i) \cdot \text{TF}(q_i, d)
$$

<code>BM25</code> позволяет лучше учитывать частоту терминов и длину документов
в оценке их релевантности, что делает его эффективным методом для поиска и
ранжирования документов.

:::note[Ссылки для изучения]

1. [Основы TF-IDF](https://habr.com/ru/companies/otus/articles/755772/)
   :::

---

## Плюсы/минусы <code>TF&#45;IDF</code>, <code>Bag of words</code>. [#q-14bee738d69b81b29ef9d268ccd0e000]

<code>TF&#45;IDF</code>&#58;

Плюсы&#58;

1. Учитывает важность слова в контексте всей коллекции документов.

1. Позволяет выделить наиболее информативные слова, отфильтровывая часто встречающиеся общие слова.

1. Хорошо работает с длинными текстами и большими коллекциями документов.

Минусы&#58;

1. Не учитывает порядок слов в тексте и их взаимосвязь.

1. Может иметь проблемы с редкими словами, которые могут получить завышенные веса из-за низкой обратной частоты встречаемости.

<code>Bag of Words</code>&#58;

Плюсы&#58;

1. Простота и понятность концепции.

1. Может быть эффективен для коротких текстов и простых задач.

1. Хорошо работает с часто встречающимися словами.

Минусы&#58;

1. Не учитывает порядок слов и их семантическую структуру.

1. Может приводить к разреженным матрицам при большом словаре или коллекции документов.

1. Не учитывает важность слов в контексте всей коллекции.

:::note[Ссылки для изучения]

1. [Основы TF-IDF](https://habr.com/ru/companies/otus/articles/755772/)
   :::
