web-dev-qa-db-ja.com

事前学習済みのグローブベクトルをpython

インターネットから事前学習済みのグローブベクトルファイルをダウンロードしました。 .txtファイルです。ロードおよびアクセスできません。 gensimを使用してWordのベクターバイナリファイルを簡単にロードおよびアクセスできますが、テキストファイル形式の場合、その方法はわかりません。

前もって感謝します

28
Same

グローブモデルファイルは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']

59
Karishma Malkan

あなたはパンダではるかに速くそれを行うことができます:

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
44
Petter

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 メソッド(たとえば、類似度)を自由に使用できます。

25
Ben

埋め込み行列だけが必要な場合は、ここに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')
5
Abhai Kollara

私はこのアプローチをより速く見つけました。

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)
2
Indra

バイグラムとトライグラムも処理する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
1
alabroski
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))
0
Ankan Datta