61
правка
Изменения
Нет описания правки
word2vec {{---}} способ построения сжатого пространства векторов слов, использующий нейронные сети. Принимает на вход большой текстовый корпус и сопоставляет каждому слову вектор. Сначала он создает словарь, а затем вычисляет векторное представление слов. Векторное представление основывается на контекстной близости: слова, встречающиеся в тексте рядом с одинаковыми словами (а следовательно, имеющие схожий смысл), в векторном представлении будут иметь близкие координаты векторов-слов.
В word2vec существуют две основных модели обучения: ''Skip-gram '' и ''CBOW '' (англ. ''Continuous Bag of Words''). В модели ''Skip-gram '' по слову предсказываются слова из его контекста, а в модели ''CBOW '' по контексту подбирается наиболее вероятное слово. На выходном слое используется функция <math>softmax</math> или его вариация, чтобы получить на выходе распределение вероятности каждого слова. В обеих моделях входные и выходные слова подаются в one-hot encoding, благодаря чему при умножении на матрицу <math>W</math>, соединяющую входной и скрытый слои, происходит выбор одной строки <math>W</math>. Размерность <math>N</math> является гиперпараметром алгоритма, а обученная матрица <math>W</math> {{---}} выходом, так как ее строки содержат векторные представления слов.
Для ускорения обучения моделей ''Skip-gram '' и CBOW используются модификации <math>softmax</math>, такие как иерархический <math>softmax</math> и ''negative sampling'', позволяющие вычислять распределение вероятностей быстрее, чем за линейное время от размера словаря.
{|align="center"
'''import''' gensim.downloader '''as''' download_api
russian_model = download_api.load(<font color="green">'word2vec-ruscorpora-300'</font>)<br>
<font color="greengrey"># ''Первые 10 слов корпуса''</font>
list(russian_model.vocab.keys())[:<font color="blue">10</font>]
russian_model.most_similar(<font color="green">'кошка_NOUN'</font>)
russian_model.similarity(<font color="green">'мужчина_NOUN'</font>, <font color="green">'женщина_NOUN'</font>)
russian_model.doesnt_match(<font color="green">'завтрак_NOUN хлопья_NOUN обед_NOUN ужин_NOUN'</font>.split())
=== Обучение модели word2vec и fastText на текстовом корпусе ===
'''from''' gensim.models.fasttext '''import''' FastText
'''import''' gensim.downloader '''as''' download_api<br>
<font color="greengrey"># ''Скачаем небольшой текстовый корпус (32 Мб) и откроем его как итерируемый набор предложений: iterable(list(string))''</font>
corpus = download_api.load(<font color="green">'text8'</font>)<br>
<font color="greengrey"># ''Обучим модели word2vec и fastText''</font>
word2vec_model = Word2Vec(corpus, size=<font color="blue">100</font>, workers=<font color="blue">4</font>)
fastText_model = FastText(corpus, size=<font color="blue">100</font>, workers=<font color="blue">4</font>)<br>
word2vec_model.most_similar(<font color="green">'car'</font>)[:<font color="blue">3</font>]
== См. также ==