| ClipArtMag Science Blog |

Free Cliparts

Встраивания слов - word2vec

Перевод статьи - Word Embeddings - word2vec

Автор - Mubaris NK

Источник оригинальной статьи:

https://mubaris.com/2017/12/14/word2vec/

Обработка естественного языка или NLP сочетает в себе силу компьютерной науки, искусственного интеллекта (AI) и компьютерной лингвистики таким образом, что позволяет компьютерам понимать естественный язык человека и, в некоторых случаях, даже воспроизводить его. Конечной целью NPL является анализ человеческого языка, "понять" его, а затем получить связное значение таким образом, который выгоден для пользователя. В идеальных сценариях NPL выполняет задачу быстрее и намного эффективнее и эффективнее, чем любой человек.

Одной из главных проблем в NPL является "понимание" языка. Мы используем речь или текст в качестве основного средства коммуникации. Но компьютер может понимать только числа или двоичные. Процесс преобразования текста или слова в векторы (числа) называется Встраиванием слов. В этом посте мы обсудим word2vec, который является популярной моделью вложения слов.

Word2vec

Word2vec-это двухслойная нейронная сеть, которая обрабатывает текст. Его вход представляет собой текстовый корпус, а его вывод - это набор векторов: векторов признаков для слов в этом корпусе. Он был представлен в 2013 году командой исследователей во главе с Томасом Миколовым в Google - читайте статью здесь.

Word2vec является модель на основе прогнозирования, а не частоты. Он использует прогнозный анализ, чтобы сделать взвешенное предположение слова, происходящего по отношению к соседним словам. Есть 2 варианта этой модели:

1) CBOW (непрерывный мешок слов): эта модель пытается предсказать слово на основе его соседей.

2) SkipGram: эта модель пытается предсказать соседей слова.

CBOW стремится найти вероятность слова, происходящего в окрестности (контексте). Таким образом, он обобщает все различные контексты, в которых можно использовать слово. В то время как SkipGram стремится изучать различные контексты по отдельности. Поэтому SkipGram должен иметь достаточно ного данных w.r.t. в каждом контексте. Следовательно SkipGram требуется больше данных для обучения, также SkipGram (при наличии достаточных данных) содержится больше знаний о контексте.

Это понятие слова "соседство" лучше всего описать, рассматривая центральное (или текущее) слово и окно слов вокруг него. Например, если мы рассмотрим предложение " The quick brown fox jumped over the lazy dog" и размер окна 2, у нас будут следующие пары для модели skip-gram:

Training samples

В отличие от этого, для CBOW модели, мы будем вводить контекстные слова в окне (например, “the”, “brown”, “fox”) и целью прогнозирования целевой слово “ quick” (просто поменять ввод с предсказанием трубопровода от skip-gram модели).

Ниже приводится визуализация skip-gram и моделей CBOW :

CBOW Skip gram

Поскольку SkipGram были показаны, чтобы лучше выполнять по аналогии задач, чем модель CBOW, лучше использовать модель SkipGram по большей части. В целом, если вы понимаете одну модель, то довольно легко понять другую: просто переверните входные данные и прогнозы. Поскольку обе статьи сосредоточены на модели skip-gram, этот пост будет делать то же самое.

Процедура Обучения Модели SkipGram

Наша цель состоит в том, чтобы найти представления слов, которые полезны для прогнозирования окружающих слов, заданных текущим словом. В частности, мы хотим максимизировать среднюю вероятность журнала по всему нашему корпусу:

\[argmax_{\theta} \frac{1}{T} \sum_{t=1}^{T} \sum_{j \in c, j != 0} log p(w_{t + j} w_{t} ; \theta)\]

Это уравнение по существу говорит о том, что существует некоторая вероятность p наблюдения определенного слова, которое находится в окне размера с текущего слова wt. Эта вероятность обусловлена текущим словом (wt) и некоторой настройкой параметров θ (определяется нашей моделью). Мы хотим установить эти параметры θ таким образом, чтобы эта вероятность была максимизирована по всему корпусу.

Модель SkipGram - это двухслойная нейронная сеть. В скрытом слое используется линейная функция активации в выходном слое используется функция активации Softmax.

Реализация

Gensim - это бесплатная Библиотека Python, предназначенная для автоматического извлечения семантических тем из документов, как можно более эффективно (с компьютерной точки зрения) и безболезненно (с человеческой точки зрения). Мы будем использовать библиотеку Gensim для реализации модели Word2Vec на корпусе " Alice’s Adventures in Wonderland by Lewis Carroll" из проекта Гутенберга. Мы будем использовать NLTK для доступа к корпусу. NLTK является ведущей платформой для создания программ Python для работы с данными человеческого языка.

Прежде всего мы начнем с импорта пакетов.

 

# Word2Vec Model
from gensim.models import Word2Vec
# NLTK
import nltk

# Download Project Gutenberg Corpus
nltk.download("gutenberg")

 

[nltk_data] Downloading package gutenberg to
[nltk_data]     /home/mubaris/nltk_data...
[nltk_data]   Package gutenberg is already up-to-date!





True

 

Нам нужен наш корпус в виде предложений для модели Gensim Word2Vec. Следующий example_corpus имеет 2 предложения.

 


example_sentence = [['this', 'is', 'a', 'sentence'], ['second', 'sentence'],
['another', 'sentence']]

# Converting the corpus in to sentences
sentences = nltk.corpus.gutenberg.sents("carroll-alice.txt")

 

Теперь у нас есть список предложений. Теперь мы можем генерировать векторы из его словаря.

 


# Creating the model
model = Word2Vec(sentences, size=150, min_count=4, window=5, workers=4, sg=1)

 

Там мы наша модель. Позвольте мне объяснить аргументы.

size: (по умолчанию 100) количество размеров вложения, например, длина плотного вектора для представления каждого знака (слова).

window: (по умолчанию 5) максимальное расстояние между целевым словом и словами вокруг целевого слова.

min_count: (по умолчанию 5) минимальное количество слов, которое следует учитывать при обучении модели; слова с вхождением меньше этого числа будут игнорироваться.

workers: (по умолчанию 3) Количество потоков, используемых во время обучения.

sg: (по умолчанию 0 или CBOW) тренировочный алгоритм, либо CBOW (0) или skip gram (1).

Теперь мы можем печатать словарный запас моделей, каждое векторное представление слов и т. д.

 


# Vocabulary
words = list(model.wv.vocab)

# Vector of Alice
alice = model.wv["Alice"]
print(alice)

 


[ 0.12896043  0.02943942  0.16370748 -0.07625519 -0.00826628 -0.00353342
  0.12328927 -0.07531034 -0.06177002  0.09647282  0.03362986 -0.02997118
 -0.05007924  0.09212659  0.07132912  0.16243213 -0.29858825  0.18719195
  0.02595143  0.01386956 -0.15193544  0.09392646 -0.06538922 -0.05666091
  0.16926786  0.21055809 -0.0648766  -0.16892284  0.27633667 -0.04381052
  0.07857908  0.1461474   0.06817818 -0.0357273  -0.28752351  0.13935697
 -0.03184435  0.2402489   0.02026348  0.04282037  0.05627181  0.07880288
  0.08609539  0.06406744  0.18007798  0.02402422 -0.13297294  0.0033468
  0.01976873  0.01767304 -0.04149737  0.16874173  0.10499206 -0.08900665
  0.0977525   0.06589122  0.01379999 -0.09205106  0.04052607  0.14080274
 -0.02682975 -0.03543742 -0.12036515 -0.02565189 -0.06261415 -0.10798275
 -0.14207236 -0.07081407  0.27981269 -0.05318935 -0.07135037 -0.08173097
 -0.05527892  0.02395226  0.08671912 -0.04056617  0.02169161 -0.01858786
 -0.00410686  0.06729784 -0.04358509  0.18316497  0.07948966  0.02275082
  0.08571164  0.06222373 -0.1389409  -0.0698042   0.01086436  0.18955809
  0.15223378 -0.05003522  0.01672419 -0.09315669 -0.03163765 -0.08073105
  0.09383699 -0.00891203 -0.07321226  0.09350048 -0.07768501 -0.17239663
 -0.28071246  0.02471785 -0.02146135  0.00578363  0.08035611 -0.05875581
 -0.0067123  -0.09600651  0.03247541  0.13892047  0.10834643 -0.00687588
 -0.10518014  0.17959517 -0.18189816  0.12606408  0.07878652 -0.07759473
  0.02858162 -0.01801082 -0.00908613  0.02999768  0.01901592 -0.08107233
 -0.05174483  0.01158905  0.04703816 -0.00074181  0.02505895 -0.21482743
 -0.04586244  0.13998622 -0.03205461  0.11394737 -0.0459122  -0.09286188
  0.05483688 -0.08368739  0.00788889 -0.01870637 -0.13955207 -0.17281808
 -0.09798446  0.0198724  -0.26866159  0.12399895 -0.07194    -0.03187025]

 

Это векторное представление " Alice". Вы можете сложить вектор каждого слова в словаре.

 


# Saving the model
model.save("alice.bin")

# Loading the saved model
model = Word2Vec.load("alice.bin")

 

С помощью модели можно выполнять различные задачи NLP word.

 


# Similarity between 2 words
print(model.wv.similarity("Alice", "Rabbit"))
print(model.wv.similarity("That", "baby"))

# Similar Words
print(model.wv.most_similar(positive=["Alice", "cat"], negative=["baby"]))

 


0.975325289838
0.970169193531
[('much', 0.9961279630661011), ('That', 0.9954456686973572),
('must', 0.9953832030296326), ('tell', 0.9952795505523682),
('say', 0.9951117634773254), ('doesn', 0.995048999786377),
('Well', 0.9950287342071533), ('It', 0.9949702620506287),
('But', 0.9948418736457825), ('wouldn', 0.9947409629821777)]

 

Код доступен в этом репозитории Github Repo

Ресурсы

Видео

Статьи

Книги

Free Teacher Clipart

Peppa Drawing

Blouse Cliparts

Basic Anime Drawing

Powerpoint Clipart

Napoleon Dynamite Unicorn Drawing

Rummage Sale Images

Donkey Images Clipart

Friends Hanging Out Clipart

School Table Clipart