J'ai beaucoup de chaînes d'adresse:
1600 Pennsylvania Ave, Washington, DC 20500 USA
Je veux les analyser dans leurs composants:
street: 1600 Pennsylvania Ave
city: Washington
province: DC
postcode: 20500
country: USA
Mais bien sûr, les données sont sales: elles proviennent de nombreux pays dans de nombreuses langues, écrites de différentes manières, contiennent des fautes d'orthographe, des pièces manquantes, des ordures supplémentaires, etc.
À l'heure actuelle, notre approche consiste à utiliser des règles combinées avec la correspondance de répertoires flous, mais nous aimerions explorer les techniques d'apprentissage automatique. Nous avons étiqueté les données de formation pour l'apprentissage supervisé. La question est, quel genre de problème d'apprentissage automatique est-ce? Il ne semble pas vraiment s'agir d'un regroupement, d'une classification ou d'une régression ...
Le plus proche que je puisse trouver serait de classer chaque jeton, mais alors vous voulez vraiment les classer tous simultanément, en satisfaisant aux contraintes comme "il devrait y avoir au plus un pays;" et vraiment il y a plusieurs façons de tokeniser une chaîne, et vous voulez essayer chacune et choisir la meilleure .... Je sais qu'il existe une chose appelée analyse statistique, mais je n'en sais rien.
Donc: quelles techniques d'apprentissage automatique pourrais-je explorer pour analyser les adresses?
la source
Réponses:
Cela peut être considéré comme un problème d'étiquetage de séquence , dans lequel vous avez une séquence de jetons et souhaitez donner une classification pour chacun. Vous pouvez utiliser des modèles de Markov cachés (HMM) ou des champs aléatoires conditionnels (CRF) pour résoudre le problème. Il existe de bonnes implémentations de HMM et CRF dans un package open-source appelé Mallet .
Dans votre exemple, vous devez convertir l'entrée au format ci-dessous. De plus, vous devez générer des fonctionnalités supplémentaires.
la source
J'ai dû résoudre un problème très similaire pour valider si une adresse est valide ou invalide.
Les adresses ont généralement la structure "1600 Pennsylvania Ave, Washington DC, 20500"
Une chaîne telle que
"J'ai descendu 2000 marches et j'ai atteint Pennsylvania Ave à Washington DC."
n'est pas une adresse valide.
Cela peut être résolu par des techniques de classification telles que SVM, les réseaux de neurones, etc.
L'idée est d'identifier un ensemble clé de fonctionnalités. Certains d'entre eux pourraient être:
1) Le nom de la rue commence-t-il par un numéro de bloc valide. La plupart des numéros de bloc aux États-Unis sont soit des chiffres (par exemple 1200), soit un nombre suivi d'une seule lettre (120A) ou un nombre suivant une seule lettre (par exemple S200).
2) Si l'adresse est bien formatée, les noms de rue se terminent par des suffixes comme Ave pour avenue, Dr pour Drive, Blvd pour Boulevard. Il est possible d'obtenir la liste des suffixes de rue aux États-Unis sur le site USPS.
3) Le nombre de mots dans le champ d'adresse de rue peut également être une caractéristique intéressante. S'il y a trop de mots, ce n'est probablement pas une adresse valide. Voir par exemple l'exemple ci-dessus.
4) Combien de mots apparaissent entre le numéro de bloc et le suffixe de rue dans le champ d'adresse?
Ceux-ci peuvent être utilisés pour former un algorithme d'apprentissage et le modèle résultant peut être utilisé pour valider si une adresse donnée est valide ou non.
la source
C'est un peu un hack qui ne nécessite pas votre propre solution: le géocodage inversé. Cela peut vous donner des données plus propres ou faire tout le travail pour vous.
Par exemple, voici un code Stata avec
geocode3
de SSC, qui utilise Google. Je suppose que c'est similaire à Fuzzy Gazetteer . La première adresse est assez salissante, la seconde est propre et la troisième est étrangère. D'autres logiciels peuvent gérer cela également.Cela fonctionne assez bien:
Le Kremlin a un format assez différent.
la source
Cela ressemble à un problème à résoudre avec la classification LSTM bidirectionnelle. Vous marquez chaque caractère de l'échantillon comme une catégorie par exemple
rue: 1 ville: 2 province: 3 code postal: 4 pays: 5
Maintenant, entraînez votre classificateur sur la base de ces étiquettes. Boom!
la source