使用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博客

### 如何使用 FastText 训练词向量 FastText 是一种由 Facebook 开源的工具,用于高效地训练词向量以及执行其他自然语言处理任务。它支持多种模式下的词嵌入学习,并能够很好地捕捉词语之间的语义关系。 以下是关于如何使用 FastText 训练词向量的相关说明: #### 1. 安装 FastText 为了使用 FastText 进行词向量训练,首先需要安装该。可以通过 pip 命令完成安装: ```bash pip install fasttext ``` #### 2. 数据准备 FastText 的输入数据通常是纯文本文件,每行为一句或多句分隔开的文字内容。假设有一个名为 `corpus.txt` 的文件作为训练集,则其格式如下所示: ``` This is the first sentence. Here comes another one with more words and context. And yet, this line continues to add variety into our dataset for training purposes. ... ``` #### 3. Python 示例代码 下面是一个简单的例子展示如何利用 FastText 来生成词向量模型并保存结果到本地磁盘中去。 ```python import fasttext # 设置超参数 dim = 100 # 向量维度大小 ws = 5 # 上下文窗口长度 epoch = 5 # 整个语料迭代次数 min_count = 1 # 被忽略单词的最小频率,默认值为1意味着不会丢弃任何单词 # 加载预处理后的文本数据路径 input_file_path = 'corpus.txt' output_model_name = 'word_vectors' # 创建模型 (skipgram 或 cbow) model = fasttext.train_unsupervised( input=input_file_path, model='skipgram', # 可选 "cbow" dim=dim, ws=ws, epoch=epoch, minCount=min_count) # 将训练好的模型存储下来以便后续加载使用 model.save_model(f"{output_model_name}.bin") print("Model has been successfully saved.") ``` 上述脚本实现了以下几个功能: - **指定输入文件**:指定了包含训练样本的 `.txt` 文件位置; - **调整超参**:设置了诸如 embedding 维度 (`dim`)、滑动窗口宽度(`ws`) 和最大轮次(`epoch`) 等重要参数; - **选择算法类型**:可以选择基于 skip-gram 方法或者连续袋模型(CBOW),这里选择了前者[^2]; - **持久化输出**:最后一步会把构建完毕的 word embeddings 存储成二进制形式供以后调用[^3]; #### 4. 关键参数解释 | 参数名 | 描述 | |--------------|----------------------------------------------------------------------------------------| | `input` | 输入文件路径 | | `model` | 指定使用模型架构 ('skipgram' or 'cbow') | | `lr` | 初始学习率 | | `dim` | 输出向量的空间尺寸 | | `ws` | 单侧的最大上下文范围 | | `epoch` | 对整个训练集合重复遍历的总次数 | | `minCount` | 如果某个字典项在整个文档集中出现少于这个数值则会被移除 | #### 注意事项 当实际操作过程中遇到内存不足等问题时可以尝试减少 batch size 或者降低 vector dimensionality 。另外值得注意的是,在某些特定场景下可能还需要额外的数据清洗工作比如去除停用词等等[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值