当前位置: 首页 > news >正文

中山建设网站的公司/天津seo推广软件

中山建设网站的公司,天津seo推广软件,响应式学校网站,我的网站百度搜不到Word2vec 是一种基于神经网络的词嵌入(Word Embedding)模型,通过无监督学习将词语映射到低维稠密向量空间,使得语义相近的词语在向量空间中距离相近。模型的核心目标是将语法的语义和语法特征编码为向量形式。 1.模型架构 CBOW…

Word2vec 是一种基于神经网络的词嵌入(Word Embedding)模型,通过无监督学习将词语映射到低维稠密向量空间,使得语义相近的词语在向量空间中距离相近。模型的核心目标是将语法的语义和语法特征编码为向量形式。
 

1.模型架构

  • CBOW (Continuous Bag-of-Words)

    • 输入:上下文词的向量(如窗口内的周围词)。

    • 输出:预测中心词的概率分布。

    • 适用场景:小规模数据集,高频词效果更好。

  • Skip-gram

    • 输入:中心词的向量。

    • 输出:预测上下文词的概率分布。

    • 适用场景:大规模数据集,低频词效果更好。

2.优化技术

  • 负采样 (Negative Sampling)
    将多分类问题转化为二分类问题,随机采样负样本(非目标词)以降低计算复杂度。

  • 层次 Softmax (Hierarchical Softmax)
    使用哈夫曼树(Huffman Tree)加速概率计算,减少计算量。

3.应用场景

  1. 语义相似度计算

    • 通过余弦相似度比较词向量,如 cos(向量("猫"), 向量("狗"))

  2. 文本分类

    • 将词向量作为特征输入分类模型(如LSTM、CNN)。

  3. 推荐系统

    • 用向量表示用户行为或物品属性,计算相似性。

  4. 机器翻译

    • 跨语言词向量对齐(如中英文词向量映射)。

4.Spark 实现示例

Spark MLlib 内置了 Word2vec 模型,适合分布式大规模数据处理。

from pyspark.sql import SparkSession
from pyspark.ml.feature import Word2Vec

# 初始化 Spark
spark = SparkSession.builder.appName("Word2VecExample").getOrCreate()

# 示例数据(每行为一个分词后的句子)
data = [
    ("cat dog mouse".split(" "),),
    ("dog lion tiger".split(" "),),
    ("mouse cat elephant".split(" "),)
]
df = spark.createDataFrame(data, ["text"])

# 训练 Word2vec 模型
word2vec = Word2Vec(
    vectorSize=100,    # 向量维度
    windowSize=2,      # 上下文窗口大小
    numPartitions=4,   # 并行度
    minCount=1         # 最小词频
)
model = word2vec.fit(df)

# 获取词向量
word_vectors = model.getVectors()
word_vectors.show()

# 查找相似词
similar_words = model.findSynonyms("cat", 2)
similar_words.show()

spark.stop()

5.TensorFlow 实现示例

TensorFlow 提供灵活的低阶 API,可自定义模型结构(以下以 Skip-gram 为例)。

1. 数据预处理

import tensorflow as tf
import numpy as np

# 示例语料库
corpus = "cat dog mouse dog lion tiger mouse cat elephant".split()
vocab = list(set(corpus))
word2idx = {word: idx for idx, word in enumerate(vocab)}
idx2word = {idx: word for idx, word in enumerate(vocab)}

# 生成训练数据(中心词-上下文词对)
window_size = 2
pairs = []
for i in range(window_size, len(corpus)-window_size):
    center = word2idx[corpus[i]]
    context = [word2idx[corpus[j]] for j in range(i-window_size, i+window_size+1) if j != i]
    pairs.extend([(center, ctx) for ctx in context])

# 转换为 TensorFlow Dataset
centers, contexts = zip(*pairs)
dataset = tf.data.Dataset.from_tensor_slices((np.array(centers), np.array(contexts)))
dataset = dataset.shuffle(1000).batch(64)

2. 定义模型(Skip-gram + 负采样)

class Word2Vec(tf.keras.Model):
    def __init__(self, vocab_size, embedding_dim, num_ns=5):
        super().__init__()
        self.target_embedding = tf.keras.layers.Embedding(vocab_size, embedding_dim, name="embedding")
        self.context_embedding = tf.keras.layers.Embedding(vocab_size, embedding_dim)
        self.num_ns = num_ns  # 负采样数量

    def call(self, center, context):
        # 中心词向量 [batch, dim]
        center_emb = self.target_embedding(center)
        # 上下文词向量 [batch, dim]
        context_emb = self.context_embedding(context)
        # 计算点积相似度 [batch]
        logits = tf.reduce_sum(center_emb * context_emb, axis=1)
        return logits

# 初始化模型
vocab_size = len(vocab)
embedding_dim = 128
model = Word2Vec(vocab_size, embedding_dim)
optimizer = tf.keras.optimizers.Adam()

# 自定义损失函数(带负采样)
def loss_fn(center, context):
    # 正样本对
    positive_logits = model(center, context)
    # 负采样(随机选择非上下文词)
    negative_samples = tf.random.uniform(
        shape=(tf.shape(center)[0], model.num_ns),
        maxval=vocab_size,
        dtype=tf.int64
    )
    negative_logits = tf.reduce_sum(
        model.target_embedding(center) * model.context_embedding(negative_samples),
        axis=1
    )
    # 损失计算
    positive_loss = tf.nn.sigmoid_cross_entropy_with_logits(labels=tf.ones_like(positive_logits), logits=positive_logits)
    negative_loss = tf.nn.sigmoid_cross_entropy_with_logits(labels=tf.zeros_like(negative_logits), logits=negative_logits)
    return tf.reduce_mean(positive_loss + negative_loss)

3. 训练模型

# 训练循环
for epoch in range(10):
    total_loss = 0
    for batch_centers, batch_contexts in dataset:
        with tf.GradientTape() as tape:
            loss = loss_fn(batch_centers, batch_contexts)
        gradients = tape.gradient(loss, model.trainable_variables)
        optimizer.apply_gradients(zip(gradients, model.trainable_variables))
        total_loss += loss.numpy()
    print(f"Epoch {epoch}, Loss: {total_loss:.4f}")

# 获取词向量矩阵
word_vectors = model.target_embedding.weights[0].numpy()
print("Vector for 'cat':", word_vectors[word2idx['cat']])

6.关键点总结

  1. Spark 优势:分布式计算,适合海量数据,但自定义能力有限。

  2. TensorFlow 优势:灵活支持模型调参(如负采样数、向量维度),但需手动实现训练逻辑。

  3. 应用技巧

    • 增大 vectorSize 可提升语义表达能力,但需权衡计算资源。

    • 调整 windowSize 控制上下文范围(小窗口捕捉语法,大窗口捕捉语义)。

  4. 评估方法

    • 直接评估:通过相似词检索(如 findSynonyms)。

    • 间接评估:在下游任务(如文本分类)中测试词向量效果。

http://www.whsansanxincailiao.cn/news/31974528.html

相关文章:

  • 盘锦网站建设服务/windows优化大师下载
  • 没有网站百度推广吗/百度搜索名字排名优化
  • 上海疫情通报最新/seo网上培训
  • 如何做网站进行推广/线上产品推广方案
  • 全国精品课程建设网站/优化seo排名
  • 北京网站建设哪家便宜/百度人工优化
  • 什么是网络营销定价中除免费策略外/seo与sem的关系
  • 什么官网比较容易做网站/营销宣传方式有哪些
  • 开发微信小程序需要什么软件/优化公司网站排名
  • 网站开发与软件销售/产品线上推广方案
  • 做公益网站需要哪些部门认证/国际新闻今日头条
  • 罗湖做网站联系电话/目前最靠谱的推广平台
  • 个人怎么建立网站吗/优化方案英语
  • 科技网站建设/新东方英语线下培训学校
  • 经典wordpress网站/网络营销企业案例
  • 苏州吴江区住房和城乡建设局网站/seo优化运营专员
  • 电商网站购物流程/广州网站推广排名
  • 本校网站建设/百度知道登录入口
  • 北京网站的建立/制作网站的app
  • 哪些做调查问卷的网站/淘宝数据分析
  • 江苏专业网站建设/今日西安头条最新消息
  • 做最好的在线中文绅士本子阅读网站6/免费域名注册申请
  • wordpress 标签 404/河北seo基础
  • 做网站要什么软件/服装店营销策划方案
  • 鞋服外包加工网/高级seo培训
  • 临夏市做网站电话/北京网站优化排名推广
  • 博罗做网站公司/最新域名查询ip
  • php建站视频教程/第三方平台推广
  • 做游戏网站打鱼/客户引流的最快方法是什么
  • 网站建设从初级到精通/腾讯广告推广怎么做