<jupyter_start><jupyter_text>2.3 Теоретические задачи: Векторная модель текста  Предустановка необходимых библиотек<jupyter_code>!pip install sympy<jupyter_output>Collecting sympy
  Downloading sympy-1.10-py3-none-any.whl (6.4 MB)
[2K     [38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m6.4/6.4 MB[0m [31m8.2 MB/s[0m eta [36m0:00:00[0mm eta [36m0:00:01[0m[36m0:00:01[0m
[?25hCollecting mpmath>=0.19
  Downloading mpmath-1.2.1-py3-none-any.whl (532 kB)
[2K     [38;2;114;156;31m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m532.6/532.6 KB[0m [31m3.3 MB/s[0m eta [36m0:00:00[0m[36m0:00:01[0m[36m0:00:01[0m
[?25hInstalling collected packages: mpmath, sympy
Successfully installed mpmath-1.2.1 sympy-1.10<jupyter_text>Импорт необходимых библиотек<jupyter_code>from sympy.parsing import sympy_parser
from sympy import diff, symbols, log, exp<jupyter_output><empty_output><jupyter_text>[Найдите в общем виде производную функции потерь (бинарная кросс-энтропия) по w.](https://stepik.org/lesson/261086/step/2?unit=241830)<jupyter_code>x, y, w, b = symbols("x y w b")
y_pred = 1 / (1 + exp(-w * x - b))
d = -y * log(y_pred) - (1 - y) * log(1 - y_pred)
d_res = diff(d, w).simplify()
str(d_res)<jupyter_output><empty_output><jupyter_text>[Найдите в общем виде производную функции потерь (бинарная кросс-энтропия) по b.](https://stepik.org/lesson/261086/step/3?unit=241830)<jupyter_code>x, y, w, b = symbols("x y w b")
y_pred = 1 / (1 + exp(-w * x - b))
d = -y * log(y_pred) - (1 - y) * log(1 - y_pred)
d_res_2 = diff(d, b).simplify()
str(d_res_2)<jupyter_output><empty_output><jupyter_text>[Найдите в общем виде производную функции потерь (бинарная кросс-энтропия с L2-регуляризацией) по w.](https://stepik.org/lesson/261086/step/4?unit=241830)<jupyter_code>x, y, w, b, c = symbols("x y w b c")
y_pred = 1 / (1 + exp(-w * x - b))
d = -y * log(y_pred) - (1 - y) * log(1 - y_pred)
f = d + c * (w**2 + b**2)
d_res_3 = diff(f, w).simplify()
str(d_res_3)<jupyter_output><empty_output><jupyter_text>[Используя формулу производной функции потерь (бинарная кросс-энтропия с L2-регуляризацией), запишите формулу для обновления веса w с помощью стохастического градиентного спуска (размер минибатча равен 1)](https://stepik.org/lesson/261086/step/5?unit=241830)<jupyter_code>x, y, w, b, c, t = symbols("x y w b c t")
y_pred = 1 / (1 + exp(-w * x - b))
d = -y * log(y_pred) - (1 - y) * log(1 - y_pred)
f = d + c * (w**2 + b**2)
d_res_3 = diff(f, w).simplify()
f_grad = w - d_res_3 * t
str(f_grad)<jupyter_output><empty_output><jupyter_text>[Напишите функцию для вычисления точечной взаимной информации двух случайных событий (PMI).](https://stepik.org/lesson/261086/step/7?unit=241830)<jupyter_code>import numpy as np
def calculate_pmi(a, b):
    return np.log(
        np.array([1 for a_el, b_el in zip(a, b) if (a_el == 1 and b_el == 1)]).sum()
        / len(a)
        / ((a.sum() / len(a)) * (b.sum() / len(b)))
    )
a, b = np.array([1, 0, 0, 1, 1, 0]), np.array([1, 0, 0, 0, 1, 0])
calculate_pmi(a, b)<jupyter_output><empty_output><jupyter_text>[Найдите количество слов, которые встречаются менее, чем в 10 из 10000 документов, если предполагать, что вероятность встретить слово в документе распределена по Ципфу с параметром s = 2, количество слов в словаре N = 1000. Ранги нумеруются с 1.](https://stepik.org/lesson/261086/step/8?unit=241830) ![image.png](attachment:image.png)<jupyter_code>def get_Z(N, s):
    return sum([i ** (-s) for i in range(1, N + 1)])


def get_zipf_prob(rank, s, Z):
    return 1 / (Z * rank**s)
N, s = 1000, 2
Z = get_Z(N, s)
Z
sum([1 for rank in range(1, N + 1) if get_zipf_prob(rank, s, Z) < 0.001])<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.18866901599349417, 'fraction_numerical': 0.07590132827324478, 'mean_word_length': 4.8386075949367084, 'pattern_counts': {'":': 0, '<': 33, '<?xml version=': 0, '>': 33, 'https://': 6, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '122240', 'license': 'MIT', 'n_tokens_mistral': 1937, 'n_tokens_neox': 1942, 'n_words': 358, 'path': 'theor_tasks/theor_task_2.3_word_embeddings_for_text.ipynb', 'repo_name': 'arturburiev/stepik-dl-nlp', 'size': '3689'}