2008-10-04 2 views
4

Я использую термин «Лексическое кодирование» для моего отсутствия лучшего.Теория: «Лексическое кодирование»

Слово, возможно, является основной единицей коммуникации, а не буквой. Unicode пытается присвоить числовое значение каждой букве всех известных алфавитов. Что такое Письмо на один язык, является символом другого. Unicode 5.1 присваивает этим символам более 100 000 значений. Из приблизительно 180 000 слов, используемых в современном английском языке, говорится, что с лексикой около 2000 слов вы должны иметь возможность разговаривать в общих чертах. «Лексическое кодирование» кодирует каждое Слово не каждое письмо и инкапсулирует их в Предложение.

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

В этом примере каждый токен в строке был закодирован как целое. Здесь схема кодирования просто присваивает значение int на основе обобщенного статистического ранжирования использования слова и назначает константу вопросительному знаку.

В конечном счете, слово имеет как правописание & Смысл, хотя. Любая «Лексическая кодировка» сохранит смысл и намерение Предложения в целом, а не язык. Английское предложение будет закодировано в "...language-neutral atomic elements of meaning ...", которое затем может быть преобразовано в любой язык со структурированной синтаксической формой и грамматической структурой.

Каковы другие примеры методов «Лексического кодирования»?


Если вы были заинтересованы в том, где статистические данные словоупотребления приходят из:
http://www.wordcount.org

+2

Что поначалу кажется трезвым и логичным понятием, этот вопрос, без сомнения, ошибочен на стольких уровнях - от лексического до прагматического. Это противоречит тому, что такое понимание языка. – logout 2010-01-31 11:18:45

ответ

2

Это несколько серьезных проблем с этой идеей. В большинстве языков значение слова и слово, связанное со значением, меняются очень быстро.

Как только у вас будет число, назначенное слову, до того, как значение слова изменится. Например, слово «гей» означает только «счастливое» или «веселое», но в настоящее время оно используется в основном для обозначения гомосексуалистов. Другим примером является морфема «спасибо», которая первоначально была взята из немецкого «данке», что является всего лишь одним словом. Еще один пример - «До свидания», который является сокращением «Бог благословит вас».

Другая проблема заключается в том, что даже если в любой момент времени сделать снимок слова, смысл и использование этого слова будут противоречить даже в пределах одной провинции. Когда словари пишутся, нередко академикам приходится спорить по одному слову.

Одним словом, вы не сможете сделать это с использованием существующего языка. Вы должны были бы подумать о том, чтобы изобрести свой собственный язык с этой целью или использовать довольно статический язык, который уже был изобретен, например, Interlingua или Esperanto. Однако даже они не были бы идеальны с целью определения статических морфем в стандартном лексиконе.

Даже на китайском языке, где есть грубое отображение символа в значение, оно все равно не сработает. Многие символы изменяют свои значения в зависимости от обоих контекстов, и какие символы либо предшествуют, либо постфиксны.

Проблема в худшем случае при попытке перевода между языками. На английском может быть одно слово, которое может использоваться в различных случаях, но не может быть использовано непосредственно на другом языке. Примером этого является «свободный». На испанском языке можно использовать либо «libre», что означает «свободный», как в речи, или «бесплатно», что означает «свободный», как в пиве (и использование неправильного слова вместо «свободного» было бы очень забавным).

Есть и другие слова, которые еще сложнее разместить в значении, например, слово beautiful на корейском языке; при вызове девушки красивой, было бы несколько кандидатов на замещение; но когда вы называете пищу красивой, если вы не имеете в виду, что еда хорошо выглядит, есть несколько других кандидатов, которые совершенно разные.

В чем дело, хотя мы используем только около 200 тыс. Слов на английском языке, наши словари на самом деле больше в некоторых аспектах, потому что мы назначаем много разных значений одному и тому же слову. Те же проблемы относятся к эсперанто и интерлингвам, а также к любому другому языку, имеющему смысл для разговора. Человеческая речь не является четко определенной, хорошо смазанной машиной. Итак, хотя вы могли бы создать такой лексикон, где каждое «слово» имело бы свое уникальное значение, было бы очень сложно и почти невозможно, чтобы машины, использующие современные методы, переводили с любого человеческого языка в ваш специальный стандартизованный лексикон.

Вот почему машинный перевод все еще сосет и будет долгое время. Если вы можете сделать лучше (и я надеюсь, что вы это сделаете), то вам, вероятно, стоит подумать о том, чтобы сделать это с помощью какой-то стипендии и/или университетского/государственного финансирования, работая в PHD; или просто сделать кучу денег, независимо от того, что держит ваш корабль на пару.

6

Этот вопрос посягает на лингвистике больше, чем программирование, но для языков, которые являются весьма синтетические (имеющие слова, которые состоят множественных комбинированных морфем), может быть очень сложной задачей попытаться «подсчитать» все возможные слова, в отличие от таких языков, как английский, которые, по крайней мере, несколько изолированы, или языков, таких как китайский, которые являются высоко аналитическими.

То есть, слова не могут быть легко разбиты и подсчитаны на основе их составляющих глифов на некоторых языках.

Эта статья в Википедии по адресу Isolating languages может быть полезна для объяснения проблемы.

3

Легко придумать для себя. Поверните каждое слово в канонический байтовый поток (скажем, в нижнем регистре разложенного UCS32), затем хешируйте его до целого. 32 бит, вероятно, будет достаточно, но если не тогда, то 64 бит наверняка будут.

Прежде чем вы начнете давать вам непристойный ответ, считайте, что цель Unicode - просто присвоить каждому глифу уникальный идентификатор. Не ранжировать, не сортировать и не группировать их, а просто сопоставлять каждый с уникальным идентификатором, на который все согласны.

2

Как система будет обрабатывать плюрализацию существительных или сопряжение глаголов? У каждого из них будет свое значение «Юникод»?

2

В качестве схемы переводов это, вероятно, не будет работать без дополнительной работы. Вы хотели бы думать, что вы можете назначить число каждому слову, а затем механически перевести его на другой язык. На самом деле языки имеют проблему с несколькими словами, которые пишутся так же, «ветер дует назад», а «ветер ваши часы».

Для передачи текста, где вы, предположительно, должны иметь алфавит на каждый язык, он будет работать нормально, хотя мне интересно, что вы получили там, а не используя словарь переменной длины, например ZIP.

0

На самом деле вам нужно всего около 600 слов на полтора достойного словаря.

2

Это интересный вопрос, но я подозреваю, что вы спрашиваете его по неправильным причинам.Вы думаете об этом «лексическом« Юникоде »как о чем-то, что позволит вам разбить предложения на нейтральные по языку атомные элементы смысла, а затем сможет воссоздать их на каком-то другом конкретном языке? Может быть, как средство достижения универсального переводчика?

Даже если вы можете кодировать и хранить, скажем, английское предложение, используя «лексический юникод», вы не можете ожидать его чтения и волшебным образом отображать его, скажем, в китайском, сохраняя смысл неповрежденным.

Ваша аналогия с Unicode, однако, очень полезна.

Имейте в виду, что Unicode, хотя и «универсальный» код, не воплощает произношение, значение или использование рассматриваемого персонажа. Каждая точка кода относится к определенному глифу на определенном языке (или, скорее, в скрипте, используемом группой языков). Он элементален на уровне визуального представления глифа (в рамках стиля, форматирования и шрифтов). Кодовая точка Юникода для латинской буквы «А» - это именно так. Это латинская буква «А». Он не может автоматически отображаться, например, в арабском письме Alif (ا) или в указателе (Devnagari) «A» (अ).

Подходя к аналогии с Юникодом, ваш лексический Юникод будет иметь коды для каждого слова (словоформы) на каждом языке. Unicode имеет диапазоны кодовых точек для конкретного скрипта. Ваш лексический Unicode будет иметь ряд кодов для каждого языка. Различные слова на разных языках, даже если они имеют одинаковый смысл (синонимы), должны иметь разные кодовые точки. Одно и то же слово, имеющее разные значения, или разные произношения (омонимы), должно иметь разные кодовые точки.

В Unicode для некоторых языков (но не для всех), где один и тот же символ имеет другую форму в зависимости от его положения в слове - например. на иврите и арабском языке форма глифа изменяется в конце слова - тогда у него есть другая кодовая точка. Аналогично, в вашем лексическом Юникоде, если слово имеет другую форму в зависимости от его положения в предложении, оно может гарантировать свою собственную кодовую точку.

Возможно, самый простой способ создать кодовые точки для английского языка - это основать вашу систему, скажем, на отдельном издании Оксфордского английского словаря и последовательно назначать уникальный код для каждого слова. Вам придется использовать другой код для каждого разного значения одного и того же слова, и вам придется использовать другой код для разных форм - например, если одно и то же слово может использоваться как существительное и как глагол, тогда вам понадобятся два кода:

Тогда вам нужно будет сделать то же самое для каждого другого языка, который вы хотите включить, - используя самый авторитетный словарь для этого языка ,

Скорее всего, это упражнение - это все больше усилий, чем того стоит. Если вы решите включить все живые языки в мире, а также некоторые исторические мертвые и некоторые вымышленные - как это делает Юникод, вы получите кодовое пространство, которое настолько велико, что ваш код должен быть чрезвычайно широким для его размещения. Вы не получите ничего с точки зрения сжатия - вполне вероятно, что предложение, представленное как строка на языке оригинала, занимало бы меньше места, чем одно и то же предложение, представленное как код.

P.S. для тех, кто говорит, что это невыполнимая задача, потому что меняются значения слов, я не вижу в этом проблемы. Чтобы использовать аналогию с Юникодом, использование букв изменилось (правда, не так быстро, как смысл слов), но Unicode не относится к тому, что «th» раньше употреблялось как «y» в средневековье. Unicode имеет кодовую точку для 't', 'h' и 'y', и каждый из них выполняет свою задачу.

P.P.S.На самом деле, для Unicode какая-то проблема заключается в том, что «oe» также «œ» или «ss» может быть написано «ß» на немецком языке

1

Это интересное небольшое упражнение, но я бы настоятельно рекомендовал вам рассмотреть его не что иное, как введение в понятие различия в естественном языке между типами и жетонами.

Тип - это единственный экземпляр слова, представляющего все экземпляры. Токен - это единственный счет для каждого экземпляра слова. Позвольте мне объяснить это следующим примером:

«Джон пошел в хлебный магазин, купил хлеб».

Вот некоторые отсчеты частоты для этого примера, с подсчетами, означающего количество жетонов:

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

Обратите внимание, что «» считаются дважды - есть две лексем из «». Однако обратите внимание, что, хотя есть десять слов, всего восемь из этих пар «от двух до двух». Слова разбиваются на типы и соединяются с их количеством токенов.

Типы и маркеры полезны в статистических НЛП. «Лексическая кодировка», с другой стороны, я бы следил. Это шаг к гораздо более старомодным подходам к НЛП, с предопрограммированием и рационализмом. Я даже не знаю ни о каком статистическом MT, который фактически присваивает конкретный «адрес» слову. Слишком много отношений между словами, с одной стороны, для создания любой продуманной числовой онтологии, и если мы просто бросаем цифры на слова, чтобы их классифицировать, мы должны думать о вещах, таких как управление памятью и распределение для скорости ,

Я бы предложил проверить NLTK - набор инструментов Natural Language Toolkit, написанный на Python, для более широкого ознакомления с НЛП и его практического использования.

Смежные вопросы