词素是最小的有意义的语言单位,不能够进一步划分为更小的单位而不破话或彻底改变其词汇意义或语法意义。
语素和词的区别在于,许多语素不能独立存在。而能够单独存在并且有意义的语素叫做词根(Stems);不能独立存在,要借助其他语素表达意义的语素则称之为词缀 (affixes)。每个词都包含最少一个语素。按能否独立成词对语素分类:
规范语素可以进一步分类,分为:
需要特别指出,有时候派生语素和屈折语素会采用同一种表现形式。比如说,-er,当这个后缀跟在形容词后面,它作为屈折语素,表示比较级;当跟在动词后面,则是一个派生语素,形成一个新词,如cook-cooker。
从意义的虚实来说,语素又可分为:
词的分类
齐夫定律是一个实验定律。在自然语言的语料库里,一个单词出现的频率与它在频率表里的排名成反比。所以,频率最高的单词出现的频率大约是出现频率第二位的单词的2倍,而出现频率第二位的单词则是出现频率第四位的单词的2倍。
给出一组齐夫分布的频率,按照从最常见到非常见排列,第二常见的频率是最常见频率的出现次数的½,第三常见的频率是最常见的频率的1/3,第n常见的频率是最常见频率出现次数的1/n。然而,这并不精确,因为所有的项必须出现一个整数次数,一个单词不可能出现2.5次。
Benford's law 描述了真实数字数据集中首位数字的频率分布。一堆从实际生活得出的数据中,以1为首位数字的数的出现概率约为总数的三成,接近直觉得出之期望值1/9的3倍。推广来说,越大的数,以它为首几位的数出现的概率就越低。它可用于检查各种数据是否有造假。但要注意使用条件:1.数据之间的差距应该足够大。2.不能有人为操控。
本福特定律说明在b进位制中,以数n起头的数出现的概率为
其中,n=1,2,...,b-1
本福特定律(Benford's law)的直观解释 - 知乎
Heaps定律将词项的数目估计成文档集大小的一个函数,其中n是文档集合中的词条个数。参数k和b的典型取值为30<=k<=100, β≈0.5
Heaps定律认为,文档集大小和词汇量之间可能存在的就最简单的关系是它们在对数空间(log-log space)中存在线性关系.
不同的文档集下参数k的取值差异会比较大,这是因为词汇量的大小依赖于文档集本身以及对它进行处理的方法。
不论在某个特定的文档集中的参数取值如何,Heaps定律提出了如下两点假设:
因此在大规模文档集情况下,词典压缩对于建立一个有效的信息检索系统来说是非常重要的。
即一个简单的语言模型应至少满足概率和为一:
一些tagsets
一些closed class words:
Part of Speech (PoS) Ambiguity: e.g., still:
Sense Ambiguity: e.g., bark:
Very old POS taggers used to work in two stages, based on hand-written rules: the first stage identifies a set of possible POS for each word in the sentence (based on a lexicon), and the second uses a set of hand-crafted rules in order to select a POS from each of the lists for each word. Example
Let be a corpus of words taken from W and their parts of speech. Let .
Calculating type-ambiguity: the size of the set Wambg divided by the size of W .
Calculating token-ambiguity: the size of the set divided by n.
The bottom line: The type-ambiguous words are the more frequent words!
NOUN (nouns)
VERB (verbs)
ADJ (adjectives)
ADV (adverbs)
PRON (pronouns)
DET (determiners and articles)
ADP (prepositions and postpositions)
NUM (numerals)
CONJ (conjunctions)
PRT (particles)
’.’ (punctuation marks)
X (anything else, such as abbreviations or foreign words)
Let’s define a new generative process for sentences. To generate sentence of length n:
Let t0 =
For i = 1 to n
Choose a tag conditioned on previous tag: P(ti |ti−1)
Choose a word conditioned on its tag: P(wi |ti)
模型假设:
使用 Probabilistic finite-state machine 有限机模型
Let S = w1 . . .wn be the sentence and T = t1 . . .tn be the corresponding tag sequence. Then:
举例子:
对句子 This/DT is/VB a/DT simple/JJ sentence/NN 来说:
在本节中,我们将介绍隐马尔可夫模型在词性标注中的应用。HMM是一个序列模型。序列模型或序列分类器是一个模型,其工作是为序列中的每个单元分配一个标签或类,从而将一个观察序列(观察状态)映射到一个标签序列(隐藏状态)。HMM是一种概率序列模型:给定一个单位序列(单词、字母、语素、句子等等),它计算可能的标签序列的概率分布,并选择最佳标签序列。
• Evaluation: Given a sentence S, calculate P(S) (“summing out” T) • Decoding: Given a sentence S, calculate arg maxT P(T | S). • Learning: Given a set of sentences S (1) , S (2) , ..., find the HMM that maximizes their log-likelihood
状态机一般指有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机(英语:finite-state automaton,缩写:FSA),是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。
有限状态机是在自动机理论和计算理论中研究的一类自动机。如下图所示,有限状态机归属于自动机理论范畴,从下面的自动机理论的领域分层图可以看出,越往外层,概念越复杂。
状态机中有几个术语:state(状态) 、transition(转移) 、action(动作) 、transition condition(转移条件) 。
下图,就定义了一个只有opened 和closed两种状态的状态机。当系统处于opened状态,在收到输入“关闭事件”,达到了状态机转移条件,系统就转移到了closed状态,并执行相应的动作,此例有一个进入动作(entry action),进入closed状态,会执行close door动作。
有限状态机数学模型为(Σ, S, s0, δ, F):
以售票机为例:
有限状态机可以被分为不同的类型,主要可以被分为:acceptors(接收器)、transducers(转换器) 两大类。
Acceptors(接收器) 产生二进制输出,指示是否接受接收到的输入。接受者的每个状态要么接受(accepting)要么不接受(non accepting)。一旦接收到所有输入,如果当前状态为接受(accepting)状态,则该输入被接受;否则将被拒绝。通常,输入是一个符号(字符)序列;没有动作(actions)。
如下图是一种acceptors(接收器) 类型有限状态机,用来识别所输入的字符串是否为nice,其总共被划分为了七种状态,其中只有第七种状态Success被认为是可接受状态。如果所输入的字串不是nice,则会被转移到第六种状态Error。
如下给出acceptors(接收器) 的数学形式化定义,acceptors(接收器) 型有限状态机是一个五元组(Σ,S,s0,δ,F) 其中:
Transducers(转换器) 根据给定的输入与/或使用动作的状态产生输出,输出的同时可能也伴随着状态的转移(不是必须)。应用在控制系统,在控制系统又分为两种:moore machine (摩尔型有限状态机)和mealy machine (米利型有限状态机)
如下所示的状态机为moore状态机,其有q0、q1、q2、q3四个状态,X,Y,Z三个输入,a、b、c三个输出。可以看出其四个状态q0、q1、q2、q3对应的输出分别为b、a、a、c,就是说输出已经和状态绑定好,不管输入为哪一个,均不影响输出。其中q0为初始状态,假设输入为XYZY,可以看出输出为bcac;假设输入为ZXYZ,则输出为baca,可以看出,虽然输出只和状态有关而与输入无关,但改变输入的序列顺序,输出序列也会改变。
mealy状态机的输出与当前状态和输入都有关。但是对于每个mealy状态机都有一个等价的moore机。如下所示为一个简单的mealy状态机,它有一个输入和一个输出。在每一个有向边上,标注出了输入(红色)和输出(蓝色)。这个状态机的初始状态为Si,当输入为0,输出0,状态变为S0,接着输入0,输出0,状态还是为S0,在此状态下一直输入0,输出会一直是0,但输入为1是,输出才为1,状态变为S1,在此状态再接着输入1,输出一直还是0,直到遇到输入为0,输出才变为1。此状态机其实实现了一个边缘触发检测器,每次输入从1到0或是从1到0发生跳变时,输出为1否则输出为0。如下所示时序图,当输入为0111001110
时,输出为0100101001
。
如下给出transducers(转换器) 的数学形式化定义,transducers(转换器) 型有限状态机是一个六元组(Σ, Γ, S, s0, δ, ω),其中:
如果输出函数 ω 依赖于状态和输入(ω:S×Σ→Γ),则定义的是mealy状态机;如果输出函数仅仅依赖于状态(ω:S→Γ),那么定义的是moore状态机。如果,有限状态机没有输出函数 ω 这一项,那么可以称作transition system(转移系统) 。很多应用程序用到的有限状态机并没有输出序列,仅仅用到了状态机的转移过程和动作,其实可以称为转移系统。
class Transition:
"""A change from one state to a next"""
def __init__(self, current_state, state_input, next_state):
self.current_state = current_state
self.state_input = state_input
self.next_state = next_state
def match(self, current_state, state_input):
"""Determines if the state and the input satisfies this transition relation"""
return self.current_state == current_state and self.state_input == state_input
class FSM:
"""A basic model of computation"""
def __init__(
self,
states=[],
alphabet=[],
accepting_states=[],
initial_state=''):
self.states = states
self.alphabet = alphabet
self.accepting_states = accepting_states
self.initial_state = initial_state
self.valid_transitions = False
def add_transitions(self, transitions=[]):
"""Before we use a list of transitions, verify they only apply to our states"""
for transition in transitions:
if transition.current_state not in self.states:
print(
'Invalid transition. {} is not a valid state'.format(
transition.current_state))
return
if transition.next_state not in self.states:
print('Invalid transition. {} is not a valid state'.format)
return
self.transitions = transitions
self.valid_transitions = True
def __accept(self, current_state, state_input):
"""Looks to see if the input for the given state matches a transition rule"""
# If the input is valid in our alphabet
if state_input in self.alphabet:
for rule in self.transitions:
if rule.match(current_state, state_input):
return rule.next_state
print('No transition for state and input')
return None
return None
def accepts(self, sequence):
"""Process an input stream to determine if the FSM will accept it"""
# Check if we have transitions
if not self.valid_transitions:
print('Cannot process sequence without valid transitions')
print('Starting at {}'.format(self.initial_state))
# When an empty sequence provided, we simply check if the initial state
# is an accepted one
if len(sequence) == 0:
return self.initial_state in self.accepting_states
# Let's process the initial state
current_state = self.__accept(self.initial_state, sequence[0])
if current_state is None:
return False
# Continue with the rest of the sequence
for state_input in sequence[1:]:
print('Current state is {}'.format(current_state))
current_state = self.__accept(current_state, state_input)
if current_state is None:
return False
print('Ending state is {}'.format(current_state))
# Check if the state we've transitioned to is an accepting state
return current_state in self.accepting_states
3. regular 正则语言 (generated by finite state machines, usually assumed sufficient to describe phonology and morphology)
2. 上下文无关 (context-free) (和正则语言相比,它具有更少的约束,可能捕获更多的自然语言的特性)
1. 上下文敏感 (Context Sensitive) (possibly needed for some natural language phenomena)
0. recursively enumerable (anything a computer program can produce)
判断正则和非正则语言:
有界的
、事先固定的
且只与该语言有关而与具体的输入字符串无关的
。圈
的有穷自动机或含Kleene星号
的正则表达式表示。这样的语言一定有具有某种简单的重复构造
的无穷子集。比如, 或者 {且是一个素数} 都是非正则的
FSA 包含:
Build components as separate FSAs
Concatenate L + D + I (there are standard algorithms)
FST 在 FSA 的基础上增加了字符串的输出能力:
编辑距离(Minimum Edit Distance,MED),由俄罗斯科学家 Vladimir Levenshtein 在1965年提出,也因此而得名 Levenshtein Distance。在信息论、语言学和计算机科学领域,Levenshtein Distance 是用来度量两个序列相似程度的指标。通俗地来讲,编辑距离指的是在两个单词
在这里定义的单字符编辑操作有且仅有三种:
一般时候,可以设置插入和删除cost值为1,替换cost值为2.
譬如,"kitten" 和 "sitting" 这两个单词,由 "kitten" 转换为 "sitting" 需要的最少单字符编辑操作有:
1.kitten → sitten (substitution of "s" for "k")
2.sitten → sittin (substitution of "i" for "e")
3.sittin → sitting (insertion of "g" at the end)
因此,"kitten" 和 "sitting" 这两个单词之间的编辑距离为 3 。
其中,δ 是状态转移的记分函数,在编辑距离的 WFST(加权FST) 实现下,我们只需要一个状态 q。上面的式子表明:将 a 替换为 a 或者将 b 替换为 b 的代价为 0;将 a 替换为 b 或者将 b 替换为 a 的代价为 1;将 a 删除或者将 b 删除的代价为 1;插入一个 a 或者 b 的代价为 1。
为什么要在有限自动机的基础上给其增加一个栈来构建下推自动机呢?其根本原因在于有限状态机本身无法存储数据,而加上了栈之后的下推自动机则具有了数据存储能力。具有了存储能力之后,下推自动机的计算能力相较于有限自动机得到了进一步的增强。
我们已经知道,有限自动机在进行状态转移的时候,需要读取一个输入,然后根据当前状态已经输入来进行状态转移。下推自动机在进行状态转移的时候同样要依赖于当前状态和输入,不过,因为下推自动机有了栈的概念,所以在进行状态转移的时候我们还需要一点别的东西 —— 读栈和写栈操作。例如下图这样的一个下推自动机:
我们可以把这个下推自动机用这样的转移列表列出来,注意这里的 $
符号,因为栈为空的状态并不是很好判断,所以我们添加了这个字符来代表栈为空,也就是说栈的最底部永远应该保持有 $
这个字符。最下面的虚线代表着当栈为空且状态为 2 时(我们使用虚线来代表不需要有输入的转移情形,即自由移动),此时不需要任何输入,栈会自动的弹出 $
然后再压入 $
,随后状态从 2 变为 1。
当前状态 | 输入字符 | 转移状态 | 栈顶字符(读入 / 弹出) | 压入字符 |
---|---|---|---|---|
1 | ( | 2 | $ | b$ |
2 | ( | 2 | b | bb |
2 | ) | 2 | b | 不压入 |
2 | 无输入 | 1 | $ | $ |
n-gram模型、隐马尔可夫模型(HMM)和条件随机场(CRF)
如何计算单词概率,用极大似然估计:
MLE计数估计概率参数
对于给定x_i-1, 所有可能的x_i 概率之和为一:
要注意p(xi,xi-1)中x的顺序!
平滑策略的引入,主要使为了解决语言模型计算过程中出现的零概率问题。零概率问题又会对语言模型中N-gram模型的Perplexity评估带来困难。
Add-α smoothing:
与贝叶斯估计(bayesian estimation)形态近似,dirichlet prior
基本思想: 用观察计数较高的 N-gram 数量来重新估计概率量大小,并把它指派给那些具有零计数或较低计数的 N-gram
Katz平滑方法通过加入高阶模型与低阶模型的结合,扩展了Good-Turing估计方法。
当某一事件在样本中的频率大于k时,运用最大似然估计MLE经过减值来估计其概率。当某一事件的频率小于k时,运用低阶的语法模型作为代替高阶语法模型的后备,而这种代替必须受归一化因子α的作用。根据低阶的语法模型分配由于减值而节省下来的剩余概率给未见事件,这比将剩余概率均匀分配给未见事件更合理。
简单来讲,就是把不同阶的模型结合起来:用线性差值把不同阶的 N-gram 结合起来,这里结合了 trigram,bigram 和 unigram。用 lambda 进行加权:
和Add-one平滑一样,如果我们想计算 Absolute Discounting 平滑概率,只需要用 Absolute Discounting 平滑下的有效计数除以上下文在语料库中出现的总次数即可
Kneser-Ney 平滑采用的方法是基于当前单词 在多少个 不同的上下文 中出现过,或者说是基于该单词的 多功能性(versatility)或者 延续概率(continuation probability)。
对比 Katz Backoff 的概率公式,在 Kneser-Ney 平滑概率公式中,只有一项不同:
其中,
可以看到,对于观测到的 n-grams,Kneser-Ney 概率和 Katz Backoff 概率两者是相同的。而对于那些未知的 n-grams,Kneser-Ney 概率中从观测 n-grams 中 “借来” 的概率质量 与之前一样保持不变,而之前关于低阶模型 的部分则由我们所说的延续概率 来替代。
在延续概率的计算公式中:分子部分计算的是一共有多少个 唯一 的上下文单词w_i-1 和当前单词w_i 共同出现过(co-occurrence);而分母部分就是将所有可能的单词 w_i 对应的不同共现上下文单词数量(即分子部分)进行一个累加。
Log-linear语言模型的本质是把语言模型的建立看作是一个多元分类问题,核心是从上文中提取特征。
形式化地说,假设上文为,log-linear语言模型需要一个特征函数,其将上文信息作为输入,输出一个N 维特征向量(注意这里是feature vector而不是eigenvector),这个特征向量x就是对上文信息的一个表示(这里的N不是N元语法里面的那个N,不表示上文单词数量!)
log-linear语言模型还允许灵活加入其它特征,这也是该模型的一大长处。常见的特征还包括
Part I: Words
* Inflectional and derivational morphology//
* Finite state methods and Regular expressions//
* Bag-of-Words models and their applications
* Word Classes and Parts of speech
* Sequence Models (n-gram and Hidden Markov models, smoothing)
* The Viterbi algorithm, Forward Backward, EM
Part II: Syntax
* Syntactic Concepts (e.g., constituency, subcategorisation, bounded and unbounded dependencies, feature representations)
* Analysis in CFG - Greedy algorithms---Shift-reduce parsing
* Divide-and-conquer algorithms---CKY
* Lexicalised grammar formalisms (e.g., CCG, dependency grammar)
* Statistical parsing (PCFGs, dependency parsing)
Part III: Semantics and Discourse
* Logical semantics and compositionality
* Semantic derivations in grammar
* Lexical Semantics (e.g., word embeddings, word senses, semantic roles)
* Discourse (e.g., anaphora)
1. Introduction, words, and morphology • Including: ambiguity, words, and morphology//
2. Basic algorithms • Including: finite state models, dynamic programming, and edit distance
3. Language models • Including: probability, N-gram models, smoothing, perplexity
4. Text classification • Including: Naïve Bayes, logistic regression, basic neural networks, evaluating classifiers
5. Tagging and hidden Markov models • Including: parts of speech, HMMs, Viterbi algorithm
6. Phrase-structure syntax and parsing • Including: syntactic structure, context free grammars, and the CKY algorithm
7. Beyond basic grammars • Including: probabilistic grammars and parsing, dependency parsing, evaluating parsers
8. Lexical semantics and word embeddings • Including: word senses, distributional semantics, mutual information, word embeddings
9. Sentence-level semantics • Including: logical forms, coreference
集合:
https://blog.csdn.net/bensonrachel/category_8109347.html
multi language NLP - 知乎
Archive - YEY 的博客 | YEY Blog
单篇:
语言学小知识-什么是语素 - 知乎
什么是状态机?一篇文章就够了 - 掘金
自然语言处理 03:N-gram 语言模型 - YEY 的博客 | YEY Blog
词性标注(Part-of-Speech Tagging),HMM - 知乎