NLP | 中文分词技术
中文分词技术
中文分词技术
分词:识别句子中的词,并在词间加入边界标记符,分隔出各个词汇。
中文分词的主要困难在于分词歧义。
规则分词
机械分词法
正向最大匹配法
Maximum Match Method,MM法
- 从左向右取待切分汉语句的 $m$ 个字符作为匹配字段, $m$ 为机器词典中最长词条的字符数。
- 查找机器词典并进行匹配。若匹配成功,则将这个匹配字段作为一个词切分出来。若匹配不成功,则将这个匹配字段的最后一个字去掉,剩下的字符串作为新的匹配字段,进行再次匹配,重复以上过程,直到切分出所有词为止。
逆向最大匹配法
Reverse Maximum Match Method,RMM法
- 根据逆序词典,对逆序文档进行正向最大匹配
正确概率大于正向最大匹配法
双向最大匹配法
BI-diectction Matching Method
进行两种匹配,选取词数切分最少的作为结果
代码实现:
#逆向最大匹配
class RMM(object):
def __init__(self, dic_path):
self.dictionary = set()
self.maximum = 0
#读取词典
with open (dic_path, 'r', encoding='utf-8') as f:
for line in f:
line = line,.strip()
if not line:
continue
self.dictionary.add(line)
self.maximum = len(line)
def cut(self, text):
result = []
index = len(text)
while index > 0:
word = None
for size in range(self.maximum, 0, -1):
if index - size < 0:
continue
piece = text[(index - size):index]
if piece in self.dictionary:
word = piece
result.append(word)
index -= size
break
if word is None:
index -= 1
return result[::-1]
def main():
text = ""
tokenizer = RMM(./dir/dic.utf8)
print(tokenizer.cut(text))
统计分词
用字与字相邻出现的频率来反应成词的可靠程度
- 建立语言模型
- 对句子进行单词划分,对划分结界进行概率计算,获得概率最大的分词方式。
语言模型
计算机借助于统计语言模型的概率参数,可以估计出自然语言中每个句子出现的可能性,而不是简单的判断该句子是否符合文法。
常用统计语言模型,包括了N元文法模型(N-gram Model)统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性。
给定一个词汇集合 $V$,对于一个由 V 中的词构成的序列 $S = ⟨w1, · · · , wT ⟩ ∈ V_n$,统计语言模型赋予这个序列一个概率 $P(S)$,来衡量 $S$ 符合自然语言的语法和语义规则的置信度。
参考:自然语言处理NLP中的N-gram模型 Speech and Language Processing (3rd ed. draft)
HMM模型
隐含马尔可夫模型(HMM)是将分词在字串中的标注任务来实现的。
基本思路:每个词在构造一个特定的词语时都占据一个确定的位置(词位),