2017-08-27 5 views
0

J'ai un corpus de texte et j'aimerais trouver des plongements pour des mots à partir d'un caractère. J'ai donc une séquence de caractères en entrée et je veux la projeter dans un espace multidimensionnel.Apprentissage de mots-plongements à partir de caractères en utilisant l'incorporation de mots déjà appris

Comme une initialisation, je voudrais adapter les incorporations de mots déjà appris (par exemple, les Google).

J'ai quelques doutes:

  1. Ai-je besoin d'utiliser un vecteur de caractères pour intégrer chaque caractère d'entrée dans la séquence d'entrée? Serait-ce un problème si j'utilise simplement l'encodage ascii ou utf-8?
  2. malgré ce qui est l'entrée définition du vecteur (intégration VEC, ascii, ..), il est vraiment déroutant pour choisir un modèle approprié, il y a plusieurs options mais je ne suis pas sûr que l'on est le meilleur choix: seq2seq, automatique encoder, lstm, multi-régresseur + lstm?
  3. Pourriez-vous me donner un exemple de code par keras ou tensorflow?

Répondre

0

Je répondre à chaque question:

  1. Si vous voulez exploiter des similitudes (caractères que la région de parents loin de similitudes phonétiques aussi), vous avez besoin d'une couche d'enrobage. Les codages sont des entrées symboliques alors que les plongements sont des entrées continues. Avec la connaissance symbolique, toute forme de généralisation est impossible parce que vous n'avez aucun concept de distance (ou de similarité), tandis qu'avec les plongements, vous pouvez vous comporter de la même façon avec des intrants similaires (et donc généraliser). Cependant, comme l'espace d'entrée est très petit, des plongements courts suffisent.

  2. Le modèle dépend fortement du type de phénomène que vous voulez capturer. Un modèle que je vois souvent dans la littérature et qui semble bien fonctionner dans différentes tâches est un multicouche bidirectionnel-lstm sur les caractères avec une couche linéaire dans le haut.

  3. Le code est similaire à l'implémentation RNN de Tensorflow. Une bonne façon de commencer est le tutoriel Tensorflow https://www.tensorflow.org/tutorials/recurrent. La fonction de création de la bi-directionnel est https://www.tensorflow.org/api_docs/python/tf/nn/static_bidirectional_rnn

De l'expérience, j'ai eu des problèmes aux mots à base de mots-plongement à l'aide d'un modèle de caractère. La raison en est qu'un modèle basé sur les mots mettra très loin des mots morphologiquement similaires s'il n'y a pas de similarités sémantiques. Un modèle basé sur les caractères ne peut pas le faire car une entrée morphologiquement similaire ne peut pas être très bien distinguée (elle est très proche dans l'espace incorporé). C'est l'une des raisons pour lesquelles, en littérature, les gens utilisent souvent des modèles de caractères comme des modèles plus-à-mot et non comme des modèles «en soi». C'est un domaine de recherche ouvert si un modèle de caractères peut être suffisant pour capturer les similitudes sémantiques et morphologiques.

+0

Hey Giuseppe, merci l'homme pour votre réponse, mais ai-je vraiment besoin de l'incorporation de caractères, ou dans l'autre mot pourquoi ai-je besoin de la généralisation pour les similitudes de caractère ici dans ce cas? –