Question

J'utilise le terme "codage lexical". pour mon manque d'un meilleur.

Un mot est sans doute l'unité de communication fondamentale par opposition à une lettre. Unicode essaie d'attribuer une valeur numérique à chaque lettre de tous les alphabets connus. Qu'est-ce qu'une lettre à une langue, est un glyphe à une autre. Unicode 5.1 attribue actuellement plus de 100 000 valeurs à ces glyphes. Sur environ 180 000 mots utilisés en anglais moderne, il est dit qu'avec un vocabulaire d'environ 2 000 mots, vous devriez être capable de converser en termes généraux. Un "codage lexical" encoderait chaque mot et non chaque lettre et les encapsulerait dans une phrase.

// An simplified example of a "Lexical Encoding"
String sentence = "How are you today?";
int[] sentence = { 93, 22, 14, 330, QUERY };

Dans cet exemple, chaque jeton de la chaîne a été codé sous la forme d'un entier. Le schéma de codage attribue simplement ici une valeur int basée sur un classement statistique généralisé de l’utilisation des mots et attribue une constante au point d’interrogation.

En fin de compte, un mot a à la fois une orthographe et un; Signification cependant. N'importe quel "codage lexical" préserverait le sens et l’intention de la phrase dans son ensemble et ne serait pas spécifique à une langue. Une phrase anglaise serait codée dans les "... éléments de signification atomiques neutres en langue ...". qui pourraient ensuite être reconstitués dans n’importe quel langage doté d’une forme syntaxique et d’une structure grammaticale structurées.

Quels sont d'autres exemples de "Lexical Encoding"? techniques?

Si vous souhaitez savoir d'où proviennent les statistiques sur l'utilisation des mots:
http://www.wordcount.org

Était-ce utile?

La solution

Leur idée pose plusieurs problèmes majeurs. Dans la plupart des langues, la signification d’un mot et le mot associé à une signification changent très rapidement.

À peine avez-vous attribué un numéro à un mot avant que le sens de ce mot change. Par exemple, le mot "gay" utilisé pour ne signifier que "heureux" ou "joyeux", mais il est maintenant utilisé principalement pour désigner homosexuel. Un autre exemple est le morphème "Merci". qui venait à l'origine de l'allemand " danke " qui est juste un mot. Un autre exemple est "Au revoir". qui est un raccourcissement de "Dieu vous bénisse".

Un autre problème est que, même si l’on prend un instantané d’un mot à n’importe quel moment, le sens et l’utilisation de ce mot seraient contestés, même dans la même province. Lors de la rédaction de dictionnaires, il n’est pas rare que les universitaires responsables se disputent un seul mot.

En bref, vous ne pourriez pas le faire avec une langue existante. Vous devriez envisager d’inventer votre propre langue, à cette fin, ou d’utiliser un langage assez statique qui a déjà été inventé, tel que l’interlingua ou l’espéranto. Cependant, même ceux-ci ne seraient pas parfaits pour définir des morphèmes statiques dans un lexique toujours standard.

Même en chinois, où la correspondance entre le caractère et le sens est grossière, cela ne fonctionnerait toujours pas. De nombreux caractères changent de signification en fonction du contexte et des caractères qui les précèdent ou les postfixent.

Le problème est encore pire lorsque vous essayez de traduire entre les langues. Il peut y avoir un mot en anglais, qui peut être utilisé dans différents cas, mais ne peut pas être utilisé directement dans une autre langue. Un exemple de ceci est "gratuit". En espagnol, soit "libre". signifiant "gratuit" comme dans le discours, ou "gratis" signifiant "gratuit" comme dans la bière peut être utilisé (et utiliser le mauvais mot à la place de "gratuit" semblerait très drôle).

Il existe d’autres mots qui sont encore plus difficiles à attribuer à une signification, tels que le mot magnifique en coréen; lorsqu'il appellerait une fille belle, il y aurait plusieurs candidats à la substitution; mais quand on dit que la nourriture est belle, à moins que vous ne vouliez dire que la nourriture est bonne, il existe plusieurs autres candidats qui sont complètement différents.

En résumé, bien que nous n'utilisions que 200 000 mots en anglais, notre vocabulaire est en réalité plus volumineux à certains égards, car nous attribuons différentes significations au même mot. Les mêmes problèmes s'appliquent à l'espéranto et à l'interlingua, ainsi que dans toutes les autres langues utiles pour la conversation. Le langage humain n'est pas une machine bien définie, bien huilée. Donc, bien que vous puissiez créer un tel lexique où chaque "mot" Si cela avait une signification unique, il serait très difficile et presque impossible pour les machines utilisant les techniques actuelles de traduire de n'importe quel langage humain dans votre lexique normalisé particulier.

C’est la raison pour laquelle la traduction automatique craint toujours et le restera encore longtemps. Si vous pouvez faire mieux (et j'espère que vous le pourrez), vous devriez probablement envisager de le faire avec une sorte de bourse et / ou un financement universitaire / gouvernemental, en vue de la réalisation d'un doctorat; ou simplement gagner beaucoup d’argent, peu importe ce qui maintient votre navire à la vapeur.

Autres conseils

Cette question concerne davantage la linguistique que la programmation, mais pour les langues très synthétiques (dont les mots sont composés de plusieurs morphèmes combinés), essayer de "numéroter" peut être un problème extrêmement complexe. tous les mots possibles, par opposition aux langues comme l'anglais qui sont au moins quelque peu isolantes, ou aux langues comme le chinois qui sont très analytiques.

En d'autres termes, les mots ne peuvent pas être facilement décomposés et comptés en fonction de leurs glyphes constitutifs dans certaines langues.

Cet article de Wikipedia sur Isoler les langues peut être utile pour expliquer le problème.

Il est assez facile d’en inventer un pour vous-même. Transformez chaque mot en un flux bytest canonique (par exemple, UCS32 décomposé en minuscules), puis réduisez-le en un entier. 32 bits seraient probablement suffisants, mais sinon 64 bits le seraient certainement.

Avant de vouloir vous donner une réponse sarcastique, considérez que le but d'Unicode est simplement d'attribuer un identifiant unique à chaque glyphe. Pas pour les classer, les trier ou les grouper, mais simplement pour les mapper sur un identifiant unique sur lequel tout le monde s’accorde.

Comment le système gère-t-il la pluralisation des noms ou la conjugaison des verbes? Ceux-ci auraient-ils chacun leur propre " Unicode " valeur?

En tant que schéma de traduction, cela ne fonctionnera probablement pas sans beaucoup plus de travail. Vous aimeriez penser que vous pouvez attribuer un numéro à chaque mot, puis le traduire mécaniquement dans une autre langue. En réalité, les langues ont le problème de la multiplicité des mots orthographiés de la même manière "le vent lui a coupé les cheveux en arrière". contre "vent votre montre".

Pour la transmission de texte, où vous auriez vraisemblablement un alphabet par langue, cela fonctionnerait bien, bien que je me demande ce que vous y gagneriez par opposition à l’utilisation d’un dictionnaire de longueur variable, comme celui de ZIP.

C'est une question intéressante, mais je suppose que vous la posez pour de mauvaises raisons. Pensez-vous que cet "Unicode" "lexical" vous permettrait de décomposer des phrases en éléments de signification atomiques neutres en termes de langage et de pouvoir ensuite les reconstituer dans un autre langage concret? Pour atteindre un traducteur universel, peut-être?

Même si vous pouvez encoder et stocker, par exemple, une phrase anglaise à l'aide d'un "unicode lexical", vous ne pouvez pas vous attendre à la lire et à la restituer comme par magie, par exemple, en chinois en conservant la signification intacte.

Votre analogie avec Unicode est cependant très utile.

N'oubliez pas que l'Unicode, bien qu'il s'agisse d'un code "universel", n'incarne pas la prononciation, le sens ou l'usage du caractère en question. Chaque point de code fait référence à un glyphe spécifique dans une langue spécifique (ou plutôt au script utilisé par un groupe de langues). Il est élémentaire au niveau de la représentation visuelle d'un glyphe (dans les limites du style, de la mise en forme et des polices). Le point de code Unicode pour la lettre latine "A" est tout simplement cela C'est la lettre latine 'A'. Par exemple, elle ne peut pas être rendue sous la forme de la lettre arabe Alif (?) ou de la lettre Indic (Devnagari) 'A' (?).

En ce qui concerne l’analogie Unicode, votre système Unicode lexical aurait des points de code pour chaque mot (forme de mot) dans chaque langue. Unicode a des plages de points de code pour un script spécifique. Votre Unicode lexical aurait une gamme de codes pour chaque langue. Différents mots dans différentes langues, même s'ils ont la même signification (synonymes), doivent avoir des points de code différents. Un même mot ayant différentes significations ou différentes prononciations (homonymes) devrait avoir des points de code différents.

En Unicode, pour certaines langues (mais pas toutes) où le même caractère a une forme différente en fonction de sa position dans le mot - par exemple. en hébreu et en arabe, la forme d'un glyphe change à la fin du mot - le code est alors différent. De même, dans votre unicode lexical, si un mot a une forme différente en fonction de sa position dans la phrase, il peut justifier de son propre point de code.

Le moyen le plus simple de définir des points de code pour la langue anglaise consiste à baser votre système, par exemple sur une édition particulière du dictionnaire Oxford English Dictionary, et à attribuer un code unique à chaque mot de manière séquentielle. Vous devrez utiliser un code différent pour chaque signification différente du même mot et vous devrez utiliser un code différent pour des formes différentes - par exemple. si le même mot peut être utilisé comme nom et comme verbe, vous aurez besoin de deux codes

Vous devrez ensuite faire de même pour chaque langue que vous souhaitez inclure - en utilisant le dictionnaire le plus fiable pour cette langue.

Il est probable que cet exercice demande plus d'effort qu'il ne vaut. Si vous décidez d'inclure toutes les langues vivantes du monde, ainsi que certaines langues mortes et historiques, ainsi que des langues fictives - comme le fait Unicode -, vous obtiendrez un espace de code si grand que votre code devra être extrêmement large pour l'adapter. Vous ne gagnerez rien en termes de compression - il est probable qu'une phrase représentée par une chaîne dans la langue d'origine prendrait moins de place que la même phrase représentée sous forme de code.

P.S. pour ceux qui disent que c'est une tâche impossible car les significations des mots changent, je ne vois pas cela comme un problème. Pour utiliser l’analogie Unicode, l’utilisation des lettres a changé (certes pas aussi rapidement que le sens des mots), mais cela n’inquiète pas pour Unicode que "th" se prononçait comme "y" au Moyen Âge. Unicode a un point de code pour 't', 'h' et 'y' et ils servent chacun leur but.

P.P.S. En fait, Unicode craint que 'oe' soit aussi 'œ' ou que 'ss' puisse s'écrire 'ß' en allemand

Il s’agit d’un petit exercice intéressant, mais je vous exhorte à ne le considérer que comme une introduction au concept de différence de langage naturel entre types et jetons.

Un type est une instance unique d'un mot qui représente toutes les instances. Un jeton est un compte unique pour chaque instance du mot. Laissez-moi vous expliquer ceci avec l'exemple suivant:

"John est allé au magasin de pain. Il a acheté le pain. "

Voici quelques comptages de fréquence pour cet exemple, les comptages indiquant le nombre de jetons:

John: 1
went: 1
to: 1
the: 2
store: 1
he: 1
bought: 1
bread: 2

Notez que " le " est compté deux fois - il y a deux jetons de "la". Cependant, notez que s'il y a dix mots, il n'y a que huit de ces paires mot à fréquence. Les mots sont décomposés en types et associés au nombre de jetons.

Les types et les jetons sont utiles en PNL statistique. "Codage lexical" par contre, je ferais attention. Ceci est une transition dans des approches beaucoup plus démodées de la PNL, avec une préprogrammation et un rationalisme abondants. Je ne connais même pas de MT statistique qui attribue une "adresse" spécifique. à un mot. Il y a trop de relations entre les mots, d'une part, pour construire une ontologie numérique bien pensée, et si nous ne faisons que numéroter des mots pour les catégoriser, nous devrions penser à des choses comme la gestion de la mémoire et l'allocation pour la vitesse. .

Je suggérerais de consulter NLTK, la boîte à outils en langage naturel, écrite en Python, pour une introduction plus détaillée à la PNL et à ses utilisations pratiques.

En fait, vous avez besoin d’environ 600 mots pour un vocabulaire à la moitié décent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top