带有示例的词嵌入和 Word2Vec 模型

什么是词嵌入?

单词嵌入 是一种词语表示类型,可让机器学习算法理解具有相似含义的单词。它是一种语言建模和特征学习技术,使用神经网络、概率模型或对单词共现矩阵进行降维,将单词映射到实数向量中。一些词嵌入模型包括 Word2vec(谷歌)、Glove(斯坦福)和 fastest(Facebook)。

词嵌入也称为分布式语义模型、分布式表示、语义向量空间或向量空间模型。当你读到这些名字时,你会遇到语义这个词,这意味着将相似的单词归为一类。例如,苹果、芒果、香蕉等水果应该放在附近,而书籍则应该远离这些词。从更广泛的意义上讲,词嵌入将创建水果向量,而水果向量将远离书籍的向量表示。

Word Embedding 用在什么地方?

词嵌入有助于特征生成、文档聚类、文本分类和自然语言处理任务。让我们列出它们并对每个应用进行一些讨论。

  • 计算相似的词: 词向量用于建议与预测模型中的单词相似的单词。此外,它还会建议不相似的单词以及最常见的单词。
  • 创建一组相关词: 它用于语义分组,将具有相似特征的事物分组在一起,将相差较远的事物分组。
  • 文本分类的特征: 文本被映射到向量数组中,这些向量数组被输入到模型中进行训练和预测。基于文本的分类器模型无法在字符串上进行训练,因此这会将文本转换为机器可训练的形式。此外,其构建语义的功能有助于基于文本的分类。
  • 文档聚类: 是另一个广泛使用 Word Embedding Word2vec 的应用
  • 自然语言处理: 在许多应用中,词嵌入非常有用,并且比特征提取阶段更胜一筹,例如词性标记、情感分析和句法分析。现在我们对词嵌入有了一些了解。还介绍了一些实现词嵌入的不同模型。整个词嵌入教程都集中在其中一个模型(Word2vec)上。

什么是 Word2vec?

词向量 是一种生成词向量以更好地表示单词的技术/模型。它是一种自然语言处理方法,可以捕获大量精确的句法和语义单词关系。它是一种浅层两层神经网络,一旦经过训练,就可以检测同义词并为部分句子建议附加单词。

在进一步学习本 Word2vec 教程之前,请先了解浅层神经网络和深度神经网络之间的区别,如下面的 Word 嵌入示例图所示:

浅层神经网络仅由输入和输出之间的一个隐藏层组成,而深层神经网络在输入和输出之间包含多个隐藏层。输入受节点控制,而隐藏层和输出层包含神经元。

浅层学习与深度学习
浅层学习与深度学习

Word2vec 是一个两层网络,其中输入一个隐藏层和一个输出。

Word2vec是由Google的Tomas Mikolov领导的一组研究员开发的,比潜在语义分析模型更好、更高效。

为什么使用 Word2vec?

Word2vec 在向量空间表示中表示单词。单词以向量的形式表示,并且放置方式是将含义相似的单词放在一起,将含义不同的单词放在较远的位置。这也被称为语义关系。神经网络不理解文本,而是只理解数字。词嵌入提供了一种将文本转换为数字向量的方法。

Word2vec 重建了单词的语言上下文。在进一步了解之前,让我们先了解一下什么是语言上下文?在一般的生活场景中,当我们说话或写作进行交流时,其他人会试图弄清楚这句话的目的是什么。例如,“印度的气温是多少”,这里的上下文是用户想知道“印度的气温”,也就是上下文。简而言之,句子的主要目的是上下文。围绕口语或书面语言(披露)的单词或句子有助于确定上下文的含义。Word2vec 通过上下文学习单词的向量表示。

Word2vec 的作用是什么?

词嵌入之前

重要的是要知道在词嵌入之前使用哪种方法以及它的缺点是什么,然后我们将讨论如何使用 Word2vec 方法克服词嵌入的缺点。最后,我们将讨论 Word2vec 的工作原理,因为了解它的工作原理很重要。

潜在语义分析方法

这是在词嵌入之前使用的方法。它使用了词袋的概念,其中单词以编码向量的形式表示。它是一种稀疏向量表示,其维度等于词汇量的大小。如果该词出现在词典中,则将其计入,否则不计入。要了解更多信息,请参阅下面的程序。

Word2vec 示例

Word2vec 示例

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()
data_corpus = ["guru99 is the best site for online tutorials. I love to visit guru99."]
vocabulary = vectorizer.fit(data_corpus)
X = vectorizer.transform(data_corpus)

print(X.toarray())
print(vectorizer.get_feature_names_out())

输出:

[[1 2 1 1 1 1 1 1 1 1]]

[u'best', u'guru99', u'is', u'love', u'online', u'sitefor', u'the', u'to', u'tutorials', u'visit']

代码说明

  1. CountVectorizer 是用于根据词汇量来存储词汇表的模块。这是从 sklearn 导入的。
  2. 使用 CountVectorizer 类创建对象。
  3. 将数据写入要放入 CountVectorizer 中的列表中。
  4. 数据适合于从 CountVectorizer 类创建的对象。
  5. 应用词袋法,使用词汇表对数据中的单词进行计数。如果词汇表中没有单词或标记,则将索引位置设置为零。
  6. 第 5 行中的变量 x 被转换为数组(可用于 x 的方法)。这将提供第 3 行中提供的句子或列表中每个标记的计数。
  7. 这将显示使用第 4 行中的数据进行拟合时词汇表的一部分的特征。

在潜在语义方法中,行表示唯一单词,而列表示该单词在文档中出现的次数。它是以文档矩阵的形式表示单词。词频逆文档频率 (TFIDF) 用于计算文档中单词的频率,即文档中该词的频率/整个语料库中该词的频率。

词袋方法的缺点

  • 它忽略了单词的顺序,例如,this is bad = bad is this。
  • 它忽略了单词的上下文。假设我写下“他喜欢读书。最好的教育是在书中找到的”。它会创建两个向量,一个用于“他喜欢读书”,另一个用于“最好的教育是在书中找到的”。它会将它们视为正交的,这使它们独立,但实际上,它们是相互关联的

为了克服这些限制,开发了词嵌入,并且 Word2vec 是一种实现词嵌入的方法。

Word2vec 如何工作?

Word2vec 通过预测单词周围的上下文来学习单词。例如,让我们以“He 足球。”

我们要计算“loves”这个词的Word2vec。

假设

loves =  Vin. P(Vout / Vin) is calculated	
where,	
Vin is the input word. 	
P is the probability of likelihood.	
Vout is the output word. 	

Word 在语料库中的每个单词上移动。对单词之间的句法和语义关系进行编码。这有助于找到相似和类似的单词。

单词的所有随机特征 计算得出。这些特征会根据相邻词或上下文词的变化或更新, 反向传播 方法。

另一种学习方式是,如果两个词的上下文相似或者两个词具有相似的特征,那么这些词就是相关的。

词向量 Archi质地

Word2vec 使用两种架构:

  1. 连续词袋(CBOW)
  2. 跳过克

在进一步学习 Word2vec 教程之前,让我们从单词表示的角度讨论一下这些架构或模型为何如此重要。学习单词表示本质上是无监督的,但需要目标/标签来训练模型。Skip-gram 和 CBOW 将无监督表示转换为监督形式以进行模型训练。

在 CBOW 中,使用周围上下文窗口的窗口来预测当前单词。例如,如果 wI-1,wI-2,wi + 1,wi + 2给定单词或上下文,该模型将提供 wi

Skip-Gram 与 CBOW 相反,这意味着它根据单词预测给定的序列或上下文。你可以反转示例来理解它。如果 wi 给出,这将预测上下文或 wI-1,wI-2,wi + 1,wi+2。

Word2vec 提供了在 CBOW(连续词袋)和 skim-gram 之间进行选择的选项。这些参数是在模型训练期间提供的。可以选择使用负采样或分层 softmax 层。

连续的词袋

让我们画一个简单的Word2vec示例图来理解连续词袋架构。

连续词袋模型 Archi质地

连续词袋模型 Archi质地

让我们用数学方法计算一下这些方程。假设 V 是词汇表大小,N 是隐藏层大小。输入定义为 { xI-1,X我-2, x我+ 1, xi + 2}。我们通过将 V * N 相乘来获得权重矩阵。通过将输入向量与权重矩阵相乘来获得另一个矩阵。这也可以通过以下等式来理解。

h=xitW

其中 xit?W 分别为输入向量和权重矩阵,

要计算上下文和下一个单词之间的匹配度,请参考以下公式

u=预测表示*h

其中,预测表示是通过上式中的模型 h 获得的。

Skip-Gram 模型

Skip-Gram 方法用于根据输入词预测句子。为了更好地理解它,让我们绘制如下 Word2vec 示例中的图表。

Skip-Gram 模型

Skip-Gram 模型

我们可以将其视为连续词袋模型的逆模型,其中输入是单词,模型提供上下文或序列。我们还可以得出结论,目标被输入到输入层,输出层被复制多次以适应所选的上下文单词数量。所有输出层的误差向量被相加,以通过反向传播方法调整权重。

选择哪种型号?

CBOW 比 skip gram 快几倍,并为常用词提供更好的频率,而 skip gram 需要少量的训练数据,甚至可以表示罕见的单词或短语。

Word2vec 与 NLTK 的关系

NLTK 是自然语言工具包。它用于文本的预处理。可以执行不同的操作,例如词性标记、词形还原、词干提取、停用词删除、删除罕见词或最少使用的词。它有助于清理文本,也有助于从有效词中准备特征。另一方面,Word2vec 用于语义(紧密相关的项目在一起)和句法(序列)匹配。使用 Word2vec,可以找到相似的词、不相似的词、降维等等。Word2vec 的另一个重要特性是将文本的高维表示转换为低维向量。

在哪里使用 NLTK 和 Word2vec?

如果要完成如上所述的一些通用任务,如标记化、POS 标记和解析,则必须使用 NLTK,而要根据某些上下文、主题建模或文档相似性预测单词,则必须使用 Word2vec。

通过代码说明 NLTK 与 Word2vec 的关系

NLTK 和 Word2vec 可以一起使用来查找相似的单词表示或句法匹配。NLTK 工具包可用于加载 NLTK 附带的许多包,并且可以使用 Word2vec 创建模型。然后可以在实时单词上进行测试。让我们在下面的代码中看看两者的组合。在进一步处理之前,请查看 NLTK 提供的语料库。您可以使用命令下载

nltk(nltk.download('all'))

NLTK 和 Word2vec 的关系

使用 NLTK 下载语料库

请参阅屏幕截图中的代码。

import nltk
import gensim
from nltk.corpus import abc

model= gensim.models.Word2Vec(abc.sents())
X= list(model.wv.vocab)
data=model.most_similar('science')
print(data)

代码帮助理解 NLTK 与 Word2vec 的关系

输出:

[('law', 0.9415997266769409), ('practice', 0.9276568293571472), ('discussion', 0.9259148836135864), ('agriculture', 0.9257254004478455), ('media', 0.9232194423675537), ('policy', 0.922248125076294), ('general', 0.9166069030761719), ('undertaking', 0.916458249092102), ('tight', 0.9129181504249573), ('board', 0.9107444286346436)]

代码说明

  1. 导入了 nltk 库,您可以从中下载我们将在下一步中使用的 abc 语料库。
  2. Gensim 已导入。如果未安装 Gensim Word2vec,请使用命令“pip3 install gensim”进行安装。请参见下面的屏幕截图。
使用 PIP 安装 Gensim

使用 PIP 安装 Gensim
  1. 使用nltk.download('abc')导入已下载的语料库abc。
  2. 将文件传递给模型 Word2vec,使用 Gensim 将该文件作为句子导入。
  3. 词汇以变量的形式存储。
  4. 由于这些文件与科学相关,因此在样本词科学上对模型进行了测试。
  5. 这里模型预测了类似的单词“science”。

激活器和 Word2Vec

神经元的激活函数定义了给定一组输入时该神经元的输出。从生物学上讲,它受到我们大脑中一种活动的启发,即使用不同的刺激激活不同的神经元。让我们通过下图来了解激活函数。

Word2vec 中的激活函数

理解激活函数

这里 x1,x2,..x4 是神经网络的节点。

w1, w2, w3 是节点的权重,

? 是作为激活函数的所有权重和节点值的总和。

为什么要有激活函数?

如果不使用激活函数,输出将是线性的,但线性函数的功能是有限的。要实现复杂的功能,如对象检测、图像分类、使用语音输入文本和许多其他非线性输出,需要使用激活函数来实现。

词嵌入(Word2vec)中激活层的计算方式

Softmax 层(归一化指数函数)是激活或触发每个节点的输出层函数。另一种方法是分层 softmax,其复杂度通过 O(log2V),其中 softmax 为 O(V),V 是词汇量。它们之间的区别在于分层 softmax 层的复杂性降低。要了解其(分层 softmax)功能,请查看下面的 Word embedding 示例:

分层 Softmax 树结构

分层的 softmax 树状结构

假设我们要计算观察到这个词的概率 给定一个特定的上下文。从根节点到叶节点的流动将首先移动到节点 2,然后移动到节点 5。因此,如果我们的词汇量为 8,则只需要进行三次计算。因此,它允许分解、计算一个单词的概率().

除了 Hierarchical Softmax 之外还有哪些其他可用选项?

如果从一般意义上讲,对于词嵌入,可用的选项有区分 Softmax、CNN-Softmax、重要性采样、自适应重要性采样、噪声对比估计、负采样、自规范化和不频繁规范化。

具体来说,对于 Word2vec,我们有负采样可用。

负采样是一种对训练数据进行采样的方法。它有点像随机梯度下降,但有一些区别。负采样只寻找负面训练示例。它基于噪声对比估计,随机采样单词,而不是在上下文中。这是一种快速训练方法,随机选择上下文。如果预测词出现在随机选择的上下文中,则两个向量彼此接近。

可以得出什么结论?

激活器激发神经元,就像我们的神经元使用外部刺激激发一样。Softmax 层是输出层函数之一,在词嵌入的情况下激发神经元。在 Word2vec 中,我们有分层 softmax 和负采样等选项。使用激活器,可以将线性函数转换为非线性函数,并可以使用此类函数实现复杂的机器学习算法。

什么是 Gensim?

金西姆 是一个开源主题建模和自然语言处理工具包,实现于 Python 和 Cython。Gensim 工具包允许用户导入 Word2vec 进行主题建模,以发现文本主体中的隐藏结构。Gensim 不仅提供了 Word2vec 的实现,还提供了 Doc2vec 和 FastText 的实现。

本教程全部涉及 Word2vec,因此我们将坚持当前主题。

如何使用 Gensim 实现 Word2vec

到目前为止,我们已经讨论了什么是 Word2vec、它的不同架构、为什么从词袋转向 Word2vec,以及 Word2vec 与 NLTK 以及实时代码和激活函数之间的关系。

以下是使用 Gensim 实现 Word2vec 的分步方法:

步骤1)数据收集

实现任何机器学习模型或实现自然语言处理的第一步是数据收集

请观察数据来构建智能聊天机器人,如下面的 Gensim Word2vec 示例所示。

[{"tag": "welcome",
"patterns": ["Hi", "How are you", "Is any one to talk?", "Hello", "hi are you available"],
"responses": ["Hello, thanks for contacting us", "Good to see you here"," Hi there, how may I assist you?"]

        },
{"tag": "goodbye",
"patterns": ["Bye", "See you later", "Goodbye", "I will come back soon"],
"responses": ["See you later, thanks for visiting", "have a great day ahead", "Wish you Come back again soon."]
        },

{"tag": "thankful",
"patterns": ["Thanks for helping me", "Thank your guidance", "That's helpful and kind from you"],
"responses": ["Happy to help!", "Any time!", "My pleasure", "It is my duty to help you"]
        },
        {"tag": "hoursopening",
"patterns": ["What hours are you open?", "Tell your opening time?", "When are you open?", "Just your timing please"],
"responses": ["We're open every day 8am-7pm", "Our office hours are 8am-7pm every day", "We open office at 8 am and close at 7 pm"]
        },

{"tag": "payments",
"patterns": ["Can I pay using credit card?", " Can I pay using Mastercard?", " Can I pay using cash only?" ],
"responses": ["We accept VISA, Mastercard and credit card", "We accept credit card, debit cards and cash. Please don’t worry"]
        }
   ]

以下是我们从数据中了解到的情况

  • 这些数据包含标签、模式和响应三部分。标签是意图(讨论的主题是什么)。
  • 数据为 JSON 格式。
  • 模式是用户向机器人提出的问题
  • 响应是聊天机器人对相应问题/模式提供的答案。

步骤2)数据预处理

处理原始数据非常重要。如果将清理过的数据输入到机器中,那么模型将做出更准确的反应,并更有效地学习数据。

此步骤涉及删除停用词、词干提取、不必要的单词等。在继续之前,重要的是加载数据并将其转换为数据框。请参阅下面的代码

import json
json_file =’intents.json'
with open('intents.json','r') as f:
    data = json.load(f)

代码说明:

  1. 由于数据是 JSON 格式,因此导入的是 JSON
  2. 文件存储在变量中
  3. 文件已打开并加载到数据变量中

现在数据已导入,是时候将数据转换为数据框了。请参阅以下代码以了解下一步

import pandas as pd
df = pd.DataFrame(data)
df['patterns'] = df['patterns'].apply(', '.join) 

代码说明:

1.使用上面导入的pandas将数据转换成数据框。

2. 它会将列模式中的列表转换为字符串。

from nltk.corpus import stopwords
from textblob import Word
stop = stopwords.words('english')
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))
df['patterns't']= df['patterns''].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation)
df['patterns']= df['patterns'].str.replace('[^\w\s]','')
df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if  not x.isdigit()))
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))

代码说明:

1. 使用 nltk 工具包中的停用词模块导入英语停用词

2. 使用条件和 lambda 函数将文本的所有单词转换为小写。 拉姆达函数 是一个匿名函数。

3. 检查数据框中文本的所有行是否存在字符串标点符号,并对其进行过滤。

4. 使用正则表达式删除数字或点等字符。

5. Digits 从文本中删除。

6. 在此阶段,停用词被删除。

7. 至此,单词已经过滤完毕,并且通过词形还原去除了同一个单词的不同形式。至此,数据预处理就完成了。

输出:

, patterns, responses, tag
0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome
1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye
2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful
3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening
4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please don’t worry']",payments

步骤3)使用Word2vec构建神经网络

现在是时候使用 Gensim Word2vec 模块构建模型了。我们必须从 Gensim 导入 Word2vec。让我们这样做,然后我们将构建模型,并在最后阶段,我们将在实时数据上检查模型。

from gensim.models import Word2Vec

现在,在本 Gensim Word2vec 教程中,我们可以成功使用 Word2Vec 构建模型。请参阅下一行代码以了解如何使用 Word2Vec 创建模型。文本以列表的形式提供给模型,因此我们将使用以下代码将文本从数据框转换为列表

Bigger_list=[]
for i in df['patterns']
     li = list(i.split(""))
     Bigger_list.append(li)	
Model= Word2Vec(Bigger_list,min_count=1,size=300,workers=4)

代码说明:

1. 创建了 greater_list,其中附加了内部列表。这是输入到模型 Word2Vec 的格式。

2. 实现循环,并迭代数据框模式列的每个条目。

3. 将列模式的每个元素拆分并存储在内部列表 li 中

4. 将内部列表附加到外部列表。

5.此列表提供给Word2Vec模型。让我们了解一下这里提供的一些参数

最小计数: 它将忽略所有总频率低于此值的单词。

规格: 它告诉了词向量的维数。

工人: 这些是训练模型的线程

还有其他可用选项,下面解释一些重要的选项

窗口: 句子中当前单词和预测单词之间的最大距离。

新加坡: 它是一种训练算法,1 表示 skip-gram,0 表示连续词袋。我们在上面已经详细讨论过这些内容。

HS: 如果为 1,则我们使用分层 softmax 进行训练,如果为 0,则使用负采样。

Α: 初始学习率

让我们在下面显示最终的代码:

#list of libraries used by the code
import string
from gensim.models import Word2Vec
import logging
from nltk.corpus import stopwords
from textblob import Word
import json
import pandas as pd
#data in json format
json_file = 'intents.json'
with open('intents.json','r') as f:
    data = json.load(f)
#displaying the list of stopwords
stop = stopwords.words('english')
#dataframe
df = pd.DataFrame(data)

df['patterns'] = df['patterns'].apply(', '.join)
# print(df['patterns'])
#print(df['patterns'])
#cleaning the data using the NLP approach
print(df)
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))
df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))
df['patterns']= df['patterns'].str.replace('[^\w\s]','')
df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if  not x.isdigit()))
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
#taking the outer list
bigger_list=[]
for i in df['patterns']:
    li = list(i.split(" "))
    bigger_list.append(li)
#structure of data to be taken by the model.word2vec
print("Data format for the overall list:",bigger_list)
#custom data is fed to machine for further processing
model = Word2Vec(bigger_list, min_count=1,size=300,workers=4)
#print(model)

步骤4)模型保存

模型可以以 bin 和 model 形式保存。Bin 是二进制格式。请参阅以下几行来保存模型

model.save("word2vec.model")
model.save("model.bin")

上面代码的解释

1.模型以.model文件的形式保存。

2.模型以.bin文件形式保存

我们将使用该模型进行实时测试,例如相似词、不相似词和最常见词。

步骤5)加载模型并进行实时测试

使用以下代码加载模型:

model = Word2Vec.load('model.bin')

如果您想打印词汇表,可以使用以下命令:

vocab = list(model.wv.vocab)

请看结果:

['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available']

步骤 6)检查最相似的单词

让我们实际地实施这些事情:

similar_words = model.most_similar('thanks')	
print(similar_words)	

请看结果:

[('kind', 0.16104359924793243), ('using', 0.1352398842573166), ('come', 0.11500970274209976), ('later', 0.09989878535270691), ('helping', 0.04855936020612717), ('credit', 0.04659383371472359), ('pay', 0.0329081267118454), ('thank', 0.02484947443008423), ('hour', 0.0202352125197649), ('opening', 0.018177658319473267)]

步骤 7) 与提供的单词不匹配

dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())
print(dissimlar_words)

我们已经提供了文字 “待会儿见,感谢您的访问”。 这将 打印这些单词中最不相似的单词。让我们运行此代码并找出结果

上述代码执行后的结果:

Thanks

步骤 8)查找两个单词之间的相似度

这将得出两个单词之间相似性的概率。请参阅下面的代码来了解如何执行此部分。

similarity_two_words = model.similarity('please','see')
print("Please provide the similarity between these two words:")
print(similarity_two_words)

上述代码的结果如下

0.13706

您可以通过执行以下代码进一步查找类似的单词

similar = model.similar_by_word('kind')
print(similar)

上述代码的输出:

[('credit', 0.11764447391033173), ('cash', 0.11440904438495636), ('one', 0.11151769757270813), ('hour', 0.0944807156920433), ('using', 0.0705675333738327), ('thats', 0.05206916481256485), ('later', 0.04502468928694725), ('bye', 0.03960943967103958), ('back', 0.03837274760007858), ('thank', 0.0380823090672493)] 

结语

  • 词嵌入是一种词语表示,可以让机器学习算法理解具有相似含义的词语
  • 词向量用于计算相似的词,创建一组相关的词,用于文本分类、文档聚类、自然语言处理的特征
  • Word2vec 解释:Word2vec 是一种浅层两层神经网络模型,用于生成词嵌入,从而更好地表示单词
  • Word2vec 在向量空间表示中表示单词。单词以向量的形式表示,并且以这样的方式进行放置:意思相近的单词出现在一起,意思不相近的单词则位于较远的位置
  • Word2vec 算法使用 2 种架构:连续词袋 (CBOW) 和 skip gram
  • CBOW 比 skip gram 快几倍,并为常用词提供更好的频率,而 skip gram 需要少量的训练数据,甚至可以表示罕见的单词或短语。
  • NLTK 和 Word2vec 可以一起使用来创建强大的应用程序
  • 神经元的激活函数定义了给定一组输入时该神经元的输出。在 Word2vec 中,Softmax 层(归一化指数函数)是激活或触发每个节点的输出层函数。Word2vec 还具有负采样功能
  • Gensim 是一个用 Python 实现的主题建模工具包