[Brendan Shillingford,Yannis Assael,Chris Dyer]
对于此实用性,您将获得部分完整的Ipython笔记本电脑,这是一个基于交互式Web的Python计算环境,使我们可以混合文本,代码和交互式图。
我们将使用Python软件包gensim中包含的Word2Vec实现来培训有关TED Talk和Wikipedia数据的Word2Vec模型。训练模型后,我们将分析和可视化学习的嵌入。
在实验室工作站上,克隆实用的存储库并运行. install-python.sh在终端中. install-python.sh shell脚本,以使用Python 3安装Anaconda,以及此实用性所需的包装。
在存储库目录中运行ipython notebook ,然后在浏览器中打开practical.ipynb笔记本。
用于下载数据集和预处理的代码已预先编写以节省时间。但是,预计考虑到原始数据,您需要在将来的实践中执行这样的任务。阅读并确保您理解。通常,一个人使用nltk之类的库来简化此任务,但是我们在这里没有这样做,而是选择通过Python的re模块使用正则表达式。
列出最常见的单词及其事件的列表。看看前40个单词。您可能需要使用sklearn.feature_extraction.text模块的CountVectorizer类或collections模块的Counter类。
取上前1000个单词,并绘制其计数的直方图。笔记本中已经给出了交互式直方图的绘图代码。
Handin:显示频率分布直方图。
现在我们有了一个处理过的句子列表,让我们运行Word2Vec培训。首先在https://radimrehurek.com/gensim/models/word2vec.html上读取Word2Vec的Gensim文档,以找出如何使用Word2Vec类。学习嵌入min_count=10以便忽略很少的单词。培训过程应花费不到半分钟。
如果您训练有素的Word2Vec实例称为model_ted ,则应该能够使用len(model_ted.vocab)检查词汇大小,该词汇大小应大约为14427。尝试使用most_similar()方法返回“男人”和“计算机”最相似单词的列表。
Handin:找到一些有趣和/或令人惊讶的最近邻居的单词。
Handin:在T-SNE图中找到一个有趣的簇。
可选的是,对于热情的学生:尝试使用Gensim文档中所述的索引操作员手动检索两个单词向量,然后计算其余弦距离(回想一下,它被定义为np.dot()和np.linalg.norm()感兴趣,有关详细信息,请参见Numpy文档。将此与Gensim功能计算的距离进行比较。
我们为Wikitext-2数据集提供了下载/预处理代码(类似于上一个代码)。该代码使用数据的随机子样本,因此它的大小与TED谈话数据相当。
重复与上述相同的分析,但在此数据集上。
HANDIN:找到几个单词,与最近的邻居相似。
Handin:在T-SNE图中找到一个有趣的簇。
HANDIN:与TED Talk Data学到的数据相比,在数据上学习的嵌入在数据上有明显的差异?
如果您有额外的时间,请尝试在嵌入式上执行K-均值聚类(例如使用sklearn.cluster.kmeans ),调整簇数,直到您获得有趣或有意义的群集为止。
请参阅上面的粗体“ Handin: ”部分。在纸上或口头上,向实用的演示者展示您对这些的反应以签约。