本篇文章的第一部分是关于探索词嵌入(word embedding)向量空间。词嵌入是一种语言模型和文本表示技术,其中单词或短语从词汇表被映射到向量的高维空间中。通过这种方式,可以通过计算向量之间的距离来捕捉单词之间的语义关系。
1. 词嵌入向量空间探索
1.1 视觉探索
实验指导书建议使用CMU开发的词嵌入可视化 工具 进行探索。通过这个工具,你可以通过向量算术的例子来探索词向量空间的行为。向量算术指的是使用加法和减法等操作来组合或比较单词向量,以发现它们之间的语义关系。例如:
Spain is to Madrid as France is to...(西班牙之于马德里,如同法国之于……)这个问题的答案应该是“Paris”(巴黎),因为“Madrid”是西班牙的首都,“Paris”是法国的首都,这反映了首都这一概念在向量空间中的位置关系。
France is to wine as Germany is to...(法国之于葡萄酒,德国之于……)这里,答案可能是beer(啤酒),因为葡萄酒是法国的典型饮品,而啤酒是德国的典型饮品。
Man is to researcher as woman is to..."(男人之于研究员,女人之于……)这个例子用于探索性别偏见,答案应该是基于性别中立的职业描述,但也可能揭示词嵌入模型中的性别偏见。
这个实验鼓励你尝试尽可能多的例子来发现向量空间中的语义关系。通过不仅观察最接近的向量结果,还要观察前十个结果,你可以更深入地了解这些词嵌入模型可能存在的偏见。
链接:https://www.cs.cmu.edu/~dst/WordEmbeddingDemo/.
1.2 程序化探索
在这一部分,我们将通过编程的方式探索词嵌入向量空间。这里使用的是 gensim 库,它是一个专门用于从文档中自动提取语义主题的Python库,非常适合进行词嵌入模型的加载和操作。
首先,你需要安装gensim库。可以通过运行如下命令来安装。
pip install gensim
安装完成后,你可以加载一个预先训练好的词嵌入模型。这里,我们使用的是Google News数据集上训练的word2vec模型,该模型包含300万个词向量,每个向量的维度为300。模型相当大,大小约为1.6GB,因此下载和加载可能需要一些时间。
import gensim.downloader as api
vectors = api.load('word2vec-google-news-300')
一旦加载了模型,你就可以通过简单地使用单词作为索引来获取对应的词向量,例如vectors["dog"]将会返回 dog 这个单词的向量表示。
gensim还允许你进行向量算术操作。例如,你可以通过加减向量来探索语义关系,如找到与某些词性质相近的词。对于给定的向量v,你可以使用以下方法来找到最相似的词向量:
vectors.most_similar([v])
这个方法返回一个列表,列表中包含了与向量v最相似的单词及其相似度。
通过这种程序化的方法,你可以在大规模的词向量空间中进行高效的探索,发现复杂的语义关系,甚至挖掘潜在的偏见。例如,你可以通过向量运算来探索“国家-首都”、“物品-产地”等关系,或者探讨性别和职业的关系,以及它们如何在词嵌入空间中被表示。
2. 文本语料库创建词嵌入
2.1 背景
在这一部分,我们将学习如何使用一个文本语料库创建词嵌入。文本语料库名为“tp1-text8-fr-v1.txt”,大小为103MB,内容是从法文维基百科中提取的,主要是法语文本。
文章内容举例如下:
paul jules antoine meillet né le à moulins allier moulins allier
département allier et mort le à châteaumeillant cher département cher
est le principal liste de linguistes linguiste français des premières
décennies du il est aussi philologue d origine bourbonnaise fils d un
notaire de châteaumeillant cher département cher antoine meillet fait
ses études secondaires au lycée théodore de banville lycée de moulins
allier moulins étudiant à la faculté des lettres de paris à partir de
où il suit notamment les cours de louis havet il assiste également à
ceux de michel bréal au collège de france et de ferdinand de saussure à
l école pratique des hautes études en il est major de l agrégation de
grammaire il assure à la suite de saussure le cours de grammaire
comparée qu il complète à partir de par une conférence sur les langues
persanes en il soutient sa thèse pour le doctorat ès lettres recherches
sur l emploi du génitif accusatif en vieux slave en il occupe la chaire
2.2 代码
# 从gensim.models.doc2vec导入Word2Vec模型
from gensim.models.doc2vec import Word2Vec
# 设置向量的大小,训练周期数,和词汇表的最大大小
VECTOR_SIZE = 300
EPOCHS = 30
VOCAB_SIZE = 40000
# 初始化Word2Vec模型,设置相关参数
model = Word2Vec(vector_size=VECTOR_SIZE, min_count=3, \
epochs=EPOCHS, max_final_vocab=VOCAB_SIZE)
print("Building vocabulary...")
# 使用指定的文本文件构建模型的词汇表
model.build_vocab(corpus_file="tp1-text8-fr-v1.txt")
print("Vocabulary built with size " + str(len(model.wv)))
print("Starting training...")
# 根据文本语料库训练Word2Vec模型
model.train(corpus_file="tp1-text8-fr-v1.txt", \
total_examp