使用FastText库训练词向量

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, '盐酸托泊替康')

3 参考文献

(1)FastText工具使用案例_fasttext load-CSDN博客

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值