Word2Vec:Skip-gramとCBOW
Word2Vecの理論、gensimによる実装、ベクトル演算(king - man + woman = queen)について学習します。
「Word2Vec:Skip-gramとCBOW」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
単語からベクトルへ
機械学習には数値が必要ですが、単語は記号です。単語埋め込みは各単語を密なベクトルに変換し、似た単語がベクトル空間内で近くに配置されるようにします。
分布仮説
Word2Vec は、似た文脈に現れる単語は似た意味を持つという考えに基づいています。文脈を予測するように学習することで、モデルはベクトルに意味を取り込みます。
2つのアーキテクチャ
Word2Vec には、次の2つの学習方式があります。
- CBOW は周囲の文脈から対象の単語を予測します
- Skip-gram は対象の単語から周囲の文脈を予測します
CBOW と Skip-gram
CBOW は高速で、頻出する単語に適しています。Skip-gram は低速ですが、まれな単語や小規模なデータセットをより適切に扱えます。品質を重視する場合は、Skip-gram がデフォルトの選択肢になることがよくあります。
gensim による学習
gensim ライブラリを使うと、Word2Vec を簡単に利用できます。トークン化した sentences(単語リストのリスト)を渡し、埋め込みの設定を指定します。
from gensim.models import Word2Vec
sentences = [["the", "cat", "sat"], ["the", "dog", "ran"]]
model = Word2Vec(sentences=sentences, vector_size=100, window=5, min_count=1)主なパラメータ
主な調整項目は次のとおりです。
vector_size埋め込みの次元数(例:100~300)window各単語の周囲で考慮する文脈の幅min_countこれより出現頻度の低い単語を無視
from gensim.models import Word2Vec
model = Word2Vec(
sentences,
vector_size=200,
window=5,
min_count=5,
)sg=1 で Skip-gram を選択
sg パラメータでアーキテクチャを選択します。sg=0 は CBOW(デフォルト)、sg=1 は skip-gram を使用します。
from gensim.models import Word2Vec
model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, sg=1)
# sg=1 -> skip-gram単語ベクトルへのアクセス
学習済みのベクトルは model.wv に格納されています。単語を指定してインデックス化すると、その単語のベクトルを取得できます。
vec = model.wv["cat"]
print(vec.shape) # (vector_size,)
print("dog" in model.wv)似た単語を見つける
wv.most_similar はベクトルが最も近い単語を返します。埋め込みが何を学習したかをすばやく確認する方法です。
print(model.wv.most_similar("cat", topn=5))
# returns list of (word, similarity) pairs単語のベクトル演算
よく知られた性質として、ベクトル演算によって単語間の関係を捉えられます。king - man + woman は queen の近くに位置し、埋め込みが類推関係を符号化していることを示します。
result = model.wv.most_similar(
positive=["king", "woman"],
negative=["man"],
topn=1,
)
print(result) # often [("queen", 0.7...)]下流タスクでの埋め込みの利用
文を表現するには、含まれる単語ベクトルの平均を取り、それを任意の分類器に入力します。事前学習済みの Word2Vec 埋め込みは、データが少ない場合の強力な出発点にもなります。
import numpy as np
def sentence_vector(words, model):
vecs = [model.wv[w] for w in words if w in model.wv]
return np.mean(vecs, axis=0) if vecs else np.zeros(model.vector_size)理解度チェック
Word2Vec に関する知識を確認しましょう。
まとめ
まとめ: Word2Vec は文脈から密な単語ベクトルを学習します。CBOW は文脈から単語を予測し(高速)、skip-gram(sg=1)は単語から文脈を予測します(まれな単語に適しています)。gensim では vector_size、window、min_count を設定し、wv.most_similar や king - man + woman のような類推を使います。
よくある質問
「Word2Vec:Skip-gramとCBOW」レッスンは無料ですか?
はい。「Word2Vec:Skip-gramとCBOW」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「Word2Vec:Skip-gramとCBOW」で何を学びますか?
Word2Vecの理論、gensimによる実装、ベクトル演算(king - man + woman = queen)について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Word2Vec:Skip-gramとCBOW」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Word2Vec:Skip-gramとCBOW
- GloVeとFastTextの埋め込み
- BERTによるテキスト分類
- 意味的類似度と文埋め込み