4

私は「レキシカル エンコーディング」という用語を、より適切な用語がないために使用しています。

文字とは対照的に、言葉は間違いなくコミュニケーションの基本単位です。Unicode は、既知のすべてのアルファベットの各文字に数値を割り当てようとします。ある言語にとっての文字は、別の言語にとってのグリフです。Unicode 5.1 は現在、これらのグリフに 100,000 を超える値を割り当てています。現代英語で使われている約18万語のうち、約2,000語の語彙があれば一般的な会話ができると言われています。「字句エンコーディング」は、各文字ではなく各単語をエンコードし、それらをセンテンス内にカプセル化します。

// 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

4

8 に答える 8

6

この質問は、プログラミングよりも言語学に影響を与えますが、高度に合成的な言語 (複数の結合された形態素で構成される単語を持つ) の場合、次のような言語とは対照的に、すべての可能な単語に「番号を付ける」ことは非常に複雑な問題になる可能性があります。少なくともある程度孤立している英語、または高度に分析的な中国語のような言語。

つまり、一部の言語では、構成要素のグリフに基づいて単語を簡単に分解して数えることができない場合があります。

言語の分離に関するこのウィキペディアの記事は、問題の説明に役立つ場合があります。

于 2008-10-04T14:56:51.030 に答える
3

自分で発明するのは簡単です。各単語を正規のバイトストリーム(たとえば、小文字の分解されたUCS32)に変換してから、整数にハッシュします。おそらく32ビットで十分ですが、そうでない場合は64ビットで十分です。

卑劣な答えを出す前に、Unicodeの目的は単に各グリフに一意の識別子を割り当てることであると考えてください。それらをランク付けしたり、並べ替えたり、グループ化したりするのではなく、全員が同意する一意の識別子にそれぞれをマッピングするだけです。

于 2008-10-04T17:03:22.380 に答える
3

このアイデアにはいくつかの大きな問題があります。ほとんどの言語では、単語の意味と意味に関連付けられた単語は非常に迅速に変化します。

単語の意味が変わる前に、単語に番号が割り当てられるとすぐに。たとえば、「ゲイ」という言葉は、以前は「幸せ」または「陽気な」という意味でしか使われませんでしたが、現在では主に同性愛者を意味するために使用されています. もう 1 つの例は、ドイツ語の「danke」に由来する形態素「thank you」です。これは 1 つの単語です。さらに別の例は、「God bless you」の短縮形である「Good bye」です。

もう 1 つの問題は、ある時点で単語のスナップショットを撮ったとしても、同じ州内であっても、その単語の意味と使用法が競合することです。辞書が書かれているとき、担当の学者が 1 つの単語について議論することは珍しくありません。

要するに、既存の言語でそれを行うことはできません。そのためには、独自の言語を発明するか、Interlingua や Esperanto など、すでに発明されているかなり静的な言語を使用することを検討する必要があります。しかし、これらは常に標準的な辞書で静的な形態素を定義する目的には完全ではありません。

文字から意味への大まかなマッピングがある中国語でさえ、それでも機能しません。多くの文字は、前後関係や前後にどの文字が付くかによって意味が変わります。

言語間で翻訳しようとすると、問題は最悪の状態になります。英語には、さまざまな場合に使用できても、他の言語では直接使用できない単語が 1 つある場合があります。この例は「無料」です。スペイン語では、スピーチのように「無料」を意味する「libre」、またはビールのように「無料」を意味する「gratis」のいずれかを使用できます (「無料」の代わりに間違った単語を使用すると、非常に滑稽に見えます)。

韓国語の美しいという言葉のように、意味を付けるのがさらに難しい言葉が他にもあります。女の子を美しいと呼ぶとき、代替の候補はいくつかあります。しかし、食べ物を美しいと呼ぶとき、食べ物が美しいという意味でない限り、まったく異なる他のいくつかの候補があります.

結局のところ、私たちは英語で約 20 万語しか使用していませんが、同じ単語に多くの異なる意味を割り当てているため、語彙はいくつかの面で実際にはより多くなっています。同じ問題が、エスペラントとインターリングア、および会話に意味のある他のすべての言語に当てはまります。人間の発話は、明確に定義された、油を塗った機械ではありません。したがって、各「単語」が独自の意味を持つ辞書を作成することはできますが、現在の技術を使用する機械が人間の言語から特別な標準化された辞書に翻訳することは非常に困難であり、ほぼ不可能です。

これが、機械翻訳がいまだにうまくいかない理由であり、今後も長く続くでしょう。あなたがもっとうまくやれるなら(そして私はできることを願っています)、おそらく何らかの奨学金や大学/政府の資金を使ってそれを行うことを検討し、PHDに向けて取り組んでください。または、あなたの船を動かし続けるものは何でも、単にお金を稼ぐだけです。

于 2008-10-06T11:30:39.307 に答える
2

システムは名詞の複数形や動詞の活用をどのように処理しますか?これらはそれぞれ独自の「Unicode」値を持っていますか?

于 2008-10-04T17:11:16.047 に答える
2

これは興味深い質問ですが、間違った理由で質問しているのではないかと思います。この「字句」Unicodeは、文を言語に中立な意味のアトミック要素に分解し、他の具体的な言語で再構成できるものと考えていますか?万能翻訳機を実現する手段として、おそらく?

たとえば、「字句ユニコード」を使用して英語の文をエンコードして保存できたとしても、それを読んで、意味を損なわずに中国語で魔法のようにレンダリングすることは期待できません。

ただし、Unicodeとの類似性は非常に役立ちます。

Unicodeは、「ユニバーサル」コードですが、問題の文字の発音、意味、または使用法を具体化していないことに注意してください。各コードポイントは、特定の言語の特定のグリフ(または言語のグループによって使用されるスクリプト)を参照します。これは、グリフの視覚的表現レベル(スタイル、フォーマット、フォントの範囲内)で要素的です。ラテン文字「A」のUnicodeコードポイントはまさにそれです。ラテン文字の「A」です。たとえば、アラビア文字のAlif(ﺍ)またはインド語(Devnagari)の文字「A」(अ)として自動的にレンダリングすることはできません。

Unicodeのアナロジーを維持すると、Lexical Unicodeには、各言語の各単語(単語形式)のコードポイントがあります。Unicodeには、特定のスクリプトのコードポイントの範囲があります。字句Unicodeは、言語ごとにさまざまなコードを使用する必要があります。同じ意味(同義語)であっても、異なる言語の異なる単語は、異なるコードポイントを持っている必要があります。異なる意味、または異なる発音(同音異義語)を持つ同じ単語は、異なるコードポイントを持つ必要があります。

Unicodeでは、同じ文字が単語内の位置に応じて異なる形状を持つ一部の言語(すべてではない)の場合(たとえば、ヘブライ語とアラビア語では、単語の末尾でグリフの形状が変化します)、次のようになります。別のコードポイント。同様に、Lexical Unicodeでは、単語が文中の位置に応じて異なる形式である場合、それ自体のコードポイントが必要になる場合があります。

おそらく、英語のコードポイントを考え出す最も簡単な方法は、たとえば、オックスフォード英語辞典の特定のエディションに基づいてシステムを構築し、各単語に一意のコードを順番に割り当てることです。同じ単語の異なる意味ごとに異なるコードを使用する必要があり、異なる形式に異なるコードを使用する必要があります。たとえば、同じ単語を名詞および動詞として使用できる場合は、次のようになります。 2つのコード

次に、含めたい他の言語についても同じことを行う必要があります。その言語で最も信頼できる辞書を使用します。

この演習は、価値がある以上にすべての努力である可能性があります。世界のすべての生きている言語に加えて、いくつかの歴史的な死語といくつかの架空の言語を含めることにした場合(Unicodeのように)、コードスペースが非常に大きくなり、それに対応するためにコードを非常に広くする必要があります。圧縮に関しては何も得られません。元の言語で文字列として表される文は、コードとして表される同じ文よりも占有するスペースが少なくなる可能性があります。

言葉の意味が変わるので、これは不可能な仕事だと言っている人のためのPS、私はそれを問題とは見ていません。Unicodeのアナロジーを使用するために、文字の使用法は変更されました(確かに、単語の意味ほど急速ではありません)が、中世に「th」が「y」のように発音されていたのはUnicodeには関係ありません。Unicodeには、「t」、「h」、および「y」のコードポイントがあり、それぞれが目的を果たします。

PPS実際、Unicodeにとって、「oe」も「œ」であるか、「ss」をドイツ語で「ß」と書くことができるかどうかが懸念されます。

于 2008-10-06T13:19:27.230 に答える
2

翻訳スキームとして、これはおそらくもっと多くの作業なしでは機能しないでしょう。各単語に番号を割り当てて、それを別の言語に機械的に翻訳できると考えたいと思います。実際には、言語には、「風が彼女の髪を吹き返した」と「時計を巻く」と同じ綴りの複数の単語の問題があります。

言語ごとにアルファベットがあると思われるテキストを送信する場合は問題なく機能しますが、ZIPのように可変長の辞書を使用するのではなく、そこで何が得られるのでしょうか。

于 2008-10-04T17:25:55.970 に答える
1

これは興味深いちょっとした演習ですが、型とトークンの間の自然言語の違いの概念の紹介にすぎないと考えてください。

タイプは、すべてのインスタンスを表す単語の単一のインスタンスです。トークンは、単語のインスタンスごとに 1 つのカウントです。これを次の例で説明しましょう。

「ジョンはパン屋に行きました。彼はパンを買いました。」

この例の頻度カウントを次に示します。カウントはトークンの数を意味します。

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

「the」は 2 回カウントされることに注意してください。「the」には 2 つのトークンがあります。ただし、単語は 10 個ありますが、これらの単語と頻度のペアは 8 個しかないことに注意してください。単語はタイプに分類され、トークン カウントとペアになっています。

タイプとトークンは、統計 NLP で役立ちます。一方、「レキシカルエンコーディング」には注意が必要です。これは、NLP へのはるかに昔ながらのアプローチへの続きであり、プリプログラミングと合理主義がたくさんあります。特定の「アドレス」を単語に実際に割り当てる統計的 MT については知りません。たとえば、よく考えられた数値オントロジーを構築するには、単語間の関係が多すぎます。単語を分類するために単語に数字を投げるだけである場合は、メモリ管理や速度の割り当てなどについて考える必要があります。 .

Python で書かれた自然言語ツールキットである NLTK を調べることをお勧めします。NLP とその実用的な使用法をより詳しく紹介しています。

于 2008-10-10T17:11:09.120 に答える
0

実際には、半分まともな語彙に必要なのは約600語だけです。

于 2008-10-06T12:12:49.703 に答える