Author - yyz

Create Time - 2024/06/23

Last Update Time - 2024/06/23

Spark Embedding

数据源大小:24GB

1 数据获取与清洗与转换, 序列化

开始的处理方式是以词为单位,可这样使得上下文联系不强

后续又使用标题#的标识为分隔符,这样处理时每句话的联系都可以找到,但每句话中的信息有时候无法得到

数据获取方式:用户自主上传 + 爬虫爬取

模型大小:目前600MB,上限不封顶

数据转换:目前支持接收MarkDown文件,按照句进行划分,使用DataFream进行数据加载存储,之后转化为json文件

效果对比

Spark处理:简短有效、分词准确、效率高时短

spark_data

普通方式处理 ↓

2 Spark算法实现

Word2Vec 词向量 - 近似性学习

Word2Vec算法思路 - https://blog.csdn.net/qq_42363032/article/details/113697460

Spark官方文档 - Word2Vec — PySpark master documentation (apache.org)

主要参数

  • vectorSize - 输出向量的维度大小,默认值为100
  • minCount - 忽略频率低于此值的单词,默认值为5
  • inputCol - 输入列名,包含需要转换的文本数据
  • outputCol - 输出列名,存储生成的词向量

主要方法

  • fit(dataset) - 接受一个包含文本数据的 DataFrame,返回一个训练好的 Word2VecModel 对象
    • dataset: 训练数据集,DataFrame 格式,输入列中包含要转换的文本数据
  • transform(dataset) - 这个方法用于将训练好的 Word2Vec 模型应用到新的数据上,将文本数据转换为向量表示。它返回一个新的 DataFrame,其中包含原始文本数据及其对应的词向量
  • findSynonyms(word, num) - 这个方法用于查找与给定单词最相似的词语。它返回一个包含相似词及其相似度的 DataFrame
    • word: 要查找相似词的单词
    • num: 返回的相似词数量

随机游走的Graph Embedding算法

分布式训练 - TensorFlowOnSpark

3 大模型交互 - 结果生成

使用StructedStreaming组件监听数据清洗后的文件夹,收到文件后对json文件进行读取并执行词向量化操作,将词向量传输给Embedding模型后创建向量数据库

4 TensorBoard - 可视化

Embedding projector - visualization of high-dimensional data (tensorflow.org)

使用SparkMLlib的**.fit()**方法生成模型后,通过命令行 %tensorboard --logdir logs/fit开启面板

通过三维面板,可以清晰看出词向量化的效果优劣

如果过于密集,则调整聚类算法;如果过于稀疏,则尝试减小分词大小等方法

如果两词间联系不符合逻辑,则需要调整模型算法

view1

如下图,显示关于who单词的有关预测概率 ↓

view3