컴퓨터가 쓰여진 텍스트를 이해할 수 있도록 하기 위해 단어를 수치 벡터로 표현할 수 있습니다. 이를 수행하는 한 가지 방법은 Word 임베딩을 사용하는 것입니다. 이는 단어를 숫자 벡터로 표현하는 방법입니다. 이러한 벡터는 단어의 의미와 언어의 다른 단어와의 관계를 포착합니다. 단어 임베딩은 다음과 같은 비지도 학습 알고리즘을 사용하여 생성될 수 있습니다. Word2vec, 장갑 , 또는 FastText .
Word2vec은 의미론적 의미와 관계를 포착하는 단어의 밀집된 벡터 표현인 단어 임베딩을 생성하기 위한 신경망 기반 방법입니다. Word2vec을 구현하는 데는 두 가지 주요 접근 방식이 있습니다.
- 연속 단어백(CBOW)
- 그램 건너뛰기
CBOW(Continuous Bag of Words)란 무엇입니까?
CBOW(Continuous Bag of Words)는 단어 임베딩을 생성하는 데 사용되는 인기 있는 자연어 처리 기술입니다. 단어 임베딩은 언어의 단어 간의 의미론적 및 구문론적 관계를 포착하기 때문에 많은 NLP 작업에 중요합니다. CBOW는 주변 문맥 단어를 바탕으로 목표 단어를 예측하는 신경망 기반 알고리즘입니다. 그것은 일종의 감독되지 않은 학습은 레이블이 지정되지 않은 데이터로부터 학습할 수 있음을 의미하며 감정 분석, 기계 번역과 같은 다양한 NLP 작업에 사용할 수 있는 단어 임베딩을 사전 훈련하는 데 자주 사용됩니다.

CBOW 모델의 예
자바에서 arraylist 정렬
BoW(Bag-of-Words) 모델과 CBOW(Continuous Bag-of-Words) 모델 간에 차이점이 있습니까?
- Bag-of-Words 모델과 Continuous Bag-of-Words 모델은 모두 컴퓨터가 읽을 수 있는 형식으로 텍스트를 표현하기 위해 자연어 처리에 사용되는 기술이지만 컨텍스트를 캡처하는 방법이 다릅니다.
- BoW 모델은 텍스트를 주어진 문서나 말뭉치에서 단어와 빈도의 모음으로 나타냅니다. 단어가 나타나는 순서나 문맥을 고려하지 않으므로 텍스트의 전체 의미를 포착하지 못할 수 있습니다. BoW 모델은 간단하고 구현하기 쉽지만 언어의 의미를 포착하는 데에는 한계가 있습니다.
- 이에 비해 CBOW 모델은 단어의 맥락을 포착하는 신경망 기반 접근 방식입니다. 주어진 컨텍스트 창에서 앞뒤에 나타나는 단어를 기반으로 대상 단어를 예측하는 방법을 학습합니다. 주변 단어를 고려함으로써 CBOW 모델은 주어진 맥락에서 단어의 의미를 더 잘 포착할 수 있습니다.
CBOW 모델의 아키텍처
CBOW 모델은 문맥 단어 주변의 목표 단어를 사용하여 예측합니다. 위의 예를 고려해보세요 그녀는 훌륭한 댄서입니다. CBOW 모델은 이 문구를 문맥 단어와 대상 단어의 쌍으로 변환합니다. pairings라는 단어는 다음과 같이 나타납니다. ([그녀, a], 이다), ([이다, 훌륭하다], a) ([a, 댄서], 훌륭하다) 창 크기=2입니다.

CBOW 아키텍처
모델은 문맥 단어를 고려하고 대상 용어를 예측하려고 시도합니다. 4개의 1*W 입력 벡터는 하나의 목표 단어를 예측하는 데 사용되는 문맥 단어로 4개의 단어가 있는 경우 입력 레이어로 전달됩니다. 은닉층은 입력 벡터를 수신한 다음 이를 W*N 행렬로 곱합니다. 은닉층의 1*N 출력은 최종적으로 합산층에 들어가며, 여기서 벡터는 최종 활성화가 수행되기 전에 요소별로 합산되고 출력은 출력층에서 얻어집니다.
CBOW의 코드 구현
CBOW 모델을 사용하여 단어의 유사성을 보여주기 위해 단어 임베딩을 구현해 보겠습니다. 이 기사에서는 나만의 단어 모음을 정의했으며, 어떤 데이터세트라도 사용할 수 있습니다. 먼저 필요한 모든 라이브러리를 가져오고 데이터 세트를 로드합니다. 다음으로, 각 단어를 토큰화하고 이를 정수 벡터로 변환합니다.
파이썬3
import> tensorflow as tf> from> tensorflow.keras.models>import> Sequential> from> tensorflow.keras.layers>import> Dense,> >Embedding, Lambda> from> tensorflow.keras.preprocessing.text>import> Tokenizer> import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.decomposition>import> PCA> # Define the corpus> corpus>=> [>'The cat sat on the mat'>,> >'The dog ran in the park'>,> >'The bird sang in the tree'>]> # Convert the corpus to a sequence of integers> tokenizer>=> Tokenizer()> tokenizer.fit_on_texts(corpus)> sequences>=> tokenizer.texts_to_sequences(corpus)> print>('After converting our words>in> the corpus> into vector of integers:')> print>(sequences)> |
>
자바가 아닌 무작위
>
산출:
After converting our words in the corpus into vector of integers: [[1, 3, 4, 5, 1, 6], [1, 7, 8, 2, 1, 9], [1, 10, 11, 2, 1, 12]]>
이제 창 크기 = 2인 CBOW 모델을 구축하겠습니다.
파이썬3
# Define the parameters> vocab_size>=> len>(tokenizer.word_index)>+> 1> embedding_size>=> 10> window_size>=> 2> # Generate the context-target pairs> contexts>=> []> targets>=> []> for> sequence>in> sequences:> >for> i>in> range>(window_size,>len>(sequence)>-> window_size):> >context>=> sequence[i>-> window_size:i]>+>> >sequence[i>+> 1>:i>+> window_size>+> 1>]> >target>=> sequence[i]> >contexts.append(context)> >targets.append(target)> # Convert the contexts and targets to numpy arrays> X>=> np.array(contexts)> # Define the CBOW model> model>=> Sequential()> model.add(Embedding(input_dim>=>vocab_size,> >output_dim>=>embedding_size,> >input_length>=>2>*>window_size))> model.add(Lambda(>lambda> x: tf.reduce_mean(x, axis>=>1>)))> model.add(Dense(units>=>vocab_size, activation>=>'softmax'>))> model.save_weights(>'cbow_weights.h5'>)> # Load the pre-trained weights> model.load_weights(>'cbow_weights.h5'>)> |
자바는 while 루프를 수행합니다.
>
>
다음으로 모델을 사용하여 임베딩을 시각화하겠습니다.
파이썬3
# Get the word embeddings> embeddings>=> model.get_weights()[>0>]> # Perform PCA to reduce the dimensionality> # of the embeddings> pca>=> PCA(n_components>=>2>)> reduced_embeddings>=> pca.fit_transform(embeddings)> # Visualize the embeddings> plt.figure(figsize>=>(>5>,>5>))> for> i, word>in> enumerate>(tokenizer.word_index.keys()):> >x, y>=> reduced_embeddings[i]> >plt.scatter(x, y)> >plt.annotate(word, xy>=>(x, y), xytext>=>(>5>,>2>),> >textcoords>=>'offset points'>,> >ha>=>'right'>, va>=>'bottom'>)> plt.show()> |
>
예외 던지기 자바
>
산출:

CBOW 모델을 사용한 단어의 벡터화된 표현
이 시각화를 통해 임베딩을 기반으로 단어의 유사성을 관찰할 수 있습니다. 의미나 맥락이 유사한 단어는 줄거리에서 서로 가까이 있을 것으로 예상됩니다.