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

发射概率表(emission probability table)适用的最优数据结构是什么?

推荐使用嵌套哈希表(字典)作为存储结构

这是实现发射概率统计最简洁高效的结构,逻辑如下:

  • 第一层键为目标单词,值为第二层哈希表
  • 第二层键为词性,值为该单词对应词性的出现次数

对应你给出的示例,转换为Python字典的实现代码如下:

emission_counts = {
    "Fight": {"Verb": 100, "Noun": 120},
    "Run": {"Verb": 100, "Noun": 120}
}

该结构的核心优势

  • 查找效率极高,无需遍历数组即可直接定位目标单词、目标词性的计数,调用方式为emission_counts[单词][词性]
  • 增删改操作成本极低,新增单词、词性直接赋值即可,无需处理数组定位、扩容等逻辑
  • 转换为发射概率的操作非常简单,只需按单词维度求和再做除法即可,示例代码如下:
emission_probs = {}
for word, pos_counts in emission_counts.items():
    # 计算当前单词所有词性的计数总和
    total_count = sum(pos_counts.values())
    # 生成每个词性的发射概率
    emission_probs[word] = {pos: count / total_count for pos, count in pos_counts.items()}

优化建议

如果是Python环境,统计原始语料时可以使用collections.defaultdict简化代码,无需提前判断键是否存在:

from collections import defaultdict

# 初始化计数结构
emission_counts = defaultdict(lambda: defaultdict(int))
# 遍历标注好的语料数据即可完成计数
for word, pos in annotated_corpus:
    emission_counts[word][pos] += 1

如果处理的语料规模较大,需要做批量计算、平滑处理等操作,可以选择pandas DataFrame存储:

import pandas as pd
# 转换为DataFrame,行是单词,列是词性,空缺值填0
count_df = pd.DataFrame(emission_counts).T.fillna(0)
# 一行代码完成所有单词的发射概率计算
prob_df = count_df.div(count_df.sum(axis=1), axis=0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:54:04