持续创作,加速生长!这是我参加「日新计划 6 月更文应战」的第30天,点击查看活动概况
运用fastText构建单词向量
fastText
是 Facebook
研究团队算法分析的目的是提出的算法模型,用于有效学习单词标明和语句分类。fastText
与 word2vec
的不同之处在于 wor算法的空间复杂度是指d2vec
将每个单词视为最小单位appstore,学习其向量标明形式,可是 fastText
假定一个单词由 n-gram
组成。例如,sunny
由 [sun, sunn, sunny]
,[sunny, unny, nny]
等组成,在其间咱们看到了大小为 n
的原始单词的子集,其间 n
的范围能够从 1
到原始单词的长度。
运用 fastText
的另一个原因是,能够解决单词不符合 skip-gram
或 CBOW
模型中的最小频率截止值的情况。例如,appended
一词与 apapproachpend
本质上具有相同的含义。可是,假如 append
频率较高,但在新语句中运用了 append
这个单词而不是 append
,那么咱们就无法获取准确的 appende算法是指什么d
向量。在这种情况下,fastText
的 n-gram
就会派上用场了。
实际上,fastText
后续相同运用 skip-gram/CBOW
模型,可是,它增加了approach输入数据集,因而能算法分析的目的是够将没有见过的单词也考虑在内。算法是指什么
f算法的五个特性astText 提取单词向量
咱们根据 faapplicationstText
提取单词向量的策略如application下:
- 在gensim库中运用fastText办法
- 预处理输入数据
- 将每个输入语句分解单词列表
- 根据上一步得到的分解成果构建词汇表
- 运用从前的输入数据练习模型
- 核算单词之间的类似度
运用 Keras 完成 fastText 生成单词向量
本节中,咱们运用 Ke算法设计与分析ras
完成运用 fastText
生成单词向量。
首先,导入相关包,并加载数据集:
from gensim.models.fasttext import FastText
import pandas as pd
data = pd.read_csv('archive/Tweets.csv')
print(data.head())
预处理数据集并将其转换为列表,其间每个元素算法的特征是每个语句中的列表,此进程与咱们在 word2vec
模型所进行的预处理和转换步骤相同:
stop = set(stopwords.words('english'))
def preprocess(text):
text=text.lower()
text=re.sub('[^0-9a-zA-Z]+',' ',text)
words = text.split()
words2 = [i for i in words if i not in stop]
words3=' '.join(words2)
return(words3)
data['text'] = data['text'].apply(preprocess)
list_words=[]
for i in range(len(data)):
list_words.append(data['text'][i].split())
定义模型,运用参数 vector_size
指定每个单词的向量维度,并构建词汇表:
ft_model = FastText(vector_size=50)
ft_model.build_vocab(list_words)
练习模型:
ft_model.train(list_words, total_examples=ft_model.corpus_count,epochs=100)
查看模型词汇表中不存在的单词的单词向量。例如,词汇中呈现了单词 first
;可是,词汇中没有appearance firstly
这个词appear,在这种情况下,咱们查看 first
和 f算法设计与分析irstly
的词向量之间的类似性:
print(ft_model.wv.similarity('first','firstly'))
核算的输出成果为 0.90
,标明两个单词之间的类似度十分高:
0.90227515
因而,咱们能够看到 fastText
模型得到的单词向量能够帮助咱们为词汇表中不存在的单词生成单词向量。
咱们也能够运用该办法也来纠正数据集内的拼写错误,因为拼写错误的单词很可能很少呈现,而呈现频率较高的最类似的单application词更可能是拼写错误单词的正确版别。因而,咱们能够运用向量算法执行拼写校正,如下所示:
result = ft_model.wv.most_similar(positive=['exprience', 'prmise'], negative=['experience'], topn=1)
print(result)
在前面的代码中,p算法分析的目的是ositive
中有单词拼写错误,approve而 nega算法是指什么tive
中没有拼写错误,代码的输出是 promise
。因而,能够运算法导论用此办法纠正拼写错误:
[('promise', 0.6496826410293579)]
此外,还能够运用 most_similar
办法到达相同的作用:
print(ft_model.wv.most_similar('exprience', topn=1))
# [('experience',0.9027844071388245)]
可是,需求注意的是,appreciate当数据集中拼写错误频率较高时,该办法并不能得到预期成果。