インターネットから事前学習済みのグローブベクトルファイルをダウンロードしました。 .txtファイルです。ロードおよびアクセスできません。 gensimを使用してWordのベクターバイナリファイルを簡単にロードおよびアクセスできますが、テキストファイル形式の場合、その方法はわかりません。
前もって感謝します
グローブモデルファイルはWord-ベクター形式です。テキストファイルを開いて、これを確認できます。以下は、事前に訓練されたグローブファイルをロードするために使用できるコードの小さな断片です。
import numpy as np
def loadGloveModel(gloveFile):
print("Loading Glove Model")
f = open(gloveFile,'r')
model = {}
for line in f:
splitLine = line.split()
Word = splitLine[0]
embedding = np.array([float(val) for val in splitLine[1:]])
model[Word] = embedding
print("Done.",len(model)," words loaded!")
return model
その後、単純にモデル変数を使用して、Wordベクトルにアクセスできます。
print model['hello']
あなたはパンダではるかに速くそれを行うことができます:
import pandas as pd
import csv
words = pd.read_table(glove_data_file, sep=" ", index_col=0, header=None, quoting=csv.QUOTE_NONE)
次に、Wordのベクトルを取得します。
def vec(w):
return words.loc[w].as_matrix()
そして、ベクトルに最も近いWordを見つけるには:
words_matrix = words.as_matrix()
def find_closest_Word(v):
diff = words_matrix - v
delta = np.sum(diff * diff, axis=1)
i = np.argmin(delta)
return words.iloc[i].name
gensim を使用してすべてを行うことをお勧めします。ファイルを読むことができ、この素晴らしいパッケージにすでに多くのメソッドが実装されていることからも恩恵を受けます。
C++プログラムを使用して GloVe ベクトルを生成し、「-save-file」パラメーターが「vectors」であるとします。 Glove実行可能ファイルは、2つのファイル「vectors.bin」と「vectors.txt」を生成します。
glove2Word2vec を使用して、テキスト形式のGloVeベクトルをWord2vecテキスト形式に変換します。
from gensim.scripts.glove2Word2vec import glove2Word2vec
glove2Word2vec(glove_input_file="vectors.txt", Word2vec_output_file="gensim_glove_vectors.txt")
最後に、 KeyedVectors を使用してWord2vec txtをgensimモデルに読み取ります。
from gensim.models.keyedvectors import KeyedVectors
glove_model = KeyedVectors.load_Word2vec_format("gensim_glove_vectors.txt", binary=False)
これで、gensim Word2vec メソッド(たとえば、類似度)を自由に使用できます。
埋め込み行列だけが必要な場合は、ここに1つのライナーがあります
np.loadtxt(path, usecols=range(1, dim+1), comments=None)
ここで、path
はダウンロードしたGloVeファイルへのパスであり、dim
はWord埋め込みの次元です。
あなたができる言葉と対応するベクトルの両方が必要な場合
glove = np.loadtxt(path, dtype='str', comments=None)
次のように単語とベクトルを分離します
words = glove[:, 0]
vectors = glove[:, 1:].astype('float')
私はこのアプローチをより速く見つけました。
import pandas as pd
df = pd.read_csv('glove.840B.300d.txt', sep=" ", quoting=3, header=None, index_col=0)
glove = {key: val.values for key, val in df.T.items()}
辞書を保存します。
import pickle
with open('glove.840B.300d.pkl', 'wb') as fp:
pickle.dump(glove, fp)
バイグラムとトライグラムも処理するPython3バージョン:
import numpy as np
def load_glove_model(glove_file):
print("Loading Glove Model")
f = open(glove_file, 'r')
model = {}
vector_size = 300
for line in f:
split_line = line.split()
Word = " ".join(split_line[0:len(split_line) - vector_size])
embedding = np.array([float(val) for val in split_line[-vector_size:]])
model[Word] = embedding
print("Done.\n" + str(len(model)) + " words loaded!")
return model
import os
import numpy as np
# store all the pre-trained Word vectors
print('Loading Word vectors...')
Word2vec = {}
with open(os.path.join('glove/glove.6B.%sd.txt' % EMBEDDING_DIM)) as f: #enter the path where you unzipped the glove file
# is just a space-separated text file in the format:
# Word vec[0] vec[1] vec[2] ...
for line in f:
values = line.split()
Word = values[0]
vec = np.asarray(values[1:], dtype='float32')
Word2vec[Word] = vec
print('Found %s Word vectors.' % len(Word2vec))