词向量代码
时间: 2023-07-10 11:16:45 浏览: 54
以下是一个简单的词向量实现的Python代码:
```python
import numpy as np
class Word2Vec:
def __init__(self, corpus, embedding_size=100, window_size=5, learning_rate=0.01):
self.vocab = set(corpus) # 词汇表
self.word2idx = {w: i for i, w in enumerate(self.vocab)} # 单词到索引的映射
self.idx2word = {i: w for i, w in enumerate(self.vocab)} # 索引到单词的映射
self.embedding_size = embedding_size # 词向量维度
self.window_size = window_size # 窗口大小
self.learning_rate = learning_rate # 学习率
self.W1 = np.random.randn(len(self.vocab), embedding_size) # 输入层到隐藏层的权重
self.W2 = np.random.randn(embedding_size, len(self.vocab)) # 隐藏层到输出层的权重
def train(self, corpus, epochs=100):
for epoch in range(epochs):
loss = 0
for i, word in enumerate(corpus):
# 获取上下文单词
context = corpus[max(0, i - self.window_size):min(i + self.window_size, len(corpus))]
context.remove(word)
# 将目标单词和上下文单词转化为one-hot向量
x = np.zeros(len(self.vocab))
x[self.word2idx[word]] = 1
y = np.zeros(len(self.vocab))
for c in context:
y[self.word2idx[c]] = 1
# 前向传播
h = np.dot(x, self.W1)
u = np.dot(h, self.W2)
y_pred = np.exp(u) / np.sum(np.exp(u))
# 计算损失函数
loss += -np.sum(y * np.log(y_pred))
# 反向传播
delta_u = y_pred - y
delta_h = np.dot(delta_u, self.W2.T)
self.W2 -= self.learning_rate * np.outer(h, delta_u)
self.W1 -= self.learning_rate * np.outer(x, delta_h)
print('Epoch %d, loss: %.4f' % (epoch + 1, loss))
def get_embedding(self, word):
return self.W1[self.word2idx[word]]
```
该代码实现了一个简单的词向量模型,通过输入文本语料,训练得到每个单词的词向量。具体实现过程如下:
1. 初始化词汇表和单词到索引的映射,以及输入层到隐藏层和隐藏层到输出层的权重。
2. 对于每个目标单词,获取其上下文单词,将目标单词和上下文单词转化为one-hot向量,并进行前向传播,得到预测的上下文单词的概率分布。
3. 计算损失函数,并进行反向传播,更新权重。
4. 重复2-3步骤,直到训练完成。
在训练完成后,可以使用get_embedding方法获取每个单词的词向量。
相关推荐
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)