CS224n Assignment1


通过svd实现词向量的生成

问题1.1:实现distinct_words

编写一个方法计算语料库中出现的不同单词:
把语料库中的每个词存入列表中,再把列表转为集合,就去除了重复的词,集合的长度就是不同单词的数量。

1
2
corpus_words=[word for sentence in corpus for word in sentence]
corpus_words=sorted(set(corpus_words)) n_corpus_words=len(corpus_words)

问题 1.2:实现compute_co_occurrence_matrix

创建共现矩阵,共现矩阵M统计了词语之间相邻出现的频率,对于一个中心词w,记录围绕w以n为窗口大小的单词。$M_{i,j}$统计了$w_i$和$w_j$在相邻出现的次数。

1
2
3
4
5
6
7
8
9
10
M = np.zeros((n_words, n_words), dtype=np.float64)
word2ind = {word : i for i, word in enumerate(words)}
for sentence in corpus:
n=len(sentence)
for i in range(n):
for j in range(i-window_size,i+window_size+1):
if j<0 or j>=n or j==i:
continue
else:
M[word2ind[sentence[i]]][word2ind[sentence[j]]]+=1

初始化矩阵M遍历统计每个单词作为中心词的单词出现情况

问题 1.3:实现 reduce_to_k_dim

构建一个对矩阵进行降维生成k维词向量的方式,使用[[奇异值分解SVD]]提取前k个分量,生成一个新的k维词向量矩阵

1
2
svd = TruncatedSVD(n_components=k, n_iter=n_iters)
M_reduced = svd.fit_transform(M)

通过封装好的函数TruncatedSVD得到一个降至k维,迭代n_iters次生成的svd方式,并用于处理M

Question 1.4: Implement plot_embeddings

绘制词向量图像,因为前面将词向量转化成了2维向量,所以可以在平面上画出

1
2
3
4
5
for word in words:
[x, y] = M_reduced[word2ind[word]]
plt.scatter(x, y, marker='x', color='red')
plt.text(x, y, word, fontsize=9)
plt.show()


CS224n Assignment1
https://qinchuid.github.io/2025/12/23/1/
作者
琴吹滴
发布于
2025年12月23日
许可协议