Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top