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

如何用R的text包为bert-base-uncased添加专业词并修复PCA映射缺失

解决BERT拆分专业词的PCA映射问题

问题根源

bert-base-uncased的词汇表未收录mpi、mpirun这类专业术语,会将其拆分为子token(如mp+##i、mpi+##run)。textEmbed的aggregation_from_tokens_to_word_types参数仅对原始文本中存在的完整词(未被拆分的词)进行聚合,无法自动识别并聚合拆分后的子token对应原始专业词,导致这些词在PCA分析中返回NA。

解决步骤

1. 提取子token嵌入并手动聚合专业词

从模型输出中提取所有子token的嵌入,将属于同一专业词的子token嵌入取平均值,生成该词的整体嵌入:

# 提取所有子token及其嵌入向量
token_embeds <- we$tokens$texts

# 定义目标专业词对应的子token(需根据实际分词结果调整)
target_terms <- list(
  mpirun = c("mpi", "##run"),
  mpi = c("mp", "##i"),
  openmpi = c("open", "##mpi"),
  pbdmpi = c("pbd", "##mpi")
)

# 手动聚合子token的嵌入向量
custom_word_embeds <- lapply(target_terms, function(tokens) {
  # 筛选对应子token的嵌入数据
  subset_embeds <- token_embeds[token_embeds$tokens %in% tokens, -1]
  # 计算子token嵌入的平均值作为专业词的整体嵌入
  colMeans(subset_embeds)
})

# 转换为数据框并添加词名列
custom_df <- do.call(rbind, custom_word_embeds) %>%
  as.data.frame() %>%
  tibble::rownames_to_column("words")

# 合并原有完整词的嵌入和自定义聚合的专业词嵌入
combined_embeds <- dplyr::bind_rows(we$word_types$texts, custom_df)

2. 基于合并后的嵌入执行PCA分析

将合并后的嵌入数据传入textPCA,即可包含所有目标专业词:

pca <- textPCA(words = c("R MPI mpirun Slurm SQL Python account login"),
               word_types_embeddings = combined_embeds)
pca

3. 验证分词结果(可选)

如果不确定专业词的拆分形式,可以用textTokenize查看具体分词结果:

tokenized <- textTokenize(tx, model = 'bert-base-uncased')
print(tokenized$texts)

根据输出调整target_terms中的子token列表即可。

内容的提问来源于stack exchange,提问作者George Ostrouchov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:44:52