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

如何为多标签音素分类数据实现自定义one-hot编码函数

音素one-hot编码实现

原始数据

现有文本文件存储的音素分类数据如下:

fricative     f, s, S, x, v, z, Z, G, h
nasal       n, m, N
lateral   r, l, j, J
labial      p, b, m, f, v
coronal   s, z, n, d, t, r, l, j, J, S, Z
dorsal      g, k, G, x, N, h
frontal   e, i, I, E, E:, E~, j, J,  

功能需求

实现one-hot编码函数,输出结果第一列为单个音素,其余列为上述分类标签,音素属于对应分类则标记为1,否则为0,输出效果示例:

lettersfricativenasallaterallabialcoronaldorsalfrontal
e0000001
f1001000
g0000010
j0010101

注:原示例中f的frontal标记为1属于错误,实际根据分类数据f不在frontal列表内,代码会按实际分类数据生成正确结果

待填充的代码框架

需要基于以下框架完成功能实现:

def one_hot_labels(df):
    '''
    - 逐行创建字典,标记每个标签的存在状态(1为存在,0为不存在)
    - 将所有字典存入列表后转换为DataFrame输出
    '''
    dict_labels = []
    for i in (range(len(df)), leave=False):
        d = dict(zip(range(n_labels), [0]*n_labels))
        ...
        dict_labels.append(d)

    df_labels = pd.DataFrame(dict_labels)
    return df_labels

完整实现代码

import pandas as pd

# 解析原始分类数据,生成标签到音素的映射,以及所有唯一音素列表
def parse_raw_data(raw_text):
    category_phoneme_map = {}
    all_phonemes = set()
    for line in raw_text.strip().split('\n'):
        line_parts = line.split()
        category = line_parts[0]
        phonemes = [p.strip() for p in ','.join(line_parts[1:]).split(',') if p.strip()]
        category_phoneme_map[category] = set(phonemes)
        all_phonemes.update(phonemes)
    return category_phoneme_map, sorted(list(all_phonemes))

# 实现one-hot编码
def one_hot_labels(category_map, phonemes):
    label_list = list(category_map.keys())
    dict_labels = []
    for phoneme in phonemes:
        # 初始化所有标签为0
        row_dict = {label: 0 for label in label_list}
        # 遍历标签判断所属分类
        for label in label_list:
            if phoneme in category_map[label]:
                row_dict[label] = 1
        row_dict['letters'] = phoneme
        dict_labels.append(row_dict)
    # 调整列顺序,音素列放第一
    df = pd.DataFrame(dict_labels)[['letters'] + label_list]
    return df

# 调用测试
if __name__ == '__main__':
    raw_category_data = """
    fricative     f, s, S, x, v, z, Z, G, h
    nasal       n, m, N
    lateral   r, l, j, J
    labial      p, b, m, f, v
    coronal   s, z, n, d, t, r, l, j, J, S, Z
    dorsal      g, k, G, x, N, h
    frontal   e, i, I, E, E:, E~, j, J,  
    """
    cate_map, phoneme_list = parse_raw_data(raw_category_data)
    result = one_hot_labels(cate_map, phoneme_list)
    print(result)
    # 如需导出可以用 result.to_csv('phoneme_onehot.csv', index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:27:02