4

我使用术语“词法编码”是因为我没有更好的词法编码。

与字母相反,单词可以说是交流的基本单位。Unicode 尝试为所有已知字母的每个字母分配一个数值。对一种语言来说是字母,对另一种语言来说是字形。目前,Unicode 5.1 为这些 Glyphs 分配了超过 100,000 个值。在现代英语中使用的大约 180,000 个单词中,据说使用大约 2,000 个单词的词汇,您应该能够进行一般性的交谈。“词汇编码”将对每个单词而不是每个字母进行编码,并将它们封装在一个句子中。

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

在这个例子中,String 中的每个 Token 都被编码为一个 Integer。这里的编码方案只是简单地根据单词使用的广义统​​计排名分配一个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

他们是这个想法的几个主要问题。在大多数语言中,单词的含义以及与含义相关联的单词变化非常迅速。

在单词的含义发生变化之前,您将很快为一个单词分配一个数字。例如,“同性恋”这个词过去只表示“快乐”或“快乐”,但现在主要用于表示同性恋。另一个例子是语素“thank you”,它最初来自德语“danke”,只有一个词。另一个例子是“Good bye”,它是“God bless you”的缩写。

另一个问题是,即使在任何时间点对一个词进行快照,该词的含义和用法也会存在争议,即使在同一省内也是如此。在编写字典时,负责为一个单词争论的学者并不少见。

简而言之,您将无法使用现有语言来做到这一点。您将不得不考虑为此目的发明一种自己的语言,或者使用已经发明的相当静态的语言,例如国际语或世界语。然而,即使这些也不能完美地用于在标准词典中定义静态语素。

即使在中文中,字符到含义的映射很粗略,它仍然行不通。许多字符会根据上下文以及哪些字符在它们之前或后缀来改变它们的含义。

当您尝试在语言之间进行翻译时,问题最严重。英语中可能有一个词,可以在各种情况下使用,但不能直接用于另一种语言。这方面的一个例子是“免费”。在西班牙语中,可以使用“libre”(在语音中表示“免费”)或“gratis”(在啤酒中表示“免费”)(使用错误的词代替“free”看起来很有趣)。

还有一些词更难理解,比如韩语中的beautiful这个词;说一个女孩子漂亮,就会有好几个人选;但是当称食物美丽时,除非你的意思是食物好看,否则还有其他几个完全不同的候选人。

归根结底,尽管我们在英语中只使用了大约 20 万个单词,但我们的词汇量实际上在某些方面更大,因为我们为同一个单词分配了许多不同的含义。同样的问题也适用于世界语和国际语,以及对对话有意义的所有其他语言。人类语言不是一个定义明确的、润滑良好的机器。因此,尽管您可以创建这样一个词典,其中每个“单词”都有其独特的含义,但对于使用当前技术的机器将任何人类语言翻译成您的特殊标准化词典来说,这将是非常困难的,而且几乎是不可能的。

这就是为什么机器翻译仍然很糟糕,并且会持续很长一段时间。如果你能做得更好(我希望你能),那么你可能应该考虑用某种奖学金和/或大学/政府资助来做这件事,努力攻读博士学位;或者干脆赚一大笔钱,不管怎样让你的船保持蒸汽。

于 2008-10-06T11:30:39.307 回答
2

系统将如何处理名词的复数或动词的变位?这些每个都有自己的“Unicode”值吗?

于 2008-10-04T17:11:16.047 回答
2

作为一个翻译方案,如果没有更多的工作,这可能是行不通的。您想认为您可以为每个单词分配一个数字,然后将其机械地翻译成另一种语言。实际上,语言存在多个单词拼写相同的问题“风把她的头发吹回来”与“给你的手表上发条”。

对于传输文本,您可能每种语言都有一个字母表,它会很好地工作,尽管我想知道与使用可变长度字典(如 ZIP 使用)相比,您会在那里获得什么。

于 2008-10-04T17:25:55.970 回答
2

这是一个有趣的问题,但我怀疑你是出于错误的原因问这个问题。您是否认为这种“词汇”Unicode 可以让您将句子分解为与语言无关的原子意义元素,然后能够用其他具体语言重新构建它们?作为实现通用翻译器的一种手段,也许?

即使您可以使用“lexical unicode”对一个英文句子进行编码和存储,也不能指望阅读它并神奇地将其翻译成中文,从而保持其含义不变。

但是,您对 Unicode 的类比非常有用。

请记住,Unicode 虽然是“通用”代码,但并不体现相关字符的发音、含义或用法。每个代码点指的是特定语言中的特定字形(或者更确切地说是一组语言使用的脚本)。它在字形的视觉表示级别(在样式、格式和字体的范围内)是基本的。拉丁字母“A”的 Unicode 代码点就是这样。它是拉丁字母“A”。它不能自动呈现为阿拉伯字母 Alif (ﺍ) 或印度语 (Devnagari) 字母 'A' (अ)。

保持 Unicode 类比,您的词汇 Unicode 将具有每种语言中每个单词(单词形式)的代码点。Unicode 具有特定脚本的代码点范围。您的词汇 Unicode 必须为每种语言提供一系列代码。不同语言中的不同单词,即使它们具有相同的含义(同义词),也必须具有不同的代码点。具有不同含义或不同发音(同音异义词)的同一个词必须具有不同的代码点。

在 Unicode 中,对于某些语言(但不是全部),同一字符根据其在单词中的位置而具有不同的形状 - 例如在希伯来语和阿拉伯语中,字形的形状在单词的末尾发生变化 - 然后它有不同的代码点。同样,在您的 Lexical Unicode 中,如果一个单词根据其在句子中的位置而具有不同的形式,则它可能需要自己的代码点。

想出英语语言代码点的最简单方法可能是将您的系统基于牛津英语词典的特定版本,并按顺序为每个单词分配一个唯一代码。您必须为同一个词的每个不同含义使用不同的代码,并且您必须为不同的形式使用不同的代码 - 例如,如果同一个词可以用作名词和动词,那么您将需要两个代码

然后,您必须对要包含的每种其他语言执行相同的操作 - 使用该语言最权威的词典。

很有可能,这种练习付出的努力多于它的价值。如果您决定包含世界上所有现存的语言,以及一些历史悠久的死语言和一些虚构的语言——就像 Unicode 所做的那样——你最终会得到一个非常大的代码空间,以至于你的代码必须非常宽才能容纳它。您不会在压缩方面获得任何收益 - 以原始语言表示为字符串的句子可能会比以代码表示的相同句子占用更少的空间。

PS对于那些说这是一项不可能完成的任务的人来说,因为词义发生了变化,我不认为这是一个问题。用 Unicode 类比,字母的用法已经发生了变化(诚然,没有单词的含义那么快),但 Unicode 并不关心在中世纪曾经像 'y' 一样发音的 'th'。Unicode 有一个 't'、'h' 和 'y' 的代码点,它们各自服务于它们的目的。

PPS 实际上,Unicode 有点担心 'oe' 也是 'œ' 或者 'ss' 可以用德语写成 'ß'

于 2008-10-06T13:19:27.230 回答
1

这是一个有趣的小练习,但我强烈建议您将其视为对自然语言类型和标记之间差异概念的介绍。

类型是代表所有实例的单词的单个实例。标记是单词每个实例的单个计数。让我用下面的例子来解释一下:

“约翰去了面包店。他买了面包。”

以下是此示例的一些频率计数,计数表示令牌的数量:

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

请注意,“the”被计算了两次——“the”有两个标记。但是,请注意,虽然有十个词,但这些词频对中只有八个。单词被分解为类型并与其标记计数配对。

类型和标记在统计 NLP 中很有用。另一方面,我会注意“词法编码”。这是对 NLP 更老式方法的延续,预编程和理性主义比比皆是。我什至不知道任何实际为单词分配特定“地址”的统计 MT。单词之间有太多的关系,一方面,构建任何一种经过深思熟虑的数字本体,如果我们只是将数字扔给单词来对它们进行分类,我们应该考虑诸如内存管理和分配速度之类的事情.

我建议查看用 Python 编写的自然语言工具包 NLTK,以更广泛地介绍 NLP 及其实际用途。

于 2008-10-10T17:11:09.120 回答
0

实际上,你只需要大约 600 个单词即可获得一半体面的词汇。

于 2008-10-06T12:12:49.703 回答