Изменения

Перейти к: навигация, поиск

Векторное представление слов

988 байт убрано, 16:47, 4 марта 2019
Нет описания правки
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>]
[ ''<font color="greengrey"># ['весь_DET'</font>, <font color="green">'человек_NOUN'</font>, <font color="green">'мочь_VERB'</font>, <font color="green">'год_NOUN'</font>, <font color="green">'сказать_VERB'</font>, <font color="green">'время_NOUN'</font>, <font color="green">'говорить_VERB'</font>, <font color="green">'становиться_VERB'</font>, <font color="green">'знать_VERB'</font>, <font color="green">'самый_DET']</font>]''<br> <font color="greengrey"># ''Поиск наиболее близких по смыслу слов. После слова указывается часть речи: NOUN, ADJ, VERB, DET''</font>
russian_model.most_similar(<font color="green">'кошка_NOUN'</font>)
[( <font color="greengrey">''# [('кот_NOUN'</font>, <font color="blue">0.7570087909698486</font>), (<font color="green">'котенок_NOUN'</font>, <font color="blue">0.7261239290237427</font>), (<font color="green">'собака_NOUN'</font>, <font color="blue">0.6963180303573608</font>),'' # ''(<font color="green">'мяукать_VERB'</font>, <font color="blue">0.6411399841308594</font>), (<font color="green">'крыса_NOUN'</font>, <font color="blue">0.6355636119842529</font>), (<font color="green">'собачка_NOUN'</font>, <font color="blue">0.6092042922973633</font>),'' # ''(<font color="green">'щенок_NOUN'</font>, <font color="blue">0.6028496026992798</font>), (<font color="green">'мышь_NOUN'</font>, <font color="blue">0.5975362062454224</font>), (<font color="green">'пес_NOUN'</font>, <font color="blue">0.5956044793128967</font>),'' # ''(<font color="green">'кошечка_NOUN'</font>, <font color="blue">0.5920293927192688)]''</font>)]<br> <font color="greengrey"># ''Вычисление сходства слов''</font>
russian_model.similarity(<font color="green">'мужчина_NOUN'</font>, <font color="green">'женщина_NOUN'</font>)
<font color="bluegrey">''# 0.85228276''</font><br> <font color="greengrey"># ''Поиск лишнего слова''</font>
russian_model.doesnt_match(<font color="green">'завтрак_NOUN хлопья_NOUN обед_NOUN ужин_NOUN'</font>.split())
<font color="grey"># ''хлопья_NOUN''</font>
=== Обучение модели 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>]
[( ''<font color="greengrey"># [('driver'</font>, <font color="blue">0.8033335208892822</font>), (<font color="green">'motorcycle'</font>, <font color="blue">0.7368553876876831</font>), (<font color="green">'cars'</font>, <font color="blue">0.7001584768295288)]</font>)]''<br> fastText_model.most_similar(<font color="green">'car'</font>)[:<font color="blue">3</font>] [( ''<font color="greengrey"># [('lcar'</font>, <font color="blue">0.8733218908309937</font>), (<font color="green">'boxcar'</font>, <font color="blue">0.8559106588363647</font>), (<font color="green">'ccar'</font>, <font color="blue">0.8268736004829407)]</font>)]
== См. также ==
61
правка

Навигация