首页 > 其他分享 >基于LSTM的中文姓名性别预测

基于LSTM的中文姓名性别预测

时间:2022-11-24 16:33:42浏览次数:65  
标签:中文 rnn nn self LSTM out 性别 hidden size

写在前面

这是本人编写的首个基于调库的机器学习程序,算是一个简单的练手项目。

本程序可以根据输入的中文姓名推测其对应的性别

根据人的名字判断人的性别是一个很有意思的工作,我们可以用朴素贝叶斯法,SVN法或神经网络解决。Python有一个库叫做ngender,它采用朴素贝叶斯进行预测,然而,该模型面对。

本人基于Pytorch,采用embedding+LSTM+Linear的神经网络模型进行性别的预测,准确率达到了88%

代码已经上传至GitHub,[这是GitHub链接](AlphaINF/name2gender: Gender prediction of chinese name based on LSTM (github.com))

效果如图

1669276841879

本人将在下文中,详细介绍模型的结构和使用方法

文件结构

本程序包含以下几个文件,文件结构如下图所示

1669277697252

每个文件的用途如下表所示

文件名 用途
name2gender.py 用于保存模型的结构
main.py 直接运行即可输入名字进行性别预测
test.py 用于运行测试集的代码
finetune.py 用于训练的代码
utils.py 一些工具(比如csv的读取工具)
net.pth 训练好的神经网络
ccnc.csv 数据集1(采用ccnc_loader进行读取),包含有约350w组数据,每组数据的格式为(姓氏,名字,姓名,性别),采用换行和tab间隔
train.csv 数据集2(采用csv_loader进行读取),包含有约20w组数据,每组数据的格式为(姓名,性别),采用换行和逗号间隔
test.csv/ccnc-tiny.csv 测试集

模型结构

我们可以通过mane2gender.py来了解模型的结构

import torch.nn as nn

class name2gender(nn.Module):
    def __init__(self, input_size, embedding_size, rnn_hidden_size, hidden_size, output_size=2):
        super(name2gender, self).__init__()
        self.embeddings = nn.Embedding(input_size, embedding_size, padding_idx=0)
        self.drop = nn.Dropout(p=0.1)
        self.rnn = nn.LSTM(input_size=embedding_size, hidden_size=rnn_hidden_size, batch_first=True)
        self.linear1 = nn.Linear(rnn_hidden_size, hidden_size)
        self.activation = nn.ReLU()
        self.linear2 = nn.Linear(hidden_size, output_size)
        self.output_size = output_size
        self.softmax = nn.LogSoftmax(dim=1)
    def forward(self, name, length):
        now = self.embeddings(name)
        now = self.drop(now)
        input_packed = nn.utils.rnn.pack_padded_sequence(now, length, batch_first=True, enforce_sorted=False)
        _, (ht, _) = self.rnn(input_packed, None)

        out = self.linear1(ht)
        out = self.activation(out)
        out = self.linear2(out)

        out = out.view(-1, self.output_size)
        out = self.softmax(out)
        return out

(还没写完)

标签:中文,rnn,nn,self,LSTM,out,性别,hidden,size
From: https://www.cnblogs.com/alphainf/p/16922301.html

相关文章

  • js 中文数字转阿拉伯数字
    varmap={零:0,一:1,壹:1,二:2,贰:2,两:2,三:3,叁:3,四:4,肆:4,五:5,伍:5,六:......
  • scrapy采集—爬取中文乱码,gb2312转为utf-8
    有段时间没怎么使用scrapy了,最近采集一个网页,发现网页编码是gb2312,一开始就取搜索了下,发现各种操作都有,有在settings中设置  #FEED_EXPORT_ENCODING='utf-8'FEED_E......
  • react-infinite-scroll-component 中文文档
    react-infinite-scroll-component中文文档小遁哥关注0.1912020.07.1822:25:10字数553阅读16,064官网地址:https://github.com/ankeetmaini/react-infinite-sc......
  • python 中文路径带来的错误和解决
         basedir=os.path.dirname(os.path.realpath(sys.argv[0]))self.icon=wx.Icon(basedir+'\\icon.ico',wx.BITMAP_TYPE_ICO)self.SetIcon(self.icon)......
  • Illustrator 2023永久激活版v25.4.1(AI 2023中文版矢量图软件)
    illustrator 2023支持macOS11及更高版本,借助这款AI2023中文版是一款矢量图形软件,您可以制作适用于印刷、Web、视频和移动设备的徽标、图标、绘图、版式和插图的矢量图设......
  • 【MSSQL】SQL SERVER导入中文乱码问题解决
    公司最近承接了一个项目,甲方现使用旧版SiteServer框架(以下简称“SiteCMS”)作为门户网站,使用的数据源是SQLServer。现在需要对SiteCMS进行升级,在升级时数据库和数据库结构也......
  • pygame中文乱码问题
    一开始在做FlappyBird小游戏时面临中文乱码显示问题,如下所示:一开始我还以为是Python编码问题,然而Python3中自动解决了中文显示问题,最简单的例子就是用print()语句进行打印,......
  • scrapy爬取后中文乱码,解决word转为html 时cp1252编码问题
    解决思路1、循环暴力寻找编码,但是不如思路3defparse(self,response):print(response.text[:100])body=response.body#直接是bytes,response.tex......
  • jmeter中发出请求后,response data中的中文乱码了
    场景/报错:在jmeter中发出请求后,接收到的responsedata中的中文乱码了,显示如图:原因:编码方式有问题,这种情况应该是用ISO-8859-1读取了UTF-8解决方法:修改jmeter的配置文件,三步......
  • Windows2003英文版中文乱码问题的解决
    Windows2003英文版中文乱码问题的解决可以解决文件名乱码和文件内容乱码的问题。[1] 打开“控制面板”,双击“RegionalandLanguageOptions”图标,打开区域和语言设置窗口;[......