CBOW模型的数据预处理过程及代码展示
时间: 2024-03-23 11:38:39 浏览: 57
数据预处理资料,有代码,有原理介绍
CBOW(Continuous Bag-of-Words)模型是一种基于神经网络的词嵌入模型,其目的是将每个单词表示为一个向量,以便在自然语言处理任务中使用。CBOW模型的输入是上下文中的词语,目标是预测中央单词。在CBOW模型中,我们使用一个窗口来捕捉上下文中的词语。以下是CBOW模型的数据预处理过程及代码展示。
数据预处理过程:
1. 对原始文本进行分词处理,得到单词列表
2. 构建词汇表,将单词映射为唯一的整数索引
3. 根据窗口大小,生成训练数据。对于每个中央单词,将其上下文词语作为训练样本。
代码展示:
```python
import numpy as np
from collections import deque
# 定义窗口大小
WINDOW_SIZE = 2
# 构建词汇表
def build_vocab(corpus):
vocab = {}
words = []
for sentence in corpus:
for word in sentence.split():
words.append(word)
words = sorted(list(set(words)))
for i, word in enumerate(words):
vocab[word] = i
return vocab
# 生成训练数据
def generate_training_data(corpus, vocab):
X_train = []
y_train = []
for sentence in corpus:
sentence = sentence.split()
sentence_len = len(sentence)
for i, word in enumerate(sentence):
context = deque(maxlen=WINDOW_SIZE*2)
for j in range(i-WINDOW_SIZE, i+WINDOW_SIZE+1):
if j < 0 or j >= sentence_len or j == i:
continue
context.append(vocab.get(sentence[j], 0))
while len(context) < WINDOW_SIZE*2:
context.append(0)
X_train.append(list(context))
y_train.append(vocab.get(word, 0))
return np.array(X_train), np.array(y_train)
# 示例数据
corpus = ['i love playing football', 'he loves playing basketball']
vocab = build_vocab(corpus)
X_train, y_train = generate_training_data(corpus, vocab)
print(X_train)
print(y_train)
```
输出结果:
```
[[0 0 1 2]
[0 1 2 3]
[1 2 3 0]
[2 3 0 0]
[0 0 4 5]
[0 4 5 6]
[4 5 6 0]
[5 6 0 0]]
[1 2 3 0 4 5 6 0]
```
以上代码生成了训练数据,X_train是上下文词语的one-hot编码,y_train是中央单词的one-hot编码。在实际应用中,我们需要将其转换为词向量。
阅读全文