无涯教程-TensorFlow - 单词嵌入

这篇具有很好参考价值的文章主要介绍了无涯教程-TensorFlow - 单词嵌入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Word embedding是从离散对象(如单词)映射到向量和实数的概念,可将离散的输入对象有效地转换为有用的向量。

Word embedding的输入如下所示:

blue: (0.01359, 0.00075997, 0.24608, ..., -0.2524, 1.0048, 0.06259)
blues: (0.01396, 0.11887, -0.48963, ..., 0.033483, -0.10007, 0.1158)
orange: (-0.24776, -0.12359, 0.20986, ..., 0.079717, 0.23865, -0.014213)
oranges: (-0.35609, 0.21854, 0.080944, ..., -0.35413, 0.38511, -0.070976)

Word2vec

Word2vec是用于无监督最常见方法,它以一种方式训练模型,即给定的输入单词通过使用跳跃语法来预测单词的上下文。

TensorFlow提供了多种方法来实现这种模型,从而提高了复杂性和优化级别,并使用了多线程概念和更高级别的抽象。

import os 
import math 
import numpy as np 
import tensorflow as tf 

from tensorflow.contrib.tensorboard.plugins import projector 
batch_size = 64 
embedding_dimension = 5 
negative_samples = 8 
LOG_DIR = "logs/word2vec_intro" 

digit_to_word_map = {
   1: "One", 
   2: "Two", 
   3: "Three", 
   4: "Four", 
   5: "Five", 
   6: "Six", 
   7: "Seven", 
   8: "Eight", 
   9: "Nine"} 
sentences = [] 

# 创建两种句子 - 奇数和偶数序列。
   for i in range(10000): 
   rand_odd_ints = np.random.choice(range(1, 10, 2), 3) 
      sentences.append(" ".join([digit_to_word_map[r] for r in rand_odd_ints])) 
   rand_even_ints = np.random.choice(range(2, 10, 2), 3) 
      sentences.append(" ".join([digit_to_word_map[r] for r in rand_even_ints])) 
   
# 将单词映射到索引
word2index_map = {} 
index = 0 

for sent in sentences: 
   for word in sent.lower().split(): 
   
   if word not in word2index_map: 
      word2index_map[word] = index 
      index += 1 
index2word_map = {index: word for word, index in word2index_map.items()} 

vocabulary_size = len(index2word_map) 

# 生成skip-gram对
skip_gram_pairs = [] 

for sent in sentences: 
   tokenized_sent = sent.lower().split() 
   
   for i in range(1, len(tokenized_sent)-1):        
      word_context_pair = [[word2index_map[tokenized_sent[i-1]], 
         word2index_map[tokenized_sent[i+1]]], word2index_map[tokenized_sent[i]]] 
      
      skip_gram_pairs.append([word_context_pair[1], word_context_pair[0][0]]) 
      skip_gram_pairs.append([word_context_pair[1], word_context_pair[0][1]]) 

def get_skipgram_batch(batch_size): 
   instance_indices = list(range(len(skip_gram_pairs))) 
      np.random.shuffle(instance_indices)
   batch = instance_indices[:batch_size] 
   x = [skip_gram_pairs[i][0] for i in batch] 
   y = [[skip_gram_pairs[i][1]] for i in batch] 
   return x, y 
   
#批处理示例
x_batch, y_batch = get_skipgram_batch(8) 
x_batch 
y_batch 
[index2word_map[word] for word in x_batch] [index2word_map[word[0]] for word in y_batch] 

#输入数据,标签 train_inputs=tf.placeholder(tf.int32, shape=[batch_size])
   train_labels = tf.placeholder(tf.int32, shape = [batch_size, 1]) 

# 嵌入查找表目前仅在 CPU 中实现
   tf.name_scope("embeddings"): 
   embeddings = tf.Variable(    
      tf.random_uniform([vocabulary_size, embedding_dimension], -1.0, 1.0), 
         name = embedding) 
   # 这本质上是一个查找表
   embed = tf.nn.embedding_lookup(embeddings, train_inputs) 
   
# 为 NCE 损失创建变量
nce_weights = tf.Variable(     
   tf.truncated_normal([vocabulary_size, embedding_dimension], stddev = 1.0/
      math.sqrt(embedding_dimension))) 
   
nce_biases = tf.Variable(tf.zeros([vocabulary_size])) 

loss = tf.reduce_mean(     
   tf.nn.nce_loss(weights = nce_weights, biases = nce_biases, inputs = embed, 
   labels = train_labels,num_sampled = negative_samples, 
   num_classes = vocabulary_size)) tf.summary.scalar("NCE_loss", loss) 
   
# 学习率衰减
global_step = tf.Variable(0, trainable = False) 
   learningRate = tf.train.exponential_decay(learning_rate = 0.1, 
   global_step = global_step, decay_steps = 1000, decay_rate = 0.95, staircase = True) 

train_step = tf.train.GradientDescentOptimizer(learningRate).minimize(loss) 
   merged = tf.summary.merge_all() 
with tf.Session() as sess: 
   train_writer = tf.summary.FileWriter(LOG_DIR,    
      graph = tf.get_default_graph()) 
   saver = tf.train.Saver() 
   
   with open(os.path.join(LOG_DIR, metadata.tsv), "w") as metadata: 
      metadata.write(Name	Class
) for k, v in index2word_map.items(): 
      metadata.write(%s	%d
 % (v, k)) 
   
   config = projector.ProjectorConfig() 
   embedding = config.embeddings.add() embedding.tensor_name = embeddings.name 
   
   # 将此张量链接到其元数据文件(例如标签)。
   embedding.metadata_path = os.path.join(LOG_DIR, metadata.tsv) 
      projector.visualize_embeddings(train_writer, config) 
   
   tf.global_variables_initializer().run() 
   
   for step in range(1000): 
      x_batch, y_batch = get_skipgram_batch(batch_size) summary, _ = sess.run(
         [merged, train_step], feed_dict = {train_inputs: x_batch, train_labels: y_batch})
      train_writer.add_summary(summary, step)
      
      if step % 100 == 0:
         saver.save(sess, os.path.join(LOG_DIR, "w2v_model.ckpt"), step)
         loss_value = sess.run(loss, feed_dict = {
            train_inputs: x_batch, train_labels: y_batch})
         print("Loss at %d: %.5f" % (step, loss_value))

   # 在使用之前规范化嵌入
   norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), 1, keep_dims = True))
   normalized_embeddings = embeddings /
      norm normalized_embeddings_matrix = sess.run(normalized_embeddings)
   
ref_word = normalized_embeddings_matrix[word2index_map["one"]]

cosine_dists = np.dot(normalized_embeddings_matrix, ref_word)
ff = np.argsort(cosine_dists)[::-1][1:10] for f in ff: print(index2word_map[f])
print(cosine_dists[f])

上面的代码生成以下输出-

TensorFlow - 单词嵌入 - 无涯教程网无涯教程网提供Word embedding是从离散对象(如单词)映射到向量和实数的概念,可将离散的输入对象有效...https://www.learnfk.com/tensorflow/tensorflow-word-embedding.html文章来源地址https://www.toymoban.com/news/detail-660026.html

到了这里,关于无涯教程-TensorFlow - 单词嵌入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pytorch或者TensorFlow训练得到的模型嵌入到设备当中使用

    导出模型 : 首先,将已训练的模型导出为一个文件,以便在其他设备上加载和使用。导出的方法和步骤可能因PyTorch或TensorFlow的版本和使用情况而有所不同。一般来说,您需要保存模型的权重参数和结构定义,以及任何必要的标识信息(如输入维度、类别标签等)。 将模型加

    2024年02月16日
    浏览(66)
  • 2、TensorFlow教程--- 安裝

    要安装TensorFlow,重要的是在您的系统中安装了Python。Python版本3.4+被认为是开始安装TensorFlow的最佳选择。 考虑以下步骤在Windows操作系统中安装TensorFlow。 步骤1 - 验证正在安装的Python版本。 步骤2 - 用户可以选择任何机制在系统中安装TensorFlow。我们推荐使用“pip”和“Anacond

    2024年02月07日
    浏览(34)
  • TensorFlow和keras安装教程

    1.安装anaconda 安装教程参考此博客:点这儿 2.安装成功记住自己anaconda的路径,以后pycharm配置会用 3.查看并记住自己conda版本号以及python版本号: 先点开始键,找到Anaconda Prompt并点击 查看conda: 查看python: 1.打开Anaconda prompt,新建一个环境(不建议用自带的base) 这是新建了一

    2023年04月26日
    浏览(35)
  • 3、TensorFlow教程--- 理解人工智能

    人工智能包括通过机器和特殊计算机系统模拟人类智能的过程。人工智能的示例包括学习、推理和自我校正。人工智能的应用包括语音识别、专家系统、图像识别和机器视觉。 机器学习是人工智能的一个分支,它处理可以学习任何新数据和数据模式的系统和算法。 让我们关

    2024年02月08日
    浏览(55)
  • 使用Anaconda安装TensorFlow详细教程

    一、Anaconda安装 可以参考笔者的这篇博客:Anaconda安装详细教程 二、准备工作 1、单击启动Anaconda Prompt创建新虚拟环境 2、在Anaconda Prompt依次执行以下命令 conda create -n pytorch python=3.6 ,创建名字为tensorflow的虚拟环境,再通过命令 conda info --envs 可以查到已存在的虚拟环境(tenso

    2024年01月23日
    浏览(46)
  • TensorFlow2.0教程1-Eager

    2023年11月06日
    浏览(35)
  • tensorflow基于Anaconda环境搭建详细教程

    TensorFlow是一个由Google Brain团队开发的开源软件库,用于各种人工智能和机器学习应用,包括神经网络、深度学习、强化学习等。TensorFlow提供了一个灵活的编程框架,可用于创建各种类型的机器学习模型,如分类、回归、聚类、语音识别、自然语言处理等。 TensorFlow基于图形计

    2023年04月18日
    浏览(36)
  • 【Python/人工智能】TensorFlow 框架原理及使用教程

    TensorFlow 是一款由 Google 开源的人工智能框架,是目前应用最广泛的深度学习框架之一。它可以在各种硬件平台上运行,包括单个 CPU、CPU 集群、GPU,甚至是分布式环境下的 CPU 和 GPU 组合。 除了深度学习领域,TensorFlow 还支持其他机器学习算法和模型,如 决策树 、 SVM 、 k-m

    2024年04月28日
    浏览(45)
  • 最新版tensorflow安装教程,pip安装+手动安装

    如果pip安装能够成功,优先选择pip安装 默认情况下,pip会自动安装兼容当前python版本的最新版本 测试安装是否完成: 若输出正确版本号,说明安装成功。 若pip安装不成功,前往官网手动安装: 官网安装教程:https://tensorflow.google.cn/install/pip?hl=zh-cn 安装包下载地址:https://

    2024年02月13日
    浏览(44)
  • 配置Tensorflow使用CUDA进行GPU加速(超详细教程)

    对于刚使用Tensorflow的友友来说配置环境并使用GPU进行加速也是件令人头疼的事情,纯自己折腾会遇到比较多的坑,所以这里详细介绍一下Tensorflow的环境配置 先进入官网查看Tensorflow依赖信息: 目前Tensorflow版本已经更新到2.16.1但是中文官网发布的最新经过测试的构建配置的

    2024年04月22日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包