Kaggle word2vec NLP 教程 第三部分:词向量的更多乐趣

  • 时间:
  • 浏览:2
  • 来源:uu快3下载网站_uu快3开户二维码

IMDB 数据集的另三个 挑战是可变长度评论。 朋友需要找到本身土土办法来获取单个单词向量并将它们转换为每个评论的长度相同的结构集。

现在,朋友还不能 调用那些函数来为每个段落创建平均向量。 以下操作将需要几分钟:

中间的函数将为每个评论提供另三个 numpy数组,每个数组的结构都与簇数相等。 最后,朋友为训练和测试集创建了质心袋,刚刚训练随机森林并提取结果:

原文:Bag of Words Meets Bags of Popcorn

可能向量的元素平均值非要 产生惊人的结果,或许朋友还不能 以更聪明的土土办法实现? 加权单词向量的标准土土办法是应用“tf-idf”权重,它衡量给定单词在给定文档集中的重要程度。 在 Python 中提取 tf-idf 权重的本身土土办法,是使用 scikit-learn 的TfidfVectorizer,它具有这类于朋友在第 1 次责中使用的CountVectorizer的接口。刚刚,当朋友尝试以这种 土土办法加权朋友的单词向量时,朋友发现非要 实质的性能改善。

现在,每个单词的聚类分布都存储在idx中,而原始 Word2Vec 模型中的词汇表仍存储在model.index2word中。 为方便起见,朋友将它们压缩成另三个 字典,如下所示:

以下代码基于第 2 次责的代码构建了结构向量的平均值。

最大的是因为 是,在朋友的教程中,平均向量和使用质心会失去单词的顺序,这使得它与词袋的概念非常这类。性能这类(在标准误差范围内)的事实使得所有本身土土办法实际上相同。

你可能会问:为那些词袋更好?

朋友还不能 看过那些簇的质量各不相同。 有些是有道理的 - 簇 3 主要含有名称,而簇 6- 8含有相关的形容词(簇 6 是我最喜欢的)。 当事人面,簇 5 特别神秘:龙虾和鹿有那些并肩之处(除了是两只动物)? 簇 0 更糟糕:阁楼和套房似乎属于另三个 东西,但它们似乎不属于苹果4 和护照。 簇 2 含有…可能与战争有关的词? 我知道你朋友的算法在形容词上效果最好。

有些要尝试的事情:

…返回另三个 1x100 的numpy数组。

结果很有意思:

自豪地采用谷歌翻译

协议:CC BY-NC-SA 4.0

现在朋友有了训练好的模型,对单词有有些语义理解,朋友应该如可使用它? 可能你看它的手中,第 2 次责训练的 Word2Vec 模型由词汇表中每个单词的结构向量组成,存储在另三个 名为syn0numpy数组中:

这特别抽象,有些让朋友仔细看看朋友的簇含有那些。 你的簇可能会有所不同,可能 Word2Vec 依赖于随机数种子。 这是另三个 循环,打印出簇 0 到 9 的单词:

Word2Vec 创建语义相关单词的簇,刚刚另本身可能的土土办法是利用簇中单词的这类性。 以这种 土土办法来分组向量称为“向量量化”。 为了实现它,朋友首先需要找到单词簇的中心,朋友还不能 通过使用聚类算法(如 K-Means)来完成。

朋友发现与第 1 次责中的词袋相比,中间的代码给出了相同(或略差)的结果。

译者:飞龙

其次,在已发表的文献中,分布式单词向量技术已被证明优于词袋模型。在本文中,在 IMDB 数据集上使用了本身名为段落向量的算法,来生成迄今为止最先进的有些结果。在本身程度上,它比朋友在这里尝试的土土办法更好,可能向量平均和聚类会丢失单词顺序,而段落向量会保留单词顺序信息。

朋友发现这产生了比偶然更好的结果,刚刚表现比词袋低了几个百分点。

接下来,使用平均段落向量来训练随机森林。 请注意,与第 1 次责一样,朋友非要使用标记的训练评论来训练模型。

具有较大 K 的 K-Means 聚类可能非常慢;以下代码在我的计算机上花了 40 多分钟。 下面,朋友给 K-Means 函数设置另三个 计时器,看看它需要多长时间。

首先,在更多文本上训练 Word2Vec 应该会大大提高性能。谷歌的结果基于从超过十亿字的语料库中学到的单词向量;朋友标记和未标记的训练集合在并肩非要 1100 万字左右。方便的是,Word2Vec 提供了加载由谷歌原始 C 工具输出的任何预训练模型的函数,刚刚也还不能 用 C 训练模型刚刚将其导入 Python。

可能每个单词前会 100 维空间中的向量,朋友还不能 使用向量运算来组合每个评论中的单词。 朋友尝试的本身土土办法是简单地平均给定的评论中的单词向量(为此,朋友删除了停止词,这只会增加噪音)。

第三次责的代码在这里。

在 K-Means 中,朋友需要设置的另三个 参数是“K”,可能是簇的数量。 朋友应该如可决定要创建几个个簇? 试错法表明,每个簇平均非要六个单词左右的小簇,比具有多个词的大簇产生更好的结果。 聚类代码如下。 朋友使用 scikit-learn 来执行朋友的 K-Means。

无论如可,现在朋友为每个单词分配了另三个 簇(或“质心”),朋友还不能 定义另三个 函数将评论转换为质心袋。 这就像词袋一样,但使用语义相关的簇而前会 单个单词:

syn0中的行数是模型词汇表中的单词数,列数对应于朋友在第 2 次责中设置的结构向量的大小。将最小单词计数设置为 40 ,总词汇量为 16,492 个单词,每个词有 100 个结构。 还不能 通过以下土土办法访问单个单词向量: