是的,不同的单词嵌入方法可以在同一数据集中产生相同的词汇,因为它们使用相同的词汇表。以下是使用Python中的GloVe、word2vec和fasttext方法生成嵌入向量并在相同数据集上训练的示例代码:
from gensim.models import Word2Vec, KeyedVectors
from gensim.scripts.glove2word2vec import glove2word2vec
import numpy as np
import pandas as pd
import io
import zipfile
from urllib.request import urlopen
# load dataset
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00228/smsspamcollection.zip'
zipresp = urlopen(url)
zipfile = zipfile.ZipFile(io.BytesIO(zipresp.read()))
file = zipfile.open('SMSSpamCollection')
sms = pd.read_csv(file, sep='\t', header=None, names=['label', 'message'])
# GloVe embedding
glove_file = 'http://nlp.stanford.edu/data/glove.6B.zip'
zipresp = urlopen(glove_file)
zipfile = zipfile.ZipFile(io.BytesIO(zipresp.read()))
model_file = 'glove.6B.100d.txt'
zipfile.extract(model_file, './')
glove2word2vec('glove.6B.100d.txt', 'glove.6B.100d.word2vec.txt')
glove_model = KeyedVectors.load_word2vec_format('glove.6B.100d.word2vec.txt', binary=False)
glove_vectors = []
for word in sms['message'].str.split():
try:
vector = glove_model[word].mean(axis=0)
except KeyError:
vector = np.zeros((100,))
glove_vectors.append(list(vector))
# word2vec embedding
w2v_model = Word2Vec(sentences=sms['message'].str.split(), size=100, min_count=1)
w2v_vectors = []
for word in sms['message'].str.split():
try:
vector