项目SegWord中存在许多问题,简要叙述如下,供以后讨论参考。
首先需要说明的是,三个既定目标是不能在同一个阶段内完成的,否则任务将过于艰巨,不利于项目的开展。对于传统的分词算法,一般有两大步骤,一是分词,二是词性标注,其中的难点在于歧义的发现与处理,未登录词的识别,新词发现以及兼类处理。这些也同样是SegWord所面对的问题,只不过由于其目标略有不同,在SegWord中的处理时机需要仔细考虑。
我们大致确定本项目第一阶段的基本问题如下:
1. 不同编码的转化
主要是GBK码与BIG 5 码 、Unicode码之间的文本的相互转化。
2. 中文字符串的hash函数
目标是获得:
Hash_value = hash ( Unicode_key )
其中Unicode_key是unicode编码的中文词汇字符串。
设计此函数的目的是,词库的主结构争取以散列表来建立。若该散列表的填充因子能大于70%,则散列词库是可以成功使用的,而以中文词汇串作为key来访问词库的速度也是与词库规模无关的。(将是O(1)或者与O(key.length),如果是开散列,则需要另外考虑碰撞期望,我们不在此讨论)
然而有两个学术性质的问题需要讨论:
(1) 通用中文词汇字符串(Unicode编码)是否存在一个散列效果比较好的散列函数?
(2) 领域对中文词汇字符串的散列效果是否存在不可忽视的影响?相关参数能否确定?
除此之外,我们需要讨论这个hash函数如何进行设计?(我们知道,英文字符串有一些散列效果比较好的hash函数,如ELFhash算法。我们可以做一定的参考。)
本来,一个类似于Trie结构的堆结构访问速度也是比较快的,但对于SegWord的第三个目标来讲,词库设计成这种结构却是一个根本性的障碍:一旦词库发生更新,则速度会大大的受影响。所以我们将尝试寻找这种hash函数。
3. 词语的标注体系与词库初始库的建立
此问题的难点更多的在于语言学方面,即采用什么样的标注体系。现有的标注体系中,大部分是落在语法(或句法)平面的,如词性是名词、动词或者形容词等,而典型如北大制定的标注标准,也包含部分语用信息,如习语、人名、地名、机构名等。但是语义信息如何进行标注,还难以有一个合理的标准,虽然这方面可以参考HowNet和HNC的工作,但这两者的语义资源都是人工建立、耗费了大量的人力物力的,一方面我们没有做资源的实力,另一方面,人工建立与机器习得在思路上还是有根本性区别的。
但是我们的工作仍需要继续:
(1) 义性的选择,语法(句法)、语义、语用三平面的信息如何进行和谐标注?
(2) 标注符号是否可以进行计算?如何进行计算?(目前可以不讨论跨平面标注符号的计算问题)
(3) 是否有必要标注词语在上级语言单位中的角色?(倾向于不进行标注,问题1和2才是主要问题)
中国传媒大学的标注体系由北大的发展而来,他们可以同时标注语法信息和语用信息,如一个习语同时也可以标注词性(采用 词汇/标注1/标注2 的方式来进行)。这是上次参加HNC与语言学研讨会所得到的一个信息,对我们有所启发。
在标注体系确定以后,我们可以考虑词库初始库的建立。
4. 通用组合结构
通常来讲,字、词、短语以及句子(甚至篇章)都是文本中的不同的语言单位。对于汉语,人们习惯性认为分词是第一步的工作,要把串进行切词。我们认为,更广泛的来看,分词的实质是“组合”,即有小语言单位实体组合为大语言单位的实体,同时对语言结构的属性进行变换与组合。
比如输入串:
一个高大的身影
分词需要处理的是:
一个[一+个] 高大[高+大] 的 身影[身+影]
而短语处理需要处理的是:
[一个 [高大 的 身影]]
它们有共同的、抽象的东西。
基于这种认识,我们需要设计一种通用组合结构(数据结构),可以适应于任何级别的语言单位的计算。当然,这种数据结构不仅要适应各种语言单位的计算,也需要适应于各种语言知识的表达;这也是我们需要深入讨论的一个问题。