自己写一个姓名生成器,逻辑很简单:准备一个姓氏列表,再准备一个汉字列表,随机取一个姓加两个字。跑出来的结果却经常让人皱眉——「李伟雪」「王刚柔」这类组合读起来别扭,两个字的风格不搭。问题不在于随机,而在于「字」这个粒度过粗了。
字级随机的根本问题
单个汉字本身带有风格倾向。「伟」「刚」「强」「军」偏阳刚,「雪」「柔」「婷」「静」偏柔美。这个倾向是独立的——每个字自己带一套气质。
当从字池里随机抽两个字时,两个字的风格是独立抽样的。所以有相当概率抽到风格冲突的组合,比如「伟」配「雪」——一个刚一个柔,放在一起读起来别扭。
从概率上算,如果字池里阳刚字和柔美字各占一半,那么抽到「一刚一柔」这种不协调组合的概率大约是 50%。这个比例高到无法忽略。
成对组合为什么更好
解决思路是改变抽样粒度:不抽字,而是抽已经配好的双字名。
这些成对组合是按真实取名习惯整理出来的,比如「浩然」「子轩」「诗涵」「雅静」。它们的共同特点是两个字的风格一致,读起来顺口,是真实存在且被广泛使用的名字。
从这样的池子里抽样,天然不会出现风格冲突。因为冲突的组合本来就不在池子里。
代价是多样性下降——成对组合的数量必然少于「单字数量平方」的可能组合数。但对于「生成一批看起来自然的名字」这个目标来说,多样性不是首要指标,协调性才是。
混合策略
只有成对组合还不够。如果完全依赖成对池,生成的名字会明显集中在那些常见组合上,重复感很强。
所以合理的做法是混合:
大部分情况(比如约四分之三)从成对池里取,保证协调性;剩下部分用单字拼接,增加多样性。拼接时也可以加一点约束,比如优先选择风格相近的字,减少不协调的情况。
这种混合策略在「自然感」和「多样性」之间取了平衡。生成 100 个名字时,既不会全是大路货,也不会出现明显别扭的组合。
性别倾向的处理
另一个影响观感的维度是性别倾向。
用字有明显的性别统计倾向——「轩」「昊」「泽」多见于男性名,「涵」「萱」「怡」多见于女性名。如果完全随机混合,会出现「张昊怡」这类看起来性别模糊的名字。
所以生成器通常提供三个选项:男性、女性、中性。选择后从对应的字池里取字。
「中性」选项的存在也有必要——很多名字本身是中性的,比如「一鸣」「子墨」,不偏向任何一边。需要生成中性名字时可以选这一项。
从「字」到「词」的通用思路
这个现象不限于姓名生成,它是「随机文本生成」的一个通用问题。
用单个字符或单词随机拼接,得到的结果往往不自然,因为语言里存在大量搭配约束——哪些词能放在一起、哪些不能,这些约束不是逐个词能表达的。
解决方式通常是把抽样单位提升到「已经符合约束的片段」。这类片段在语料里真实出现过,所以组合后自然。代价是覆盖范围变小,需要靠混合策略来补充多样性。
理解这个思路,有助于评估各种随机生成工具的质量:看它是在什么粒度上抽样。粒度越接近「真实使用单位」,结果越自然。
检查清单
- 单字本身带风格倾向,字级随机会产生约一半的风格冲突组合
- 成对名字组合是按真实取名习惯整理的,天然不会风格冲突
- 代价是多样性下降,需要混合单字拼接来补充
- 混合策略通常在「自然感」与「多样性」之间取平衡
- 性别倾向选项通过分组字池实现,另有中性选项
- 通用思路是把抽样单位提升到「已符合约束的片段」,而不是单个字符或词