如何对CountVectorizer生成的词汇按语义分组得到新词向量表示
实现自定义词条合并的解决方案
你可以通过先定义语义分组映射,再对原词频矩阵按分组聚合计算的方式完成需求,具体实现代码和步骤如下:
步骤1:定义语义分组映射
首先把你要合并的同类词汇整理成字典格式,key为新自定义词条,value为对应要合并的原有词汇列表:
# 自定义语义分组规则 group_map = { 'color': ['blue', 'brown', 'red'], 'body': ['fat', 'thin', 'tall'], 'animal': ['cat', 'dog', 'horse'] }
步骤2:按分组计算新词频
可以选择保留未分组的词汇,也可以只保留自定义分组的词条,两种实现方式如下:
方式一:保留所有词汇(未分组的词汇原样保留)
# 初始化结果字典 new_df_dict = {} # 先处理分组词条 for new_col, old_cols in group_map.items(): # 对属于同一分组的词频求和 new_df_dict[new_col] = df[old_cols].sum(axis=1) # 处理不需要分组的词汇 grouped_old_cols = [col for cols in group_map.values() for col in cols] other_cols = [col for col in df.columns if col not in grouped_old_cols] for col in other_cols: new_df_dict[col] = df[col] # 生成新的词频矩阵 new_df = pd.DataFrame(new_df_dict)
得到的new_df结果如下:
| color | body | animal | and | hairy | is |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 | 1 |
方式二:仅保留自定义分组词条
如果不需要保留其他无关词汇(比如示例里的and、is、hairy),可以直接只计算分组后的词频:
new_df = pd.DataFrame() for new_col, old_cols in group_map.items(): new_df[new_col] = df[old_cols].sum(axis=1)
得到的结果仅包含你自定义的3个词条:
| color | body | animal |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 1 | 1 |
| 1 | 1 | 1 |
额外说明
如果你需要得到分组后的词嵌入表示,只需要把新生成的词频矩阵new_df作为输入,传入对应的词嵌入模型训练即可,不需要再重新走CountVectorizer的流程。
内容的提问来源于stack exchange,提问作者sasha
相关产品推荐
相关产品推荐

