《FastText 工具使用》(二)训练词向量

词向量就是将自然语言中的词使用数值向量表示,例如我们将每个词使用 5 维向量表示:

  1. 书籍:[0.3, 0.6, 0.1, 0.8, 0.2]
  2. 汽车:[0.8, 0.2, 0.5, 0.4, 0.6]
  3. 花园:[0.5, 0.7, 0.9, 0.3, 0.4]
  4. 猫咪:[0.2, 0.9, 0.6, 0.7, 0.3]
  5. 鸟儿:[0.6, 0.3, 0.7, 0.2, 0.8]

词向量可以是任意的维度,32、64、512、768、1024… 等等。将文本表示为数值向量之后,就可以使计算机解决很多自然语言处理任务,比如:语义相似度计算、文档分类、情感分析等。

1. 预处理语料

在使用 FastText 训练词向量模型之前,我们的预料需要达到以下的条件:

  1. 训练语料存在多个文件,则需要将其合并到同一个文件中
  2. 由于中文没有天然分隔符,需要预先分词,使用空格分开
新增资金入场 沪胶强势创年内新高
  记者 魏曙光
  本报讯 上海天然橡胶期价周三再创年内新高,主力合约突破21000元/吨重要关口。分析师指出,由于橡胶现货需求强劲,但供应却因主产国降雨天气而紧俏。同时国内有望出台新汽车刺激方案,沪胶后市有望延续强势。
  经过两个交易日的强势调整后,昨日上海天然橡胶期货价格再度大幅上扬,在收盘前1小时,大量场外资金涌入,主力1003合约强劲飙升很快升穿21000 元/吨整数关口,终盘报收于21,400元/吨,上涨2.27%,较前一日结算价上涨475元/吨,成交量为736,816手,持仓量为225,046 手。当日整体市场增仓3.4万余手。
  从盘后交易所持仓来看,两大主力多头金鹏期货和成都倍特期货略微增几百手,继续保持多头前两名位置,而主力多头新湖期货增仓3344手,值得注意的是,永安期货昨日空翻多,增加多仓1837手,其多头持仓增加至7021手,而净持仓增加至1813 手;空头两大主力则继续大幅增仓,其中浙江大地增仓2522手至17294手,银河期货增仓1075手至7086手。
  与此同时,东京商品交易所橡胶期货也强势上扬,基准4月合约再创13个月新高。截止北京时间昨日下午16点46分报241.5日元/公斤,较前日收盘涨3.2日元。
  金鹏期货北京海鹰路营业部总经理陈旭指出,近期沪胶受资金推动持续升创年内新高,而橡胶现货需求强劲,但供应却因主产国降雨天气而紧张。同时国内有望出台新汽车刺激方案,因此沪胶后市有望延续强势。
  泰国橡胶协会秘书长Prapas Euanontat16日表示,因暴雨中断生产,2009年该国橡胶产量可能下降约10%,为270万吨至280万吨。另据日本橡胶贸易协会最新数据,截至11月10日,该国天然橡胶库存较10月31日时的库存量下滑3.4%,至3902吨,创纪录新低。
  据国家统计局公布的最新数据显示,9月份国内轮胎产量较2008年同期增长27%至5,810万条,较8月份增长10%。1-9月份轮胎总产量增长13%至4.814亿条。这表明在特保案发生前,中国的轮胎出口已经产生巨大的需求,特保案生效也可能不会太大地削弱市场规模。
  陈旭表示,国家仍将汽车行业作为拉动经济增长的重要手段,这可能会在近期即将召开的经济会议中得到体现,中国扩大内需的方针正刺激天胶等原材料消费,引起贸易商囤积库存。不过,也有分析师表示,国内橡胶库存高企,逼近13万吨,且随着主产国降雨天气结束供应将持续增加,因此沪胶后市上行空间有限。

银行系基金新军崭露头角
  刚刚过去的2009年,基金市场为基民贡献了一份不错的成绩单。作为银行系基金公司的新军,民生加银基金公司旗下的两只基金崭露头角。
  WIND数据统计显示,民生蓝筹混合型基金作为民生加银旗下首只基金,截至2009年底累计回报率达到23.7%。A股市场2009年下半年以来震荡剧烈,该基金提前布局消费、医药、化工、有色、煤炭等行业。2009年下半年以来,民生蓝筹基金获得了17.08%的正收益,同期业绩比较基准涨幅为8.69%,跑赢业绩比较基准达8.39个百分点。(易非)
   已有COUNT条评论  我要评论
记者 曙光 本报讯 上海 天然橡胶 期价 周三 再创 年内 新高 主力 合约 突破 重要 关口 分析师 指出 橡胶 现货 需求 强劲 供应 主产 降雨 天气 紧俏 国内 有望 出台 汽车 刺激 方案 后市 有望 延续 强势 两个 交易日 强势 调整 昨日 上海 天然橡胶 期货价格 再度 大幅 上扬 收盘 小时 大量 场外 资金 涌入 主力 合约 强劲 飙升 很快 升穿 整数 关口 终盘 报收 上涨 较前 一日 结算价 上涨 成交量 持仓量 当日 整体 市场 增仓 万余 从盘 交易所 持仓 来看 两大 主力 多头 金鹏 期货 成都 倍特 期货 略微 几百 继续 保持 多头 两名 位置 主力 多头 新湖 期货 增仓 值得注意 永安 期货 昨日 空翻多 增加 多仓 多头 持仓 增加 而净 持仓 增加 空头 两大 主力 继续 大幅 增仓 浙江 大地 增仓 手至 银河 期货 增仓 手至 东京 商品 交易所 橡胶 期货 强势 上扬 基准 合约 再创 新高 截止 北京 时间 昨日 下午 分报 日元 公斤 前日 收盘 日元 金鹏 期货 北京 海鹰 营业部 总经理 陈旭 指出 近期 胶受 资金 推动 持续 升创 年内 新高 橡胶 现货 需求 强劲 供应 主产 降雨 天气 紧张 国内 有望 出台 汽车 刺激 方案 后市 有望 延续 强势 泰国 橡胶 协会 秘书长 表示 暴雨 中断 生产 该国 橡胶 产量 可能 下降 万吨 万吨 另据 日本 橡胶 贸易 协会 最新 数据 该国 天然橡胶 库存 日时 库存量 下滑 创纪录 新低 国家统计局 公布 最新 数据 显示 月份 国内 轮胎 产量 同期 增长 万条 月份 增长 月份 轮胎 总产量 增长 亿条 表明 特保案 发生 中国 轮胎 出口 已经 产生 巨大 需求 特保案 生效 可能 大地 削弱 市场 规模 陈旭 表示 国家 汽车行业 拉动 经济 增长 重要 手段 可能 近期 即将 召开 经济 会议 得到 体现 中国 扩大内需 方针 刺激 天胶 原材料 消费 引起 贸易商 囤积 库存 分析师 表示 国内 橡胶 库存 高企 逼近 万吨 主产 降雨 天气 结束 供应 持续 增加 后市 上行 空间 有限
刚刚 基金 市场 基民 贡献 一份 不错 成绩单 银行 基金 公司 新军 民生 加银 基金 公司 旗下 两只 基金 崭露头角 数据 统计 显示 民生 蓝筹 混合型 基金 民生 加银 旗下 基金 年底 累计 回报率 达到 市场 下半年 震荡 剧烈 基金 提前 布局 消费 医药 化工 有色 煤炭 行业 下半年 民生 蓝筹 基金 获得 收益 同期 业绩 比较 基准 涨幅 业绩 比较 基准 百分点 易非 已有 评论 我要 评论

import glob
import jieba
import re


# 读取停用词
stopwords = {word.strip() for word in open('data/stopwords.txt', encoding='utf-8')}


def clean_text(text):

    # 去除非中文字符
    text = re.sub(r'[^\u4e00-\u9fa5]', ' ', text)
    # 文本分词
    text =  jieba.cut(text)
    # 去除停用词
    clean_text = []
    for word in text:
        word = word.strip()
        if len(word) <= 1:
            continue
        if word not in stopwords:
            clean_text.append(word)

    return clean_text


def preprocessing():
    corpus = open('temp/corpus.txt', 'w', encoding='utf-8')
    fnames = glob.glob('data/corpus/*.txt')
    for fname in fnames:
        with open(fname, encoding='utf-8') as file:
            file.readline()
            content = file.read()
            content = clean_text(content)
            content = ' '.join(content)
            corpus.write(content + '\n')
    corpus.close()


if __name__ == '__main__':
    preprocessing()

2. 词向量模型

在 FastText 中,我们将使用 train_unsupervised 函数进行词向量模型的训练,该函数将会返回成功训练之后的词向量模型。

2.1 训练词向量

fasttext.train_unsupervised()
def model_train():
    model = fasttext.train_unsupervised(input='temp/corpus.txt')
    model.save_model('temp/embedding.bin')

train_unsupervised 函数用于词向量训练的主要参数如下:

  1. input: 语料文件的路径,每行为一个文本样本
  2. model: 模型类型,可以是 cbowskipgram,默认skipgram
  3. lr: 学习率,默认 0.05
  4. dim: 词向量维度大小,默认 100
  5. ws: 上下文窗口大小, 默认 5
  6. epoch: 训练轮数, 默认 5
  7. minCount: 词频阈值,低于此频率的词将被忽略,默认值 5
  8. minn: 最小 char-level n-gram 特征大小, 默认值 3
  9. maxn: 最大 char-level n-gram 特征大小, 默认值 6
  10. neg: 负采样数量,用于控制负样本的数量, 默认值 5
  11. wordNgrams: word-level n-gram 特征, 默认值 1
  12. loss: 损失函数,可以是 softmaxnshs, 默认值 ns
def model_train_param():
    model = fasttext.train_unsupervised(input='temp/corpus.txt',
                                        model='cbow',
                                        ws=5,
                                        lr=5e-2,
                                        dim=100,
                                        epoch=5,
                                        minCount=2,
                                        minn=3,
                                        maxn=6,
                                        neg=5,
                                        loss='ns',
                                        wordNgrams=1)
    model.save_model('temp/embedding.bin')

2.2. 获得词向量

当我们获得词向量模型之后,就可以通过调用 FastText 中的函数来计算得到指定词、句子的向量表示,从而应用到其他的文本任务。

def word_vector():

    # 加载词向量模型
    model = fasttext.load_model('temp/word.bin')
    # 向量维度
    print(model.get_dimension())
    # 获得词表
    print(len(model.get_words()), model.get_words())
    # 获得某个词在词表中的索引,不存在返回-1
    print(model.get_word_id('你好'))
    print(model.get_word_id('市场'))
    # 获得词的向量表示
    print(model.get_word_vector('市场').shape)
    # 获得句子的向量表示(需要先分词)
    print(model.get_sentence_vector('我 是 中国人 !').shape)

未经允许不得转载:一亩三分地 » 《FastText 工具使用》(二)训练词向量
评论 (0)

4 + 6 =