Радар
Забавное открытие сегодняшнего дня: слово радар, на самом деле аббревиатура.
RADAR — RAdio Detection And Ranging.
Как и слова сонар и лидар.
Telegram: @aagasiev
Забавное открытие сегодняшнего дня: слово радар, на самом деле аббревиатура.
RADAR — RAdio Detection And Ranging.
Как и слова сонар и лидар.
fastText — библиотека для векторного представления слов и классификации текстов от Facebook AI Research.
Для её сборки, нам потребуется компилятор с поддержкой C++11 (gcc-4.6.3, clang-3.3 и новее):
git clone https://github.com/facebookresearch/fastText.git
cd fastText
sudo python3 -m pip install .
Если у вас установлено несколько компиляторов разных версий, то можно запустить установку, явно указав путь к нужной версии компилятора:
sudo CC='/usr/bin/gcc-4.9' python3 -m pip install .
Тренированную модель для русского языка можно скачать тут. В архиве занимает 4.2 Гб, распакованная 6.8 Гб:
wget https://dl.fbaipublicfiles.com/fasttext/vectors-crawl/cc.ru.300.bin.gz
gunzip cc.ru.300.bin.gz
Использовать можно так:
from fasttext import load_model
model = load_model("cc.ru.300.bin")
from fasttext import train_unsupervised
model = train_unsupervised(
input="dataset.txt",
model='skipgram'
)
model.save_model("skipgram_model.bin")
На Core i7-6700 с датасетом в 20 млн строк, модель обучилась в течении 5 эпох за 35 минут и весила ~1.1 Гб.
Для оценки похожести/близости векторов будем использовать косинусное сходство:
$$ \mathrm{similarity} = \mathrm{cos(}\theta\mathrm{)} = \dfrac{A \cdot B}{\left\lVert A \right\rVert \cdot \left\lVert B \right\rVert} $$
В коде будет выглядеть так:
import numpy as np
def similarity(v1, v2):
n1 = np.linalg.norm(v1)
n2 = np.linalg.norm(v2)
if n1 < 1e-6 or n2 < 1e-6:
return 0.0
else:
return np.dot(v1, v2) / n1 / n2
def word_similarity(model, w1, w2):
return similarity(model.get_word_vector(w1), model.get_word_vector(w2))
def sentence_similarity(model, t1, t2):
return similarity(model.get_sentence_vector(t1), model.get_sentence_vector(t2))
Проверяем:
>>> word_similarity(model, "приветик", "привет")
0.7990662
>>> sentence_similarity(model, "сколько тебе лет", "а лет-то тебе сколько")
0.85209394
Про классификацию текста при помощи fastText напишу чуть позже.
Экспресс-дизайн от студии Артемия Лебедева — просто охуенная штука. Всего за 100000 рублей можно хорошо попиариться на всю страну развеселым логотипом, получить гору трафика на сайт и повысить узнаваемость бренда.
Убиваем сразу три зайца одним выстрелом:
А на сам логотип, в целом, всем плевать.
На моем сайте есть форма обратной связи, через которую клиенты могут оставить свой телефон. Однако, возникает интересная ситуация — в половине случаев при звонке на указанный номер трубку никто не берет. Мало того, иногда даже сбрасывают звонок. Согласен, все мы бываем заняты. Перезваниваю через какое-то время — эффект тот же.
Стал думать: что тут может быть не так? Идей особо не было, так что вначале воспринял это как специфику рынка. Но потом как-то в облачной АТС закончились деньги, и я решил набрать такой сбрасывающий номер с сотового телефона. И... о чудо! Трубку подняли, разговор успешно состоялся.
Провел небольшой эксперимент, и оказалось, что даже на разные коды городов реагируют по-разному. В порядке уменьшения вероятности принятия звонка:
Если клиент сам решает позвонить вам, то ситуация меняется: люди любят «официальные» городские номера, в особенности, бесплатный для них 8-800. Так распределились номера в порядке убывания вероятности звонка:
Видимо, людей задолбали телефонные спамеры и холодные звонки, поэтому многие просто не отвечают, когда видят на экране входящий звонок с городского номера. А звонить на сотовые номера боятся из-за ощущения кустарности и ненадежности предприятия. Особенно, если клиенту предлагается купить дорогой товар или услугу.
Таким образом, для обратной связи лучше оставлять номер с кодом 8-800 или 495/812, а самому звонить с сотового телефона.
Купюра в 10 турецких лир, пожалуй, единственная из всех известных мне, на которых изображен математик и математическая формула.
На денежке, портрет довольно известного турецкого математика Джахита Арфа и одно из его творений — инвариант Арфа квадратичной формы.
$$ Arf (q) = \sum_{i = 1}^{n} q(a_i)q(b_i) \in \Bbb{Z_2}, $$