license: cc-by-nc-4.0
library_name: fasttext
tags:
fastText(语言识别)
fastText是一个开源、免费、轻量级的库,允许用户学习文本表示和文本分类器。它可以在标准的通用硬件上运行。模型后续可以缩小体积,甚至适配移动设备。该技术首次发表于这篇论文。官方网站请访问此处。
这个LID(语言识别)模型用于预测输入文本的语言,托管版本(lid218e
)是NLLB项目的一部分发布的,可检测217种语言。旧版本(能识别157种语言)可在fastText官网找到。
模型描述
fastText是用于高效学习词表示和句子分类的库。其设计初衷是让开发者、领域专家和学生都能简单使用。专注于文本分类和词表示学习,无需专用硬件即可快速迭代优化模型。fastText模型可在任何多核CPU上用不到几分钟的时间处理超过十亿词汇的训练。
包含基于维基百科预训练的157种语言模型。既可作为命令行工具,也可链接到C++应用,或作为库用于从实验原型到生产环境的各种场景。
使用场景与限制
可使用预训练词向量进行文本分类或语言识别。参阅官网教程和资源寻找感兴趣的任务。
使用方法
检测文本语言的示例:
>>> 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("Hello, world!")
(('__label__eng_Latn',), array([0.81148803]))
>>> model.predict("Hello, world!", k=5)
(('__label__eng_Latn', '__label__vie_Latn', '__label__nld_Latn', '__label__pol_Latn', '__label__deu_Latn'),
array([0.61224753, 0.21323682, 0.09696738, 0.01359863, 0.01319415]))
局限性及偏差
尽管训练数据相对中立,模型仍可能存在预测偏差。
余弦相似度可用于衡量词向量相似性。完全相同的向量值为1,无关向量为0,相反关系为-1。
>>> import numpy as np
>>> def cosine_similarity(word1, word2):
>>> return np.dot(model[word1], model[word2]) / (np.linalg.norm(model[word1]) * np.linalg.norm(model[word2]))
>>> cosine_similarity("男人", "男孩")
0.061653383
>>> cosine_similarity("男人", "首席执行官")
0.11989131
>>> cosine_similarity("女人", "首席执行官")
-0.08834904
训练数据
157种语言的预训练词向量基于Common Crawl和维基百科训练。采用带位置权重的CBOW算法,维度300,字符n-gram长度5,窗口大小5,10个负样本。另包含法语、印地语和波兰语的新词类比数据集。
训练流程
分词处理
中文使用斯坦福分词器,日语用Mecab,越南语用UETsegmenter。拉丁、西里尔、希伯来和希腊语系采用Europarl预处理工具的分词器,其余语言使用ICU分词器。
更多训练细节详见论文《157种语言的词向量学习》。
许可协议
语言识别模型遵循《知识共享署名-非商业性4.0国际许可协议》。
评估数据集
论文中描述的类比评估数据集:法语、印地语、波兰语。
引用信息
词表示学习请引用[1],文本分类请引用[2]:
[1] P. Bojanowski*, E. Grave*, A. Joulin, T. Mikolov, 《利用子词信息丰富词向量》
@article{bojanowski2016enriching,
title={Enriching Word Vectors with Subword Information},
author={Bojanowski, Piotr and Grave, Edouard and Joulin, Armand and Mikolov, Tomas},
journal={arXiv preprint arXiv:1607.04606},
year={2016}
}
[2] A. Joulin, E. Grave, P. Bojanowski, T. Mikolov, 《高效文本分类的技巧集》
@article{joulin2016bag,
title={Bag of Tricks for Efficient Text Classification},
author={Joulin, Armand and Grave, Edouard and Bojanowski, Piotr and Mikolov, Tomas},
journal={arXiv preprint 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: Compressing text classification models},
author={Joulin, Armand and Grave, Edouard and Bojanowski, Piotr and Douze, Matthijs and J{'e}gou, H{'e}rve and Mikolov, Tomas},
journal={arXiv preprint arXiv:1612.03651},
year={2016}
}
使用词向量时请引用:
[4] E. Grave*, P. Bojanowski*, P. Gupta, A. Joulin, T. Mikolov, 《157种语言的词向量学习》
@inproceedings{grave2018learning,
title={Learning Word Vectors for 157 Languages},
author={Grave, Edouard and Bojanowski, Piotr and Gupta, Prakhar and Joulin, Armand and Mikolov, Tomas},
booktitle={Proceedings of the International Conference on Language Resources and Evaluation (LREC 2018)},
year={2018}
}
(注:标*作者贡献均等)