项目介绍:catalyst
catalyst是一个用C#编写的自然语言处理库,专注于提供快速和现代化的处理功能。它受到spaCy设计的启发,能够提供预训练模型、单词和文档嵌入的训练支持,以及灵活的实体识别模型。
功能特色
- 快速现代的C# NLP库:catalyst支持.NET标准2.0,能够在各种平台上运行,包括Windows、Linux、macOS,还有ARM设备。
- 跨平台特性:只要.NET核心支持的平台,catalyst都能运行。
- 高效的文本标记化:近100%无需使用正则表达式,现代CPU上每秒处理超过100万标记。
- 命名实体识别:支持多种实体识别方法,包括以数据库为基础的方法、基于规则的方法和感知机模型。
- 预训练的模型:基于Universal Dependencies项目的数据。
- 定制模型学习:能够学习缩写和不同语义。
- 嵌入的训练支持:支持训练FastText和StarSpace的嵌入。
- 词性标注:提供词性标识的功能。
- 语言检测:通过FastText或cld3进行语言检测。
- 高效的二进制序列化:基于MessagePack的序列化功能。
- 预建模型支持:提供现成的语言包以供使用。
- 词形还原:通过从spaCy移植的查找表实现。
语言包
catalyst的所有语言特定数据和模型都作为NuGet包提供。新模型是基于Universal Dependencies v2.7最新版本进行训练的。此外,用户还可以使用流的方式存储和加载模型,提供了更多的灵活性。
入门指南
使用catalyst非常简单,只需要在项目中安装对应的NuGet包,然后设置存储为我们的在线库即可。这种方式使得模型能够在需要时从磁盘加载或从在线库中下载。用户也可以查看一些示例项目,以便了解如何更好地利用catalyst。
Catalyst.Models.English.Register();
Storage.Current = new DiskStorage("catalyst-models");
var nlp = await Pipeline.ForAsync(Language.English);
var doc = new Document("The quick brown fox jumps over the lazy dog", Language.English);
nlp.ProcessSingle(doc);
Console.WriteLine(doc.ToJson());
此外,用户还可以利用C#的惰性求值和多线程支持,来实现并行处理大量文档的功能。
var docs = GetDocuments();
var parsed = nlp.Process(docs);
DoSomething(parsed);
IEnumerable<IDocument> GetDocuments()
{
for(int i = 0; i < 1000; i++)
{
yield return new Document("The quick brown fox jumps over the lazy dog", Language.English);
}
}
void DoSomething(IEnumerable<IDocument> docs)
{
foreach(var doc in docs)
{
Console.WriteLine(doc.ToJson());
}
}
训练新的FastText词嵌入模型也非常简单。
var nlp = await Pipeline.ForAsync(Language.English);
var ft = new FastText(Language.English, 0, "wiki-word2vec");
ft.Data.Type = FastText.ModelType.CBow;
ft.Data.Loss = FastText.LossType.NegativeSampling;
ft.Train(nlp.Process(GetDocs()));
ft.StoreAsync();
对于快速嵌入搜索,catalyst发布了"Hierarchical Navigable Small World" (HNSW)算法的C#版本,并在NuGet上可用。此外,还有"Uniform Manifold Approximation and Projection" (UMAP)算法的C#版本,用于降维处理。
总体来说,catalyst是一个功能强大且灵活的工具,为开发人员提供了丰富的自然语言处理功能,让处理语言变得快捷高效。