使用glove预训练embedding

参考:link

1、获取glove预训练内容,并解压得到多份txt文件,不同文件包含的向量信息长度是不同的。

wget http://nlp.stanford.edu/data/glove.6B.zip
unzip glove.6B.zip

2、从50维的文件中读取单词表vocab和每个单词的预训练向量信息embeddings

vocab,embeddings = [],[]
with open('glove.6B.50d.txt','rt') as fi:
    full_content = fi.read().strip().split('\n')
for i in range(len(full_content)):
    i_word = full_content[i].split(' ')[0]
    i_embeddings = [float(val) for val in full_content[i].split(' ')[1:]]
    vocab.append(i_word)
    embeddings.append(i_embeddings)

3、将list转化为numpy形式

import numpy as np
vocab_npa = np.array(vocab)
embs_npa = np.array(embeddings)

4、向词汇表中添加特定的新词

#insert '<pad>' and '<unk>' tokens at start of vocab_npa.
vocab_npa = np.insert(vocab_npa, 0, '<pad>')
vocab_npa = np.insert(vocab_npa, 1, '<unk>')
print(vocab_npa[:10])

pad_emb_npa = np.zeros((1,embs_npa.shape[1]))   #embedding for '<pad>' token.
unk_emb_npa = np.mean(embs_npa,axis=0,keepdims=True)    #embedding for '<unk>' token.

#insert embeddings for pad and unk tokens at top of embs_npa.
embs_npa = np.vstack((pad_emb_npa,unk_emb_npa,embs_npa))
print(embs_npa.shape)

5、使用glove词汇表对dataset中的token进行编码。使用词汇表的向量信息初始化nn.embedding

# 1 对token编码
tokenid = np.where(vocab_npa==token)[0][0]
# 2 初始化模型embedding层参数
self.embed = nn.Embedding.from_pretrained(torch.from_numpy(embs_npa).float())

6、保存词汇表,以便以后使用

with open('vocab_npa.npy','wb') as f:
    np.save(f,vocab_npa)

with open('embs_npa.npy','wb') as f:
    np.save(f,embs_npa)
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用GloVe预训练模型进行文本分类的一般步骤: 1. 下载GloVe预训练模型 您可以从官网下载GloVe预训练模型,也可以在GitHub上找到已经训练好的模型。模型的训练数据集包括维基百科、Common Crawl等公共数据集。在这里,我们以维基百科的词向量为例,下载地址为:http://nlp.stanford.edu/data/glove.6B.zip。 2. 加载GloVe预训练模型 使用Python的NumPy库,可以方便地加载GloVe预训练模型。代码如下: ```python import numpy as np def load_glove_embeddings(glove_file_path): embeddings_index = {} with open(glove_file_path, encoding='utf-8') as f: for line in f: values = line.split() word = values[0] coefs = np.asarray(values[1:], dtype='float32') embeddings_index[word] = coefs return embeddings_index ``` 其中,`glove_file_path`是GloVe预训练模型文件的路径。函数返回一个字典,其中键为单词,值为对应的词向量。 3. 加载文本数据集 您可以使用Python的pandas库,将CSV或TSV格式的文本数据集加载为数据帧。例如: ```python import pandas as pd data = pd.read_csv('data.csv') ``` 其中,`data.csv`是文本数据集的文件名。数据集应该至少包含一个文本列和一个标签列。 4. 准备训练数据 将文本数据集中的单词转换为GloVe预训练模型中的词向量。可以使用以下代码: ```python def prepare_data(data, embeddings_index, max_words, max_seq_length): tokenizer = Tokenizer(num_words=max_words) tokenizer.fit_on_texts(data['text']) sequences = tokenizer.texts_to_sequences(data['text']) word_index = tokenizer.word_index data = pad_sequences(sequences, maxlen=max_seq_length) num_words = min(max_words, len(word_index)) + 1 embedding_matrix = np.zeros((num_words, 300)) for word, i in word_index.items(): if i > max_words: continue embedding_vector = embeddings_index.get(word) if embedding_vector is not None: embedding_matrix[i] = embedding_vector labels = to_categorical(data['label']) return data, labels, embedding_matrix ``` 其中,`data`是数据集,`embeddings_index`是GloVe预训练模型中的词向量,`max_words`是词汇表中单词的最大数量,`max_seq_length`是每个文本序列的最大长度。函数返回处理好的数据和标签。 5. 构建模型 使用Keras构建深度神经网络模型。可以使用以下代码: ```python from keras.models import Sequential from keras.layers import Embedding, LSTM, Dense def build_model(embedding_matrix, max_seq_length): model = Sequential() model.add(Embedding(embedding_matrix.shape[0], embedding_matrix.shape[1], weights=[embedding_matrix], input_length=max_seq_length, trainable=False)) model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2)) model.add(Dense(2, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) return model ``` 其中,`embedding_matrix`是处理好的词向量矩阵,`max_seq_length`是每个文本序列的最大长度。在这个例子中,我们使用一个LSTM层来处理序列数据,然后使用一个Dense层来输出分类结果。 6. 训练模型并评估 使用准备好的数据和构建好的模型进行训练。可以使用以下代码: ```python history = model.fit(X_train, y_train, epochs=10, batch_size=64, validation_split=0.2) score = model.evaluate(X_test, y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1]) ``` 其中,`X_train`和`y_train`是训练数据和标签,`X_test`和`y_test`是测试数据和标签。在这个例子中,我们使用了10个epoch来训练模型,并在测试集上评估了模型的性能。 这些是使用GloVe预训练模型进行文本分类的一般步骤。您可以根据您的数据集和任务特点进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值