语言转换方法
在自然语言处理中,语言转换方法由两个模型:
- 统计语言模型
- 神经语言模型
一、统计语言模型
在自然语言处理(NLP, Natural Language Processing)中,统计语言模型(Statistical Language Model, SM)是一种基于统计学的方法,用于描述和预测自然语言文本中的词汇或句子出现的概率。这种方法通过分析大量文本数据,学习词汇和句子的概率分布,从而能够预测给定上下文的下一个词或子词。
1. 词向量转换
具体体现在机器学习中的词向量转换方法:
from sklearn.feature_extraction.text import CountVectorizer
texts = ['dog cat fish','dog cat cat','fish bird','bird']
cont = []
cv = CountVectorizer(ngram_range=(1,3)) # 表示文本中连续出现的n个词,有哪些连续组合。
cv_fit = cv.fit_transform(texts) # 表示每个字符串中,是否有cv中的词,有标记为1,反之为。
print(cv.get_feature_names_out())
print(cv_fit.toarray()) #参数
输出结果:
['bird' 'cat' 'cat cat' 'cat fish' 'dog' 'dog cat' 'dog cat cat'
'dog cat fish' 'fish' 'fish bird']
[[0 1 0 1 1 1 0 1 1 0]
[0 2 1 0 1 1 1 0 0 0]
[1 0 0 0 0 0 0 0 1 1]
[1 0 0 0 0 0 0 0 0 0]]
接着将词向量传进贝叶斯模型,计算概率,用以预测给定上下文的下一个词或子词。
2. 统计模型问题
- 由于参数空间的爆炸式增长,它无法处理【N(ngram_range)>3】的数据:
以上方的词向量转换方法为例,我们发现,若是我们的文本数量很多时,同时连续词的组合没有上限时,它的参数空间会很大很大,模型没有能力再处理了。
- 没有考虑词与词之间内在的联系性。
例如,考虑"the cat is walking in the bedroom"这句话。如果我们在训练语料中看到了很多类似“the dog is walking in the bedroom”或是“the cat is running in the bedroom”这样的句子;那么,哪怕我们此前没有见过这句话"the cat is walking in the bedroom",也可以从“cat”和“dog”(“walking”和“running”)之间的相似性,推测出这句话的概率。
于是为了解决这些问题,我们提出了神经语言模型。
二、神经语言模型
1. 词向量化
在处理自然语言时,通常将词语或者字做向量化,例如one-hot编码,例如我们有一句话为:“我爱北京天安门”,我们分词后对其进行one-hot编码,结果可以是:
2. 维度灾难
如果需要对语料库中的每个字进行one-hot编码如何实现?
- 统计语料库中所有的词的个数,例如4960个词。
- 按顺序依次给每个词进行one-hot编码,例如第1个词为:[0,0,0,0,0,0,0,….,1],最后1个词为: [1,0,0,0,0,0,0,….,0]
这时,假使还是有句话“我爱北京天安门”,他们的编码就会变成:
如此编码的话,它的编码维度会非常的高,矩阵为非常稀疏,出现维度灾难。训练时维度堆积,随着维度的增加,计算复杂度也显著增加。
维度灾难(Curse of Dimensionality)是一个在数据分析、机器学习和统计学中广泛讨论的概念。它描述的是当数据集的维度(即特征或变量的数量)增加时,数据分析和模型的复杂性急剧上升,导致一系列问题和挑战。
3. 解决维度灾难
- 通过神经网络训练,将每个词都映射到一个较短的词向量上来。将高维映射到低维。
比如一个西瓜,它包含的特征有:可以吃的、圆的、绿色的、红色果肉等等;
再比如一个篮球,他办函的特征有:不能吃、圆的、褐色的、运动等等;
我们将它们的特征(假设300个),300个特征是可以能够描述出一个物体的,都放进神经网络训练,经过归一化的处理,维度中的数字就变成浮点数了。我们用这些浮点数来代表该物体,将维度变为300。
具体再比如之前的“我爱北京天安门”,放进神经网络模型训练后数据为:
与之前的维度对比,从4960到300,大大减小了特征维度,从而解决唯独灾难问题。
4. embedding词嵌入
Embedding(嵌入)是一种将高维空间中的对象(如单词、短语、句子等)映射到低维、稠密、连续的向量空间中的技术。在NLP中,Word Embedding(词嵌入)是最常见的嵌入类型,它将词汇表中的每个单词映射到一个固定大小的向量。
词嵌入通过训练神经网络模型(如Word2Vec、GloVe、FastText等)在大量文本数据上学习得到每个单词的向量表示。这些向量能够捕捉单词之间的语义关系,使得在向量空间中相似的单词(如“猫”和“狗”)具有相近的表示,而不相关的单词则具有较远的距离。
tText等)在大量文本数据上学习得到每个单词的向量表示。这些向量能够捕捉单词之间的语义关系,使得在向量空间中相似的单词(如“猫”和“狗”)具有相近的表示,而不相关的单词则具有较远的距离。