Теория: «Лексическое кодирование» - PullRequest
4 голосов
/ 04 октября 2008

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

Слово, возможно, является основной единицей общения, а не буквой. 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 на основе обобщенного статистического ранжирования использования слов и присваивает константу вопросительному знаку.

В конечном счете, Слово имеет как Правописание, так и Значение. Любое «Лексическое кодирование» сохранит смысл и намерение Предложения в целом и не будет зависеть от языка. Английское предложение должно быть закодировано в "... нейтральных по отношению к языку атомарных элементов значения ..." , которые затем могут быть преобразованы в любой язык со структурированной синтаксической формой и грамматической структурой.

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


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

Ответы [ 8 ]

6 голосов
/ 04 октября 2008

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

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

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

3 голосов
/ 06 октября 2008

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

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

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

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

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

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

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

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

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

3 голосов
/ 04 октября 2008

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

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

2 голосов
/ 06 октября 2008

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

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

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

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

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

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

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

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

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

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

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

2 голосов
/ 04 октября 2008

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

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

2 голосов
/ 04 октября 2008

Как система будет обрабатывать множественное число существительных или спряжение глаголов? Будет ли у каждого из них свое собственное значение Unicode?

1 голос
/ 10 октября 2008

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

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

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

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

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

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

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

Я бы предложил проверить NLTK, набор инструментов для естественного языка, написанный на Python, для более подробного знакомства с NLP и его практическим использованием.

0 голосов
/ 06 октября 2008

На самом деле вам нужно всего лишь около 600 слов для полусвободного словаря.

...