1 概述
FastText是Facebook AI Research(FAIR)在2016年开源的一个快速文本分类和词向量计算工具,主要用于文本分类和词向量训练。下面将介绍使用FastText库训练词向量的主要过程。
2 训练过程
训练词向量的主要过程包括以下步骤:
- (1)准备训练数据;
- (2)模型参数设定;
- (3)训练向量模型;
- (4)模型效果验证;
- (5)模型保存;
- (6)模型加载与效果再验证。
上述步骤可反复执行,直到训练效果达到预期为止。
2.1 环境安装
python 版本 3.9,Fasttext 版本 0.9.2。可使用以下命令安装 Fasttext 。
conda install conda-forge::fasttext
资源地址:
(1)https://pypi.org/
(2)https://anaconda.org/
2.2 准备训练数据
创建一个名为 test_data.txt 的文件,里面放一些药品名称。数据示例如下所示,以下训练使用的数据量为1w。
舒肝健胃丸
消炎利胆片
磷酸奥司他韦胶囊
西咪替丁片
保和丸
复方胆通胶囊
玉屏风口服液
2.3 训练词向量
下面是训练词向量的案例,包括了模型参数设定、训练向量模型、模型效果验证和模型保存等步骤。
# 模型保存路径和名称
model_0809_001 = "/Users/Shared/model/model_0809_001.bin"
def train_data_1():
# 1、准备训练数据
# 2、模型参数设定
# 3、训练向量模型
start = time.time()
model = fasttext.train_unsupervised(input='/Users/Shared/file/test_data.txt',
model='cbow',
dim=200,
min_count=1,
epoch=1,
thread=8,
lr=0.1
)
print(f"模型训练耗时:{time.time()-start}s")
# 4、模型效果验证
# 获取与指定数据最相近的数据(会排除指定数据本身)
res = model.get_nearest_neighbors("盐酸多巴胺")
for val in res:
print("邻近词语: ", val)
# 5、模型保存(已训练好的模型保存)
model.save_model(model_0809_001)
进行无监督训练时,可调节的模型参数主要包括以下内容:
- input-训练文件的路径;
- model-指定无监督训练的模型类型(默认'skipgram'),可以是 'skipgram' 或 'cbow'。Skipgram 模型通过当前词预测上下文词,而 CBOW 模型则通过上下文词预测当前词。
- dim-生成的词向量的维度(默认100)。维度越大,模型能够捕获的信息越多,但计算成本也越高。
- min_count-忽略总频率低于此值的所有单词(默认5)。这有助于减少训练过程中的噪声,特别是在处理小型数据集时。
- epoch-训练轮数,即整个数据集被遍历的次数(默认5)。通常与学习率一起考虑,过多的轮数可能导致过拟合。
- thread-训练过程中使用的线程数(默认12)。增加线程数可以加速训练过程,但也会增加内存消耗。
- lr-学习率(默认0.05),用于在训练过程中调整权重。学习率的选择需要调试,过高可能导致训练不稳定,过低则训练速度过慢。
2.4 模型加载与效果再验证
以下为加载上述训练好的模型 “model_0809_001” 以及进行效果验证。
# 6、模型加载与模型效果再验证
def model_load_and_test():
# 加载已训练好的模型
model = fasttext.load_model(model_0809_001)
# 模型效果验证
res = model.get_nearest_neighbors("盐酸多巴胺")
for val in res:
print("邻近词语: ", val)
获取“盐酸多巴胺”的最相近数据的结果如下所示。越相近的数据其对应的相似度值(余弦相似度)越大。
邻近词语: (0.5257659554481506, '盐酸多巴胺注射液')
邻近词语: (0.4931811988353729, '注射用盐酸多巴胺')
邻近词语: (0.34274786710739136, '盐酸多塞平')
邻近词语: (0.33332449197769165, '盐酸多巴酚丁胺')
邻近词语: (0.30445078015327454, '盐酸托泊替康胶囊')
邻近词语: (0.3014890253543854, '盐酸帕洛诺司琼')
邻近词语: (0.2934483289718628, '盐酸多西环素肠溶胶囊')
邻近词语: (0.2920733690261841, '盐酸帕洛诺司琼胶囊')
邻近词语: (0.28015971183776855, '盐酸可卡因')
邻近词语: (0.2704174816608429, '盐酸托泊替康')