word2vec tsne_word embedding之word2vec训练及使用

v2-b3f8af417322be12555fb36dfffb7ea0_1440w.jpg?source=172ae18b

在自然处理领域(NLP),词映射(word embedding)是最重要的技术之一,他实现了将一个不可量化的单词映射到一个实数向量。Word embedding能够表示出文档中单词的语义和与其他单词的相似性等关系。它已经被广泛应用在了推荐系统和文本分类中。本文将简要介绍word embedding中广泛使用的word2vec模型,包括其训练和使用。

word2vec

Word2vec使用两层神经网络学习单词映射。它的输入是一个文本语料库,输出是一组向量。通过word2vec嵌入单词可以使自然语言成为计算机可读的语言,然后可以对单词进行数学运算等操作来实现相似性检测。一组训练好的单词向量会将相似的单词在该空间中彼此靠近放置。例如,“女人”,“男人”和“人”这两个词可能聚集在一起,而黄色,红色和蓝色则聚集在一起。

v2-6e67b8cb2a900341a1ef4e3113e50338_b.jpg

word2vec的训练算法有两种,一种是CBOW,另一种称为Skip-Gram。 这两种方法之间的主要区别在于,CBOW使用上下文来预测目标单词,而skip-gram使用单词来预测目标上下文。通常,与CBOW方法相比,skip-gram方法具有更好的性能,因为它可以捕获单个单词的两种语义。例如,它将为Apple提供两种矢量表示,一种为“公司”,另一种为“水果”。

基于Gensim的word2vec模式使用

在本文中,我将通过一个具体示例展示如何使用gensim生成word embedding。文中例子使用的数据集来自与kaggle。

该数据集包括诸如汽车的品牌,型号,年份,引擎和其他属性的特征。我们将使用这些功能为每个品牌模型生成word embedding,然后比较不同品牌模型之间的相似性。

word2vec要求使用“list of lists”格式进行训练,具体地说,所有的品牌模型都包含在一个总的列表(lists)中,每个列表(list)都包含一个品牌的描述词。

Step0 导入需要的库

import 

Step1 数据读取

df=pd.read_csv('data.csv')
df.head()

v2-5a0dcb8a32839eb45d0b8165d51075e0_b.jpg

Step 2 把“make”列和“model”列合并

df['Maker_Model']= df['Make']+ " " + df['Model']

Step3 选取需要训练的特征,主要为文本类特征

df1 = df[['Engine Fuel Type','Transmission Type','Driven_Wheels','Market Category','Vehicle Size', 'Vehicle Style', 'Maker_Model']]

Step4 将多列特征合并成一列

df2 = df1.apply(lambda x: ','.join(x.astype(str)), axis=1)
df_clean = pd.DataFrame({'clean': df2})

Step5 生成训练lists

sent = [row.split(',') for row in df_clean['clean']]
sent[:2]

v2-82309747a291cccc749ccefb93335a9a_b.jpg

Step6 训练word2vec模型

model = Word2Vec(sent, min_count=1,size= 50,workers=3, window =3, sg = 1)
model['Toyota Camry']

v2-fd809638d7cf773b4dad022897d522fc_b.jpg

Step7 计算相似性

model.similarity('Porsche 718 Cayman', 'Nissan Van')

v2-3dec6caeb9728ccab6fd98f195148c21_b.png
model.most_similar('Mercedes-Benz SLK-Class')[:5]

v2-f3f9a08a9b562ecd788d5f949be96b57_b.jpg

Step8 使用TSNE进行可视化

def display_closestwords_tsnescatterplot(model, word, size):
    arr = np.empty((0,size), dtype='f')
    word_labels = [word]
    close_words = model.similar_by_word(word)
    arr = np.append(arr, np.array([model[word]]), axis=0)
    for wrd_score in close_words:
        wrd_vector = model[wrd_score[0]]
        word_labels.append(wrd_score[0])
        arr = np.append(arr, np.array([wrd_vector]), axis=0)
    tsne = manifold.TSNE(n_components=2, random_state=0)
    np.set_printoptions(suppress=True)
    Y = tsne.fit_transform(arr)
    x_coords = Y[:, 0]
    y_coords = Y[:, 1]
    plt.scatter(x_coords, y_coords)
    for label, x, y in zip(word_labels, x_coords, y_coords):
        plt.annotate(label, xy=(x, y), xytext=(0, 0), textcoords='offset points')
    plt.xlim(x_coords.min()+0.00005, x_coords.max()+0.00005)
    plt.ylim(y_coords.min()+0.00005, y_coords.max()+0.00005)
    plt.show()

display_closestwords_tsnescatterplot(model, 'Porsche 718 Cayman', 50) 

v2-dbb8e6ef1f2eb45a1d110fa62079b877_b.jpg

参考

https://towardsdatascience.com/a-beginners-guide-to-word-embedding-with-gensim-word2vec-model-5970fa56cc92​towardsdatascience.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值