Je travaille avec l'API Google Adresses, et ils contiennent un list de 97 emplacements différents. Je veux réduire la liste des emplacements dans un nombre moins élevé d'entre eux, car beaucoup d'entre eux sont groupables. Par exemple, atm
et bank
en financial
; temple
, church
, mosque
, synagogue
en worship
; school
, university
en education
; subway_station
, train_station
, transit_station
, gas_station
en transportation
.Étant donné une liste de mots, comment développer un moyen algorithmique de les regrouper sémantiquement?
Mais aussi, il ne devrait pas généraliser; par exemple, pet_store
, city_hall
, courthouse
, restaurant
en quelque chose comme buildings
.
J'ai essayé pas mal de méthodes pour cela. J'ai d'abord téléchargé les synonymes de chacun des 97 mots de la liste de plusieurs dictionnaires. Ensuite, j'ai découvert la similitude entre les 2 mots basée sur quelle fraction des synonymes uniques qu'ils partagent en commun (similitude Jaccard):
Mais après cela, comment puis-je grouper des mots en grappes? En utilisant les méthodes de classification traditionnelles (k-means, k-médoïde, classification hiérarchique et la FCM), je ne reçois pas bon regroupement (j'ai identifié plusieurs erreurs de classification en analysant les résultats manuellement):
J'ai même essayé le modèle word2vec formé sur des données d'information Google (où chaque mot est exprimé en tant que vecteur de 300 caractéristiques), et je ne suis pas de bons groupes en fonction de cela aussi:
à mon avis votre question est hors sujet pour ainsi – InferOn
@InferOn: Juste parce que vous ne comprenez pas une question ne signifie pas qu'il est hors-sujet. – stackoverflowuser2010
@InferOn Je sais que ma question n'est pas vraiment une question de programmation, mais j'ai besoin d'idées sur la façon de s'y prendre. Et comme je ne connais aucune autre plate-forme où je pourrais demander des idées, je me suis tourné vers Stackoverflow. – Kristada673