You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将分词后的句子数组输入Word2vec获取嵌入向量用于安卓日志异常检测

解决方案
  • 修正序列生成逻辑
    你当前的seq生成代码存在逻辑错误,循环内追加的是完整的eventArray而非滑动窗口生成的子序列,修正代码如下:
seq = []
# 将eventToken转为一维分词列表,去掉多余嵌套结构
event_list = df['eventToken'].tolist()
for sequence in seqGen(event_list, 9):
    seq.append(sequence)
  • 训练Word2Vec模型(基于gensim库)
    支持两种训练粒度,可按需选择:

    1. 基于模板分词粒度训练:
    from gensim.models import Word2Vec
    # vector_size为嵌入维度,可根据业务需求调整
    w2v_model = Word2Vec(
        sentences=seq,
        vector_size=128,
        window=5,
        min_count=1,
        workers=4
    )
    # 训练完成后可保存模型复用
    w2v_model.save("log_w2v.model")
    
    1. 基于eventID粒度训练(更适合日志异常检测场景,效率更高):
    event_id_list = df['eventID'].tolist()
    seq_id = []
    for sequence in seqGen(event_id_list, 9):
        seq_id.append(sequence)
    w2v_model_id = Word2Vec(sentences=seq_id, vector_size=128, window=5, min_count=1, workers=4)
    
  • 直接调用接口获取嵌入向量

# 取单个分词的嵌入(模板分词粒度)
token_vec = w2v_model.wv['startingNewTask']
# 取单个事件ID的嵌入(eventID粒度)
event_vec = w2v_model_id.wv['E1']

# 取整条日志序列的嵌入,默认取序列内所有元素嵌入的平均值,也可改为拼接等其他策略
import numpy as np
def get_seq_embedding(input_seq, model):
    vec_list = [model.wv[item] for item in input_seq if item in model.wv]
    if not vec_list:
        return np.zeros(model.vector_size)
    return np.mean(vec_list, axis=0)

# 调用示例
seq_emb = get_seq_embedding(seq[0], w2v_model)
  • 手动通过权重矩阵计算嵌入(对应你提到的独热向量乘权重的需求)
    如果不想直接调用wv接口,可手动从模型中提取权重矩阵计算:
# 获取词表到索引的映射
vocab = w2v_model.wv.key_to_index
# 获取输入层权重矩阵,形状为(词表大小, 嵌入维度)
weight_matrix = w2v_model.wv.vectors

# 例如获取startingNewTask的嵌入
target_idx = vocab['startingNewTask']
# 独热向量乘权重矩阵等价于直接取权重矩阵对应行的向量
target_vec = weight_matrix[target_idx]

内容的提问来源于stack exchange,提问作者Tyler Betthauser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:27:02