分词原理简介

先简单介绍下分词,分词就是要把一个句子分成各个单独的词汇。对于西方语言来说,它们具有天然的分隔符(也就是空格),但是东方语言多基于characeter(也就是字符),不同的字符之间的组合可能会有多种不同的意思,这就造成了东方语言分词特有的困难。

1. 基于词典的分词

最简单也是最直接的方法就是查词典,我们从左到右扫面一遍句子,遇到可以在词典中可以知道的词汇就把它分出来。这种方法当然是比较快捷的,但是同时它没有考虑到不同汉字组合会给句子带来歧异的问题,例如,按照基于词典的分词方法,“发展中国家”应该分词为“发展\中国\家”,这显然是有歧异的,正确的分词应该是“发展\中\国家”。

怎样克服该类问题呢,这时候我们考虑引入统计语言模型,从概率的角度解决分词问题。

2. n-gram分词模型

考虑使用概率模型为分词建模,假定一个句子S可以有三种分词方法:

                                                                    

那么分词最好的方法应该有最大的概率,举个例子,如果A序列是最好的分词方法,那么必须有    

                                       

这样,我们可以知道基本最优分词是一个求最值问题,可以表示为C = argmax_{series} P(series),series 表示分词序列。一个已经句子出现的概率怎样去计算呢?按照马尔可夫假设,我们可以将像A序列这样的句子发生概率表示为:

                                     P(A_1,A_2,...,A_k) = P(A_1)P(A_2|A_1)...P(A_k|A_{k-1})

而P(A(k)|A(k-1))可以通过对于语料的统计方法(也就是n-gram方法)获取。可以看出,找到最优的分词现在转化为了一个搜索问题。当然,利用暴力搜索是不现实的,我们在这里使用动态规划算法搜索出最优分词。

3. 词性标记模型

除了上面介绍的分词方法,hmm也可以应用到分词当中,我们可以把分词转化为类似词性标注的问题。例如我们现在定义几个类别:B(词首)、M(词中)、E(词尾)、S(单独成词),于是“我爱北京天安门”的分词“我\爱\北京\天安门”可以标注为:       “SSBEBME”。既然是词性标注问题,我们当然可以使用HMM或者CRF的方法来解决。

如果标注序列X是HMM中的隐含变量,具体词汇O是HMM中的观察序列,那么原始分词问题转化为:

已知观察序列O,

已知HMM的三要素 \lambda = (A, B, \pi) (这里AB还有pi都是可以提前通过其它语料统计得出)

求取最可能的隐藏状态变量X。

很明显,这就是HMM的预测问题。该类问题可以使用维特比算法来解决,我在博客隐马尔科夫知识点(HMM)总结中已有介绍,在此不赘述。

参考文献:

[1] 文本挖掘的分词原理

[2] 数学之美 -- 吴军

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
berttokenizer分词原理是基于Bert模型的分词器。在BertTokenizer中,分词过程分为两个步骤:tokenization和detokenization。在tokenization过程中,原始文本会被分解成一个个标记,每个标记对应于词汇表中的一个字或一个子词。这个过程使用了Bert模型的词汇表进行标记化。每个标记都由一个整数表示,例如`'I am unintended'`会被分解成`[, [4, 5], [0, 1, 2]]`。其中,``对应的是字`'I'`,`[4, 5]`对应的是子词`'am'`,`[0, 1, 2]`对应的是子词`'unintended'`。 在detokenization过程中,标记会被还原成原始文本。使用`tokenizers.detokenize()`方法,可以将标记序列还原为原始文本。例如,`tokenizers.detokenize(tokenizers.tokenize(['I am unintended']))`会得到`[[b'i'], [b'am'], [b'unintended']]`,即`'I am unintended'`的还原结果。 具体实现中,BertTokenizer使用了Bert模型的词汇表进行标记化和还原化操作。词汇表是由字或子词构成的,每个标记对应一个字或子词。通过将词汇表写入文件,每一行含一个字的方式,可以生成BertTokenizer对象,并在初始化时将词汇表文件作为参数传入。然后,使用BertTokenizer对象的`tokenize()`方法可以将文本分解为标记序列。例如,`tokenizers.tokenize(['明天你'])`会得到`[, , ]`,即`'明天你'`被分解成了``、``和``三个标记。 综上所述,BertTokenizer分词原理可概括为:使用Bert模型的词汇表将原始文本分解为标记序列,并通过标记序列还原出原始文本。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [BertTokenizer详解](https://blog.csdn.net/qq_57390446/article/details/131056984)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值