汉语名的性别量词

namesex的Python项目详细描述


名称ex

namexx是一个预测中文名字性别倾向的软件包。该模块提供了两个预测模型,分别针对10730个中文名字(繁体中文)和从公共数据中收集的可靠性别标签进行了训练。第一个预测模型是一个可以由predict()调用的随机林分类器。该模型采用了三种特征:给定名称、给定名称的唯一性和一个100大小的向量,这些向量是从tw.yahoo.com上收集的新闻语料中提取出来的。该新闻语料库包含87848812个汉字。

第二个预测模型是一个L2正则逻辑回归,可以通过predict_logic()调用。此模型仅使用给定名称和给定名称的Unigrams。这两种预测方法都采用一个名字列表,并输出预测的性别倾向(男性为1,女性为0)或成为男性名字的概率。

使用gensim训练跳转gram word2vec模型时,该方案不依赖gensim,因为训练后的模型被提取为字典结构,便于使用。然而,这个项目依赖于numpy、scipy和sklearn。在通过pip安装namexx之前,windows用户可能希望使用预编译的二进制软件包安装numpy、scipy和sklearn。如果你只想“工作”而不想安装sklearn,可以考虑使用姐妹项目nameex_light,它只依赖于numpy。namesex_light使用在同一数据集上训练的正则化logistic回归提供相同的生成函数。nameex_light应该比predict()快。然而,nameex_light的预测精度低于nameex中的predict()函数。

有关nameex和nameex_light的其他信息可以在in another document (in Chinese)中找到。

下面列出了通过十倍交叉验证评估的随机森林和logistic回归模型的预测性能。

随机森林

MetricPerformancePerformance Std. Dev.
Accuracy0.94860.007072
F10.94700.007963
Precision0.95250.008399
Recall0.94170.012985
Logloss161.544.101283

l2正则logistic回归

MetricPerformancePerformance Std. Dev.
Accuracy0.89570.007327
F10.89200.007873
Precision0.88520.012238
Recall0.89910.008936
Logloss114.356.413972

随机森林模型具有较高的精度和f1评分。我们还测试了k-最近邻(knn)模型(这里没有报道)。knn和logistic回归具有相似的性能水平,由于明显的原因被排除在外。

使用pip/pip3安装名称例如。

pip install namesex

要使用namexx,请传入要预测的给定名称的数组或列表()。对于输入列表中的每个元素,predict()对于男性或女性预测返回1或0。设置“predprob=true”返回成为男性姓名的概率。下面是一个简单的示例代码。

>>> import namesex
>>> ns = namesex.namesex()
>>> ns.predict(['民豪', '愛麗', '志明'])
array([1, 0, 1])
>>> ns.predict(['民豪', '愛麗', '志明'], predprob=True)
array([0.8245    , 0.25695238, 0.85      ])

注意namexx只接受中文名字训练。但是,它也可以用于对翻译后的名称进行分类:

>>> ns.predict(['莎拉波娃', '阿波羅', '雷', '艾美', '布蘭妮', '瑪麗亞'])
array([0, 1, 1, 0, 0, 0])

这个模型只是用名字训练的。因此,为了获得最佳性能,应对输入数据进行预处理,以仅保留给定的名称。:

>>> ns.predict(['黃志明春嬌', '黃志明', '志明', '黃春嬌', '春嬌'], predprob = True)
array([0.61825   , 0.79039286, 0.85      , 0.3646    , 0.3716    ])

在上面的例子中,姓氏对预测的影响很小。把男性和女性的名字连在一起,某种程度上抵消了(接近0.5)性别倾向。

测试数据集

这个包附带了一个小的测试数据集,它不用于模型培训。下面的示例代码演示了一个简单的用法。

>>> testdata = namesex.testdata()
>>> ns = namesex.namesex()
>>> pred = ns.predict(testdata.gname)
>>> pred2 = ns.predict_logic(testdata.gname)
>>> import numpy as np
>>> accuracy = np.mean(pred == testdata.sex)
>>> print(" Prediction accuracy (random forest) = {}".format(accuracy))
 Prediction accuracy (random forest) = 0.8921568627450981
>>> accuracy2 = np.mean(pred2 == testdata.sex)
>>> print(" Prediction accuracy (logistic reg) = {}".format(accuracy2))
 Prediction accuracy (logistic reg) = 0.8627450980392157

这两种方法的准确度都略低于十倍交叉评估的准确度。与logistic回归相比,随机森林仍然更好。

模特训练

模块附带了培训数据。你可以自己训练这个模型。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java的单元测试测试用例库。util。列出实现   java通过超类进行序列化/反序列化   java Android获取设备语言ISO字符串   java如何打开广告的行动。移动   Eclipse IDE for(嵌入式C/C++)开发者202012:经典的深色主题深黑色背景和菜单中的文本   java使用不同的内容动态创建TableView(JavaFX)   java JAXB将多个同名节点解组   java ClassDefNotFoundException,即使类由类加载器加载(服务器上安装了多个应用程序)   java有没有办法关闭在后端生成的MqttClient线程?   html如何在网站上的java小程序中包含图像?   java无法访问已分配给超类引用的子类实例变量   java在TableViewer中双击打开对话框   列出如何创建ListNode。JAVA   java如何从文本中输出的数组中放入随机图像