Python Word2Vec2024年8月29日 | 阅读 10 分钟 语言在人们的互动方式中起着至关重要的作用。人类天生就能够理解别人在谈论什么以及相应地说些什么。这种能力是通过多年来与他人和社会的持续互动而形成的。人们用于互动的语言被称为自然语言。 各种自然语言的规则是不同的。然而,自然语言有一个共同点:灵活性和演变性。 自然语言非常灵活。假设您正在开车,您的朋友说出这三个短语中的一个:“靠边停车”、“停车”或“结束”。您立刻明白他要求您停车。这是因为自然语言非常灵活。表达一个意思有多种方式。
这是一项艰巨的任务,其中涉及许多障碍。密歇根大学的这段视频演讲对 NLP 为什么如此困难进行了出色的解释。 在本文中,我们将实现用于使用 Python 的 Gensim 库创建词向量的 Word2Vec 词嵌入方法。然而,在直接进入编码部分之前,我们将首先简要回顾一些最常用的词嵌入方法及其优缺点。 Word2VecWord2Vec 是 Google 设计的一种算法,它使用神经网络来创建词嵌入,使得具有相似含义的嵌入指向相似的方向。例如,与“搏斗”、“战斗”等词相比,“关怀”、“照顾”等词的嵌入在向量空间中指向相似的方向。 这种模型还可以识别给定词的同义词,并为不完整的句子提供一些额外的词。它广泛用于许多应用,如文档检索、机器翻译系统、自动补全和预测。在本教程中,我们将学习如何使用 Gensim 库训练 Word2Vec 模型,以及加载预训练模型将词转换为向量。 词嵌入方法NLP(自然语言处理)是一个难题的原因之一是,与人类不同,计算机可以理解数字。我们需要将单词表示为计算机可以理解的数字格式。词嵌入是指单词的数字表示。 存在几种词嵌入方法,每种方法都有其优缺点。我们将在下面讨论其中三种
词袋模型词袋模型是一种最简单的词嵌入方法。接下来,我们将使用词袋模型来生成词嵌入。 我们将通过一个例子来查看词袋模型生成的词嵌入。假设您有一个包含三个句子的语料库。
要使用词袋模型将上述句子转换为其相应的词嵌入表示,我们需要执行以下步骤:
请注意,对于 S2,我们在词典中用 2 替换了“雨”,因为 S2 包含“雨”两次。 词袋模型的优缺点 词袋模型有两个优点和缺点。
示例 例如,它平等地将句子“车在罐子里”和“罐子在车里”视为截然不同的句子。 一种称为 n-gram 的词袋模型变体可以帮助保留词之间的关系。N-gram 指的是 n 个词的连续序列。例如,“你很不开心”的 2-gram 是“你”、“不”、“不开心”。虽然 n-gram 模型能够捕捉词之间的关系,但特征列表的大小会随着 n-gram 的过多而急剧增长。 TF-IDF 方案TF-IDF 方案是一种词袋模型,它不向嵌入向量中添加零和一,而是添加包含比零和一更有用信息的浮点数。TF-IDF 方案的理念是,在某个文档中频繁出现但在其他文档中很少出现的词对于分类更重要。 TF-IDF 由两个属性得出:词频 (TF) 和逆文档频率 (IDF)。 词频是指一个词在文档中出现的次数,可以计算为 词频 = (一个词出现的次数)/(文档中的总词数) 示例 例如,如果我们看前面提到的句子 S1,“我爱下雨”,句子中的每个词都出现一次,因此频率为 1。相反,对于 S2,例如,“下雨消失”,“下雨”的频率是两个,而其他词的频率是 1。 IDF 指的是文档总数除以词出现的文档数的对数的,可以计算为 IDF(词) = Log((文档总数)/(包含该词的文档数)) 例如,“下雨”的 IDF 值为 0.1760,因为文档总数为 3,而“下雨”出现在 2 个文档中。因此,log(3/2) 为 0.1760。另一方面,如果您查看第一个句子中的“爱”,它出现在三个文档中的一个中,因此其 IDF 值为 log(3),即 0.4771。 TF-IDF 的优缺点 尽管 TF-IDF 是对基本词袋模型的一种改进,并且在自然语言处理任务中产生了更好的结果,但总体优缺点与基本方法相同。我们需要创建一个大的稀疏矩阵,这比基本的词袋模型需要更多的计算。 Gensim Word2VecGensim 是一个 Python 模块,一个开源项目,可用于主题建模、文档相似性以及使用大型语料库计算相似度。Gensim 的算法相对于语料库的大小是内存高效的。它还被设计为支持其他向量空间算法。 Gensim 在一个名为 Word2Vec 的类中提供了 Word2Vec 算法的实现以及一些其他 NLP(自然语言处理)功能。让我们看看如何使用 Gensim 创建 Word2Vec 模型。 使用 Gensim 构建 Word2Vec 模型 Gensim Word2Vec 类需要的参数
Python Word2Vec 示例源代码 输出 Some Output[nltk__data] Download module pink to /root/nltk__data . . . . . . . . . . . . [nltk_data] Unzipping corpora/brown.zip. Vector for like: [ 2.576164 -0.2537464 -2.5507743 3.1892483 -1.8316503 2.6448352 -0.06407754 0.5304831 0.04439827 0.45178193 -0.4788834 -1.2661372 9.0838386 0.3944989 -8.3990848 8.303479 -8.869455 -9.988338 -0.36665946 -0.38986085 0.97970368 -8.0898065 -0.9784398 -0.5798809 -8.809848 8.4033384 -9.0886359 9.9894895 -0.9980708 -9.9975308 9.9987594 -8.887549 -9.6990344 0.88058434 -3.0898548 9.9833578 0.93773608 9.5869758 -9.8643668 -9.5568909 -0.33570558 9.4908848 0.84859069 -9.6389756 0.08789899 -8.9980007 -9.5788864 -0.9047495 9.7374605 8.9498986 ] three words similar to car ('boats', 0.754489303685488) ('trucks', 0.798306666589606) ('block', 0.693647380389099) Word2Vec 可视化在上面的可视化中,我们可以看到“学生”和“老师”指向一个方向,像印度、德国和法国这样的国家指向另一个方向,而“街道”、“船只”和“卡车”等词指向另一个方向。这表明我们的 Word2Vec 模型已经学习了能够根据含义区分词语的嵌入。 加载 Gensim 预训练模型Gensim 还附带了一些预置模型,如下所示。 示例源代码 输出 fasttext-wiki-news-subword-300 - - - conceptnet-numberbatch-17-06-300 - - - word2vec-ruscorporaa-300 - - - word2vec-google-news-300 - - - glike-wiki-gigawords-50 - - - glike-wiki-gigawords-100 - - - glike-wiki-gigawords-200 - - - glike-wiki-gigawords-300 - - - glike-twitter_-25 - - - glike-twitter_-50 - - - glike-twitter_-100 - - - glike-twitter_-200 - - - __testing_word2vec--matrix--synopsis - - - 让我们加载 word2vec-google-news-300 模型并执行各种任务,例如查找首都与国家的关系、获取相似的词语以及计算余弦相似度。 源代码 输出 [= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ] 100.0% 1662.8/1662.8MB downloaded Finding Capitals of Britain: (Paris - France) + Britain - - - [('London', 0.7541897892951965)] Finding Capitals of German: (Berlin - Germany) + German - - - [('Delhi', 0.7268318338974)] Five similar words to BMW: - - - ('Audi', 0.79329923930835) ('Mercedes_Benz', 0.68347864990234) ('Porsche', 0.72721920022583) ('Mercedes', 0.707384757041931) ('Volkswagen', 0.65941150188446) 3 similar words to beautiful: - - - ('gorgeous', 0.833004455566406) ('likely', 0.81063621635437) ('stunningly_beautiful', 0.732941390838623) Cosine similarity between battle and fight: - - - - - - 0.721284 Cosine similarity between fight and like: - - - - - - 0.1350612 总结恭喜!您已经了解了 Word2Vec 的概念以及如何创建将词语转换为向量的模型。Word2Vec 是一种将单词转换为向量的算法,以便将相似的单词聚集在向量空间中。Word2Vec 广泛应用于文档相似性和检索、机器翻译等众多应用中。现在您也可以在您的项目中使用了。 感谢阅读! |
我们请求您订阅我们的新闻通讯以获取最新更新。