license: cc-by-sa-3.0
tags:
- 特征提取
library_name: fasttext
language: zh
widget:
- text: 苹果
example_title: 苹果
fastText (中文版)
fastText 是一个开源、免费、轻量级的库,允许用户学习文本表示和文本分类器。它能在标准通用硬件上运行,训练后的模型可压缩至适合移动设备的尺寸。该技术最初发表于这篇论文,官方网站请访问此处。
模型描述
fastText 是用于高效学习词向量表示和句子分类的库。其设计理念是让开发者、领域专家和学生都能轻松使用,专注于文本分类和词向量学习,支持在普通多核CPU上快速迭代优化模型。fastText 模型能在数分钟内处理超过十亿词汇的训练。
该库提供基于维基百科训练的预训练模型,支持157种语言。fastText 可作为命令行工具、C++应用链接库,或直接作为编程库使用,覆盖从实验原型到生产部署的全场景。
使用场景与限制
预训练词向量可用于文本分类或语言识别任务。官网提供教程和资源供探索具体应用。
使用方法
加载预训练词向量的示例:
>>> import fasttext
>>> from huggingface_hub import hf_hub_download
>>> model_path = hf_hub_download(repo_id="facebook/fasttext-zh-vectors", filename="model.bin")
>>> model = fasttext.load_model(model_path)
>>> model.words
['的', '在', '是', '和', '了', '有', '这', '为', ...]
>>> len(model.words)
145940
>>> model['面包']
array([ 4.89417791e-01, 1.60882145e-01, -2.25947708e-01, -2.94273376e-01,
-1.04577184e-01, 1.17962055e-01, 1.34821936e-01, -2.41778508e-01, ...])
查询英文词向量最近邻的示例:
>>> import fasttext
>>> from huggingface_hub import hf_hub_download
>>> model_path = hf_hub_download(repo_id="facebook/fasttext-en-nearest-neighbors", filename="model.bin")
>>> model = fasttext.load_model(model_path)
>>> model.get_nearest_neighbors("面包", k=5)
[(0.5641006231307983, '黄油'),
(0.48875734210014343, '长条面包'),
(0.4491206705570221, '食用'),
(0.42444291710853577, '食物'),
(0.4229326844215393, '奶酪')]
语言检测功能示例:
>>> import fasttext
>>> from huggingface_hub import hf_hub_download
>>> model_path = hf_hub_download(repo_id="facebook/fasttext-language-identification", filename="model.bin")
>>> model = fasttext.load_model(model_path)
>>> model.predict("你好,世界!")
(('__label__zho_Hans',), array([0.91148803]))
>>> model.predict("你好,世界!", k=5)
(('__label__zho_Hans', '__label__jpn_Hani', '__label__kor_Hang', '__label__vie_Latn', '__label__cmn_Hans'),
array([0.81224753, 0.11323682, 0.05696738, 0.01359863, 0.00319415]))
局限性
尽管训练数据相对中立,模型仍可能存在预测偏差。可通过余弦相似度衡量词向量关联性:
>>> import numpy as np
>>> def 余弦相似度(词1, 词2):
>>> return np.dot(model[词1], model[词2]) / (np.linalg.norm(model[词1]) * np.linalg.norm(model[词2]))
>>> 余弦相似度("男人", "男孩")
0.061653383
>>> 余弦相似度("男人", "首席执行官")
0.11989131
>>> 余弦相似度("女人", "首席执行官")
-0.08834904
训练数据
157种语言的预训练词向量基于Common Crawl和维基百科训练,采用带位置权重的CBOW算法,维度300,使用5字符n-gram,窗口大小5,10个负样本。另提供法语、印地语和波兰语的新词类比数据集。
训练流程
分词处理
中文使用斯坦福分词器,日语用Mecab,越南语用UETsegmenter。拉丁、西里尔等文字采用Europarl预处理工具,其余语言使用ICU分词器。更多训练细节详见论文《157种语言的词向量学习》。
许可协议
词向量遵循知识共享署名-相同方式共享3.0协议。
评估数据集
论文涉及的词类比评估数据集:法语、印地语、波兰语。
引用文献
词向量学习请引用[1],文本分类请引用[2]:
[1] P. Bojanowski*, E. Grave*, A. Joulin, T. Mikolov, 《利用子词信息丰富词向量》
@article{bojanowski2016enriching,
title={利用子词信息丰富词向量},
author={Bojanowski, Piotr and Grave, Edouard and Joulin, Armand and Mikolov, Tomas},
journal={arXiv预印本 arXiv:1607.04606},
year={2016}
}
[2] A. Joulin, E. Grave, P. Bojanowski, T. Mikolov, 《高效文本分类技巧集》
@article{joulin2016bag,
title={高效文本分类技巧集},
author={Joulin, Armand and Grave, Edouard and Bojanowski, Piotr and Mikolov, Tomas},
journal={arXiv预印本 arXiv:1607.01759},
year={2016}
}
[3] A. Joulin, E. Grave, P. Bojanowski, M. Douze, H. Jégou, T. Mikolov, 《FastText.zip:文本分类模型压缩》
@article{joulin2016fasttext,
title={FastText.zip:文本分类模型压缩},
author={Joulin, Armand and Grave, Edouard and Bojanowski, Piotr and Douze, Matthijs and J{'e}gou, H{'e}rve and Mikolov, Tomas},
journal={arXiv预印本 arXiv:1612.03651},
year={2016}
}
使用词向量时请引用:
[4] E. Grave*, P. Bojanowski*, P. Gupta, A. Joulin, T. Mikolov, 《157种语言的词向量学习》
@inproceedings{grave2018learning,
title={157种语言的词向量学习},
author={Grave, Edouard and Bojanowski, Piotr and Gupta, Prakhar and Joulin, Armand and Mikolov, Tomas},
booktitle={国际语言资源与评估会议论文集(LREC 2018)},
year={2018}
}
(注:标*作者贡献均等)