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)是将分词在字串中的标注任务来实现的。

基本思路:每个词在构造一个特定的词语时都占据一个确定的位置(词位),

参考:一文搞懂HMM(隐马尔可夫模型)

#NLP #笔记
0%