Ich denke, es gibt eine Nutzungsszene, in der Sie das Geschlecht anhand Ihres Namens vorhersagen möchten. Wenn Sie beispielsweise auf dem Registrierungsformular bei einem Mitgliederservice nach dem Geschlecht fragen, wird der CVR gelöscht. Machen Sie dies mit einer Vorhersage wieder wett! Ist es eine solche Szene?
Es gibt verschiedene Möglichkeiten, das Geschlecht anhand eines Namens vorherzusagen, z. B. mithilfe von maschinellem Lernen einen Klassifikator zu generieren und Vorhersagen zu treffen oder mithilfe einer externen API Vorhersagen zu treffen. Dieses Mal wird es ein Ansatz sein, das Geschlecht anhand der Gender-API in Python anhand des Namens vorherzusagen.
GenderAPI ist ein amerikanisches Unternehmen, das aus einer Vielzahl von Namensdaten Geschlechtervorhersagen getroffen zu haben scheint. Es gibt mehrere ähnliche Dienste, aber dieses Mal werden wir diese Gender-API verwenden, um das Geschlecht vorherzusagen.
Gender API Erstellen wir zunächst ein Konto für Gender API. Holen Sie sich nach der Erstellung API_KEY. Wenn Sie es kostenlos verwenden möchten, können Sie es bis zu 500 Namen kostenlos verwenden
Verwenden Sie PersonalGenerator, um pseudo-persönliche Informationen zu generieren. Sie können die anzuzeigenden Elemente frei auswählen. Dieses Mal möchten wir jedoch auch die richtige Antwort beurteilen, damit wir die Seriennummer, den Namen, den Namen (Katakana) und das Geschlecht erhalten. Dieses Mal werde ich versuchen, das Geschlecht anhand der Namen von etwa 30 Personen vorherzusagen.
Pykakasi Der vorherzusagende Name ist Vorname, und ob der Name in Kanji, Katakana, Hiragana oder Romaji vorhergesagt wird, hat großen Einfluss auf die Genauigkeit. Zusammenfassend lässt sich sagen, dass es wahrscheinlich am genauesten war, es in römische Schriftzeichen umzuwandeln und vorherzusagen, da es sich um einen Überseedienst handelt. (Der Überprüfungsprozess wird weggelassen.)
Daher ist es notwendig, eine Romaji-Konvertierung aus dem folgenden Namen durchzuführen. Informationen zur Verwendung finden Sie in der Entwicklerdokumentation. Verwendung von pykakasi Installieren Sie die folgenden zwei Pakete.
pip install six semidbm
pip install pykakasi
Wir werden tatsächlich das Geschlecht der 30 Probanden vorhersagen. Das allgemeine Verfahren ist wie folgt.
gender_estimation.py
import sys
import json
from urllib import request, parse
from urllib.request import urlopen
import pandas as pd
import pykakasi
class GenderEstimation:
"""
Sagen Sie das Geschlecht anhand des in Romaji konvertierten Namens voraus
"""
__GENDER_API_BASE_URL = 'https://gender-api.com/get?'
__API_KEY = "your api_key"
def create_estimated_genders_date_frame(self):
df = pd.DataFrame(self._estimate_gender())
print('\n{}Geschlechtsvorhersage für eine Person abgeschlossen.'.format((len(df))))
df.columns = [
'estimated_gender', 'accuracy', 'samples', 'duration'
]
df1 = self._create_member_data_frame()
estimated_genders_df = pd.merge(df1, df, left_index=True, right_index=True)
return estimated_genders_df
def _estimate_gender(self):
unique_names = self._convert_first_name_to_romaji()
genders = []
print(u'{}Sagen Sie das Geschlecht einer Person voraus'.format(len(unique_names)))
for name in unique_names:
res = request.urlopen(self._gender_api_endpoint(params={
'name': name,
'country': 'JP',
'key': self.__API_KEY
}))
decoded = res.read().decode('utf-8')
data = json.loads(decoded)
genders.append(
[data['gender'], data['accuracy'], data['samples'], data['duration']])
return genders
def _gender_api_endpoint(self, params):
return '{base_url}{param_str}'.format(
base_url=self.__GENDER_API_BASE_URL, param_str=parse.urlencode(params))
def _convert_first_name_to_romaji(self):
df = self._create_member_data_frame()
df['first_name_roma'] = df['first_name'].apply(
lambda x: self._set_kakasi(x))
return df['first_name_roma']
def _set_kakasi(self, x):
kakasi = pykakasi.kakasi()
kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')
kakasi.setMode('r', 'Hepburn')
kakasi.setMode('s', False)
kakasi.setMode('C', False)
return kakasi.getConverter().do(x)
def _create_member_data_frame(self):
df = pd.read_csv('personal_infomation.csv').rename(columns={
'Ordnungsnummer':'row_num',
'Vollständiger Name':'name',
'Name (Katakana)':'name_katakana',
'Sex':'gender'
})
df['first_name']=df.name_katakana.str.split().str[1]
print(u"{}Extrahieren Sie die vorherzusagende Person.".format(len(df)))
return df
Der Datenrahmen des Vorhersageergebnisses ist wie folgt. Die Antwort bezüglich der Vorhersage der Gender-API ist wie folgt definiert.
estimated_gender | accuracy | samples | duration |
---|---|---|---|
Ergebnis der Geschlechtsvorhersage | Vorhersagekorrektheit | Stichprobengröße zur Vorhersage | Verstrichene Zeit bis 1 Anruf |
Lassen Sie uns abschließend die Genauigkeit der Ergebnisse der Geschlechtsvorhersage überprüfen. Zeichnen Sie die korrekten und vorhergesagten Ergebnisse und ihre Zahlen für die folgende Tabelle, um eine Matrix zu erstellen Die richtige Antwortrate betrug fast 100%. In diesem Fall habe ich vorausgesagt, dass nur ein Fall tatsächlich eine Frau, aber ein Mann ist. Schließlich scheint es schwierig zu sein, einen Namen vorherzusagen, der sowohl von Männern als auch von Frauen verwendet werden kann, wie beispielsweise "Iori".
Richtige Antwort | Prognose | num |
---|---|---|
male | male | 11 |
male | female | 0 |
male | unknown | 0 |
female | male | 1 |
female | female | 18 |
female | unknown | 0 |
unknown | male | 0 |
unknown | female | 0 |
unknown | unknown | 0 |
Prognose/Richtige Antwort | male | female | unknown | Richtige Antwortrate |
---|---|---|---|---|
male | 11 | 0 | 0 | 100.00% |
female | 1 | 18 | 0 | 94.74% |
unknown | 0 | 0 | 0 | 0% |
Recommended Posts